From aad734e8b30983938339e22686e58f5ba4bb500d Mon Sep 17 00:00:00 2001 From: Joseph Birkner Date: Wed, 16 Oct 2024 18:11:57 +0200 Subject: [PATCH 01/38] Added StatsDialog --- erdblick_app/app/app.component.ts | 1 + erdblick_app/app/app.module.ts | 2 + erdblick_app/app/features.model.ts | 20 +++- erdblick_app/app/map.service.ts | 7 +- erdblick_app/app/preferences.component.ts | 7 ++ erdblick_app/app/stats.component.ts | 115 ++++++++++++++++++++++ erdblick_app/app/visualization.model.ts | 4 + erdblick_app/app/wasm.ts | 4 +- libs/core/include/erdblick/parser.h | 1 + libs/core/src/bindings.cpp | 3 +- libs/core/src/parser.cpp | 7 +- 11 files changed, 164 insertions(+), 7 deletions(-) create mode 100644 erdblick_app/app/stats.component.ts diff --git a/erdblick_app/app/app.component.ts b/erdblick_app/app/app.component.ts index 19fb0c8e..89c07dbe 100644 --- a/erdblick_app/app/app.component.ts +++ b/erdblick_app/app/app.component.ts @@ -17,6 +17,7 @@ import {filter} from "rxjs"; +
{{ title }} {{ version }}
diff --git a/erdblick_app/app/app.module.ts b/erdblick_app/app/app.module.ts index d290b01c..f55c83d0 100644 --- a/erdblick_app/app/app.module.ts +++ b/erdblick_app/app/app.module.ts @@ -72,6 +72,7 @@ import {ReactiveFormsModule} from '@angular/forms'; import {FormlyPrimeNGModule} from "@ngx-formly/primeng"; import {DataSourcesService} from "./datasources.service"; import {ProgressSpinnerModule} from "primeng/progressspinner"; +import {StatsDialogComponent} from "./stats.component"; export function initializeServices(styleService: StyleService, mapService: MapService, coordService: CoordinatesService) { return async () => { @@ -147,6 +148,7 @@ export function typeValidationMessage({ schemaType }: any) { MultiSchemaTypeComponent, HighlightSearch, TreeTableFilterPatchDirective, + StatsDialogComponent ], bootstrap: [ AppComponent diff --git a/erdblick_app/app/features.model.ts b/erdblick_app/app/features.model.ts index fcc5f048..adfe5d06 100644 --- a/erdblick_app/app/features.model.ts +++ b/erdblick_app/app/features.model.ts @@ -19,6 +19,13 @@ export class FeatureTile { preventCulling: boolean; public readonly tileFeatureLayerBlob: any; disposed: boolean; + stats: Map = new Map(); + + static statFeatureCount = "Feature Count"; + static statTileSize = "Tile Size (kiB)"; + static statFillTime = "Fill Time (ms)"; + static statParseTime = "Parse Time (ms)"; + static statRenderTime = "Render Time (ms)"; /** * Construct a FeatureTile object. @@ -26,7 +33,7 @@ export class FeatureTile { * @param tileFeatureLayerBlob Serialized TileFeatureLayer. * @param preventCulling Set to true to prevent the tile from being removed when it isn't visible. */ - constructor(parser: TileLayerParser, tileFeatureLayerBlob: any, preventCulling: boolean) { + constructor(parser: TileLayerParser, tileFeatureLayerBlob: Uint8Array, preventCulling: boolean) { let mapTileMetadata = uint8ArrayToWasm((wasmBlob: any) => { return parser.readTileLayerMetadata(wasmBlob); }, tileFeatureLayerBlob); @@ -36,6 +43,11 @@ export class FeatureTile { this.layerName = mapTileMetadata.layerName; this.tileId = mapTileMetadata.tileId; this.numFeatures = mapTileMetadata.numFeatures; + this.stats.set(FeatureTile.statFeatureCount, [mapTileMetadata.numFeatures]); + this.stats.set(FeatureTile.statTileSize, [tileFeatureLayerBlob.length/1024]); + this.stats.set(FeatureTile.statFillTime, [mapTileMetadata.fillTime]); + this.stats.set(FeatureTile.statParseTime, []); + this.stats.set(FeatureTile.statRenderTime, []); this.parser = parser; this.preventCulling = preventCulling; this.tileFeatureLayerBlob = tileFeatureLayerBlob; @@ -50,9 +62,12 @@ export class FeatureTile { peek(callback: (layer: TileFeatureLayer) => any) { // Deserialize the WASM tileFeatureLayer from the blob. let result = uint8ArrayToWasm((bufferToRead: any) => { + let startTime = performance.now(); let deserializedLayer = this.parser.readTileFeatureLayer(bufferToRead); + let endTime = performance.now(); if (!deserializedLayer) return null; + this.stats.get(FeatureTile.statParseTime)!.push(endTime - startTime); // Run the callback with the deserialized layer, and // provide the result as the return value. @@ -72,9 +87,12 @@ export class FeatureTile { async peekAsync(callback: (layer: TileFeatureLayer) => Promise) { // Deserialize the WASM tileFeatureLayer from the blob. let result = await uint8ArrayToWasmAsync(async (bufferToRead: any) => { + let startTime = performance.now(); let deserializedLayer = this.parser.readTileFeatureLayer(bufferToRead); + let endTime = performance.now(); if (!deserializedLayer) return null; + this.stats.get(FeatureTile.statParseTime)!.push(endTime - startTime); // Run the callback with the deserialized layer, and // provide the result as the return value. diff --git a/erdblick_app/app/map.service.ts b/erdblick_app/app/map.service.ts index 70a2ad01..77d2f11d 100644 --- a/erdblick_app/app/map.service.ts +++ b/erdblick_app/app/map.service.ts @@ -11,6 +11,7 @@ import {SidePanelService, SidePanelState} from "./sidepanel.service"; import {InfoMessageService} from "./info.service"; import {MAX_ZOOM_LEVEL} from "./feature.search.service"; import {PointMergeService} from "./pointmerge.service"; +import {KeyboardService} from "./keyboard.service"; /** Expected structure of a LayerInfoItem's coverage entry. */ export interface CoverageRectItem extends Record { @@ -109,12 +110,14 @@ export class MapService { reject: null|((why: any)=>void), } | null = null; zoomLevel: BehaviorSubject = new BehaviorSubject(0); + statsDialogVisible: boolean = false; constructor(public styleService: StyleService, public parameterService: ParametersService, private sidePanelService: SidePanelService, private messageService: InfoMessageService, - private pointMergeService: PointMergeService) + private pointMergeService: PointMergeService, + private keyboardService: KeyboardService) { this.loadedTileLayers = new Map(); this.visualizedTileLayers = new Map(); @@ -190,6 +193,8 @@ export class MapService { this.hoverTopic.subscribe(hoveredFeatureWrappers => { this.visualizeHighlights(coreLib.HighlightMode.HOVER_HIGHLIGHT, hoveredFeatureWrappers); }); + + this.keyboardService.registerShortcuts(["Ctrl+x", "Ctrl+X"], ()=>{this.statsDialogVisible = true;}); } private processTileStream() { diff --git a/erdblick_app/app/preferences.component.ts b/erdblick_app/app/preferences.component.ts index dcbe3bdc..9b9e9fa0 100644 --- a/erdblick_app/app/preferences.component.ts +++ b/erdblick_app/app/preferences.component.ts @@ -104,6 +104,13 @@ import {MAX_NUM_TILES_TO_LOAD, MAX_NUM_TILES_TO_VISUALIZE, ParametersService} fr R
Reset Camera Orientation
+
  • +
    + Ctrl + X +
    +
    Open Viewport Statistics
    +
  • diff --git a/erdblick_app/app/stats.component.ts b/erdblick_app/app/stats.component.ts new file mode 100644 index 00000000..6965b23f --- /dev/null +++ b/erdblick_app/app/stats.component.ts @@ -0,0 +1,115 @@ +import {Component} from "@angular/core"; +import {MapService} from "./map.service"; + +@Component({ + selector: 'stats-dialog', + template: ` + +
    + + + + + + + + + + + + + + + + + + +
    StatisticPeak ValueAverage Value
    {{ stat.name }}{{ stat.peak | number: '1.2-2' }}{{ stat.average | number: '1.2-2' }}
    + +
    +
    + `, + styles: [ + ` + .dialog-content { + display: flex; + flex-direction: column; + gap: 1em; + } + .stats-table { + width: 100%; + border-collapse: collapse; + } + .stats-table th, .stats-table td { + border: 1px solid #ccc; + padding: 0.5em; + text-align: left; + } + .stats-table th { + background-color: #f9f9f9; + font-weight: bold; + } + ` + ] +}) +export class StatsDialogComponent { + public aggregatedStats: { name: string, peak: number, average: number }[] = []; + public availableMapLayers: { label: string }[] = []; + public selectedMapLayers: { label: string }[] = []; + public considerEmptyTiles: boolean = false; + + constructor(public mapService: MapService) { + this.update(); + } + + update(): void { + // Rescan available map layers + const mapLayersSet: Set = new Set(); + this.mapService.loadedTileLayers.forEach(tile => { + mapLayersSet.add(`${tile.mapName} - ${tile.layerName}`); + }); + const newAvailableMapLayers = Array.from(mapLayersSet).map(layer => ({ label: layer })); + if (JSON.stringify(newAvailableMapLayers) !== JSON.stringify(this.availableMapLayers)) { + this.availableMapLayers = newAvailableMapLayers; + if (!this.selectedMapLayers.length) { + this.selectedMapLayers = newAvailableMapLayers; + } + else { + this.selectedMapLayers = this.selectedMapLayers.filter(sel => this.availableMapLayers.findIndex(entry => entry.label == sel.label) >= 0); + } + } + const statsAccumulator: Map = new Map(); + + // Accumulate statistics from all tiles + this.mapService.loadedTileLayers.forEach(tile => { + if (!this.considerEmptyTiles && tile.numFeatures <= 0) { + return; + } + if (this.selectedMapLayers.findIndex(entry => entry.label == `${tile.mapName} - ${tile.layerName}`) < 0) { + return; + } + const stats = tile.stats; + for (let [key, value] of stats.entries()) { + if (!statsAccumulator.has(key)) { + statsAccumulator.set(key, []); + } + statsAccumulator.set(key, statsAccumulator.get(key)!.concat(value)); + } + }); + + // Calculate peak and average for each statistic + this.aggregatedStats = Array.from(statsAccumulator.entries()).map(([statKey, values]) => { + const peak = Math.max(...values); + const average = values.reduce((sum, val) => sum + val, 0) / values.length; + return { name: statKey, peak, average }; + }); + } +} \ No newline at end of file diff --git a/erdblick_app/app/visualization.model.ts b/erdblick_app/app/visualization.model.ts index 0db041ee..6aa5a954 100644 --- a/erdblick_app/app/visualization.model.ts +++ b/erdblick_app/app/visualization.model.ts @@ -176,6 +176,8 @@ export class TileVisualization { this.pointMergeService, this.highlightMode, this.featureIdSubset); + + let startTime = performance.now(); wasmVisualization.addTileFeatureLayer(tileFeatureLayer); try { wasmVisualization.run(); @@ -245,6 +247,8 @@ export class TileVisualization { } } wasmVisualization.delete(); + let endTime = performance.now(); + this.tile.stats.get(FeatureTile.statRenderTime)!.push(endTime - startTime); return true; }); if (this.primitiveCollection) { diff --git a/erdblick_app/app/wasm.ts b/erdblick_app/app/wasm.ts index 470673ca..487ec640 100644 --- a/erdblick_app/app/wasm.ts +++ b/erdblick_app/app/wasm.ts @@ -39,7 +39,7 @@ export function uint8ArrayFromWasm(fun: (data: SharedUint8Array)=>any) { * through a SharedUint8Array. If the operation fails or the WASM function * returns false, null is returned. */ -export function uint8ArrayToWasm(fun: (d: SharedUint8Array)=>any, inputData: any) { +export function uint8ArrayToWasm(fun: (d: SharedUint8Array)=>any, inputData: Uint8Array) { try { let sharedGlbArray = new coreLib.SharedUint8Array(inputData.length); let bufferPtr = Number(sharedGlbArray.getPointer()); @@ -59,7 +59,7 @@ export function uint8ArrayToWasm(fun: (d: SharedUint8Array)=>any, inputData: any * through a SharedUint8Array. If the operation fails or the WASM function * returns false, null is returned. */ -export async function uint8ArrayToWasmAsync(fun: (d: SharedUint8Array)=>any, inputData: any) { +export async function uint8ArrayToWasmAsync(fun: (d: SharedUint8Array)=>any, inputData: Uint8Array) { let sharedGlbArray = new coreLib.SharedUint8Array(inputData.length); let bufferPtr = Number(sharedGlbArray.getPointer()); coreLib.HEAPU8.set(inputData, bufferPtr); diff --git a/libs/core/include/erdblick/parser.h b/libs/core/include/erdblick/parser.h index dcbeb1fb..b1518c42 100644 --- a/libs/core/include/erdblick/parser.h +++ b/libs/core/include/erdblick/parser.h @@ -50,6 +50,7 @@ class TileLayerParser std::string layerName; uint64_t tileId; int32_t numFeatures; + uint32_t fillTime; }; TileLayerMetadata readTileLayerMetadata(SharedUint8Array const& buffer); diff --git a/libs/core/src/bindings.cpp b/libs/core/src/bindings.cpp index f47b0457..ef2485d7 100644 --- a/libs/core/src/bindings.cpp +++ b/libs/core/src/bindings.cpp @@ -445,7 +445,8 @@ EMSCRIPTEN_BINDINGS(erdblick) .field("mapName", &TileLayerParser::TileLayerMetadata::mapName) .field("layerName", &TileLayerParser::TileLayerMetadata::layerName) .field("tileId", &TileLayerParser::TileLayerMetadata::tileId) - .field("numFeatures", &TileLayerParser::TileLayerMetadata::numFeatures); + .field("numFeatures", &TileLayerParser::TileLayerMetadata::numFeatures) + .field("fillTime", &TileLayerParser::TileLayerMetadata::fillTime); ////////// TileLayerParser em::class_("TileLayerParser") diff --git a/libs/core/src/parser.cpp b/libs/core/src/parser.cpp index 64e732b9..61893af5 100644 --- a/libs/core/src/parser.cpp +++ b/libs/core/src/parser.cpp @@ -134,10 +134,12 @@ TileLayerParser::TileLayerMetadata TileLayerParser::readTileLayerMetadata(const return resolveMapLayerInfo(std::string(mapId), std::string(layerId)); } ); - auto numFeatures = -1; + int32_t numFeatures = -1; + uint32_t fillTime = 0; auto layerInfo = tileLayer.info(); if (layerInfo.is_object()) { numFeatures = layerInfo.value("num-features", -1); + fillTime = layerInfo.value("fill-time", -1); } return { tileLayer.id().toString(), @@ -145,7 +147,8 @@ TileLayerParser::TileLayerMetadata TileLayerParser::readTileLayerMetadata(const tileLayer.id().mapId_, tileLayer.id().layerId_, tileLayer.tileId().value_, - numFeatures + numFeatures, + fillTime }; } From 19f860721f9e7c750241e6e6a0117aec3c8d9045 Mon Sep 17 00:00:00 2001 From: Joseph Birkner Date: Wed, 16 Oct 2024 18:12:14 +0200 Subject: [PATCH 02/38] Fix visualization limit. --- erdblick_app/app/map.service.ts | 2 +- erdblick_app/app/visualization.model.ts | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/erdblick_app/app/map.service.ts b/erdblick_app/app/map.service.ts index 77d2f11d..170bd6b5 100644 --- a/erdblick_app/app/map.service.ts +++ b/erdblick_app/app/map.service.ts @@ -390,7 +390,7 @@ export class MapService { ...new Set(allViewportTileIds) ]); this.currentHighDetailTileIds = new Set([ - ...this.currentVisibleTileIds, + ...this.currentHighDetailTileIds, ...new Set( allViewportTileIds.slice(0, this.parameterService.parameters.getValue().tilesVisualizeLimit)) ]) diff --git a/erdblick_app/app/visualization.model.ts b/erdblick_app/app/visualization.model.ts index 6aa5a954..35ef8802 100644 --- a/erdblick_app/app/visualization.model.ts +++ b/erdblick_app/app/visualization.model.ts @@ -315,9 +315,8 @@ export class TileVisualization { */ isDirty() { return ( - (this.isHighDetailAndNotEmpty() && !this.hasHighDetailVisualization) || - (!this.isHighDetailAndNotEmpty() && !this.hasTileBorder) || - (this.showTileBorder != this.hasTileBorder) + this.isHighDetailAndNotEmpty() != this.hasHighDetailVisualization || + this.showTileBorder != this.hasTileBorder ); } From a2bb6ed82ad4242a583f720acab17eb7a119e0c4 Mon Sep 17 00:00:00 2001 From: Joseph Birkner Date: Tue, 15 Oct 2024 18:50:08 +0200 Subject: [PATCH 03/38] npm audit fix --- package-lock.json | 3356 +++++++++++++++++++++++++++++++-------------- package.json | 4 +- 2 files changed, 2359 insertions(+), 1001 deletions(-) diff --git a/package-lock.json b/package-lock.json index 19b14849..3fe27ad5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,8 +20,8 @@ "@codemirror/lang-yaml": "^6.1.1", "@codemirror/lint": "^6.8.1", "@codemirror/view": "^6.32.0", - "@ngx-formly/core": "^6.3.6", - "@ngx-formly/primeng": "^6.3.6", + "@ngx-formly/core": "^6.3.8", + "@ngx-formly/primeng": "^6.3.8", "assert": "^2.1.0", "browserify-zlib": "^0.2.0", "cesium": "1.120.0", @@ -66,6 +66,7 @@ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -79,6 +80,7 @@ "resolved": "https://registry.npmjs.org/@angular-builders/common/-/common-2.0.0.tgz", "integrity": "sha512-O5YJc++DtJVJhqA/OomRKN2jGYzvU/YXtfrPAqcA9Is3Ob5jvV0L0JHSAjSw/KaLvk/FjBIqoRVcYdLp5LKddA==", "dev": true, + "license": "MIT", "dependencies": { "@angular-devkit/core": "^18.0.0", "ts-node": "^10.0.0", @@ -93,6 +95,7 @@ "resolved": "https://registry.npmjs.org/@angular-builders/custom-webpack/-/custom-webpack-18.0.0.tgz", "integrity": "sha512-XSynPSXHq5+nrh7J2snfrcbvm6YGwUGQRzr7OuO3wURJ6CHOD9C+xEAmvEUWW8c1YjEslVNG7aLtCGz7LA4ymw==", "dev": true, + "license": "MIT", "dependencies": { "@angular-builders/common": "2.0.0", "@angular-devkit/architect": ">=0.1800.0 < 0.1900.0", @@ -109,12 +112,13 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.1802.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.5.tgz", - "integrity": "sha512-c7sVoW85Yqj7IYvNKxtNSGS5I7gWpORorg/xxLZX3OkHWXDrwYbb5LN/2p5/Aytxyb0aXl4o5fFOu6CUwcaLUw==", + "version": "0.1802.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.8.tgz", + "integrity": "sha512-/rtFQEKgS7LlB9oHr4NCBSdKnvP5kr8L5Hbd3Vl8hZOYK9QWjxKPEXnryA2d5+PCE98bBzZswCNXqELZCPTgIQ==", "dev": true, + "license": "MIT", "dependencies": { - "@angular-devkit/core": "18.2.5", + "@angular-devkit/core": "18.2.8", "rxjs": "7.8.1" }, "engines": { @@ -124,16 +128,17 @@ } }, "node_modules/@angular-devkit/build-angular": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.2.5.tgz", - "integrity": "sha512-dIvb0AHoRIMM6tLuG4t6lDDslSAYP77wqytodsN317UzFOuuCPernXbO8NJs+QHxj09nPsem1T5vnvpO2E/PVQ==", + "version": "18.2.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.2.8.tgz", + "integrity": "sha512-qK/iLk7A8vQp1CyiJV4DpwfLjPKoiOlTtFqoO5vD8Tyxmc+R06FQp6GJTsZ7JtrTLYSiH+QAWiY6NgF/Rj/hHg==", "dev": true, + "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1802.5", - "@angular-devkit/build-webpack": "0.1802.5", - "@angular-devkit/core": "18.2.5", - "@angular/build": "18.2.5", + "@angular-devkit/architect": "0.1802.8", + "@angular-devkit/build-webpack": "0.1802.8", + "@angular-devkit/core": "18.2.8", + "@angular/build": "18.2.8", "@babel/core": "7.25.2", "@babel/generator": "7.25.0", "@babel/helper-annotate-as-pure": "7.24.7", @@ -144,7 +149,7 @@ "@babel/preset-env": "7.25.3", "@babel/runtime": "7.25.0", "@discoveryjs/json-ext": "0.6.1", - "@ngtools/webpack": "18.2.5", + "@ngtools/webpack": "18.2.8", "@vitejs/plugin-basic-ssl": "1.1.0", "ansi-colors": "4.1.3", "autoprefixer": "10.4.20", @@ -255,13 +260,15 @@ "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/@angular-devkit/build-angular/node_modules/webpack-merge": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", "dev": true, + "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", "flat": "^5.0.2", @@ -272,12 +279,13 @@ } }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.1802.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1802.5.tgz", - "integrity": "sha512-6qkcrWBdkxojCVHGWcdJaz4G+7QTjFvmc+3g8xvLc9sYvJq1I059gfXhDnC0FxiA0MT4cY/26ECYWUHTD5CJLQ==", + "version": "0.1802.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1802.8.tgz", + "integrity": "sha512-uPpopkXkO66SSdjtVr7xCyQCPs/x6KUC76xkDc4j0b8EEHifTbi/fNpbkcZ6wBmoAfjKLWXfKvtkh0TqKK5Hkw==", "dev": true, + "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.1802.5", + "@angular-devkit/architect": "0.1802.8", "rxjs": "7.8.1" }, "engines": { @@ -291,10 +299,11 @@ } }, "node_modules/@angular-devkit/core": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.5.tgz", - "integrity": "sha512-r9TumPlJ8PvA2+yz4sp+bUHgtznaVKzhvXTN5qL1k4YP8LJ7iZWMR2FOP+HjukHZOTsenzmV9pszbogabqwoZQ==", + "version": "18.2.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.8.tgz", + "integrity": "sha512-4o2T6wsmXGE/v53+F8L7kGoN2+qzt03C9rtjLVQpOljzpJVttQ8bhvfWxyYLWwcl04RWqRa+82fpIZtBkOlZJw==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "8.17.1", "ajv-formats": "3.0.1", @@ -318,12 +327,13 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.5.tgz", - "integrity": "sha512-NUmz2UQ1Xl4cf4j1AgkwIfsCjBzAPgfeC3IBrD29hSOBE1Y3j6auqjBkvw50v6mbSPxESND995Xy13HpK1Xflw==", + "version": "18.2.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.8.tgz", + "integrity": "sha512-i/h2Oji5FhJMC7wDSnIl5XUe/qym+C1ZwScaATJwDyRLCUIynZkj5rLgdG/uK6l+H0PgvxigkF+akWpokkwW6w==", "dev": true, + "license": "MIT", "dependencies": { - "@angular-devkit/core": "18.2.5", + "@angular-devkit/core": "18.2.8", "jsonc-parser": "3.3.1", "magic-string": "0.30.11", "ora": "5.4.1", @@ -336,9 +346,10 @@ } }, "node_modules/@angular/animations": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.2.5.tgz", - "integrity": "sha512-IlXtW/Nj48ZzjHUzH1TykZcSR64ScJx39T3IHnjV2z/bVATzZ36JGoadQHdqpJNKBodYJNgtJCGLCbgAvGWY2g==", + "version": "18.2.8", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.2.8.tgz", + "integrity": "sha512-dMSn2hg70siv3lhP+vqhMbgc923xw6XBUvnpCPEzhZqFHvPXfh/LubmsD5RtqHmjWebXtgVcgS+zg3Gq3jB2lg==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, @@ -346,17 +357,18 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/core": "18.2.5" + "@angular/core": "18.2.8" } }, "node_modules/@angular/build": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.2.5.tgz", - "integrity": "sha512-XWkmjzgeUga0SJ0lYSYcTuYOWTyqcln2mNfBp7Ae/GZ+/7+APbedsIZEiZGZwveOIyOpTM5wguNSoe9khDl5Ig==", + "version": "18.2.8", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.2.8.tgz", + "integrity": "sha512-ufuA4vHJSrL9SQW7bKV61DOoN1mm0t0ILTHaxSoCG3YF70cZJOX7+HNp3cK2uoldRMwbTOKSvCWBw54KKDRd5Q==", "dev": true, + "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1802.5", + "@angular-devkit/architect": "0.1802.8", "@babel/core": "7.25.2", "@babel/helper-annotate-as-pure": "7.24.7", "@babel/helper-split-export-declaration": "7.24.7", @@ -375,7 +387,7 @@ "parse5-html-rewriting-stream": "7.0.0", "picomatch": "4.0.2", "piscina": "4.6.1", - "rollup": "4.20.0", + "rollup": "4.22.4", "sass": "1.77.6", "semver": "7.6.3", "vite": "5.4.6", @@ -418,17 +430,18 @@ } }, "node_modules/@angular/cli": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.2.5.tgz", - "integrity": "sha512-97uNs0HsOdnMaTlNJKFjIBUXw0wz43uYvSSKmIpBt7eq1LaPLju1G/qpDIHx2YwhMClPrXXrW2H/xdvqZiIw+w==", + "version": "18.2.8", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.2.8.tgz", + "integrity": "sha512-GKXG7F7z5rxwZ8/bnW/Bp8/zsfE/BpHmIP/icLfUIOwv2kaY5OD2tfQssWXPEuqZzYq2AYz+wjVSbWjxGoja8A==", "dev": true, + "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.1802.5", - "@angular-devkit/core": "18.2.5", - "@angular-devkit/schematics": "18.2.5", + "@angular-devkit/architect": "0.1802.8", + "@angular-devkit/core": "18.2.8", + "@angular-devkit/schematics": "18.2.8", "@inquirer/prompts": "5.3.8", "@listr2/prompt-adapter-inquirer": "2.0.15", - "@schematics/angular": "18.2.5", + "@schematics/angular": "18.2.8", "@yarnpkg/lockfile": "1.1.0", "ini": "4.1.3", "jsonc-parser": "3.3.1", @@ -451,9 +464,10 @@ } }, "node_modules/@angular/common": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.2.5.tgz", - "integrity": "sha512-m+KJrtbFXTE36jP/po6UAMeUR/enQxRHpVGLCRcIcE7VWVH1ZcOvoW1yqh2A6k+KxWXeajlq/Z04nnMhcoxMRw==", + "version": "18.2.8", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.2.8.tgz", + "integrity": "sha512-TYsKtE5nVaIScWSLGSO34Skc+s3hB/BujSddnfQHoNFvPT/WR0dfmdlpVCTeLj+f50htFoMhW11tW99PbK+whQ==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, @@ -461,14 +475,15 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/core": "18.2.5", + "@angular/core": "18.2.8", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.2.5.tgz", - "integrity": "sha512-vcqe9x4dGGAnMfPhEpcZyiSVgAiqJeK80LqP1vWoAmBR+HeOqAilSv6SflcLAtuTzwgzMMAvD2T+SMCgUvaqww==", + "version": "18.2.8", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.2.8.tgz", + "integrity": "sha512-JRedHNfK1CCPVyeGQB5w3WBYqMA6X8Q240CkvjlGfn0pVXihf9DWk3nkSQJVgYxpvpHfxdgjaYZ5IpMzlkmkhw==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, @@ -476,7 +491,7 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/core": "18.2.5" + "@angular/core": "18.2.8" }, "peerDependenciesMeta": { "@angular/core": { @@ -485,14 +500,15 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.2.5.tgz", - "integrity": "sha512-CCCtZobUTUfId/RTYtuDCw5R1oK0w65hdAUMRP1MdGmd8bb8DKJA86u1QCWwozL3rbXlIIX4ognQ6urQ43k/Gw==", + "version": "18.2.8", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.2.8.tgz", + "integrity": "sha512-OksDE4LWQUCcIvMjtZF7eiDCdIMrcMMpC1+Q0PIYi7KmnqXFGs4/Y0NdJvtn/LrQznzz5WaKM3ZDVNZTRX4wmw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "7.25.2", "@jridgewell/sourcemap-codec": "^1.4.14", - "chokidar": "^3.0.0", + "chokidar": "^4.0.0", "convert-source-map": "^1.5.1", "reflect-metadata": "^0.2.0", "semver": "^7.0.0", @@ -508,14 +524,45 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/compiler": "18.2.5", + "@angular/compiler": "18.2.8", "typescript": ">=5.4 <5.6" } }, + "node_modules/@angular/compiler-cli/node_modules/chokidar": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@angular/compiler-cli/node_modules/readdirp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@angular/core": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.5.tgz", - "integrity": "sha512-5BLVc5gXxzanQkADNS9WPsor3vNF5nQcyIHBi5VScErwM5vVZ7ATH1iZwaOg1ykDEVTFVhKDwD0X1aaqGDbhmQ==", + "version": "18.2.8", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.8.tgz", + "integrity": "sha512-NwIuX/Iby1jT6Iv1/s6S3wOFf8xfuQR3MPGvKhGgNtjXLbHG+TXceK9+QPZC0s9/Z8JR/hz+li34B79GrIKgUg==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, @@ -528,9 +575,10 @@ } }, "node_modules/@angular/forms": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.2.5.tgz", - "integrity": "sha512-ohKeH+EZCCIyGSiFYlraWLzssGAZc13P92cuYpXB62322PkcA5u0IT72mML9JWGKRqF2zteVsw4koWHVxXM5mA==", + "version": "18.2.8", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.2.8.tgz", + "integrity": "sha512-JCLki7KC6D5vF6dE6yGlBmW33khIgpHs8N9SzuiJtkQqNDTIQA8cPsGV6qpLpxflxASynQOX5lDkWYdQyfm77Q==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, @@ -538,16 +586,17 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/common": "18.2.5", - "@angular/core": "18.2.5", - "@angular/platform-browser": "18.2.5", + "@angular/common": "18.2.8", + "@angular/core": "18.2.8", + "@angular/platform-browser": "18.2.8", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/platform-browser": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.2.5.tgz", - "integrity": "sha512-PoX9idwnOpTJBlujzZ2nFGOsmCnZzOH7uNSWIR7trdoq0b1AFXfrxlCQ36qWamk7bbhJI4H28L8YTmKew/nXDA==", + "version": "18.2.8", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.2.8.tgz", + "integrity": "sha512-EPai4ZPqSq3ilLJUC85kPi9wo5j5suQovwtgRyjM/75D9Qy4TV19g8hkVM5Co/zrltO8a2G6vDscCNI5BeGw2A==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, @@ -555,9 +604,9 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/animations": "18.2.5", - "@angular/common": "18.2.5", - "@angular/core": "18.2.5" + "@angular/animations": "18.2.8", + "@angular/common": "18.2.8", + "@angular/core": "18.2.8" }, "peerDependenciesMeta": { "@angular/animations": { @@ -566,9 +615,10 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.2.5.tgz", - "integrity": "sha512-5u0IuAt1r5e2u2vSKhp3phnaf6hH89B/q7GErfPse1sdDfNI6wHVppxai28PAfAj9gwooJun6MjFWhJFLzS44A==", + "version": "18.2.8", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.2.8.tgz", + "integrity": "sha512-poZoapDqyN/rxGKQ3C6esdPiPLMkSpP2v12hoEa12KHgfPk7T1e+a+NMyJjV8HeOY3WyvL7tGRhW0NPTajTkhw==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, @@ -576,16 +626,17 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/common": "18.2.5", - "@angular/compiler": "18.2.5", - "@angular/core": "18.2.5", - "@angular/platform-browser": "18.2.5" + "@angular/common": "18.2.8", + "@angular/compiler": "18.2.8", + "@angular/core": "18.2.8", + "@angular/platform-browser": "18.2.8" } }, "node_modules/@angular/router": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-18.2.5.tgz", - "integrity": "sha512-OjZV1PTiSwT0ytmR0ykveLYzs4uQWf0EuIclZmWqM/bb8Q4P+gJl7/sya05nGnZsj6nHGOL0e/LhSZ3N+5p6qg==", + "version": "18.2.8", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-18.2.8.tgz", + "integrity": "sha512-L+olYgxIiBq+tbfayVI0cv1yOuymsw33msnGC2l/vpc9sSVfqGzESFnB4yMVU3vHtE9v6v2Y6O+iV44/b79W/g==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, @@ -593,19 +644,20 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/common": "18.2.5", - "@angular/core": "18.2.5", - "@angular/platform-browser": "18.2.5", + "@angular/common": "18.2.8", + "@angular/core": "18.2.8", + "@angular/platform-browser": "18.2.8", "rxjs": "^6.5.3 || ^7.4.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==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz", + "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.24.7", + "@babel/highlight": "^7.25.7", "picocolors": "^1.0.0" }, "engines": { @@ -613,10 +665,11 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", - "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.8.tgz", + "integrity": "sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -626,6 +679,7 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", "dev": true, + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.24.7", @@ -655,13 +709,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@babel/core/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" } @@ -671,6 +727,7 @@ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.25.0", "@jridgewell/gen-mapping": "^0.3.5", @@ -686,6 +743,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.24.7" }, @@ -694,27 +752,29 @@ } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", - "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.7.tgz", + "integrity": "sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", - "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz", + "integrity": "sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", + "@babel/compat-data": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -727,22 +787,24 @@ "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/@babel/helper-create-class-features-plugin": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz", - "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.7.tgz", + "integrity": "sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/helper-replace-supers": "^7.25.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/traverse": "^7.25.4", + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-member-expression-to-functions": "^7.25.7", + "@babel/helper-optimise-call-expression": "^7.25.7", + "@babel/helper-replace-supers": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", + "@babel/traverse": "^7.25.7", "semver": "^6.3.1" }, "engines": { @@ -752,23 +814,38 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz", + "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-create-class-features-plugin/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/@babel/helper-create-regexp-features-plugin": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", - "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.7.tgz", + "integrity": "sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "regexpu-core": "^5.3.1", + "@babel/helper-annotate-as-pure": "^7.25.7", + "regexpu-core": "^6.1.1", "semver": "^6.3.1" }, "engines": { @@ -778,11 +855,25 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz", + "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-create-regexp-features-plugin/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" } @@ -792,6 +883,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", @@ -804,41 +896,44 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", - "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.7.tgz", + "integrity": "sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.8", - "@babel/types": "^7.24.8" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz", + "integrity": "sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", - "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz", + "integrity": "sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.2" + "@babel/helper-module-imports": "^7.25.7", + "@babel/helper-simple-access": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -848,35 +943,38 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", - "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.7.tgz", + "integrity": "sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.24.7" + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", - "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz", + "integrity": "sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", - "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.7.tgz", + "integrity": "sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-wrap-function": "^7.25.0", - "@babel/traverse": "^7.25.0" + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-wrap-function": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -885,15 +983,29 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-remap-async-to-generator/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz", + "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-replace-supers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", - "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.7.tgz", + "integrity": "sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/traverse": "^7.25.0" + "@babel/helper-member-expression-to-functions": "^7.25.7", + "@babel/helper-optimise-call-expression": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -903,26 +1015,28 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz", + "integrity": "sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", - "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.7.tgz", + "integrity": "sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -933,6 +1047,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.24.7" }, @@ -941,66 +1056,72 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz", + "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz", + "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz", + "integrity": "sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", - "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.7.tgz", + "integrity": "sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/template": "^7.25.7", + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", - "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.7.tgz", + "integrity": "sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.6" + "@babel/template": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz", + "integrity": "sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", + "@babel/helper-validator-identifier": "^7.25.7", "chalk": "^2.4.2", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" @@ -1010,12 +1131,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", - "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.8.tgz", + "integrity": "sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.25.6" + "@babel/types": "^7.25.8" }, "bin": { "parser": "bin/babel-parser.js" @@ -1025,13 +1147,14 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", - "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.7.tgz", + "integrity": "sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.3" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1041,12 +1164,13 @@ } }, "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz", - "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.7.tgz", + "integrity": "sha512-GDDWeVLNxRIkQTnJn2pDOM1pkCgYdSqPeT1a9vh9yIqu2uzzgw1zcqEb+IJOhy+dTBMlNdThrDIksr2o09qrrQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1056,12 +1180,13 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz", - "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.7.tgz", + "integrity": "sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1071,14 +1196,15 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", - "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.7.tgz", + "integrity": "sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", + "@babel/plugin-transform-optional-chaining": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1088,13 +1214,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", - "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.7.tgz", + "integrity": "sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.0" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1108,6 +1235,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" }, @@ -1120,6 +1248,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1132,6 +1261,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -1144,6 +1274,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1159,6 +1290,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1171,6 +1303,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" }, @@ -1179,12 +1312,13 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.6.tgz", - "integrity": "sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.7.tgz", + "integrity": "sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1198,6 +1332,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -1213,6 +1348,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1225,6 +1361,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1237,6 +1374,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1249,6 +1387,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1261,6 +1400,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1273,6 +1413,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1285,6 +1426,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1297,6 +1439,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1309,6 +1452,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1324,6 +1468,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1339,6 +1484,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1351,12 +1497,13 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", - "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.7.tgz", + "integrity": "sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1370,6 +1517,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz", "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-remap-async-to-generator": "^7.25.0", @@ -1388,6 +1536,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.7", @@ -1401,12 +1550,13 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", - "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.7.tgz", + "integrity": "sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1416,12 +1566,13 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", - "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.7.tgz", + "integrity": "sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1431,13 +1582,14 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz", - "integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.7.tgz", + "integrity": "sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.4", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1447,14 +1599,14 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", - "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.25.8.tgz", + "integrity": "sha512-e82gl3TCorath6YLf9xUwFehVvjvfqFhdOo4+0iVIVju+6XOi5XHkqB3P2AXnSwoeTX0HBoXq5gJFtvotJzFnQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-class-static-block": "^7.14.5" + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1464,16 +1616,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz", - "integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.7.tgz", + "integrity": "sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-replace-supers": "^7.25.0", - "@babel/traverse": "^7.25.4", + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-replace-supers": "^7.25.7", + "@babel/traverse": "^7.25.7", "globals": "^11.1.0" }, "engines": { @@ -1483,23 +1636,38 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz", + "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/plugin-transform-classes/node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", - "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.7.tgz", + "integrity": "sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/template": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/template": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1509,12 +1677,13 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", - "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.7.tgz", + "integrity": "sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1524,13 +1693,14 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", - "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.7.tgz", + "integrity": "sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1540,12 +1710,13 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", - "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.7.tgz", + "integrity": "sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1555,13 +1726,14 @@ } }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz", - "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.7.tgz", + "integrity": "sha512-HvS6JF66xSS5rNKXLqkk7L9c/jZ/cdIVIcoPVrnl8IsVpLggTjXs8OWekbLHs/VtYDDh5WXnQyeE3PPUGm22MA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.0", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1571,13 +1743,13 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", - "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.8.tgz", + "integrity": "sha512-gznWY+mr4ZQL/EWPcbBQUP3BXS5FwZp8RUOw06BaRn8tQLzN4XLIxXejpHN9Qo8x8jjBmAAKp6FoS51AgkSA/A==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1587,13 +1759,14 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", - "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.7.tgz", + "integrity": "sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1603,13 +1776,13 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", - "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.8.tgz", + "integrity": "sha512-sPtYrduWINTQTW7FtOy99VCTWp4H23UX7vYcut7S4CIMEXU+54zKX9uCoGkLsWXteyaMXzVHgzWbLfQ1w4GZgw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1619,13 +1792,14 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", - "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.7.tgz", + "integrity": "sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1635,14 +1809,15 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", - "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.7.tgz", + "integrity": "sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.1" + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1652,13 +1827,13 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", - "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.8.tgz", + "integrity": "sha512-4OMNv7eHTmJ2YXs3tvxAfa/I43di+VcF+M4Wt66c88EAED1RoGaf1D64cL5FkRpNL+Vx9Hds84lksWvd/wMIdA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-json-strings": "^7.8.3" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1668,12 +1843,13 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", - "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.7.tgz", + "integrity": "sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1683,13 +1859,13 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", - "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.8.tgz", + "integrity": "sha512-f5W0AhSbbI+yY6VakT04jmxdxz+WsID0neG7+kQZbCOjuyJNdL5Nn4WIBm4hRpKnUcO9lP0eipUhFN12JpoH8g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1699,12 +1875,13 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", - "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.7.tgz", + "integrity": "sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1714,13 +1891,14 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", - "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.7.tgz", + "integrity": "sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1730,14 +1908,15 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", - "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.7.tgz", + "integrity": "sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-simple-access": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-simple-access": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1747,15 +1926,16 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", - "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.7.tgz", + "integrity": "sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.0", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.0" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1765,13 +1945,14 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", - "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.7.tgz", + "integrity": "sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1781,13 +1962,14 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", - "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.7.tgz", + "integrity": "sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1797,12 +1979,13 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", - "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.7.tgz", + "integrity": "sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1812,13 +1995,13 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", - "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.8.tgz", + "integrity": "sha512-Z7WJJWdQc8yCWgAmjI3hyC+5PXIubH9yRKzkl9ZEG647O9szl9zvmKLzpbItlijBnVhTUf1cpyWBsZ3+2wjWPQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1828,13 +2011,13 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", - "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.8.tgz", + "integrity": "sha512-rm9a5iEFPS4iMIy+/A/PiS0QN0UyjPIeVvbU5EMZFKJZHt8vQnasbpo3T3EFcxzCeYO0BHfc4RqooCZc51J86Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1844,15 +2027,15 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", - "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.8.tgz", + "integrity": "sha512-LkUu0O2hnUKHKE7/zYOIjByMa4VRaV2CD/cdGz0AxU9we+VA3kDDggKEzI0Oz1IroG+6gUP6UmWEHBMWZU316g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.24.7" + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/plugin-transform-parameters": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1862,13 +2045,14 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", - "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.7.tgz", + "integrity": "sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-replace-supers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-replace-supers": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1878,13 +2062,13 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", - "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.8.tgz", + "integrity": "sha512-EbQYweoMAHOn7iJ9GgZo14ghhb9tTjgOc88xFgYngifx7Z9u580cENCV159M4xDh3q/irbhSjZVpuhpC2gKBbg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1894,14 +2078,14 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", - "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.8.tgz", + "integrity": "sha512-q05Bk7gXOxpTHoQ8RSzGSh/LHVB9JEIkKnk3myAWwZHnYiTGYtbdrYkIsS8Xyh4ltKf7GNUSgzs/6P2bJtBAQg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1911,12 +2095,13 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", - "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.7.tgz", + "integrity": "sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1926,13 +2111,14 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz", - "integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.7.tgz", + "integrity": "sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.4", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1942,15 +2128,15 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", - "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.8.tgz", + "integrity": "sha512-8Uh966svuB4V8RHHg0QJOB32QK287NBksJOByoKmHMp1TAobNniNalIkI2i5IPj5+S9NYCG4VIjbEuiSN8r+ow==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1959,13 +2145,27 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-private-property-in-object/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz", + "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", - "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.7.tgz", + "integrity": "sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1975,12 +2175,13 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", - "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.7.tgz", + "integrity": "sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "regenerator-transform": "^0.15.2" }, "engines": { @@ -1991,12 +2192,13 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", - "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.7.tgz", + "integrity": "sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -2010,6 +2212,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz", "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.7", @@ -2030,17 +2233,19 @@ "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/@babel/plugin-transform-shorthand-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", - "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.7.tgz", + "integrity": "sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -2050,13 +2255,14 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", - "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.7.tgz", + "integrity": "sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -2066,12 +2272,13 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", - "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.7.tgz", + "integrity": "sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -2081,12 +2288,13 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", - "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.7.tgz", + "integrity": "sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -2096,12 +2304,13 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", - "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.7.tgz", + "integrity": "sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -2111,12 +2320,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", - "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.7.tgz", + "integrity": "sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -2126,13 +2336,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", - "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.7.tgz", + "integrity": "sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -2142,13 +2353,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", - "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.7.tgz", + "integrity": "sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -2158,13 +2370,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz", - "integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.7.tgz", + "integrity": "sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.2", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -2178,6 +2391,7 @@ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz", "integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/compat-data": "^7.25.2", "@babel/helper-compilation-targets": "^7.25.2", @@ -2275,6 +2489,7 @@ "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" } @@ -2284,6 +2499,7 @@ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/types": "^7.4.4", @@ -2293,17 +2509,12 @@ "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, "node_modules/@babel/runtime": { "version": "7.25.0", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", "dev": true, + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -2312,30 +2523,32 @@ } }, "node_modules/@babel/template": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", - "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz", + "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/code-frame": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", - "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz", + "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.6", - "@babel/parser": "^7.25.6", - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.6", + "@babel/code-frame": "^7.25.7", + "@babel/generator": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/template": "^7.25.7", + "@babel/types": "^7.25.7", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2344,15 +2557,16 @@ } }, "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", - "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.7.tgz", + "integrity": "sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.25.6", + "@babel/types": "^7.25.7", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" @@ -2363,18 +2577,33 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, + "node_modules/@babel/traverse/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@babel/types": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", - "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.8.tgz", + "integrity": "sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", + "@babel/helper-string-parser": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2385,6 +2614,7 @@ "version": "10.1.0", "resolved": "https://registry.npmjs.org/@cesium/engine/-/engine-10.1.0.tgz", "integrity": "sha512-xwdJEhGYgf6481vhrb80N5DgQZMwWvn08TWE6NXEgOhkZ7WnTCykYoCDNBMj9WQBqTfREk7/e+/RI4Gx2/TlUA==", + "license": "Apache-2.0", "dependencies": { "@tweenjs/tween.js": "^23.1.1", "@zip.js/zip.js": "^2.7.34", @@ -2413,12 +2643,14 @@ "node_modules/@cesium/engine/node_modules/pako": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", - "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", + "license": "(MIT AND Zlib)" }, "node_modules/@cesium/widgets": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/@cesium/widgets/-/widgets-7.1.0.tgz", "integrity": "sha512-SZCtaByBrBTssyUpg0Nir34B4wvvu8bKOMOOevv0AzYxfMeYRBX8CH/Ck/5fUJcTcsVmcYHVOqBF339wwKtcag==", + "license": "Apache-2.0", "dependencies": { "@cesium/engine": "^10.1.0", "nosleep.js": "^0.12.0" @@ -2431,6 +2663,7 @@ "version": "6.18.1", "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.18.1.tgz", "integrity": "sha512-iWHdj/B1ethnHRTwZj+C1obmmuCzquH29EbcKr0qIjA9NfDeBDJ7vs+WOHsFeLeflE4o+dHfYndJloMKHUkWUA==", + "license": "MIT", "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", @@ -2445,9 +2678,10 @@ } }, "node_modules/@codemirror/commands": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.6.2.tgz", - "integrity": "sha512-Fq7eWOl1Rcbrfn6jD8FPCj9Auaxdm5nIK5RYOeW7ughnd/rY5AmPg6b+CfsG39ZHdwiwe8lde3q8uR7CF5S0yQ==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.7.0.tgz", + "integrity": "sha512-+cduIZ2KbesDhbykV02K25A5xIVrquSPz4UxxYBemRlAT2aW8dhwUgLDwej7q/RJUHKk4nALYcR1puecDvbdqw==", + "license": "MIT", "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.4.0", @@ -2459,6 +2693,7 @@ "version": "6.1.1", "resolved": "https://registry.npmjs.org/@codemirror/lang-yaml/-/lang-yaml-6.1.1.tgz", "integrity": "sha512-HV2NzbK9bbVnjWxwObuZh5FuPCowx51mEfoFT9y3y+M37fA3+pbxx4I7uePuygFzDsAmCTwQSc/kXh/flab4uw==", + "license": "MIT", "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.0.0", @@ -2469,9 +2704,10 @@ } }, "node_modules/@codemirror/language": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.10.2.tgz", - "integrity": "sha512-kgbTYTo0Au6dCSc/TFy7fK3fpJmgHDv1sG1KNQKJXVi+xBTEeBPY/M30YXiU6mMXeH+YIDLsbrT4ZwNRdtF+SA==", + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.10.3.tgz", + "integrity": "sha512-kDqEU5sCP55Oabl6E7m5N+vZRoc0iWqgDVhEKifcHzPzjqCegcO4amfrYVL9PmPZpl4G0yjkpTpUO/Ui8CzO8A==", + "license": "MIT", "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.23.0", @@ -2482,9 +2718,10 @@ } }, "node_modules/@codemirror/lint": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.8.1.tgz", - "integrity": "sha512-IZ0Y7S4/bpaunwggW2jYqwLuHj0QtESf5xcROewY6+lDNwZ/NzvR4t+vpYgg9m7V8UXLPYqG+lu3DF470E5Oxg==", + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.8.2.tgz", + "integrity": "sha512-PDFG5DjHxSEjOXk9TQYYVjZDqlZTFaDBfhQixHnQOEVDDNHUbEh/hstAjcQJaA6FQdZTD1hquXTK0rVBLADR1g==", + "license": "MIT", "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", @@ -2495,6 +2732,7 @@ "version": "6.5.6", "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.6.tgz", "integrity": "sha512-rpMgcsh7o0GuCDUXKPvww+muLA1pDJaFrpq/CCHtpQJYz8xopu4D1hPcKRoDD0YlF8gZaqTNIRa4VRBWyhyy7Q==", + "license": "MIT", "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", @@ -2504,12 +2742,14 @@ "node_modules/@codemirror/state": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.4.1.tgz", - "integrity": "sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==" + "integrity": "sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==", + "license": "MIT" }, "node_modules/@codemirror/view": { - "version": "6.33.0", - "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.33.0.tgz", - "integrity": "sha512-AroaR3BvnjRW8fiZBalAaK+ZzB5usGgI014YKElYZvQdNH5ZIidHlO+cyf/2rWzyBFRkvG6VhiXeAEbC53P2YQ==", + "version": "6.34.1", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.34.1.tgz", + "integrity": "sha512-t1zK/l9UiRqwUNPm+pdIT0qzJlzuVckbTEMVNFhfWkGiBQClstzg+78vedCvLSX0xJEZ6lwZbPpnljL7L6iwMQ==", + "license": "MIT", "dependencies": { "@codemirror/state": "^6.4.0", "style-mod": "^4.1.0", @@ -2521,6 +2761,7 @@ "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.1.90" } @@ -2530,6 +2771,7 @@ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -2542,6 +2784,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -2552,6 +2795,7 @@ "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.1.tgz", "integrity": "sha512-boghen8F0Q8D+0/Q1/1r6DUEieUJ8w2a1gIknExMSHBsJFOr2+0KUfHiVYBvucPwl3+RU5PFBK833FjFCh3BhA==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.17.0" } @@ -2564,6 +2808,7 @@ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "aix" @@ -2580,6 +2825,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -2596,6 +2842,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -2612,6 +2859,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -2628,6 +2876,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -2644,6 +2893,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -2660,6 +2910,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -2676,6 +2927,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -2692,6 +2944,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2708,6 +2961,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2724,6 +2978,7 @@ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2740,6 +2995,7 @@ "loong64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2756,6 +3012,7 @@ "mips64el" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2772,6 +3029,7 @@ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2788,6 +3046,7 @@ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2804,6 +3063,7 @@ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2820,6 +3080,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2836,6 +3097,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "netbsd" @@ -2852,6 +3114,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -2868,6 +3131,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -2884,6 +3148,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "sunos" @@ -2900,6 +3165,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -2916,6 +3182,7 @@ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -2932,6 +3199,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -2945,6 +3213,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" }, @@ -2960,6 +3229,7 @@ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } @@ -2969,6 +3239,7 @@ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@eslint/object-schema": "^2.1.4", "debug": "^4.3.1", @@ -2978,11 +3249,22 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@eslint/core": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.6.0.tgz", + "integrity": "sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -3006,6 +3288,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", @@ -3022,6 +3305,7 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -3033,13 +3317,15 @@ "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/@eslint/js": { - "version": "9.10.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.10.0.tgz", - "integrity": "sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==", + "version": "9.12.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.12.0.tgz", + "integrity": "sha512-eohesHH8WFRUprDNyEREgqP6beG6htMeUYeCpkEgBCieCMme5r9zFWjzAJp//9S+Kub4rqE+jXe9Cp1a7IYIIA==", "dev": true, + "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } @@ -3049,15 +3335,17 @@ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/plugin-kit": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.1.0.tgz", - "integrity": "sha512-autAXT203ixhqei9xt+qkYOvY8l6LAFIdT2UXc/RPNeUVfqRF1BV94GTJyVPFKT8nFM6MyVJhjLj9E8JWvf5zQ==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.0.tgz", + "integrity": "sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==", "dev": true, + "license": "Apache-2.0", "dependencies": { "levn": "^0.4.1" }, @@ -3065,11 +3353,36 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@humanfs/core": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.0.tgz", + "integrity": "sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.5", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.5.tgz", + "integrity": "sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.0", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, "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" }, @@ -3079,10 +3392,11 @@ } }, "node_modules/@humanwhocodes/retry": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", - "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=18.18" }, @@ -3096,6 +3410,7 @@ "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-2.5.0.tgz", "integrity": "sha512-sMgdETOfi2dUHT8r7TT1BTKOwNvdDGFDXYWtQ2J69SvlYNntk9I/gJe7r5yvMwwsuKnYbuRs3pNhx4tgNck5aA==", "dev": true, + "license": "MIT", "dependencies": { "@inquirer/core": "^9.1.0", "@inquirer/figures": "^1.0.5", @@ -3112,6 +3427,7 @@ "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.22.tgz", "integrity": "sha512-gsAKIOWBm2Q87CDfs9fEo7wJT3fwWIJfnDGMn9Qy74gBnNFOACDNfhUzovubbJjWnKLGBln7/NcSmZwj5DuEXg==", "dev": true, + "license": "MIT", "dependencies": { "@inquirer/core": "^9.0.10", "@inquirer/type": "^1.5.2" @@ -3125,6 +3441,7 @@ "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.2.1.tgz", "integrity": "sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==", "dev": true, + "license": "MIT", "dependencies": { "@inquirer/figures": "^1.0.6", "@inquirer/type": "^2.0.0", @@ -3148,6 +3465,7 @@ "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-2.0.0.tgz", "integrity": "sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==", "dev": true, + "license": "MIT", "dependencies": { "mute-stream": "^1.0.0" }, @@ -3160,6 +3478,7 @@ "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-2.2.0.tgz", "integrity": "sha512-9KHOpJ+dIL5SZli8lJ6xdaYLPPzB8xB9GZItg39MBybzhxA16vxmszmQFrRwbOA918WA2rvu8xhDEg/p6LXKbw==", "dev": true, + "license": "MIT", "dependencies": { "@inquirer/core": "^9.1.0", "@inquirer/type": "^1.5.3", @@ -3174,6 +3493,7 @@ "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-2.3.0.tgz", "integrity": "sha512-qnJsUcOGCSG1e5DTOErmv2BPQqrtT6uzqn1vI/aYGiPKq+FgslGZmtdnXbhuI7IlT7OByDoEEqdnhUnVR2hhLw==", "dev": true, + "license": "MIT", "dependencies": { "@inquirer/core": "^9.1.0", "@inquirer/type": "^1.5.3", @@ -3184,10 +3504,11 @@ } }, "node_modules/@inquirer/figures": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.6.tgz", - "integrity": "sha512-yfZzps3Cso2UbM7WlxKwZQh2Hs6plrbjs1QnzQDZhK2DgyCo6D8AaHps9olkNcUFlcYERMqU3uJSp1gmy3s/qQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.7.tgz", + "integrity": "sha512-m+Trk77mp54Zma6xLkLuY+mvanPxlE4A7yNKs2HBiyZ4UkVs28Mv5c/pgWrHeInx+USHeX/WEPzjrWrcJiQgjw==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" } @@ -3197,6 +3518,7 @@ "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-2.3.0.tgz", "integrity": "sha512-XfnpCStx2xgh1LIRqPXrTNEEByqQWoxsWYzNRSEUxJ5c6EQlhMogJ3vHKu8aXuTacebtaZzMAHwEL0kAflKOBw==", "dev": true, + "license": "MIT", "dependencies": { "@inquirer/core": "^9.1.0", "@inquirer/type": "^1.5.3" @@ -3210,6 +3532,7 @@ "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-1.1.0.tgz", "integrity": "sha512-ilUnia/GZUtfSZy3YEErXLJ2Sljo/mf9fiKc08n18DdwdmDbOzRcTv65H1jjDvlsAuvdFXf4Sa/aL7iw/NanVA==", "dev": true, + "license": "MIT", "dependencies": { "@inquirer/core": "^9.1.0", "@inquirer/type": "^1.5.3" @@ -3223,6 +3546,7 @@ "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-2.2.0.tgz", "integrity": "sha512-5otqIpgsPYIshqhgtEwSspBQE40etouR8VIxzpJkv9i0dVHIpyhiivbkH9/dGiMLdyamT54YRdGJLfl8TFnLHg==", "dev": true, + "license": "MIT", "dependencies": { "@inquirer/core": "^9.1.0", "@inquirer/type": "^1.5.3", @@ -3237,6 +3561,7 @@ "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-5.3.8.tgz", "integrity": "sha512-b2BudQY/Si4Y2a0PdZZL6BeJtl8llgeZa7U2j47aaJSCeAl1e4UI7y8a9bSkO3o/ZbZrgT5muy/34JbsjfIWxA==", "dev": true, + "license": "MIT", "dependencies": { "@inquirer/checkbox": "^2.4.7", "@inquirer/confirm": "^3.1.22", @@ -3258,6 +3583,7 @@ "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-2.3.0.tgz", "integrity": "sha512-zzfNuINhFF7OLAtGHfhwOW2TlYJyli7lOUoJUXw/uyklcwalV6WRXBXtFIicN8rTRK1XTiPWB4UY+YuW8dsnLQ==", "dev": true, + "license": "MIT", "dependencies": { "@inquirer/core": "^9.1.0", "@inquirer/type": "^1.5.3", @@ -3272,6 +3598,7 @@ "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-1.1.0.tgz", "integrity": "sha512-h+/5LSj51dx7hp5xOn4QFnUaKeARwUCLs6mIhtkJ0JYPBLmEYjdHSYh7I6GrLg9LwpJ3xeX0FZgAG1q0QdCpVQ==", "dev": true, + "license": "MIT", "dependencies": { "@inquirer/core": "^9.1.0", "@inquirer/figures": "^1.0.5", @@ -3287,6 +3614,7 @@ "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-2.5.0.tgz", "integrity": "sha512-YmDobTItPP3WcEI86GvPo+T2sRHkxxOq/kXmsBjHS5BVXUgvgZ5AfJjkvQvZr03T81NnI3KrrRuMzeuYUQRFOA==", "dev": true, + "license": "MIT", "dependencies": { "@inquirer/core": "^9.1.0", "@inquirer/figures": "^1.0.5", @@ -3303,6 +3631,7 @@ "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.5.tgz", "integrity": "sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==", "dev": true, + "license": "MIT", "dependencies": { "mute-stream": "^1.0.0" }, @@ -3315,6 +3644,7 @@ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -3332,6 +3662,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -3344,6 +3675,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -3355,13 +3687,15 @@ "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -3379,6 +3713,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" }, @@ -3394,6 +3729,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -3411,6 +3747,7 @@ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3420,6 +3757,7 @@ "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", @@ -3434,6 +3772,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" } @@ -3443,6 +3782,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" } @@ -3452,6 +3792,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" @@ -3461,13 +3802,15 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "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" @@ -3478,6 +3821,7 @@ "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.0" }, @@ -3494,6 +3838,7 @@ "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.0.tgz", "integrity": "sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@jsonjoy.com/base64": "^1.1.1", "@jsonjoy.com/util": "^1.1.2", @@ -3512,10 +3857,11 @@ } }, "node_modules/@jsonjoy.com/util": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.3.0.tgz", - "integrity": "sha512-Cebt4Vk7k1xHy87kHY7KSPLT77A7Ev7IfOblyLZhtYEhrdQ6fX4EoLq3xOQ3O/DRMEh2ok5nyC180E+ABS8Wmw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.5.0.tgz", + "integrity": "sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.0" }, @@ -3531,17 +3877,20 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@lezer/common": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.1.tgz", - "integrity": "sha512-yemX0ZD2xS/73llMZIK6KplkjIjf2EvAHcinDi/TfJ9hS25G0388+ClHt6/3but0oOxinTcQHJLDXh6w1crzFQ==" + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.2.tgz", + "integrity": "sha512-Z+R3hN6kXbgBWAuejUNPihylAL1Z5CaFqnIe0nTX8Ej+XlIy3EGtXxn6WtLMO+os2hRkQvm2yvaGMYliUzlJaw==", + "license": "MIT" }, "node_modules/@lezer/highlight": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.1.tgz", "integrity": "sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==", + "license": "MIT", "dependencies": { "@lezer/common": "^1.0.0" } @@ -3550,6 +3899,7 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.2.tgz", "integrity": "sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==", + "license": "MIT", "dependencies": { "@lezer/common": "^1.0.0" } @@ -3558,6 +3908,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/@lezer/yaml/-/yaml-1.0.3.tgz", "integrity": "sha512-GuBLekbw9jDBDhGur82nuwkxKQ+a3W5H0GfaAthDXcAu+XdpS43VlnxA9E9hllkpSP5ellRDKjLLj7Lu9Wr6xA==", + "license": "MIT", "dependencies": { "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.0.0", @@ -3569,6 +3920,7 @@ "resolved": "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-2.0.15.tgz", "integrity": "sha512-MZrGem/Ujjd4cPTLYDfCZK2iKKeiO/8OX13S6jqxldLs0Prf2aGqVlJ77nMBqMv7fzqgXEgjrNHLXcKR8l9lOg==", "dev": true, + "license": "MIT", "dependencies": { "@inquirer/type": "^1.5.1" }, @@ -3587,6 +3939,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -3600,6 +3953,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -3613,6 +3967,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -3626,6 +3981,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -3639,6 +3995,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -3652,6 +4009,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -3665,6 +4023,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -3678,6 +4037,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -3691,6 +4051,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -3704,6 +4065,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -3717,6 +4079,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -3730,16 +4093,18 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@ngtools/webpack": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.2.5.tgz", - "integrity": "sha512-L0n4eHObeqEOYRfSP+e4SeF/dmwxOIFy9xYvYCOUwOLrW4b3+a1+kkT30pqyfL72LFtpf0cmUwaWEFIcWl5PCg==", + "version": "18.2.8", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.2.8.tgz", + "integrity": "sha512-sq0kI8gEen4QlM6X8XqOYy7j4B8iLCYNo+iKxatV36ts4AXH0MuVkP56+oMaoH5oZNoSqd0RlfnotEHfvJAr8A==", "dev": true, + "license": "MIT", "engines": { "node": "^18.19.1 || ^20.11.1 || >=22.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", @@ -3752,9 +4117,10 @@ } }, "node_modules/@ngx-formly/core": { - "version": "6.3.7", - "resolved": "https://registry.npmjs.org/@ngx-formly/core/-/core-6.3.7.tgz", - "integrity": "sha512-To2mH09YSm3nyThABNHIameIJCPA9C+x3/JFxFtBWek+UbYeW9DYOqNHRCc7P1ToqLqNEuwrmzjB2YSA8pO9Pw==", + "version": "6.3.8", + "resolved": "https://registry.npmjs.org/@ngx-formly/core/-/core-6.3.8.tgz", + "integrity": "sha512-VPHQLf17z2bqFzbX4JKwB9KM32IthIHtPYcFDs670lL3nkGbPzxfntCa5vGg+qNUZRUlT5Du9cC0a/lDaF1MyQ==", + "license": "MIT", "dependencies": { "tslib": "^2.0.0" }, @@ -3764,14 +4130,15 @@ } }, "node_modules/@ngx-formly/primeng": { - "version": "6.3.7", - "resolved": "https://registry.npmjs.org/@ngx-formly/primeng/-/primeng-6.3.7.tgz", - "integrity": "sha512-1eQUoZLVAo3Jo8Xk5iPWxAyKCmF/zK6BFdm13K1DvJDaGTFjkEQtZnhJup0dET6lB6inNbmMCNRoKFCjnD9HdA==", + "version": "6.3.8", + "resolved": "https://registry.npmjs.org/@ngx-formly/primeng/-/primeng-6.3.8.tgz", + "integrity": "sha512-W/csCwr1F1eI+r68qkJMYxzCUcaGng8tKdr16qPxDqj8s+XiuCXJozIT+gc7dAh4+3lNDVG+iSYntTMxBlIpGQ==", + "license": "MIT", "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { - "@ngx-formly/core": "6.3.7", + "@ngx-formly/core": "6.3.8", "primeng": ">=13.0.0" } }, @@ -3780,6 +4147,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" @@ -3793,6 +4161,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" } @@ -3802,6 +4171,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" @@ -3815,6 +4185,7 @@ "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", "dev": true, + "license": "ISC", "dependencies": { "agent-base": "^7.1.0", "http-proxy-agent": "^7.0.0", @@ -3830,13 +4201,15 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/@npmcli/fs": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", "dev": true, + "license": "ISC", "dependencies": { "semver": "^7.3.5" }, @@ -3849,6 +4222,7 @@ "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.8.tgz", "integrity": "sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/promise-spawn": "^7.0.0", "ini": "^4.1.3", @@ -3869,6 +4243,7 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=16" } @@ -3877,13 +4252,15 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/@npmcli/git/node_modules/which": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^3.1.1" }, @@ -3899,6 +4276,7 @@ "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", "dev": true, + "license": "ISC", "dependencies": { "npm-bundled": "^3.0.0", "npm-normalize-package-bin": "^3.0.0" @@ -3915,6 +4293,7 @@ "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -3924,6 +4303,7 @@ "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.1.tgz", "integrity": "sha512-f7zYC6kQautXHvNbLEWgD/uGu1+xCn9izgqBfgItWSx22U0ZDekxN08A1vM8cTxj/cRVe0Q94Ode+tdoYmIOOQ==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/git": "^5.0.0", "glob": "^10.2.2", @@ -3942,6 +4322,7 @@ "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" } @@ -3951,6 +4332,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -3971,6 +4353,7 @@ "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" }, @@ -3986,6 +4369,7 @@ "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz", "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==", "dev": true, + "license": "ISC", "dependencies": { "which": "^4.0.0" }, @@ -3998,6 +4382,7 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=16" } @@ -4007,6 +4392,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^3.1.1" }, @@ -4022,6 +4408,7 @@ "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-2.0.1.tgz", "integrity": "sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==", "dev": true, + "license": "ISC", "engines": { "node": "^16.14.0 || >=18.0.0" } @@ -4031,6 +4418,7 @@ "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-8.1.0.tgz", "integrity": "sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/node-gyp": "^3.0.0", "@npmcli/package-json": "^5.0.0", @@ -4048,6 +4436,7 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=16" } @@ -4057,6 +4446,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^3.1.1" }, @@ -4072,6 +4462,7 @@ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=14" @@ -4080,27 +4471,32 @@ "node_modules/@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/base64": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/codegen": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/eventemitter": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/fetch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", "dependencies": { "@protobufjs/aspromise": "^1.1.1", "@protobufjs/inquire": "^1.1.0" @@ -4109,244 +4505,266 @@ "node_modules/@protobufjs/float": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/inquire": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/path": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/pool": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/utf8": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "license": "BSD-3-Clause" }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz", - "integrity": "sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz", + "integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.20.0.tgz", - "integrity": "sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz", + "integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz", - "integrity": "sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz", + "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.20.0.tgz", - "integrity": "sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz", + "integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.20.0.tgz", - "integrity": "sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz", + "integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.20.0.tgz", - "integrity": "sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz", + "integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.20.0.tgz", - "integrity": "sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz", + "integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.20.0.tgz", - "integrity": "sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz", + "integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.20.0.tgz", - "integrity": "sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz", + "integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==", "cpu": [ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.20.0.tgz", - "integrity": "sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz", + "integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==", "cpu": [ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.20.0.tgz", - "integrity": "sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz", + "integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==", "cpu": [ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.20.0.tgz", - "integrity": "sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz", + "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.20.0.tgz", - "integrity": "sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz", + "integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.20.0.tgz", - "integrity": "sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz", + "integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.20.0.tgz", - "integrity": "sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz", + "integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.20.0.tgz", - "integrity": "sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz", + "integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@schematics/angular": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.2.5.tgz", - "integrity": "sha512-tBXhk9OGT4U6VsBNbuCNl2ITDOF3NYdGrEieIHU+lHSkpJNGZUIGxCgXCETXkmXDq1pe4wFZSKelWjeqYDfX0g==", + "version": "18.2.8", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.2.8.tgz", + "integrity": "sha512-62Sr7/j/dlhZorxH4GzQgpJy0s162BVts0Q7knZuEacP4VL+IWOUE1NS9OFkh/cbomoyXBdoewkZ5Zd1dVX78w==", "dev": true, + "license": "MIT", "dependencies": { - "@angular-devkit/core": "18.2.5", - "@angular-devkit/schematics": "18.2.5", + "@angular-devkit/core": "18.2.8", + "@angular-devkit/schematics": "18.2.8", "jsonc-parser": "3.3.1" }, "engines": { @@ -4360,6 +4778,7 @@ "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz", "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@sigstore/protobuf-specs": "^0.3.2" }, @@ -4372,6 +4791,7 @@ "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz", "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^16.14.0 || >=18.0.0" } @@ -4381,6 +4801,7 @@ "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz", "integrity": "sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^16.14.0 || >=18.0.0" } @@ -4390,6 +4811,7 @@ "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.2.tgz", "integrity": "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@sigstore/bundle": "^2.3.2", "@sigstore/core": "^1.0.0", @@ -4407,6 +4829,7 @@ "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz", "integrity": "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@sigstore/protobuf-specs": "^0.3.2", "tuf-js": "^2.2.1" @@ -4420,6 +4843,7 @@ "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz", "integrity": "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@sigstore/bundle": "^2.3.2", "@sigstore/core": "^1.1.0", @@ -4434,6 +4858,7 @@ "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" }, @@ -4445,37 +4870,43 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node10": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tufjs/canonical-json": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", "dev": true, + "license": "MIT", "engines": { "node": "^16.14.0 || >=18.0.0" } @@ -4485,6 +4916,7 @@ "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz", "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==", "dev": true, + "license": "MIT", "dependencies": { "@tufjs/canonical-json": "2.0.0", "minimatch": "^9.0.4" @@ -4498,6 +4930,7 @@ "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" } @@ -4507,6 +4940,7 @@ "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" }, @@ -4520,13 +4954,15 @@ "node_modules/@tweenjs/tween.js": { "version": "23.1.3", "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-23.1.3.tgz", - "integrity": "sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==" + "integrity": "sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==", + "license": "MIT" }, "node_modules/@types/body-parser": { "version": "1.19.5", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dev": true, + "license": "MIT", "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -4537,6 +4973,7 @@ "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -4546,6 +4983,7 @@ "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -4555,6 +4993,7 @@ "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", "dev": true, + "license": "MIT", "dependencies": { "@types/express-serve-static-core": "*", "@types/node": "*" @@ -4564,28 +5003,32 @@ "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/@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/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 + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" }, "node_modules/@types/express": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -4594,10 +5037,24 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.19.5", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", - "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.0.tgz", + "integrity": "sha512-AbXMTZGt40T+KON9/Fdxx0B2WK5hsgxcfXJLr5bFpZ7b4JCex2WyQPTEKdXqfHiY5nKKBScZ7yCoO6Pvgxfvnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/express/node_modules/@types/express-serve-static-core": { + "version": "4.19.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", + "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -4609,13 +5066,15 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/http-proxy": { "version": "1.17.15", "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz", "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -4624,39 +5083,45 @@ "version": "5.1.4", "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-5.1.4.tgz", "integrity": "sha512-px7OMFO/ncXxixDe1zR13V1iycqWae0MxTaw62RpFlksUi5QuNWgQJFkTQjIOvrmutJbI7Fp2Y2N1F6D2R4G6w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/js-yaml": { "version": "4.0.9", "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", - "dev": true + "dev": true, + "license": "MIT" }, "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 + "dev": true, + "license": "MIT" }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/mute-stream": { "version": "0.0.4", "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": "22.5.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.5.tgz", - "integrity": "sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==", + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "license": "MIT", "dependencies": { "undici-types": "~6.19.2" } @@ -4666,6 +5131,7 @@ "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -4674,25 +5140,29 @@ "version": "6.9.16", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.16.tgz", "integrity": "sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/retry": { "version": "0.12.2", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/send": { "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "dev": true, + "license": "MIT", "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -4703,6 +5173,7 @@ "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", "dev": true, + "license": "MIT", "dependencies": { "@types/express": "*" } @@ -4712,6 +5183,7 @@ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", "dev": true, + "license": "MIT", "dependencies": { "@types/http-errors": "*", "@types/node": "*", @@ -4723,6 +5195,7 @@ "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -4731,28 +5204,31 @@ "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/ws": { "version": "8.5.12", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.6.0.tgz", - "integrity": "sha512-UOaz/wFowmoh2G6Mr9gw60B1mm0MzUtm6Ic8G2yM1Le6gyj5Loi/N+O5mocugRGY+8OeeKmkMmbxNqUCq3B4Sg==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.9.0.tgz", + "integrity": "sha512-Y1n621OCy4m7/vTXNlCbMVp87zSd7NH0L9cXD8aIpOaNlzeWxIK4+Q19A68gSmTNRZn92UjocVUWDthGxtqHFg==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.6.0", - "@typescript-eslint/type-utils": "8.6.0", - "@typescript-eslint/utils": "8.6.0", - "@typescript-eslint/visitor-keys": "8.6.0", + "@typescript-eslint/scope-manager": "8.9.0", + "@typescript-eslint/type-utils": "8.9.0", + "@typescript-eslint/utils": "8.9.0", + "@typescript-eslint/visitor-keys": "8.9.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -4776,15 +5252,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.6.0.tgz", - "integrity": "sha512-eQcbCuA2Vmw45iGfcyG4y6rS7BhWfz9MQuk409WD47qMM+bKCGQWXxvoOs1DUp+T7UBMTtRTVT+kXr7Sh4O9Ow==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.9.0.tgz", + "integrity": "sha512-U+BLn2rqTTHnc4FL3FJjxaXptTxmf9sNftJK62XLz4+GxG3hLHm/SUNaaXP5Y4uTiuYoL5YLy4JBCJe3+t8awQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "8.6.0", - "@typescript-eslint/types": "8.6.0", - "@typescript-eslint/typescript-estree": "8.6.0", - "@typescript-eslint/visitor-keys": "8.6.0", + "@typescript-eslint/scope-manager": "8.9.0", + "@typescript-eslint/types": "8.9.0", + "@typescript-eslint/typescript-estree": "8.9.0", + "@typescript-eslint/visitor-keys": "8.9.0", "debug": "^4.3.4" }, "engines": { @@ -4804,13 +5281,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.6.0.tgz", - "integrity": "sha512-ZuoutoS5y9UOxKvpc/GkvF4cuEmpokda4wRg64JEia27wX+PysIE9q+lzDtlHHgblwUWwo5/Qn+/WyTUvDwBHw==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.9.0.tgz", + "integrity": "sha512-bZu9bUud9ym1cabmOYH9S6TnbWRzpklVmwqICeOulTCZ9ue2/pczWzQvt/cGj2r2o1RdKoZbuEMalJJSYw3pHQ==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.6.0", - "@typescript-eslint/visitor-keys": "8.6.0" + "@typescript-eslint/types": "8.9.0", + "@typescript-eslint/visitor-keys": "8.9.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4821,13 +5299,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.6.0.tgz", - "integrity": "sha512-dtePl4gsuenXVwC7dVNlb4mGDcKjDT/Ropsk4za/ouMBPplCLyznIaR+W65mvCvsyS97dymoBRrioEXI7k0XIg==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.9.0.tgz", + "integrity": "sha512-JD+/pCqlKqAk5961vxCluK+clkppHY07IbV3vett97KOV+8C6l+CPEPwpUuiMwgbOz/qrN3Ke4zzjqbT+ls+1Q==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.6.0", - "@typescript-eslint/utils": "8.6.0", + "@typescript-eslint/typescript-estree": "8.9.0", + "@typescript-eslint/utils": "8.9.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -4845,10 +5324,11 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.6.0.tgz", - "integrity": "sha512-rojqFZGd4MQxw33SrOy09qIDS8WEldM8JWtKQLAjf/X5mGSeEFh5ixQlxssMNyPslVIk9yzWqXCsV2eFhYrYUw==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.9.0.tgz", + "integrity": "sha512-SjgkvdYyt1FAPhU9c6FiYCXrldwYYlIQLkuc+LfAhCna6ggp96ACncdtlbn8FmnG72tUkXclrDExOpEYf1nfJQ==", "dev": true, + "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -4858,13 +5338,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.6.0.tgz", - "integrity": "sha512-MOVAzsKJIPIlLK239l5s06YXjNqpKTVhBVDnqUumQJja5+Y94V3+4VUFRA0G60y2jNnTVwRCkhyGQpavfsbq/g==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.9.0.tgz", + "integrity": "sha512-9iJYTgKLDG6+iqegehc5+EqE6sqaee7kb8vWpmHZ86EqwDjmlqNNHeqDVqb9duh+BY6WCNHfIGvuVU3Tf9Db0g==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "8.6.0", - "@typescript-eslint/visitor-keys": "8.6.0", + "@typescript-eslint/types": "8.9.0", + "@typescript-eslint/visitor-keys": "8.9.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -4890,6 +5371,7 @@ "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" } @@ -4899,6 +5381,7 @@ "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" }, @@ -4910,15 +5393,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.6.0.tgz", - "integrity": "sha512-eNp9cWnYf36NaOVjkEUznf6fEgVy1TWpE0o52e4wtojjBx7D1UV2WAWGzR+8Y5lVFtpMLPwNbC67T83DWSph4A==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.9.0.tgz", + "integrity": "sha512-PKgMmaSo/Yg/F7kIZvrgrWa1+Vwn036CdNUvYFEkYbPwOH4i8xvkaRlu148W3vtheWK9ckKRIz7PBP5oUlkrvQ==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.6.0", - "@typescript-eslint/types": "8.6.0", - "@typescript-eslint/typescript-estree": "8.6.0" + "@typescript-eslint/scope-manager": "8.9.0", + "@typescript-eslint/types": "8.9.0", + "@typescript-eslint/typescript-estree": "8.9.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4932,12 +5416,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.6.0.tgz", - "integrity": "sha512-wapVFfZg9H0qOYh4grNVQiMklJGluQrOUiOhYRrQWhx7BY/+I1IYb8BczWNbbUpO+pqy0rDciv3lQH5E1bCLrg==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.9.0.tgz", + "integrity": "sha512-Ht4y38ubk4L5/U8xKUBfKNYGmvKvA1CANoxiTRMM+tOLk3lbF3DvzZCxJCRSE+2GdCMSh6zq9VZJc3asc1XuAA==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.6.0", + "@typescript-eslint/types": "8.9.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -4953,6 +5438,7 @@ "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.1.0.tgz", "integrity": "sha512-wO4Dk/rm8u7RNhOf95ZzcEmC9rYOncYgvq4z3duaJrCgjN8BxAnDVyndanfcJZ0O6XZzHz6Q0hTimxTg8Y9g/A==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.6.0" }, @@ -4965,6 +5451,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6" @@ -4974,25 +5461,29 @@ "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.6", "@webassemblyjs/helper-api-error": "1.11.6", @@ -5003,13 +5494,15 @@ "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", @@ -5022,6 +5515,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "dev": true, + "license": "MIT", "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -5031,6 +5525,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@xtuc/long": "4.2.2" } @@ -5039,13 +5534,15 @@ "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", @@ -5062,6 +5559,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", @@ -5075,6 +5573,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", @@ -5087,6 +5586,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", @@ -5101,6 +5601,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" @@ -5110,24 +5611,28 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/@zip.js/zip.js": { "version": "2.7.52", "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.7.52.tgz", "integrity": "sha512-+5g7FQswvrCHwYKNMd/KFxZSObctLSsQOgqBSi0LzwHo3li9Eh1w5cF5ndjQw9Zbr3ajVnd2+XyiX85gAetx1Q==", + "license": "BSD-3-Clause", "engines": { "bun": ">=0.7.0", "deno": ">=1.0.0", @@ -5139,6 +5644,7 @@ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -5148,6 +5654,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" @@ -5161,6 +5668,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -5173,6 +5681,7 @@ "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^8" } @@ -5182,6 +5691,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" } @@ -5191,6 +5701,7 @@ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "dev": true, + "license": "MIT", "dependencies": { "acorn": "^8.11.0" }, @@ -5203,6 +5714,7 @@ "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", "dev": true, + "license": "MIT", "dependencies": { "loader-utils": "^2.0.0", "regex-parser": "^2.2.11" @@ -5216,6 +5728,7 @@ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, + "license": "MIT", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -5230,6 +5743,7 @@ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4" }, @@ -5242,6 +5756,7 @@ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, + "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -5255,6 +5770,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -5271,6 +5787,7 @@ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^8.0.0" }, @@ -5288,6 +5805,7 @@ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -5300,6 +5818,7 @@ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -5309,6 +5828,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" }, @@ -5327,6 +5847,7 @@ "engines": [ "node >= 0.8.0" ], + "license": "Apache-2.0", "bin": { "ansi-html": "bin/ansi-html" } @@ -5336,6 +5857,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" } @@ -5345,6 +5867,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" }, @@ -5357,6 +5880,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" @@ -5370,6 +5894,7 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -5381,23 +5906,27 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "dev": true, + "license": "MIT" }, "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==" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" }, "node_modules/array-flatten": { "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/assert": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "is-nan": "^1.3.2", @@ -5410,6 +5939,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-4.0.0.tgz", "integrity": "sha512-fl5Kh6BmEEZx+IWBfEirnRUU5+cOiV0OK7PEt0RBKvJMJ8GaRseIOeDU3FKf4j3CE5HVefcjHmhYPOcaVt0bZw==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" } @@ -5433,6 +5963,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "browserslist": "^4.23.3", "caniuse-lite": "^1.0.30001646", @@ -5455,6 +5986,7 @@ "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==", + "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -5470,6 +6002,7 @@ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", "dev": true, + "license": "MIT", "dependencies": { "find-cache-dir": "^4.0.0", "schema-utils": "^4.0.0" @@ -5487,6 +6020,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/compat-data": "^7.22.6", "@babel/helper-define-polyfill-provider": "^0.6.2", @@ -5501,6 +6035,7 @@ "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" } @@ -5510,6 +6045,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.2", "core-js-compat": "^3.38.0" @@ -5523,6 +6059,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.2" }, @@ -5534,7 +6071,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", @@ -5554,13 +6092,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" } @@ -5569,13 +6109,15 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -5585,6 +6127,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" }, @@ -5595,13 +6138,15 @@ "node_modules/bitmap-sdf": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/bitmap-sdf/-/bitmap-sdf-1.0.4.tgz", - "integrity": "sha512-1G3U4n5JE6RAiALMxu0p1XmeZkTeCwGKykzsLTCqVzfSDaN6S7fKnkIkfejogz+iwqBWc0UYAIKnKHNN7pSfDg==" + "integrity": "sha512-1G3U4n5JE6RAiALMxu0p1XmeZkTeCwGKykzsLTCqVzfSDaN6S7fKnkIkfejogz+iwqBWc0UYAIKnKHNN7pSfDg==", + "license": "MIT" }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, + "license": "MIT", "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -5613,6 +6158,7 @@ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -5637,6 +6183,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" } @@ -5645,13 +6192,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/bonjour-service": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "multicast-dns": "^7.2.5" @@ -5661,13 +6210,15 @@ "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==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5678,6 +6229,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" }, @@ -5689,14 +6241,15 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "license": "MIT", "dependencies": { "pako": "~1.0.5" } }, "node_modules/browserslist": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", - "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", + "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", "dev": true, "funding": [ { @@ -5712,9 +6265,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", + "caniuse-lite": "^1.0.30001663", + "electron-to-chromium": "^1.5.28", "node-releases": "^2.0.18", "update-browserslist-db": "^1.1.0" }, @@ -5744,6 +6298,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -5753,18 +6308,21 @@ "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/builtin-status-codes": { "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==" + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "license": "MIT" }, "node_modules/bundle-name": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", "dev": true, + "license": "MIT", "dependencies": { "run-applescript": "^7.0.0" }, @@ -5780,6 +6338,7 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -5789,6 +6348,7 @@ "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/fs": "^3.1.0", "fs-minipass": "^3.0.0", @@ -5812,6 +6372,7 @@ "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" } @@ -5821,6 +6382,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -5840,13 +6402,15 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/cacache/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" }, @@ -5861,6 +6425,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -5880,14 +6445,15 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001660", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001660.tgz", - "integrity": "sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==", + "version": "1.0.30001668", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001668.tgz", + "integrity": "sha512-nWLrdxqCdblixUO+27JtGJJE/txpJlyUy5YN1u53wLZkP0emYCo5zgS6QYft7VUYR42LGgi/S5hdLZTrnyIddw==", "dev": true, "funding": [ { @@ -5902,12 +6468,18 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/cesium": { "version": "1.120.0", "resolved": "https://registry.npmjs.org/cesium/-/cesium-1.120.0.tgz", "integrity": "sha512-1TkuCgWhhZ+TlNM4Hps08xb+TyNwChkR8MiYNtFior8XIglEvdh+JgPqdI+yfd9M02bjV13HDj5D6muIYsW4uw==", + "license": "Apache-2.0", + "workspaces": [ + "packages/engine", + "packages/widgets" + ], "dependencies": { "@cesium/engine": "^10.1.0", "@cesium/widgets": "^7.1.0" @@ -5921,6 +6493,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", @@ -5934,13 +6507,15 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/chokidar": { "version": "3.6.0", "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", @@ -5960,11 +6535,25 @@ "fsevents": "~2.3.2" } }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -5974,6 +6563,7 @@ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0" } @@ -5983,6 +6573,7 @@ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -5992,6 +6583,7 @@ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "dev": true, + "license": "MIT", "dependencies": { "restore-cursor": "^5.0.0" }, @@ -6007,6 +6599,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" }, @@ -6019,6 +6612,7 @@ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", "dev": true, + "license": "MIT", "dependencies": { "slice-ansi": "^5.0.0", "string-width": "^7.0.0" @@ -6035,6 +6629,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" } @@ -6044,6 +6639,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", @@ -6058,6 +6654,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" }, @@ -6073,6 +6670,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" }, @@ -6084,19 +6682,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/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -6106,6 +6707,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", @@ -6120,6 +6722,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", @@ -6137,6 +6740,7 @@ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } @@ -6146,6 +6750,7 @@ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, + "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", @@ -6159,6 +6764,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.1.tgz", "integrity": "sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==", + "license": "MIT", "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/commands": "^6.0.0", @@ -6174,6 +6780,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" } @@ -6182,30 +6789,35 @@ "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/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true + "dev": true, + "license": "MIT" }, "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==" + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" }, "node_modules/common-path-prefix": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "dev": true + "dev": true, + "license": "ISC" }, "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" }, @@ -6218,6 +6830,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", @@ -6236,6 +6849,7 @@ "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" } @@ -6245,6 +6859,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" } @@ -6253,25 +6868,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/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/connect": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "2.6.9", "finalhandler": "1.1.2", @@ -6287,6 +6906,7 @@ "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } @@ -6296,6 +6916,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" } @@ -6304,13 +6925,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/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" }, @@ -6323,6 +6946,7 @@ "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" } @@ -6331,13 +6955,15 @@ "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/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -6346,13 +6972,15 @@ "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/copy-anything": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", "dev": true, + "license": "MIT", "dependencies": { "is-what": "^3.14.1" }, @@ -6365,6 +6993,7 @@ "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-12.0.2.tgz", "integrity": "sha512-SNwdBeHyII+rWvee/bTnAYyO8vfVdcSTud4EIb6jcZ8inLeWucJE0DnxXQBjlQ5zlteuuvooGQy3LIyGxhvlOA==", "dev": true, + "license": "MIT", "dependencies": { "fast-glob": "^3.3.2", "glob-parent": "^6.0.1", @@ -6384,23 +7013,12 @@ "webpack": "^5.1.0" } }, - "node_modules/copy-webpack-plugin/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, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/core-js-compat": { "version": "3.38.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.23.3" }, @@ -6413,13 +7031,15 @@ "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" @@ -6433,6 +7053,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", @@ -6458,18 +7079,21 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/crelt": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", - "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==" + "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==", + "license": "MIT" }, "node_modules/critters": { "version": "0.0.24", "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.24.tgz", "integrity": "sha512-Oyqew0FGM0wYUSNqR0L6AteO5MpMoUU0rhKRieXeiKs+PmRTxiJMyaunYB2KF6fQ3dzChXKCpbFOEJx3OQ1v/Q==", "dev": true, + "license": "Apache-2.0", "dependencies": { "chalk": "^4.1.0", "css-select": "^5.1.0", @@ -6485,6 +7109,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" }, @@ -6500,6 +7125,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" @@ -6516,6 +7142,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" }, @@ -6527,13 +7154,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/critters/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -6543,6 +7172,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" }, @@ -6555,6 +7185,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", @@ -6569,6 +7200,7 @@ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", "dev": true, + "license": "MIT", "dependencies": { "icss-utils": "^5.1.0", "postcss": "^8.4.33", @@ -6604,6 +7236,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", @@ -6620,6 +7253,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" }, @@ -6632,6 +7266,7 @@ "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" }, @@ -6643,13 +7278,15 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/date-format": { "version": "4.0.14", "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.0" } @@ -6659,6 +7296,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -6675,13 +7313,15 @@ "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/default-browser": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", "dev": true, + "license": "MIT", "dependencies": { "bundle-name": "^4.1.0", "default-browser-id": "^5.0.0" @@ -6698,6 +7338,7 @@ "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -6710,6 +7351,7 @@ "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "execa": "^5.0.0" }, @@ -6722,6 +7364,7 @@ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, + "license": "MIT", "dependencies": { "clone": "^1.0.2" }, @@ -6733,6 +7376,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -6750,6 +7394,7 @@ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -6761,6 +7406,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -6778,6 +7424,7 @@ "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" } @@ -6787,6 +7434,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" @@ -6797,6 +7445,7 @@ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=8" } @@ -6805,19 +7454,22 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/di": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -6827,6 +7479,7 @@ "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "dev": true, + "license": "MIT", "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" }, @@ -6839,6 +7492,7 @@ "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", "dev": true, + "license": "MIT", "dependencies": { "custom-event": "~1.0.0", "ent": "~2.2.0", @@ -6851,6 +7505,7 @@ "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", @@ -6870,13 +7525,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" }, @@ -6888,15 +7545,17 @@ } }, "node_modules/dompurify": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.6.tgz", - "integrity": "sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ==" + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.7.tgz", + "integrity": "sha512-VaTstWtsneJY8xzy7DekmYWEOZcmzIe3Qb3zPd4STve1OBTa+e+WmS1ITQec1fZYXI3HCsOZZiSMpG6oxoWMWQ==", + "license": "(MPL-2.0 OR Apache-2.0)" }, "node_modules/domutils": { "version": "3.1.0", "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", @@ -6909,42 +7568,49 @@ "node_modules/draco3d": { "version": "1.5.7", "resolved": "https://registry.npmjs.org/draco3d/-/draco3d-1.5.7.tgz", - "integrity": "sha512-m6WCKt/erDXcw+70IJXnG7M3awwQPAsZvJGX5zY7beBqpELw6RDGkYVU0W43AFxye4pDZ5i2Lbyc/NNGqwjUVQ==" + "integrity": "sha512-m6WCKt/erDXcw+70IJXnG7M3awwQPAsZvJGX5zY7beBqpELw6RDGkYVU0W43AFxye4pDZ5i2Lbyc/NNGqwjUVQ==", + "license": "Apache-2.0" }, "node_modules/earcut": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/earcut/-/earcut-3.0.0.tgz", - "integrity": "sha512-41Fs7Q/PLq1SDbqjsgcY7GA42T0jvaCNGXgGtsNdvg+Yv8eIu06bxv4/PoREkZ9nMDNwnUSG9OFB9+yv8eKhDg==" + "integrity": "sha512-41Fs7Q/PLq1SDbqjsgcY7GA42T0jvaCNGXgGtsNdvg+Yv8eIu06bxv4/PoREkZ9nMDNwnUSG9OFB9+yv8eKhDg==", + "license": "ISC" }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ee-first": { "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/electron-to-chromium": { - "version": "1.5.25", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.25.tgz", - "integrity": "sha512-kMb204zvK3PsSlgvvwzI3wBIcAw15tRkYk+NQdsjdDtcQWTp2RABbMQ9rUBy8KNEOM+/E6ep+XC3AykiWZld4g==", - "dev": true + "version": "1.5.38", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.38.tgz", + "integrity": "sha512-VbeVexmZ1IFh+5EfrYz1I0HTzHVIlJa112UEWhciPyeOcKJGeTv6N8WnG4wsQB81DGCaVEGhpSb6o6a8WYFXXg==", + "dev": true, + "license": "ISC" }, "node_modules/emoji-regex": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/emojis-list": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -6954,6 +7620,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" } @@ -6963,6 +7630,7 @@ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "iconv-lite": "^0.6.2" @@ -6973,6 +7641,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -6982,17 +7651,18 @@ } }, "node_modules/engine.io": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", - "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.2.tgz", + "integrity": "sha512-gmNvsYi9C8iErnZdVcJnvCpSKbWTt1E8+JZo8b+daLninywUWi5NQ5STSHZ9rFjFO7imNcvb8Pc5pe/wMR5xEw==", "dev": true, + "license": "MIT", "dependencies": { "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "2.0.0", - "cookie": "~0.4.1", + "cookie": "~0.7.2", "cors": "~2.8.5", "debug": "~4.3.1", "engine.io-parser": "~5.2.1", @@ -7007,6 +7677,7 @@ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" } @@ -7016,6 +7687,7 @@ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -7029,6 +7701,7 @@ "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.1.tgz", "integrity": "sha512-QHuXVeZx9d+tIQAz/XztU0ZwZf2Agg9CcXcgE1rurqvdBeDBrpSwjl8/6XUqMg7tw2Y7uAdKb2sRv+bSEFqQ5A==", "dev": true, + "license": "MIT", "dependencies": { "punycode": "^1.4.1" }, @@ -7041,6 +7714,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" }, @@ -7053,6 +7727,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" } @@ -7062,6 +7737,7 @@ "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -7073,13 +7749,15 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/errno": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "prr": "~1.0.1" @@ -7093,6 +7771,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" } @@ -7101,6 +7780,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4" }, @@ -7112,6 +7792,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -7120,7 +7801,8 @@ "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/esbuild": { "version": "0.23.0", @@ -7128,6 +7810,7 @@ "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -7166,6 +7849,7 @@ "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.23.0.tgz", "integrity": "sha512-6jP8UmWy6R6TUUV8bMuC3ZyZ6lZKI56x0tkxyCIqWwRRJ/DgeQKneh/Oid5EoGoPFLrGNkz47ZEtWAYuiY/u9g==", "dev": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -7178,6 +7862,7 @@ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -7186,40 +7871,46 @@ "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": "1.0.5", "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" } }, "node_modules/eslint": { - "version": "9.10.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.10.0.tgz", - "integrity": "sha512-Y4D0IgtBZfOcOUAIQTSXBKoNGfY0REGqHJG6+Q81vNippW5YlKjHFj4soMxamKK1NXHUWuBZTLdU3Km+L/pcHw==", + "version": "9.12.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.12.0.tgz", + "integrity": "sha512-UVIOlTEWxwIopRL1wgSQYdnVDcEvs2wyaO6DGo5mXqe3r16IoCNWkR29iHhyaP4cICWjbgbmFUGAhh0GJRuGZw==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.11.0", "@eslint/config-array": "^0.18.0", + "@eslint/core": "^0.6.0", "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "9.10.0", - "@eslint/plugin-kit": "^0.1.0", + "@eslint/js": "9.12.0", + "@eslint/plugin-kit": "^0.2.0", + "@humanfs/node": "^0.16.5", "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.3.0", - "@nodelib/fs.walk": "^1.2.8", + "@humanwhocodes/retry": "^0.3.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.0.2", - "eslint-visitor-keys": "^4.0.0", - "espree": "^10.1.0", + "eslint-scope": "^8.1.0", + "eslint-visitor-keys": "^4.1.0", + "espree": "^10.2.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -7229,13 +7920,11 @@ "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", "text-table": "^0.2.0" }, "bin": { @@ -7257,10 +7946,11 @@ } }, "node_modules/eslint-scope": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz", - "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.1.0.tgz", + "integrity": "sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -7277,6 +7967,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" }, @@ -7289,6 +7980,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", @@ -7305,6 +7997,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" }, @@ -7320,6 +8013,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" @@ -7336,6 +8030,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" }, @@ -7347,13 +8042,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/eslint/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" }, @@ -7362,10 +8059,11 @@ } }, "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", - "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz", + "integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -7373,23 +8071,12 @@ "url": "https://opencollective.com/eslint" } }, - "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, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/eslint/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -7398,13 +8085,15 @@ "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/eslint/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -7413,14 +8102,15 @@ } }, "node_modules/espree": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", - "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.2.0.tgz", + "integrity": "sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.12.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.0.0" + "eslint-visitor-keys": "^4.1.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -7430,10 +8120,11 @@ } }, "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", - "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz", + "integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -7446,6 +8137,7 @@ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -7458,6 +8150,7 @@ "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" }, @@ -7470,6 +8163,7 @@ "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" } @@ -7479,6 +8173,7 @@ "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" } @@ -7488,6 +8183,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" } @@ -7496,13 +8192,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" } @@ -7512,6 +8210,7 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -7535,6 +8234,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -7549,26 +8249,29 @@ "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/exponential-backoff": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/express": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", - "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", "dev": true, + "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -7600,10 +8303,11 @@ } }, "node_modules/express/node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -7613,6 +8317,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" } @@ -7622,6 +8327,7 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -7631,6 +8337,7 @@ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", @@ -7648,13 +8355,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/express/node_modules/statuses": { "version": "2.0.1", "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" } @@ -7663,13 +8372,15 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, + "license": "MIT", "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -7683,13 +8394,15 @@ "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", @@ -7701,29 +8414,46 @@ "node": ">=8.6.0" } }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fast-json-stable-stringify": { "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-uri": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", - "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", - "dev": true + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.2.tgz", + "integrity": "sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row==", + "dev": true, + "license": "MIT" }, "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -7733,6 +8463,7 @@ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, + "license": "Apache-2.0", "dependencies": { "websocket-driver": ">=0.5.1" }, @@ -7745,6 +8476,7 @@ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, + "license": "MIT", "dependencies": { "flat-cache": "^4.0.0" }, @@ -7757,6 +8489,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" }, @@ -7769,6 +8502,7 @@ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, + "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -7787,6 +8521,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" } @@ -7795,13 +8530,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/finalhandler/node_modules/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", "dev": true, + "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -7814,6 +8551,7 @@ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", "dev": true, + "license": "MIT", "dependencies": { "common-path-prefix": "^3.0.0", "pkg-dir": "^7.0.0" @@ -7830,6 +8568,7 @@ "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" @@ -7846,6 +8585,7 @@ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, + "license": "BSD-3-Clause", "bin": { "flat": "cli.js" } @@ -7855,6 +8595,7 @@ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" @@ -7867,7 +8608,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.9", @@ -7880,6 +8622,7 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -7893,6 +8636,7 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "license": "MIT", "dependencies": { "is-callable": "^1.1.3" } @@ -7902,6 +8646,7 @@ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", "dev": true, + "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -7918,6 +8663,7 @@ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -7927,6 +8673,7 @@ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", "dev": true, + "license": "MIT", "engines": { "node": "*" }, @@ -7940,6 +8687,7 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -7949,6 +8697,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", @@ -7963,6 +8712,7 @@ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^7.0.3" }, @@ -7974,7 +8724,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", @@ -7982,6 +8733,7 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -7994,6 +8746,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -8003,6 +8756,7 @@ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -8012,15 +8766,17 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-east-asian-width": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", - "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", + "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -8032,6 +8788,7 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", @@ -8051,6 +8808,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -8064,6 +8822,7 @@ "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", @@ -8080,28 +8839,31 @@ } }, "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "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.1" + "is-glob": "^4.0.3" }, "engines": { - "node": ">= 6" + "node": ">=10.13.0" } }, "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/globals": { - "version": "15.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz", - "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==", + "version": "15.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.11.0.tgz", + "integrity": "sha512-yeyNSjdbyVaWurlwCpcA6XNBrHTMIeDdj0/hnvX/OLJ9ekOXYbLsLinH/MucQyGvNnXhidTdNhTtJaffL2sMfw==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -8114,6 +8876,7 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", "dev": true, + "license": "MIT", "dependencies": { "@sindresorhus/merge-streams": "^2.1.0", "fast-glob": "^3.3.2", @@ -8133,6 +8896,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -8144,30 +8908,35 @@ "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/grapheme-splitter": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "license": "MIT" }, "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/handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -8176,6 +8945,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -8187,6 +8957,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -8198,6 +8969,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -8209,6 +8981,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -8223,6 +8996,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -8235,6 +9009,7 @@ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^10.0.1" }, @@ -8246,13 +9021,15 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/hpack.js": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "obuf": "^1.0.0", @@ -8265,6 +9042,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", @@ -8279,13 +9057,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/hpack.js/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" } @@ -8304,13 +9084,15 @@ "type": "patreon", "url": "https://patreon.com/mdevils" } - ] + ], + "license": "MIT" }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/htmlparser2": { "version": "8.0.2", @@ -8324,6 +9106,7 @@ "url": "https://github.com/sponsors/fb55" } ], + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", @@ -8335,19 +9118,22 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/http-errors": { "version": "2.0.0", "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", @@ -8364,6 +9150,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" } @@ -8372,13 +9159,15 @@ "version": "0.5.8", "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/http-proxy": { "version": "1.18.1", "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", @@ -8393,6 +9182,7 @@ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -8406,6 +9196,7 @@ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.0.tgz", "integrity": "sha512-36AV1fIaI2cWRzHo+rbcxhe3M3jUDCNzc4D5zRl57sEWRAxdXYtw7FSQKYY6PDKssiAKjLYypbssHk+xs/kMXw==", "dev": true, + "license": "MIT", "dependencies": { "@types/http-proxy": "^1.17.10", "debug": "^4.3.4", @@ -8421,13 +9212,15 @@ "node_modules/https-browserify": { "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==" + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "license": "MIT" }, "node_modules/https-proxy-agent": { "version": "7.0.5", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -8441,6 +9234,7 @@ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } @@ -8450,6 +9244,7 @@ "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.18" } @@ -8459,6 +9254,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" }, @@ -8471,6 +9267,7 @@ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, + "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -8496,13 +9293,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -8512,6 +9311,7 @@ "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz", "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==", "dev": true, + "license": "ISC", "dependencies": { "minimatch": "^9.0.0" }, @@ -8524,6 +9324,7 @@ "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" } @@ -8533,6 +9334,7 @@ "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" }, @@ -8548,6 +9350,7 @@ "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", "dev": true, + "license": "MIT", "optional": true, "bin": { "image-size": "bin/image-size.js" @@ -8560,13 +9363,15 @@ "version": "4.3.7", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -8583,6 +9388,7 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -8592,6 +9398,7 @@ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -8602,6 +9409,7 @@ "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" @@ -8610,13 +9418,15 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" }, "node_modules/ini": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -8626,6 +9436,7 @@ "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", "dev": true, + "license": "MIT", "dependencies": { "jsbn": "1.1.0", "sprintf-js": "^1.1.3" @@ -8639,6 +9450,7 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10" } @@ -8647,6 +9459,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -8662,13 +9475,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-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, + "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -8680,6 +9495,7 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -8692,6 +9508,7 @@ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, + "license": "MIT", "dependencies": { "hasown": "^2.0.2" }, @@ -8707,6 +9524,7 @@ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", "dev": true, + "license": "MIT", "bin": { "is-docker": "cli.js" }, @@ -8722,6 +9540,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" } @@ -8731,6 +9550,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -8742,6 +9562,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -8757,6 +9578,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" }, @@ -8769,6 +9591,7 @@ "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", "dev": true, + "license": "MIT", "dependencies": { "is-docker": "^3.0.0" }, @@ -8787,6 +9610,7 @@ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -8795,12 +9619,14 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-nan": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.0", "define-properties": "^1.1.3" @@ -8817,6 +9643,7 @@ "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" }, @@ -8829,24 +9656,17 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/is-plain-obj": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -8859,6 +9679,7 @@ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, + "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -8871,6 +9692,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -8882,6 +9704,7 @@ "version": "1.1.13", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "license": "MIT", "dependencies": { "which-typed-array": "^1.1.14" }, @@ -8897,6 +9720,7 @@ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -8908,13 +9732,15 @@ "version": "3.14.1", "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-wsl": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", "dev": true, + "license": "MIT", "dependencies": { "is-inside-container": "^1.0.0" }, @@ -8929,13 +9755,15 @@ "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/isbinaryfile": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8.0.0" }, @@ -8947,13 +9775,15 @@ "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/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8963,6 +9793,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=8" } @@ -8972,6 +9803,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.23.9", "@babel/parser": "^7.23.9", @@ -8988,6 +9820,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -9002,6 +9835,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" } @@ -9011,6 +9845,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" }, @@ -9023,6 +9858,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -9037,6 +9873,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" } @@ -9046,6 +9883,7 @@ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -9059,6 +9897,7 @@ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -9073,13 +9912,15 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.2.0.tgz", "integrity": "sha512-tSAtdrvWybZkQmmaIoDgnvHG8ORUNw5kEVlO5CvrXj02Jjr9TZrmjFq7FUiOUzJiOP2wLGYT6PgrQgQF4R1xiw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -9094,6 +9935,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" } @@ -9103,6 +9945,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -9118,6 +9961,7 @@ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", "dev": true, + "license": "MIT", "bin": { "jiti": "bin/jiti.js" } @@ -9126,12 +9970,14 @@ "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": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -9143,12 +9989,14 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jsep": { "version": "1.3.9", "resolved": "https://registry.npmjs.org/jsep/-/jsep-1.3.9.tgz", "integrity": "sha512-i1rBX5N7VPl0eYb6+mHNp52sEuaS2Wi8CDYx1X5sn9naevL78+265XJqy1qENEk7mRKwS06NHpUqiBwR7qeodw==", + "license": "MIT", "engines": { "node": ">= 10.16.0" } @@ -9158,6 +10006,7 @@ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -9169,13 +10018,15 @@ "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-even-better-errors": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", "dev": true, + "license": "MIT", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -9184,19 +10035,22 @@ "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/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/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -9208,13 +10062,15 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, + "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -9226,13 +10082,15 @@ "dev": true, "engines": [ "node >= 0.2.0" - ] + ], + "license": "MIT" }, "node_modules/karma": { "version": "6.4.4", "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.4.tgz", "integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==", "dev": true, + "license": "MIT", "dependencies": { "@colors/colors": "1.5.0", "body-parser": "^1.19.0", @@ -9271,6 +10129,7 @@ "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz", "integrity": "sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==", "dev": true, + "license": "MIT", "dependencies": { "which": "^1.2.1" } @@ -9280,6 +10139,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" }, @@ -9292,6 +10152,7 @@ "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.1.tgz", "integrity": "sha512-yj7hbequkQP2qOSb20GuNSIyE//PgJWHwC2IydLE6XRtsnaflv+/OSGNssPjobYUlhVVagy99TQpqUt3vAUG7A==", "dev": true, + "license": "MIT", "dependencies": { "istanbul-lib-coverage": "^3.2.0", "istanbul-lib-instrument": "^5.1.0", @@ -9309,6 +10170,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -9325,6 +10187,7 @@ "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" } @@ -9334,6 +10197,7 @@ "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz", "integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==", "dev": true, + "license": "MIT", "dependencies": { "jasmine-core": "^4.1.0" }, @@ -9349,6 +10213,7 @@ "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.1.0.tgz", "integrity": "sha512-sPQE1+nlsn6Hwb5t+HHwyy0A1FNCVKuL1192b+XNauMYWThz2kweiBVW1DqloRpVvZIJkIoHVB7XRpK78n1xbQ==", "dev": true, + "license": "MIT", "peerDependencies": { "jasmine-core": "^4.0.0 || ^5.0.0", "karma": "^6.0.0", @@ -9359,13 +10224,15 @@ "version": "4.6.1", "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.6.1.tgz", "integrity": "sha512-VYz/BjjmC3klLJlLwA4Kw8ytk0zDSmbbDLNs794VnWmkcCB7I9aAL/D48VNQtmITyPvea2C3jdUMfc3kAoy0PQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/karma-source-map-support": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", "dev": true, + "license": "MIT", "dependencies": { "source-map-support": "^0.5.5" } @@ -9375,6 +10242,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" }, @@ -9390,6 +10258,7 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -9401,6 +10270,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" }, @@ -9412,19 +10282,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/karma/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/karma/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -9434,6 +10307,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" } @@ -9443,6 +10317,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", @@ -9457,6 +10332,7 @@ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.14" } @@ -9466,6 +10342,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", @@ -9483,6 +10360,7 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -9501,6 +10379,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -9508,13 +10387,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" } @@ -9524,6 +10405,7 @@ "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" } @@ -9531,13 +10413,15 @@ "node_modules/ktx-parse": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/ktx-parse/-/ktx-parse-0.7.1.tgz", - "integrity": "sha512-FeA3g56ksdFNwjXJJsc1CCc7co+AJYDp6ipIp878zZ2bU8kWROatLYf39TQEd4/XRSUvBXovQ8gaVKWPXsCLEQ==" + "integrity": "sha512-FeA3g56ksdFNwjXJJsc1CCc7co+AJYDp6ipIp878zZ2bU8kWROatLYf39TQEd4/XRSUvBXovQ8gaVKWPXsCLEQ==", + "license": "MIT" }, "node_modules/launch-editor": { "version": "2.9.1", "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.9.1.tgz", "integrity": "sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==", "dev": true, + "license": "MIT", "dependencies": { "picocolors": "^1.0.0", "shell-quote": "^1.8.1" @@ -9546,13 +10430,15 @@ "node_modules/lerc": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lerc/-/lerc-2.0.0.tgz", - "integrity": "sha512-7qo1Mq8ZNmaR4USHHm615nEW2lPeeWJ3bTyoqFbd35DLx0LUH7C6ptt5FDCTAlbIzs3+WKrk5SkJvw8AFDE2hg==" + "integrity": "sha512-7qo1Mq8ZNmaR4USHHm615nEW2lPeeWJ3bTyoqFbd35DLx0LUH7C6ptt5FDCTAlbIzs3+WKrk5SkJvw8AFDE2hg==", + "license": "Apache-2.0" }, "node_modules/less": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "copy-anything": "^2.0.1", "parse-node-version": "^1.0.1", @@ -9579,6 +10465,7 @@ "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-12.2.0.tgz", "integrity": "sha512-MYUxjSQSBUQmowc0l5nPieOYwMzGPUaTzB6inNW/bdPEG9zOL3eAAD1Qw5ZxSPk7we5dMojHwNODYMV1hq4EVg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 18.12.0" }, @@ -9605,6 +10492,7 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "pify": "^4.0.1", @@ -9619,6 +10507,7 @@ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, + "license": "MIT", "optional": true, "bin": { "mime": "cli.js" @@ -9632,6 +10521,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", "optional": true, "bin": { "semver": "bin/semver" @@ -9642,6 +10532,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" @@ -9652,6 +10543,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" @@ -9665,6 +10557,7 @@ "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", "dev": true, + "license": "ISC", "dependencies": { "webpack-sources": "^3.0.0" }, @@ -9681,13 +10574,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/listr2": { "version": "8.2.4", "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.4.tgz", "integrity": "sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==", "dev": true, + "license": "MIT", "dependencies": { "cli-truncate": "^4.0.0", "colorette": "^2.0.20", @@ -9705,6 +10600,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -9717,6 +10613,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -9728,13 +10625,15 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/listr2/node_modules/strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -9750,6 +10649,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", @@ -9768,6 +10668,7 @@ "integrity": "sha512-UGe+BbaSUQtAMZobTb4nHvFMrmvuAQKSeaqAX2meTEQjfsbpl5sxdHD8T72OnwD4GU9uwNhYXIVe4QGs8N9Zyw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "dependencies": { "msgpackr": "^1.10.2", "node-addon-api": "^6.1.0", @@ -9792,6 +10693,7 @@ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.11.5" } @@ -9801,6 +10703,7 @@ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 12.13.0" } @@ -9810,6 +10713,7 @@ "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" }, @@ -9824,25 +10728,29 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "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/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -9859,6 +10767,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" }, @@ -9874,6 +10783,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" @@ -9890,6 +10800,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" }, @@ -9901,13 +10812,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/log-symbols/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -9917,6 +10830,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" }, @@ -9929,6 +10843,7 @@ "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^7.0.0", "cli-cursor": "^5.0.0", @@ -9948,6 +10863,7 @@ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", "dev": true, + "license": "MIT", "dependencies": { "environment": "^1.0.0" }, @@ -9963,6 +10879,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -9975,6 +10892,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -9987,6 +10905,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", "dev": true, + "license": "MIT", "dependencies": { "get-east-asian-width": "^1.0.0" }, @@ -10002,6 +10921,7 @@ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", "is-fullwidth-code-point": "^5.0.0" @@ -10018,6 +10938,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" }, @@ -10033,6 +10954,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", @@ -10050,6 +10972,7 @@ "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", "dev": true, + "license": "Apache-2.0", "dependencies": { "date-format": "^4.0.14", "debug": "^4.3.4", @@ -10064,13 +10987,15 @@ "node_modules/long": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", + "license": "Apache-2.0" }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } @@ -10080,6 +11005,7 @@ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } @@ -10089,6 +11015,7 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -10103,13 +11030,15 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/make-fetch-happen": { "version": "13.0.1", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/agent": "^2.0.0", "cacache": "^18.0.0", @@ -10131,22 +11060,25 @@ "node_modules/material-icons": { "version": "1.13.12", "resolved": "https://registry.npmjs.org/material-icons/-/material-icons-1.13.12.tgz", - "integrity": "sha512-/2YoaB79IjUK2B2JB+vIXXYGtBfHb/XG66LvoKVM5ykHW7yfrV5SP6d7KLX6iijY6/G9GqwgtPQ/sbhFnOURVA==" + "integrity": "sha512-/2YoaB79IjUK2B2JB+vIXXYGtBfHb/XG66LvoKVM5ykHW7yfrV5SP6d7KLX6iijY6/G9GqwgtPQ/sbhFnOURVA==", + "license": "Apache-2.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" } }, "node_modules/memfs": { - "version": "4.11.2", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.11.2.tgz", - "integrity": "sha512-VcR7lEtgQgv7AxGkrNNeUAimFLT+Ov8uGu1LuOfbe/iF/dKoh/QgpoaMZlhfejvLtMxtXYyeoT7Ar1jEbWdbPA==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.14.0.tgz", + "integrity": "sha512-JUeY0F/fQZgIod31Ja1eJgiSxLn7BfQlCnqhwXFBzFHEw63OdLK7VJUJ7bnzNsWgCyoUP5tEp1VRY8rDaYzqOA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@jsonjoy.com/json-pack": "^1.0.3", "@jsonjoy.com/util": "^1.3.0", @@ -10166,6 +11098,7 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/sindresorhus" } @@ -10174,13 +11107,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -10188,18 +11123,21 @@ "node_modules/mersenne-twister": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/mersenne-twister/-/mersenne-twister-1.1.0.tgz", - "integrity": "sha512-mUYWsMKNrm4lfygPkL3OfGzOPTR2DBlTkBNHM//F6hGp8cLThY897crAlk3/Jo17LEOOjQUrNAx6DvgO77QJkA==" + "integrity": "sha512-mUYWsMKNrm4lfygPkL3OfGzOPTR2DBlTkBNHM//F6hGp8cLThY897crAlk3/Jo17LEOOjQUrNAx6DvgO77QJkA==", + "license": "MIT" }, "node_modules/meshoptimizer": { "version": "0.21.0", "resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-0.21.0.tgz", - "integrity": "sha512-WabtlpnK/GgD0GMwYd1fBTfYHf4MIcQPEg6dt7y4GuDcY51RzLSkSNE8ZogD7U3Vs2/fIf4z89TOLpA80EOnhg==" + "integrity": "sha512-WabtlpnK/GgD0GMwYd1fBTfYHf4MIcQPEg6dt7y4GuDcY51RzLSkSNE8ZogD7U3Vs2/fIf4z89TOLpA80EOnhg==", + "license": "MIT" }, "node_modules/methods": { "version": "1.1.2", "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" } @@ -10209,6 +11147,7 @@ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -10222,6 +11161,7 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -10234,6 +11174,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" }, @@ -10246,6 +11187,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" } @@ -10255,6 +11197,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" }, @@ -10267,6 +11210,7 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -10276,6 +11220,7 @@ "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -10288,6 +11233,7 @@ "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz", "integrity": "sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==", "dev": true, + "license": "MIT", "dependencies": { "schema-utils": "^4.0.0", "tapable": "^2.2.1" @@ -10307,13 +11253,15 @@ "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/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" }, @@ -10326,6 +11274,7 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -10335,6 +11284,7 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } @@ -10344,6 +11294,7 @@ "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^7.0.3" }, @@ -10356,6 +11307,7 @@ "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", "dev": true, + "license": "MIT", "dependencies": { "minipass": "^7.0.3", "minipass-sized": "^1.0.3", @@ -10373,6 +11325,7 @@ "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -10385,6 +11338,7 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -10396,13 +11350,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/minipass-pipeline": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -10415,6 +11371,7 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -10426,13 +11383,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/minipass-sized": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -10445,6 +11404,7 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -10456,13 +11416,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/minizlib": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, + "license": "MIT", "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -10476,6 +11438,7 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -10487,13 +11450,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.6" }, @@ -10506,6 +11471,7 @@ "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -10514,13 +11480,15 @@ "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/msgpackr": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.0.tgz", "integrity": "sha512-I8qXuuALqJe5laEBYoFykChhSXLikZmUhccjGsPuSJ/7uPip2TJ7lwdIQwWSAi0jGZDXv4WOP8Qg65QZRuXxXw==", "dev": true, + "license": "MIT", "optionalDependencies": { "msgpackr-extract": "^3.0.2" } @@ -10531,6 +11499,7 @@ "integrity": "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "dependencies": { "node-gyp-build-optional-packages": "5.2.2" @@ -10552,6 +11521,7 @@ "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "dev": true, + "license": "MIT", "dependencies": { "dns-packet": "^5.2.2", "thunky": "^1.0.2" @@ -10565,6 +11535,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" } @@ -10580,6 +11551,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -10591,13 +11563,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/needle": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "iconv-lite": "^0.6.3", @@ -10615,6 +11589,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -10628,6 +11603,7 @@ "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" } @@ -10636,7 +11612,8 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/nice-napi": { "version": "1.0.2", @@ -10644,6 +11621,7 @@ "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "!win32" @@ -10658,19 +11636,22 @@ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/node-addon-api": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-forge": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", "engines": { "node": ">= 6.13.0" } @@ -10680,6 +11661,7 @@ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.2.0.tgz", "integrity": "sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw==", "dev": true, + "license": "MIT", "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", @@ -10704,6 +11686,7 @@ "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.2.tgz", "integrity": "sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==", "dev": true, + "license": "MIT", "optional": true, "bin": { "node-gyp-build": "bin.js", @@ -10716,6 +11699,7 @@ "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz", "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==", "dev": true, + "license": "MIT", "dependencies": { "detect-libc": "^2.0.1" }, @@ -10730,6 +11714,7 @@ "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" } @@ -10739,6 +11724,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -10759,6 +11745,7 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=16" } @@ -10768,6 +11755,7 @@ "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" }, @@ -10783,6 +11771,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^3.1.1" }, @@ -10797,13 +11786,15 @@ "version": "2.0.18", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/nopt": { "version": "7.2.1", "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", "dev": true, + "license": "ISC", "dependencies": { "abbrev": "^2.0.0" }, @@ -10819,6 +11810,7 @@ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^7.0.0", "semver": "^7.3.5", @@ -10833,6 +11825,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" } @@ -10842,6 +11835,7 @@ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -10849,13 +11843,15 @@ "node_modules/nosleep.js": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/nosleep.js/-/nosleep.js-0.12.0.tgz", - "integrity": "sha512-9d1HbpKLh3sdWlhXMhU6MMH+wQzKkrgfRkYV0EBdvt99YJfj0ilCJrWRDYG2130Tm4GXbEoTCx5b34JSaP+HhA==" + "integrity": "sha512-9d1HbpKLh3sdWlhXMhU6MMH+wQzKkrgfRkYV0EBdvt99YJfj0ilCJrWRDYG2130Tm4GXbEoTCx5b34JSaP+HhA==", + "license": "MIT" }, "node_modules/npm-bundled": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz", "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==", "dev": true, + "license": "ISC", "dependencies": { "npm-normalize-package-bin": "^3.0.0" }, @@ -10868,6 +11864,7 @@ "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "semver": "^7.1.1" }, @@ -10880,6 +11877,7 @@ "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -10889,6 +11887,7 @@ "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.3.tgz", "integrity": "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==", "dev": true, + "license": "ISC", "dependencies": { "hosted-git-info": "^7.0.0", "proc-log": "^4.0.0", @@ -10904,6 +11903,7 @@ "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==", "dev": true, + "license": "ISC", "dependencies": { "ignore-walk": "^6.0.4" }, @@ -10916,6 +11916,7 @@ "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.1.0.tgz", "integrity": "sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==", "dev": true, + "license": "ISC", "dependencies": { "npm-install-checks": "^6.0.0", "npm-normalize-package-bin": "^3.0.0", @@ -10931,6 +11932,7 @@ "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-17.1.0.tgz", "integrity": "sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/redact": "^2.0.0", "jsonparse": "^1.3.1", @@ -10950,6 +11952,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -10962,6 +11965,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" }, @@ -10974,6 +11978,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" } @@ -10982,6 +11987,7 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -10993,6 +11999,7 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1" @@ -11008,6 +12015,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -11016,6 +12024,7 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -11033,13 +12042,15 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/on-finished": { "version": "2.4.1", "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" }, @@ -11052,6 +12063,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" } @@ -11061,6 +12073,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" } @@ -11070,6 +12083,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-function": "^5.0.0" }, @@ -11085,6 +12099,7 @@ "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", "dev": true, + "license": "MIT", "dependencies": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", @@ -11103,6 +12118,7 @@ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, + "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -11120,6 +12136,7 @@ "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, + "license": "MIT", "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", @@ -11143,6 +12160,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" }, @@ -11158,6 +12176,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" @@ -11174,6 +12193,7 @@ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, + "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -11186,6 +12206,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" }, @@ -11197,13 +12218,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/ora/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -11213,6 +12236,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -11228,6 +12252,7 @@ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, + "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -11240,13 +12265,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/ora/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -11255,16 +12282,18 @@ } }, "node_modules/ordered-binary": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.5.1.tgz", - "integrity": "sha512-5VyHfHY3cd0iza71JepYG50My+YUbrFtGoUz2ooEydPyPM7Aai/JW098juLr+RG6+rDJuzNNTsEQu2DZa1A41A==", - "dev": true + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.5.2.tgz", + "integrity": "sha512-JTo+4+4Fw7FreyAvlSLjb1BBVaxEQAacmjD3jjuyPZclpbEghTvQZbXBb2qPd2LeIMxiHwXBZUcpmG2Gl/mDEA==", + "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" } @@ -11274,6 +12303,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" }, @@ -11289,6 +12319,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" }, @@ -11304,6 +12335,7 @@ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, + "license": "MIT", "dependencies": { "aggregate-error": "^3.0.0" }, @@ -11319,6 +12351,7 @@ "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.0.tgz", "integrity": "sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==", "dev": true, + "license": "MIT", "dependencies": { "@types/retry": "0.12.2", "is-network-error": "^1.0.0", @@ -11336,21 +12369,24 @@ "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/package-json-from-dist": { - "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 + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" }, "node_modules/pacote": { "version": "18.0.6", "resolved": "https://registry.npmjs.org/pacote/-/pacote-18.0.6.tgz", "integrity": "sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/git": "^5.0.0", "@npmcli/installed-package-contents": "^2.0.1", @@ -11380,13 +12416,15 @@ "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "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" }, @@ -11399,6 +12437,7 @@ "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", @@ -11416,24 +12455,27 @@ "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/parse-node-version": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.0.tgz", + "integrity": "sha512-ZkDsAOcxsUMZ4Lz5fVciOehNcJ+Gb8gTzcA4yl3wnc273BAybYWrQ+Ks/OjCjSEpjvQkDSeZbybK9qj2VHHdGA==", "dev": true, + "license": "MIT", "dependencies": { - "entities": "^4.4.0" + "entities": "^4.5.0" }, "funding": { "url": "https://github.com/inikulin/parse5?sponsor=1" @@ -11444,6 +12486,7 @@ "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz", "integrity": "sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==", "dev": true, + "license": "MIT", "dependencies": { "entities": "^4.3.0", "parse5": "^7.0.0", @@ -11458,6 +12501,7 @@ "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", "integrity": "sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==", "dev": true, + "license": "MIT", "dependencies": { "parse5": "^7.0.0" }, @@ -11470,6 +12514,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" } @@ -11479,6 +12524,7 @@ "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" } @@ -11488,6 +12534,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" } @@ -11497,6 +12544,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" } @@ -11505,13 +12553,15 @@ "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-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -11527,19 +12577,22 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/path-to-regexp": { "version": "0.1.10", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", - "dev": true + "dev": true, + "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==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -11551,13 +12604,15 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -11570,6 +12625,7 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=6" @@ -11580,6 +12636,7 @@ "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.6.1.tgz", "integrity": "sha512-z30AwWGtQE+Apr+2WBZensP2lIvwoaMcOPkQlIEmSGMJNUvaYACylPYrQM6wSdUNJlnDVMSpLv7xTMJqlVshOA==", "dev": true, + "license": "MIT", "optionalDependencies": { "nice-napi": "^1.0.2" } @@ -11589,6 +12646,7 @@ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^6.3.0" }, @@ -11604,6 +12662,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^7.1.0", "path-exists": "^5.0.0" @@ -11620,6 +12679,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^6.0.0" }, @@ -11635,6 +12695,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^1.0.0" }, @@ -11650,6 +12711,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^4.0.0" }, @@ -11665,6 +12727,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } @@ -11674,6 +12737,7 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.20" }, @@ -11685,6 +12749,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -11708,6 +12773,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.1", @@ -11722,6 +12788,7 @@ "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.1.1.tgz", "integrity": "sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==", "dev": true, + "license": "MIT", "dependencies": { "cosmiconfig": "^9.0.0", "jiti": "^1.20.0", @@ -11752,13 +12819,15 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/postcss-modules-extract-imports": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", "dev": true, + "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -11771,6 +12840,7 @@ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", "dev": true, + "license": "MIT", "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", @@ -11788,6 +12858,7 @@ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", "dev": true, + "license": "ISC", "dependencies": { "postcss-selector-parser": "^6.0.4" }, @@ -11803,6 +12874,7 @@ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, + "license": "ISC", "dependencies": { "icss-utils": "^5.0.0" }, @@ -11818,6 +12890,7 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dev": true, + "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -11830,13 +12903,15 @@ "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/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" } @@ -11844,7 +12919,8 @@ "node_modules/primeicons": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/primeicons/-/primeicons-7.0.0.tgz", - "integrity": "sha512-jK3Et9UzwzTsd6tzl2RmwrVY/b8raJ3QZLzoDACj+oTJ0oX7L9Hy+XnVwgo4QVKlKpnP/Ur13SXV/pVh4LzaDw==" + "integrity": "sha512-jK3Et9UzwzTsd6tzl2RmwrVY/b8raJ3QZLzoDACj+oTJ0oX7L9Hy+XnVwgo4QVKlKpnP/Ur13SXV/pVh4LzaDw==", + "license": "MIT" }, "node_modules/primeng": { "version": "17.18.9", @@ -11867,6 +12943,7 @@ "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -11875,19 +12952,22 @@ "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/promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/promise-retry": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, + "license": "MIT", "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" @@ -11901,6 +12981,7 @@ "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", "hasInstallScript": true, + "license": "BSD-3-Clause", "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -11924,6 +13005,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" @@ -11937,6 +13019,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" } @@ -11946,18 +13029,21 @@ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "license": "MIT" }, "node_modules/qjobs": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.9" } @@ -11966,6 +13052,7 @@ "version": "6.13.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.6" }, @@ -11994,18 +13081,21 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/quickselect": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-3.0.0.tgz", - "integrity": "sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==" + "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" } @@ -12015,6 +13105,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" } @@ -12024,6 +13115,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", @@ -12038,6 +13130,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/rbush/-/rbush-4.0.1.tgz", "integrity": "sha512-IP0UpfeWQujYC8Jg162rMNc01Rf0gWMMAb2Uxus/Q0qOFw4lCcq6ZnQEZwUoJqWyUGJ9th7JjwI4yIWo+uvoAQ==", + "license": "MIT", "dependencies": { "quickselect": "^3.0.0" } @@ -12046,6 +13139,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -12060,6 +13154,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" }, @@ -12072,6 +13167,7 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -12083,19 +13179,22 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/regenerate-unicode-properties": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", "dev": true, + "license": "MIT", "dependencies": { "regenerate": "^1.4.2" }, @@ -12107,13 +13206,15 @@ "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/regenerator-transform": { "version": "0.15.2", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.8.4" } @@ -12122,18 +13223,20 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.0.tgz", "integrity": "sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz", + "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.11.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" }, @@ -12141,25 +13244,37 @@ "node": ">=4" } }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true, + "license": "MIT" + }, "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.1.tgz", + "integrity": "sha512-1DHODs4B8p/mQHU9kr+jv8+wIC9mtG4eBHxWxIq5mhjE3D5oORhCc6deRKzTjs9DcfRFmj9BHSDguZklqCGFWQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "jsesc": "~0.5.0" + "jsesc": "~3.0.2" }, "bin": { "regjsparser": "bin/parser" } }, "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" } }, "node_modules/require-directory": { @@ -12167,6 +13282,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" } @@ -12176,6 +13292,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" } @@ -12184,13 +13301,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", @@ -12208,6 +13327,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" } @@ -12217,6 +13337,7 @@ "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", "dev": true, + "license": "MIT", "dependencies": { "adjust-sourcemap-loader": "^4.0.0", "convert-source-map": "^1.7.0", @@ -12233,6 +13354,7 @@ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, + "license": "MIT", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -12247,6 +13369,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" } @@ -12256,6 +13379,7 @@ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "dev": true, + "license": "MIT", "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" @@ -12272,6 +13396,7 @@ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -12281,6 +13406,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" @@ -12290,7 +13416,8 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/rimraf": { "version": "3.0.2", @@ -12298,6 +13425,7 @@ "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" }, @@ -12309,10 +13437,11 @@ } }, "node_modules/rollup": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.20.0.tgz", - "integrity": "sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz", + "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "1.0.5" }, @@ -12324,30 +13453,38 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.20.0", - "@rollup/rollup-android-arm64": "4.20.0", - "@rollup/rollup-darwin-arm64": "4.20.0", - "@rollup/rollup-darwin-x64": "4.20.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.20.0", - "@rollup/rollup-linux-arm-musleabihf": "4.20.0", - "@rollup/rollup-linux-arm64-gnu": "4.20.0", - "@rollup/rollup-linux-arm64-musl": "4.20.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.20.0", - "@rollup/rollup-linux-riscv64-gnu": "4.20.0", - "@rollup/rollup-linux-s390x-gnu": "4.20.0", - "@rollup/rollup-linux-x64-gnu": "4.20.0", - "@rollup/rollup-linux-x64-musl": "4.20.0", - "@rollup/rollup-win32-arm64-msvc": "4.20.0", - "@rollup/rollup-win32-ia32-msvc": "4.20.0", - "@rollup/rollup-win32-x64-msvc": "4.20.0", + "@rollup/rollup-android-arm-eabi": "4.22.4", + "@rollup/rollup-android-arm64": "4.22.4", + "@rollup/rollup-darwin-arm64": "4.22.4", + "@rollup/rollup-darwin-x64": "4.22.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.22.4", + "@rollup/rollup-linux-arm-musleabihf": "4.22.4", + "@rollup/rollup-linux-arm64-gnu": "4.22.4", + "@rollup/rollup-linux-arm64-musl": "4.22.4", + "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4", + "@rollup/rollup-linux-riscv64-gnu": "4.22.4", + "@rollup/rollup-linux-s390x-gnu": "4.22.4", + "@rollup/rollup-linux-x64-gnu": "4.22.4", + "@rollup/rollup-linux-x64-musl": "4.22.4", + "@rollup/rollup-win32-arm64-msvc": "4.22.4", + "@rollup/rollup-win32-ia32-msvc": "4.22.4", + "@rollup/rollup-win32-x64-msvc": "4.22.4", "fsevents": "~2.3.2" } }, + "node_modules/rollup/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, + "license": "MIT" + }, "node_modules/run-applescript": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -12374,6 +13511,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } @@ -12382,6 +13520,7 @@ "version": "7.8.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" } @@ -12403,19 +13542,22 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/safer-buffer": { "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/sass": { "version": "1.77.6", "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz", "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==", "dev": true, + "license": "MIT", "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -12433,6 +13575,7 @@ "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.0.tgz", "integrity": "sha512-n13Z+3rU9A177dk4888czcVFiC8CL9dii4qpXWUg3YIIgZEvi9TCFKjOQcbK0kJM7DJu9VucrZFddvNfYCPwtw==", "dev": true, + "license": "MIT", "dependencies": { "neo-async": "^2.6.2" }, @@ -12473,6 +13616,7 @@ "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", "dev": true, + "license": "ISC", "optional": true }, "node_modules/schema-utils": { @@ -12480,6 +13624,7 @@ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dev": true, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -12499,6 +13644,7 @@ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^8.0.0" }, @@ -12515,13 +13661,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/selfsigned": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/node-forge": "^1.3.0", "node-forge": "^1" @@ -12535,6 +13683,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -12547,6 +13696,7 @@ "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dev": true, + "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -12571,6 +13721,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" } @@ -12579,13 +13730,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/send/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" }, @@ -12598,6 +13751,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" } @@ -12607,6 +13761,7 @@ "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" } @@ -12616,6 +13771,7 @@ "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "dev": true, + "license": "MIT", "dependencies": { "accepts": "~1.3.4", "batch": "0.6.1", @@ -12634,6 +13790,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" } @@ -12643,6 +13800,7 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -12652,6 +13810,7 @@ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dev": true, + "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -12666,25 +13825,29 @@ "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/serve-index/node_modules/ms": { "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/serve-index/node_modules/setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/serve-static": { "version": "1.16.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dev": true, + "license": "MIT", "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", @@ -12700,6 +13863,7 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -12708,6 +13872,7 @@ "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==", + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -12724,13 +13889,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/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, + "license": "MIT", "dependencies": { "kind-of": "^6.0.2" }, @@ -12743,6 +13910,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" }, @@ -12755,6 +13923,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" } @@ -12764,6 +13933,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" } @@ -12772,6 +13942,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -12790,6 +13961,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" }, @@ -12802,6 +13974,7 @@ "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.1.tgz", "integrity": "sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@sigstore/bundle": "^2.3.2", "@sigstore/core": "^1.0.0", @@ -12819,6 +13992,7 @@ "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" }, @@ -12831,6 +14005,7 @@ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.0.0", "is-fullwidth-code-point": "^4.0.0" @@ -12847,6 +14022,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -12859,22 +14035,24 @@ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" } }, "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==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.0.tgz", + "integrity": "sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA==", "dev": true, + "license": "MIT", "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", "cors": "~2.8.5", "debug": "~4.3.2", - "engine.io": "~6.5.2", + "engine.io": "~6.6.0", "socket.io-adapter": "~2.5.2", "socket.io-parser": "~4.2.4" }, @@ -12887,6 +14065,7 @@ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "~4.3.4", "ws": "~8.17.1" @@ -12897,6 +14076,7 @@ "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" @@ -12910,6 +14090,7 @@ "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, + "license": "MIT", "dependencies": { "faye-websocket": "^0.11.3", "uuid": "^8.3.2", @@ -12921,6 +14102,7 @@ "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", "dev": true, + "license": "MIT", "dependencies": { "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" @@ -12935,6 +14117,7 @@ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.1.1", "debug": "^4.3.4", @@ -12949,6 +14132,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">= 8" } @@ -12958,6 +14142,7 @@ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -12967,6 +14152,7 @@ "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz", "integrity": "sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==", "dev": true, + "license": "MIT", "dependencies": { "iconv-lite": "^0.6.3", "source-map-js": "^1.0.2" @@ -12987,6 +14173,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -12999,6 +14186,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" @@ -13009,6 +14197,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" } @@ -13018,6 +14207,7 @@ "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" @@ -13027,13 +14217,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": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, + "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -13043,13 +14235,15 @@ "version": "3.0.20", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", - "dev": true + "dev": true, + "license": "CC0-1.0" }, "node_modules/spdy": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.0", "handle-thing": "^2.0.0", @@ -13066,6 +14260,7 @@ "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.0", "detect-node": "^2.0.4", @@ -13079,13 +14274,15 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/ssri": { "version": "10.0.6", "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^7.0.3" }, @@ -13098,6 +14295,7 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -13106,6 +14304,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "license": "MIT", "dependencies": { "inherits": "~2.0.4", "readable-stream": "^3.5.0" @@ -13115,6 +14314,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", + "license": "MIT", "dependencies": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.4", @@ -13127,6 +14327,7 @@ "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", "dev": true, + "license": "MIT", "dependencies": { "date-format": "^4.0.14", "debug": "^4.3.4", @@ -13140,6 +14341,7 @@ "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==", + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } @@ -13149,6 +14351,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", @@ -13167,6 +14370,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", @@ -13180,13 +14384,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/string-width-cjs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -13196,6 +14402,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -13208,6 +14415,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" }, @@ -13223,6 +14431,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" }, @@ -13236,6 +14445,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" }, @@ -13248,6 +14458,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" } @@ -13257,6 +14468,7 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -13266,6 +14478,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" }, @@ -13276,13 +14489,15 @@ "node_modules/style-mod": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz", - "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==" + "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==", + "license": "MIT" }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -13295,6 +14510,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" }, @@ -13307,6 +14523,7 @@ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10" } @@ -13316,6 +14533,7 @@ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -13325,6 +14543,7 @@ "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dev": true, + "license": "ISC", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -13342,6 +14561,7 @@ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -13354,6 +14574,7 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -13366,6 +14587,7 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=8" } @@ -13375,6 +14597,7 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, + "license": "MIT", "bin": { "mkdirp": "bin/cmd.js" }, @@ -13386,13 +14609,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/terser": { "version": "5.31.6", "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz", "integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -13411,6 +14636,7 @@ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", @@ -13445,6 +14671,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", @@ -13461,6 +14688,7 @@ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, + "license": "MIT", "peerDependencies": { "ajv": "^6.9.1" } @@ -13469,13 +14697,15 @@ "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/terser-webpack-plugin/node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -13493,13 +14723,15 @@ "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/thingies": { "version": "1.21.0", "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", "dev": true, + "license": "Unlicense", "engines": { "node": ">=10.18" }, @@ -13511,13 +14743,15 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/tmp": { "version": "0.0.33", "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" }, @@ -13530,6 +14764,7 @@ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -13539,6 +14774,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" }, @@ -13551,6 +14787,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" } @@ -13559,6 +14796,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz", "integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==", + "license": "ISC", "dependencies": { "commander": "2" }, @@ -13573,6 +14811,7 @@ "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz", "integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.0" }, @@ -13589,6 +14828,7 @@ "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true, + "license": "MIT", "bin": { "tree-kill": "cli.js" } @@ -13598,6 +14838,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" }, @@ -13610,6 +14851,7 @@ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, + "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -13653,6 +14895,7 @@ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", "dev": true, + "license": "MIT", "dependencies": { "json5": "^2.2.2", "minimist": "^1.2.6", @@ -13665,13 +14908,15 @@ "node_modules/tslib": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" }, "node_modules/tuf-js": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz", "integrity": "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==", "dev": true, + "license": "MIT", "dependencies": { "@tufjs/models": "2.0.1", "debug": "^4.3.4", @@ -13686,6 +14931,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" }, @@ -13698,6 +14944,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" }, @@ -13710,6 +14957,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" @@ -13722,13 +14970,15 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/typescript": { "version": "5.5.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -13756,6 +15006,7 @@ "url": "https://github.com/sponsors/faisalman" } ], + "license": "MIT", "bin": { "ua-parser-js": "script/cli.js" }, @@ -13766,13 +15017,15 @@ "node_modules/undici-types": { "version": "6.19.8", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -13782,6 +15035,7 @@ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, + "license": "MIT", "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" @@ -13795,6 +15049,7 @@ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -13804,6 +15059,7 @@ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -13813,6 +15069,7 @@ "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" }, @@ -13825,6 +15082,7 @@ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", "dev": true, + "license": "ISC", "dependencies": { "unique-slug": "^4.0.0" }, @@ -13837,6 +15095,7 @@ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4" }, @@ -13849,6 +15108,7 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.0.0" } @@ -13858,14 +15118,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.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", "dev": true, "funding": [ { @@ -13881,9 +15142,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "escalade": "^3.2.0", + "picocolors": "^1.1.0" }, "bin": { "update-browserslist-db": "cli.js" @@ -13897,6 +15159,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" } @@ -13906,6 +15169,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" } @@ -13913,12 +15177,14 @@ "node_modules/urijs": { "version": "1.19.11", "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", - "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==" + "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==", + "license": "MIT" }, "node_modules/url": { "version": "0.11.4", "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", + "license": "MIT", "dependencies": { "punycode": "^1.4.1", "qs": "^6.12.3" @@ -13931,6 +15197,7 @@ "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", @@ -13942,13 +15209,15 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" }, "node_modules/utils-merge": { "version": "1.0.1", "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" } @@ -13958,6 +15227,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" } @@ -13966,13 +15236,15 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, + "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -13983,6 +15255,7 @@ "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -13992,6 +15265,7 @@ "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" } @@ -14001,6 +15275,7 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.6.tgz", "integrity": "sha512-IeL5f8OO5nylsgzd9tq4qD2QqI0k2CQLGrWD0rCN0EQJZpBK5vJAx0I+GDkMOXxQX/OfFHMuLIx6ddAxGX/k+Q==", "dev": true, + "license": "MIT", "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", @@ -14063,6 +15338,7 @@ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "aix" @@ -14079,6 +15355,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -14095,6 +15372,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -14111,6 +15389,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -14127,6 +15406,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -14143,6 +15423,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -14159,6 +15440,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -14175,6 +15457,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -14191,6 +15474,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -14207,6 +15491,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -14223,6 +15508,7 @@ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -14239,6 +15525,7 @@ "loong64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -14255,6 +15542,7 @@ "mips64el" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -14271,6 +15559,7 @@ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -14287,6 +15576,7 @@ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -14303,6 +15593,7 @@ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -14319,6 +15610,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -14335,6 +15627,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "netbsd" @@ -14351,6 +15644,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -14367,6 +15661,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "sunos" @@ -14383,6 +15678,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -14399,6 +15695,7 @@ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -14415,6 +15712,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -14429,6 +15727,7 @@ "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -14480,6 +15779,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.1.0", @@ -14494,6 +15794,7 @@ "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -14501,13 +15802,15 @@ "node_modules/w3c-keyname": { "version": "2.2.8", "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", - "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==" + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", + "license": "MIT" }, "node_modules/watchpack": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", "dev": true, + "license": "MIT", "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -14521,6 +15824,7 @@ "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, + "license": "MIT", "dependencies": { "minimalistic-assert": "^1.0.0" } @@ -14530,6 +15834,7 @@ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, + "license": "MIT", "dependencies": { "defaults": "^1.0.3" } @@ -14538,13 +15843,15 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/webpack": { "version": "5.94.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "^1.0.5", "@webassemblyjs/ast": "^1.12.1", @@ -14591,6 +15898,7 @@ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz", "integrity": "sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==", "dev": true, + "license": "MIT", "dependencies": { "colorette": "^2.0.10", "memfs": "^4.6.0", @@ -14620,6 +15928,7 @@ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz", "integrity": "sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA==", "dev": true, + "license": "MIT", "dependencies": { "@types/bonjour": "^3.5.13", "@types/connect-history-api-fallback": "^1.5.4", @@ -14679,6 +15988,7 @@ "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" } @@ -14688,6 +15998,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -14704,10 +16015,11 @@ } }, "node_modules/webpack-dev-server/node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", + "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", "dev": true, + "license": "MIT", "dependencies": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", @@ -14732,6 +16044,7 @@ "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" }, @@ -14747,6 +16060,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", "dev": true, + "license": "ISC", "dependencies": { "glob": "^10.3.7" }, @@ -14762,6 +16076,7 @@ "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", "dev": true, + "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", "flat": "^5.0.2", @@ -14776,6 +16091,7 @@ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.13.0" } @@ -14785,6 +16101,7 @@ "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", "dev": true, + "license": "MIT", "dependencies": { "typed-assert": "^1.0.8" }, @@ -14806,6 +16123,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", @@ -14822,6 +16140,7 @@ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, + "license": "MIT", "peerDependencies": { "ajv": "^6.9.1" } @@ -14831,6 +16150,7 @@ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -14844,6 +16164,7 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -14852,19 +16173,22 @@ "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/webpack/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/webpack/node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -14883,6 +16207,7 @@ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", @@ -14897,6 +16222,7 @@ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=0.8.0" } @@ -14906,6 +16232,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" }, @@ -14920,6 +16247,7 @@ "version": "1.1.15", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", @@ -14938,13 +16266,15 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/word-wrap": { "version": "1.2.5", "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" } @@ -14954,6 +16284,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", @@ -14969,6 +16300,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", @@ -14986,6 +16318,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" }, @@ -15001,6 +16334,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" }, @@ -15012,19 +16346,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/wrap-ansi-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -15034,6 +16371,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", @@ -15048,6 +16386,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" }, @@ -15063,6 +16402,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" }, @@ -15074,19 +16414,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/wrap-ansi/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/wrap-ansi/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -15096,6 +16439,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", @@ -15109,13 +16453,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/ws": { "version": "8.17.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -15136,6 +16482,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", "engines": { "node": ">=0.4" } @@ -15145,6 +16492,7 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -15153,13 +16501,15 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yargs": { "version": "17.7.2", "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", @@ -15178,6 +16528,7 @@ "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" } @@ -15186,13 +16537,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/yargs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -15202,6 +16555,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", @@ -15216,6 +16570,7 @@ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -15225,6 +16580,7 @@ "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" }, @@ -15237,6 +16593,7 @@ "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -15247,7 +16604,8 @@ "node_modules/zone.js": { "version": "0.14.10", "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.10.tgz", - "integrity": "sha512-YGAhaO7J5ywOXW6InXNlLmfU194F8lVgu7bRntUF3TiG8Y3nBK0x1UJJuHUP/e8IyihkjCYqhCScpSwnlaSRkQ==" + "integrity": "sha512-YGAhaO7J5ywOXW6InXNlLmfU194F8lVgu7bRntUF3TiG8Y3nBK0x1UJJuHUP/e8IyihkjCYqhCScpSwnlaSRkQ==", + "license": "MIT" } } } diff --git a/package.json b/package.json index e71e519e..711daa07 100644 --- a/package.json +++ b/package.json @@ -23,8 +23,8 @@ "@codemirror/lang-yaml": "^6.1.1", "@codemirror/lint": "^6.8.1", "@codemirror/view": "^6.32.0", - "@ngx-formly/core": "^6.3.6", - "@ngx-formly/primeng": "^6.3.6", + "@ngx-formly/core": "^6.3.8", + "@ngx-formly/primeng": "^6.3.8", "assert": "^2.1.0", "browserify-zlib": "^0.2.0", "cesium": "1.120.0", From 484c6695154c04b1b0e280137aa9485c85986adc Mon Sep 17 00:00:00 2001 From: Joseph Birkner Date: Thu, 17 Oct 2024 14:49:45 +0200 Subject: [PATCH 04/38] Upgrade formly to 6.3.9 --- package-lock.json | 9 ++++----- package.json | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3fe27ad5..d467c965 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "@codemirror/lang-yaml": "^6.1.1", "@codemirror/lint": "^6.8.1", "@codemirror/view": "^6.32.0", - "@ngx-formly/core": "^6.3.8", + "@ngx-formly/core": "^6.3.9", "@ngx-formly/primeng": "^6.3.8", "assert": "^2.1.0", "browserify-zlib": "^0.2.0", @@ -4117,10 +4117,9 @@ } }, "node_modules/@ngx-formly/core": { - "version": "6.3.8", - "resolved": "https://registry.npmjs.org/@ngx-formly/core/-/core-6.3.8.tgz", - "integrity": "sha512-VPHQLf17z2bqFzbX4JKwB9KM32IthIHtPYcFDs670lL3nkGbPzxfntCa5vGg+qNUZRUlT5Du9cC0a/lDaF1MyQ==", - "license": "MIT", + "version": "6.3.9", + "resolved": "https://registry.npmjs.org/@ngx-formly/core/-/core-6.3.9.tgz", + "integrity": "sha512-Zur9LhjfngCaH/rjXmsyKXwdunBgXt56eC87QTjEZDhz0xUgrlfCPD0ojvkrGGrNnNhy0ScT+izTVRE2XPrTpg==", "dependencies": { "tslib": "^2.0.0" }, diff --git a/package.json b/package.json index 711daa07..43944d3e 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "@codemirror/lang-yaml": "^6.1.1", "@codemirror/lint": "^6.8.1", "@codemirror/view": "^6.32.0", - "@ngx-formly/core": "^6.3.8", + "@ngx-formly/core": "^6.3.9", "@ngx-formly/primeng": "^6.3.8", "assert": "^2.1.0", "browserify-zlib": "^0.2.0", From ee00070c075124a0435b83185e6fb41113167870 Mon Sep 17 00:00:00 2001 From: Joseph Birkner Date: Thu, 17 Oct 2024 16:58:27 +0200 Subject: [PATCH 05/38] Pin emscripten --- .github/workflows/build-release.yml | 3 +-- .github/workflows/build-test.yml | 1 - ci/00_linux_setup.bash | 6 ++++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-release.yml b/.github/workflows/build-release.yml index 99a0b923..32f8bd8b 100644 --- a/.github/workflows/build-release.yml +++ b/.github/workflows/build-release.yml @@ -2,7 +2,6 @@ name: build-release on: push: - pull_request: workflow_dispatch: jobs: @@ -25,7 +24,7 @@ jobs: - name: Install npm dependencies run: npm -g install --force --include=dev - - name: Build demo with Emscripten + - name: Build with Emscripten run: | $GITHUB_WORKSPACE/ci/00_linux_setup.bash $GITHUB_WORKSPACE/ci/10_linux_build.bash diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 46955151..80e68a55 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -2,7 +2,6 @@ name: build-test on: push: - pull_request: workflow_dispatch: jobs: diff --git a/ci/00_linux_setup.bash b/ci/00_linux_setup.bash index 0a1912b7..e7893e80 100755 --- a/ci/00_linux_setup.bash +++ b/ci/00_linux_setup.bash @@ -8,6 +8,8 @@ export PATH=$PATH:"$ci_dir/../node_modules/.bin/" git clone https://github.com/emscripten-core/emsdk.git cd emsdk git pull -./emsdk install latest -./emsdk activate latest +# For some reason, emsdk>=3.1.68 leads to an error when compiling fmt +# due to more restrictive constexpr checks. +./emsdk install 3.1.67 +./emsdk activate 3.1.67 source ./emsdk_env.sh From 55a9a62780aa3ba6e94835b2ea1dda6a782ce66b Mon Sep 17 00:00:00 2001 From: Joseph Birkner Date: Thu, 17 Oct 2024 18:43:28 +0200 Subject: [PATCH 06/38] Upgrade ngx-formly/primeng to 6.3.9 as well. --- package-lock.json | 12 ++++++------ package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index d467c965..6152a365 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,6 @@ "@codemirror/lint": "^6.8.1", "@codemirror/view": "^6.32.0", "@ngx-formly/core": "^6.3.9", - "@ngx-formly/primeng": "^6.3.8", "assert": "^2.1.0", "browserify-zlib": "^0.2.0", "cesium": "1.120.0", @@ -46,6 +45,7 @@ "@angular/compiler-cli": "^18.2.0", "@eslint/eslintrc": "^3.1.0", "@eslint/js": "^9.9.0", + "@ngx-formly/primeng": "^6.3.9", "@types/jasmine": "~5.1.4", "@types/js-yaml": "^4.0.9", "@typescript-eslint/eslint-plugin": "^8.2.0", @@ -4129,15 +4129,15 @@ } }, "node_modules/@ngx-formly/primeng": { - "version": "6.3.8", - "resolved": "https://registry.npmjs.org/@ngx-formly/primeng/-/primeng-6.3.8.tgz", - "integrity": "sha512-W/csCwr1F1eI+r68qkJMYxzCUcaGng8tKdr16qPxDqj8s+XiuCXJozIT+gc7dAh4+3lNDVG+iSYntTMxBlIpGQ==", - "license": "MIT", + "version": "6.3.9", + "resolved": "https://registry.npmjs.org/@ngx-formly/primeng/-/primeng-6.3.9.tgz", + "integrity": "sha512-AM2RQKOYywgxaMjiaCEjGGS6SfrrMW2iqr/PJlA/xfNdkrNuV2K0rVGOm/PUvymDCIp2VBtYIGktmLkOodESKQ==", + "dev": true, "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { - "@ngx-formly/core": "6.3.8", + "@ngx-formly/core": "6.3.9", "primeng": ">=13.0.0" } }, diff --git a/package.json b/package.json index 43944d3e..00b3a259 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,6 @@ "@codemirror/lint": "^6.8.1", "@codemirror/view": "^6.32.0", "@ngx-formly/core": "^6.3.9", - "@ngx-formly/primeng": "^6.3.8", "assert": "^2.1.0", "browserify-zlib": "^0.2.0", "cesium": "1.120.0", @@ -49,6 +48,7 @@ "@angular/compiler-cli": "^18.2.0", "@eslint/eslintrc": "^3.1.0", "@eslint/js": "^9.9.0", + "@ngx-formly/primeng": "^6.3.9", "@types/jasmine": "~5.1.4", "@types/js-yaml": "^4.0.9", "@typescript-eslint/eslint-plugin": "^8.2.0", From d5a05b8f08ff2c9f7fbf04ef15b62cc6a8fcf3f9 Mon Sep 17 00:00:00 2001 From: Joseph Birkner Date: Thu, 17 Oct 2024 21:07:04 +0200 Subject: [PATCH 07/38] Introduce MapService's clientId, which is used by mapget to implicitly abort a previous fetch operation. --- erdblick_app/app/map.service.ts | 24 +++++++++++++++++------- package-lock.json | 7 +++++++ package.json | 1 + 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/erdblick_app/app/map.service.ts b/erdblick_app/app/map.service.ts index 170bd6b5..92af7468 100644 --- a/erdblick_app/app/map.service.ts +++ b/erdblick_app/app/map.service.ts @@ -12,6 +12,7 @@ import {InfoMessageService} from "./info.service"; import {MAX_ZOOM_LEVEL} from "./feature.search.service"; import {PointMergeService} from "./pointmerge.service"; import {KeyboardService} from "./keyboard.service"; +import * as uuid from 'uuid'; /** Expected structure of a LayerInfoItem's coverage entry. */ export interface CoverageRectItem extends Record { @@ -85,6 +86,7 @@ export class MapService { public loadedTileLayers: Map; private visualizedTileLayers: Map; private currentFetch: Fetch|null = null; + private currentFetchId: number = 0; private currentViewport: ViewportProperties; private currentVisibleTileIds: Set; private currentHighDetailTileIds: Set; @@ -111,6 +113,7 @@ export class MapService { } | null = null; zoomLevel: BehaviorSubject = new BehaviorSubject(0); statsDialogVisible: boolean = false; + clientId: string = ""; constructor(public styleService: StyleService, public parameterService: ParametersService, @@ -146,6 +149,10 @@ export class MapService { // Triggered when the user requests to zoom to a map layer. this.moveToWgs84PositionTopic = new Subject<{x: number, y: number}>(); + + // Unique client ID which ensures that tile fetch requests from this map-service + // are de-duplicated on the mapget server. + this.clientId = uuid.v4(); } public async initialize() { @@ -503,15 +510,15 @@ export class MapService { } } - // Abort previous fetch operation, if it is different from the new one. + // Ensure that the new fetch operation is different from the previous one. let newRequestBody = JSON.stringify({ requests: requests, - stringPoolOffsets: this.tileParser!.getFieldDictOffsets() + stringPoolOffsets: this.tileParser!.getFieldDictOffsets(), + clientId: this.clientId }); if (this.currentFetch) { if (this.currentFetch.bodyJson === newRequestBody) return; - this.currentFetch.abort(); this.currentFetch = null; // Clear any unparsed messages from the previous stream. this.tileStreamParsingQueue = []; @@ -526,15 +533,18 @@ export class MapService { this.tileParser!.reset(); // Launch the new fetch operation + let myFetchId = ++this.currentFetchId; this.currentFetch = new Fetch(tileUrl) .withChunkProcessing() .withMethod("POST") .withBody(newRequestBody) .withBufferCallback((message: any, messageType: any) => { - // Schedule the parsing of the newly arrived tile layer, - // but don't do it synchronously to avoid stalling the ongoing - // fetch operation. - this.tileStreamParsingQueue.push([message, messageType]); + // Schedule the parsing of the newly arrived tile layer. + // Ignore the new data, if this fetch operation is not + // the most recent one anymore. + if (myFetchId == this.currentFetchId) { + this.tileStreamParsingQueue.push([message, messageType]); + } }); this.currentFetch.go(); } diff --git a/package-lock.json b/package-lock.json index 6152a365..b81cf8de 100644 --- a/package-lock.json +++ b/package-lock.json @@ -48,6 +48,7 @@ "@ngx-formly/primeng": "^6.3.9", "@types/jasmine": "~5.1.4", "@types/js-yaml": "^4.0.9", + "@types/uuid": "^10.0.0", "@typescript-eslint/eslint-plugin": "^8.2.0", "@typescript-eslint/parser": "^8.2.0", "eslint": "^9.9.0", @@ -5199,6 +5200,12 @@ "@types/node": "*" } }, + "node_modules/@types/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", + "dev": true + }, "node_modules/@types/wrap-ansi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz", diff --git a/package.json b/package.json index 00b3a259..9ae54b57 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,7 @@ "@ngx-formly/primeng": "^6.3.9", "@types/jasmine": "~5.1.4", "@types/js-yaml": "^4.0.9", + "@types/uuid": "^10.0.0", "@typescript-eslint/eslint-plugin": "^8.2.0", "@typescript-eslint/parser": "^8.2.0", "eslint": "^9.9.0", From 0288de1bae3267359ad243742069887e9e3c71f8 Mon Sep 17 00:00:00 2001 From: Joseph Birkner Date: Tue, 22 Oct 2024 10:28:42 +0200 Subject: [PATCH 08/38] Ensure that cesium.patch has LF line endings. --- .gitattributes | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..07764a78 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* text eol=lf \ No newline at end of file From 9137cf01e51c53efd4dc8f54ecfe066969424ad6 Mon Sep 17 00:00:00 2001 From: Joseph Birkner Date: Tue, 22 Oct 2024 23:03:55 +0200 Subject: [PATCH 09/38] MapService update is now async, runs POST /abort to reduce network pressure. --- erdblick_app/app/datasources.service.ts | 2 +- erdblick_app/app/fetch.model.ts | 538 +++++++++++----------- erdblick_app/app/map.panel.component.ts | 8 +- erdblick_app/app/map.service.ts | 62 ++- erdblick_app/app/preferences.component.ts | 2 +- 5 files changed, 319 insertions(+), 293 deletions(-) diff --git a/erdblick_app/app/datasources.service.ts b/erdblick_app/app/datasources.service.ts index 61419241..042ad01f 100644 --- a/erdblick_app/app/datasources.service.ts +++ b/erdblick_app/app/datasources.service.ts @@ -24,7 +24,7 @@ export class DataSourcesService { this.messageService.showSuccess(data.body); setTimeout(() => { this.loading = false; - this.mapService.reloadDataSources().then(_ => this.mapService.update()); + this.mapService.reloadDataSources().then(_ => this.mapService.update().then()); }, 2000); }, error: error => { diff --git a/erdblick_app/app/fetch.model.ts b/erdblick_app/app/fetch.model.ts index f3ca2417..9b8bd966 100644 --- a/erdblick_app/app/fetch.model.ts +++ b/erdblick_app/app/fetch.model.ts @@ -1,269 +1,269 @@ -/** - * A class to fetch data from a URL and process the response - * for usage in JavaScript and WebAssembly. - */ -export class Fetch -{ - // The chunk header is 6B Version, 1B Type, 4B length - static CHUNK_HEADER_SIZE = 11; - static CHUNK_TYPE_FIELDS = 1; - static CHUNK_TYPE_FEATURES = 2; - static CHUNK_TYPE_SOURCEDATA = 3; - static CHUNK_TYPE_END_OF_STREAM = 128; - private url: string; - private method: string; - public bodyJson: string | null; - private abortController: AbortController; - private processChunks: boolean; - private jsonCallback: any; - private bufferCallback: any; - private aborted: boolean; - - /** - * Constructor to initialize the fetch processor with the required parameters. - * @param {object} coreLib - The WebAssembly core library. - * @param {string} url - The URL from where to fetch data. - */ - constructor(url: string) { - this.url = url; - this.method = 'GET'; - this.bodyJson = null; - this.abortController = new AbortController(); - this.processChunks = false; - this.jsonCallback = null; - this.bufferCallback = null; - this.aborted = false; - } - - /** - * Method to set the HTTP method for the request. - * @param {string} method - The HTTP method ('GET', 'POST', etc.) - * @return {Fetch} The Fetch instance for chaining. - */ - withMethod(method: string) { - this.method = method; - return this; - } - - /** - * Method to set the body for the request. - * @param {object} body - The body of the request. - * @return {Fetch} The Fetch instance for chaining. - */ - withBody(bodyJson: string) { - this.bodyJson = bodyJson; - return this; - } - - /** - * Method to enable chunk processing for the response. - * @return {Fetch} The Fetch instance for chaining. - */ - withChunkProcessing() { - this.processChunks = true; - return this; - } - - /** - * Method to set the callback for handling the JSON response. - * @param {Function} callback - The callback function. - * @return {Fetch} The Fetch instance for chaining. - */ - withJsonCallback(callback: any) { - this.jsonCallback = callback; - return this; - } - - /** - * Method to set the callback for handling the WASM response. - * @param {Function} callback - The callback function. Takes - * a Uint8Array buffer, and an optional message type parameter - * if chunk processing is enabled for this Fetch operation. - * @return {Fetch} The Fetch instance for chaining. - */ - withBufferCallback(callback: any) { - this.bufferCallback = callback; - return this; - } - - /** - * Method to start the fetch request and process the response. - */ - async go() { - let requestOptions: Record = { - method: this.method, - signal: this.abortController.signal, - keepalive: false, - mode: "same-origin" - }; - let headers: Record = {}; - if (this.bodyJson) { - requestOptions["body"] = this.bodyJson; - headers["Content-Type"] = "application/json"; - } - requestOptions["headers"] = headers; - - return fetch(this.url, requestOptions) - .then(response => { - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } else { - if (this.jsonCallback) { - console.assert(!this.processChunks) - return this.handleJsonResponse(response); - } else if (this.processChunks) { - return this.handleChunkedResponse(response).then(_ => {}).catch(e => this.handleError(e)); - } else { - return this.handleBlobResponse(response); - } - } - }) - .catch(e => this.handleError(e)); - } - - /** - * Method to handle and process a Blob response. - * @param {Response} response - The fetch response. - */ - private async handleBlobResponse(response: Response) { - return response.blob() - .then(blob => { - this.processBlob(blob); - }); - } - - /** - * Method to handle and process a chunked response. - * The chunks must be encoded as Version-Type-Length-Value (VTLV) frames, - * where Version is 6B, Type is 1B, Length is 4B (Little Endian). - * This is the chunk encoding used by the mapget TileLayerStream. - * @param {Response} response - The fetch response. - */ - private async handleChunkedResponse(response: Response) { - if (response.body) { - const reader = response.body.getReader(); - let accumulatedData = new Uint8Array(0); - let readIndex = 0; - - const processAccumulatedData = () => { - while (readIndex + Fetch.CHUNK_HEADER_SIZE <= accumulatedData.length) { - const type = accumulatedData[readIndex + 6]; - const length = new DataView(accumulatedData.buffer, readIndex + 7, 4).getUint32(0, true); - - if (type == Fetch.CHUNK_TYPE_END_OF_STREAM) { - this.abort(); - } - - if (readIndex + Fetch.CHUNK_HEADER_SIZE + length <= accumulatedData.length) { - // Create a view for the current chunk frame - const chunkFrameView = new Uint8Array(accumulatedData.buffer, readIndex, Fetch.CHUNK_HEADER_SIZE + length); - this.runBufferCallback(chunkFrameView, type); - readIndex += Fetch.CHUNK_HEADER_SIZE + length; - } else { - break; - } - } - - // If readIndex is not at the start, adjust the accumulatedData - if (readIndex > 0) { - accumulatedData = accumulatedData.slice(readIndex); - readIndex = 0; - } - } - - while (true) { - const {done, value} = await reader.read(); - if (value && value.length) { - // Append new data to accumulatedData. - const temp = new Uint8Array(accumulatedData.length + value.length); - temp.set(accumulatedData); - temp.set(value, accumulatedData.length); - accumulatedData = temp; - - // Try to process any complete chunks. - processAccumulatedData(); - } - if (done) { - break; - } - } - } - } - - /** - * Method to handle and process a JSON response. - * @param {Response} response - The fetch response. - */ - private async handleJsonResponse(response: Response) { - return response.json() - .then(jsonData => { - // Serialize the JSON before it is passed to the callback, so that - // any manipulations to it will not side-effect a later buffer callback. - let jsonString = JSON.stringify(jsonData); - if (this.jsonCallback) { - this.jsonCallback(jsonData); - } - - let uint8Array = new TextEncoder().encode(jsonString); - this.runBufferCallback(uint8Array) - }); - } - - /** - * Method to process a Blob and pass it to the WASM callback. - * @param {Blob} blob - The blob to process. - */ - processBlob(blob: Blob) { - let fileReader = new FileReader(); - fileReader.onloadend = () => { - let arrayBuffer = fileReader.result; - if (arrayBuffer && typeof arrayBuffer !== "string") { - let uint8Array = new Uint8Array(arrayBuffer); - this.runBufferCallback(uint8Array); - } - }; - fileReader.onerror = (error) => { - console.error('Error occurred while reading blob:', error); - }; - fileReader.readAsArrayBuffer(blob); - } - - /** - * If there is a WASM callback, construct the shared buffer and call the callback. - */ - runBufferCallback(uint8Array: Uint8Array, messageType: number = 0) - { - if (!this.bufferCallback || this.aborted) { - return; - } - if (this.bufferCallback) { - this.bufferCallback(uint8Array, messageType); - } - } - - /** - * Signal that the request should be aborted. - */ - abort() { - if (this.aborted) { - return; - } - try { - // For some reason, abort always throws an exception by design. - this.abortController.abort("User abort."); - } catch (e) { - // Nothing to do. - } - this.aborted = true; - } - - /** - * Log an error if it does not relate to an intentional abort-call. - */ - handleError(e: any) { - if (e === "User abort." || (e && e.name === "AbortError")) { - return; - } - console.error(e); - } -} +/** + * A class to fetch data from a URL and process the response + * for usage in JavaScript and WebAssembly. + */ +export class Fetch +{ + // The chunk header is 6B Version, 1B Type, 4B length + static CHUNK_HEADER_SIZE = 11; + static CHUNK_TYPE_FIELDS = 1; + static CHUNK_TYPE_FEATURES = 2; + static CHUNK_TYPE_SOURCEDATA = 3; + static CHUNK_TYPE_END_OF_STREAM = 128; + private url: string; + private method: string; + public bodyJson: string | null; + public done: Promise|boolean = false; + private abortController: AbortController; + private processChunks: boolean; + private jsonCallback: any; + private bufferCallback: any; + private aborted: boolean; + + /** + * Constructor to initialize the fetch processor with the required parameters. + * @param {object} coreLib - The WebAssembly core library. + * @param {string} url - The URL from where to fetch data. + */ + constructor(url: string) { + this.url = url; + this.method = 'GET'; + this.bodyJson = null; + this.abortController = new AbortController(); + this.processChunks = false; + this.jsonCallback = null; + this.bufferCallback = null; + this.aborted = false; + } + + /** + * Method to set the HTTP method for the request. + * @param {string} method - The HTTP method ('GET', 'POST', etc.) + * @return {Fetch} The Fetch instance for chaining. + */ + withMethod(method: string) { + this.method = method; + return this; + } + + /** + * Method to set the body for the request. + * @param {object} body - The body of the request. + * @return {Fetch} The Fetch instance for chaining. + */ + withBody(bodyJson: string) { + this.bodyJson = bodyJson; + return this; + } + + /** + * Method to enable chunk processing for the response. + * @return {Fetch} The Fetch instance for chaining. + */ + withChunkProcessing() { + this.processChunks = true; + return this; + } + + /** + * Method to set the callback for handling the JSON response. + * @param {Function} callback - The callback function. + * @return {Fetch} The Fetch instance for chaining. + */ + withJsonCallback(callback: any) { + this.jsonCallback = callback; + return this; + } + + /** + * Method to set the callback for handling the WASM response. + * @param {Function} callback - The callback function. Takes + * a Uint8Array buffer, and an optional message type parameter + * if chunk processing is enabled for this Fetch operation. + * @return {Fetch} The Fetch instance for chaining. + */ + withBufferCallback(callback: any) { + this.bufferCallback = callback; + return this; + } + + /** + * Method to start the fetch request and process the response. + */ + async go() { + let resolve: (v: boolean)=>void; + this.done = new Promise(resolveFun => resolve = resolveFun); + + let requestOptions: Record = { + method: this.method, + signal: this.abortController.signal, + mode: "same-origin" + }; + let headers: Record = {}; + if (this.bodyJson) { + requestOptions["body"] = this.bodyJson; + headers["Content-Type"] = "application/json"; + } + requestOptions["headers"] = headers; + + try { + let response = await fetch(this.url, requestOptions); + if (response.ok) { + if (this.jsonCallback) { + console.assert(!this.processChunks) + await this.handleJsonResponse(response); + } else if (this.processChunks) { + await this.handleChunkedResponse(response); + } else { + await this.handleBlobResponse(response); + } + } + } + catch (e) { + this.handleError(e); + } + + resolve!(true); + } + + /** + * Method to handle and process a Blob response. + * @param {Response} response - The fetch response. + */ + private async handleBlobResponse(response: Response) { + const blob = await response.blob(); + this.processBlob(blob); + } + + /** + * Method to handle and process a chunked response. + * The chunks must be encoded as Version-Type-Length-Value (VTLV) frames, + * where Version is 6B, Type is 1B, Length is 4B (Little Endian). + * This is the chunk encoding used by the mapget TileLayerStream. + * @param {Response} response - The fetch response. + */ + private async handleChunkedResponse(response: Response) { + if (response.body) { + const reader = response.body.getReader(); + let accumulatedData = new Uint8Array(0); + let readIndex = 0; + + const processAccumulatedData = () => { + while (readIndex + Fetch.CHUNK_HEADER_SIZE <= accumulatedData.length) { + const type = accumulatedData[readIndex + 6]; + const length = new DataView(accumulatedData.buffer, readIndex + 7, 4).getUint32(0, true); + + if (type == Fetch.CHUNK_TYPE_END_OF_STREAM) { + this.abort(); + } + + if (readIndex + Fetch.CHUNK_HEADER_SIZE + length <= accumulatedData.length) { + // Create a view for the current chunk frame + const chunkFrameView = new Uint8Array(accumulatedData.buffer, readIndex, Fetch.CHUNK_HEADER_SIZE + length); + this.runBufferCallback(chunkFrameView, type); + readIndex += Fetch.CHUNK_HEADER_SIZE + length; + } else { + break; + } + } + + // If readIndex is not at the start, adjust the accumulatedData + if (readIndex > 0) { + accumulatedData = accumulatedData.slice(readIndex); + readIndex = 0; + } + } + + while (true) { + const {done, value} = await reader.read(); + if (value && value.length) { + // Append new data to accumulatedData. + const temp = new Uint8Array(accumulatedData.length + value.length); + temp.set(accumulatedData); + temp.set(value, accumulatedData.length); + accumulatedData = temp; + + // Try to process any complete chunks. + processAccumulatedData(); + } + if (done) { + break; + } + } + } + } + + /** + * Method to handle and process a JSON response. + * @param {Response} response - The fetch response. + */ + private async handleJsonResponse(response: Response) { + const jsonData = await response.json(); + // Serialize the JSON before it is passed to the callback, so that + // any manipulations to it will not side-effect a later buffer callback. + let jsonString = JSON.stringify(jsonData); + if (this.jsonCallback) { + this.jsonCallback(jsonData); + } + let uint8Array = new TextEncoder().encode(jsonString); + this.runBufferCallback(uint8Array) + } + + /** + * Method to process a Blob and pass it to the WASM callback. + * @param {Blob} blob - The blob to process. + */ + processBlob(blob: Blob) { + let fileReader = new FileReader(); + fileReader.onloadend = () => { + let arrayBuffer = fileReader.result; + if (arrayBuffer && typeof arrayBuffer !== "string") { + let uint8Array = new Uint8Array(arrayBuffer); + this.runBufferCallback(uint8Array); + } + }; + fileReader.onerror = (error) => { + console.error('Error occurred while reading blob:', error); + }; + fileReader.readAsArrayBuffer(blob); + } + + /** + * If there is a WASM callback, construct the shared buffer and call the callback. + */ + runBufferCallback(uint8Array: Uint8Array, messageType: number = 0) + { + if (!this.bufferCallback || this.aborted) { + return; + } + if (this.bufferCallback) { + this.bufferCallback(uint8Array, messageType); + } + } + + /** + * Signal that the request should be aborted. + */ + abort() { + if (this.aborted) { + return; + } + try { + // For some reason, abort always throws an exception by design. + this.abortController.abort("User abort."); + } catch (e) { + // Nothing to do. + } + this.aborted = true; + } + + /** + * Log an error if it does not relate to an intentional abort-call. + */ + handleError(e: any) { + if (e === "User abort." || (e && e.name === "AbortError")) { + return; + } + console.error(e); + } +} diff --git a/erdblick_app/app/map.panel.component.ts b/erdblick_app/app/map.panel.component.ts index 6b92c9ac..633b4ab6 100644 --- a/erdblick_app/app/map.panel.component.ts +++ b/erdblick_app/app/map.panel.component.ts @@ -322,7 +322,7 @@ export class MapPanelComponent { this.styleService.toggleStyle(id, styleId == id, true); } this.styleService.reapplyAllStyles(); - this.mapService.update(); + this.mapService.update().then(); } }, { @@ -332,7 +332,7 @@ export class MapPanelComponent { this.styleService.toggleStyle(id, styleId != id, true); } this.styleService.reapplyAllStyles(); - this.mapService.update(); + this.mapService.update().then(); } }, { @@ -342,7 +342,7 @@ export class MapPanelComponent { this.styleService.toggleStyle(id, false, true); } this.styleService.reapplyAllStyles(); - this.mapService.update(); + this.mapService.update().then(); } }, { @@ -352,7 +352,7 @@ export class MapPanelComponent { this.styleService.toggleStyle(id, true, true); } this.styleService.reapplyAllStyles(); - this.mapService.update(); + this.mapService.update().then(); } } ]; diff --git a/erdblick_app/app/map.service.ts b/erdblick_app/app/map.service.ts index 92af7468..fdeb0a1f 100644 --- a/erdblick_app/app/map.service.ts +++ b/erdblick_app/app/map.service.ts @@ -49,6 +49,7 @@ export interface MapInfoItem extends Record { const infoUrl = "/sources"; const tileUrl = "/tiles"; +const abortUrl = "/abort"; /** Redefinition of coreLib.Viewport. TODO: Check if needed. */ type ViewportProperties = { @@ -86,6 +87,7 @@ export class MapService { public loadedTileLayers: Map; private visualizedTileLayers: Map; private currentFetch: Fetch|null = null; + private currentFetchAbort: Fetch|null = null; private currentFetchId: number = 0; private currentViewport: ViewportProperties; private currentVisibleTileIds: Set; @@ -185,7 +187,7 @@ export class MapService { [layer.visible, layer.level] = this.parameterService.mapLayerConfig(mapId, layerId, layer.level); } } - this.update(); + this.update().then(); }) await this.reloadDataSources(); @@ -331,7 +333,7 @@ export class MapService { this.parameterService.setMapLayerConfig(mapId, layer.layerId, layer.level, mapItem.visible, layer.tileBorders); }); } - this.update(); + this.update().then(); } toggleLayerTileBorderVisibility(mapId: string, layerId: string) { @@ -343,7 +345,7 @@ export class MapService { const hasTileBorders = !layer.tileBorders; mapItem.layers.get(layerId)!.tileBorders = hasTileBorders; this.parameterService.setMapLayerConfig(mapId, layerId, layer.level, layer.visible, hasTileBorders); - this.update(); + this.update().then(); } } @@ -355,7 +357,7 @@ export class MapService { const layer = mapItem.layers.get(layerId)!; this.parameterService.setMapLayerConfig(mapId, layerId, level, layer.visible, layer.tileBorders); } - this.update(); + this.update().then(); } *allLevels() { @@ -379,7 +381,7 @@ export class MapService { return mapItem.layers.has(layerId) ? mapItem.layers.get(layerId)!.tileBorders : false; } - update() { + async update() { // Get the tile IDs for the current viewport. this.currentVisibleTileIds = new Set(); this.currentHighDetailTileIds = new Set(); @@ -458,8 +460,21 @@ export class MapService { }); } - // Request non-present required tile layers. - // TODO: Consider tile TTL. + // Rest of this function: Request non-present required tile layers. + // Only do this, if there is no ongoing effort to do so. + // Reason: This is an async function, so multiple "instances" of it + // may be running simultaneously. But we only ever want one function to + // execute the /abort-and-/tiles fetch combo. + let myFetchId = ++this.currentFetchId; + let abortAwaited = false; + if (this.currentFetchAbort) { + await this.currentFetchAbort.done; + abortAwaited = true; + if (myFetchId != this.currentFetchId) { + return; + } + } + let requests = []; if (this.selectionTileRequest) { // Do not go forward with the selection tile request, if it @@ -510,15 +525,31 @@ export class MapService { } } - // Ensure that the new fetch operation is different from the previous one. let newRequestBody = JSON.stringify({ requests: requests, stringPoolOffsets: this.tileParser!.getFieldDictOffsets(), clientId: this.clientId }); if (this.currentFetch) { - if (this.currentFetch.bodyJson === newRequestBody) + // Ensure that the new fetch operation is different from the previous one. + if (this.currentFetch.bodyJson === newRequestBody) { return; + } + // Abort any ongoing requests for this clientId. + if (!abortAwaited) { + this.currentFetch.abort(); + this.currentFetchAbort = new Fetch(abortUrl) + .withMethod("POST") + .withBody(JSON.stringify({clientId: this.clientId})); + await this.currentFetchAbort.go(); + this.currentFetchAbort = null; + } + // Wait for the current Fetch operation to end. + await this.currentFetch.done; + // Do not proceed with this update, if a newer one was started. + if (myFetchId != this.currentFetchId) { + return; + } this.currentFetch = null; // Clear any unparsed messages from the previous stream. this.tileStreamParsingQueue = []; @@ -533,20 +564,15 @@ export class MapService { this.tileParser!.reset(); // Launch the new fetch operation - let myFetchId = ++this.currentFetchId; this.currentFetch = new Fetch(tileUrl) .withChunkProcessing() .withMethod("POST") .withBody(newRequestBody) .withBufferCallback((message: any, messageType: any) => { // Schedule the parsing of the newly arrived tile layer. - // Ignore the new data, if this fetch operation is not - // the most recent one anymore. - if (myFetchId == this.currentFetchId) { - this.tileStreamParsingQueue.push([message, messageType]); - } + this.tileStreamParsingQueue.push([message, messageType]); }); - this.currentFetch.go(); + await this.currentFetch.go(); } addTileFeatureLayer(tileLayerBlob: any, style: ErdblickStyle | null, styleId: string, preventCulling: any) { @@ -635,7 +661,7 @@ export class MapService { setViewport(viewport: ViewportProperties) { this.currentViewport = viewport; this.setTileLevelForViewport(); - this.update(); + this.update().then(); } getPrioritisedTiles() { @@ -683,7 +709,7 @@ export class MapService { this.selectionTileRequest!.reject = reject; }) - this.update(); + this.update().then(); tile = await selectionTilePromise; result.set(tileKey, tile); } diff --git a/erdblick_app/app/preferences.component.ts b/erdblick_app/app/preferences.component.ts index 9b9e9fa0..5cc3262a 100644 --- a/erdblick_app/app/preferences.component.ts +++ b/erdblick_app/app/preferences.component.ts @@ -233,7 +233,7 @@ export class PreferencesComponent { parameters.tilesLoadLimit = Number(this.tilesToLoadInput); parameters.tilesVisualizeLimit = Number(this.tilesToVisualizeInput); this.parametersService.parameters.next(parameters); - this.mapService.update(); + this.mapService.update().then(); this.messageService.showSuccess("Successfully updated tile limits!"); } From df73b4df8a4509452e2801dabc23e7ab4da3243e Mon Sep 17 00:00:00 2001 From: Joseph Birkner Date: Tue, 22 Oct 2024 23:05:45 +0200 Subject: [PATCH 10/38] Stats Dialog improvements. --- erdblick_app/app/features.model.ts | 13 +- erdblick_app/app/map.service.ts | 6 +- erdblick_app/app/stats.component.ts | 9 +- erdblick_app/app/visualization.model.ts | 669 ++++++++++++------------ 4 files changed, 355 insertions(+), 342 deletions(-) diff --git a/erdblick_app/app/features.model.ts b/erdblick_app/app/features.model.ts index adfe5d06..320884b0 100644 --- a/erdblick_app/app/features.model.ts +++ b/erdblick_app/app/features.model.ts @@ -21,11 +21,8 @@ export class FeatureTile { disposed: boolean; stats: Map = new Map(); - static statFeatureCount = "Feature Count"; - static statTileSize = "Tile Size (kiB)"; - static statFillTime = "Fill Time (ms)"; - static statParseTime = "Parse Time (ms)"; - static statRenderTime = "Render Time (ms)"; + static statTileSize = "tile-size-kb"; + static statParseTime = "parse-time-ms"; /** * Construct a FeatureTile object. @@ -43,11 +40,11 @@ export class FeatureTile { this.layerName = mapTileMetadata.layerName; this.tileId = mapTileMetadata.tileId; this.numFeatures = mapTileMetadata.numFeatures; - this.stats.set(FeatureTile.statFeatureCount, [mapTileMetadata.numFeatures]); this.stats.set(FeatureTile.statTileSize, [tileFeatureLayerBlob.length/1024]); - this.stats.set(FeatureTile.statFillTime, [mapTileMetadata.fillTime]); + for (let [k, v] of Object.entries(mapTileMetadata.scalarFields)) { + this.stats.set(k, [v as number]); + } this.stats.set(FeatureTile.statParseTime, []); - this.stats.set(FeatureTile.statRenderTime, []); this.parser = parser; this.preventCulling = preventCulling; this.tileFeatureLayerBlob = tileFeatureLayerBlob; diff --git a/erdblick_app/app/map.service.ts b/erdblick_app/app/map.service.ts index fdeb0a1f..1ea2d5f9 100644 --- a/erdblick_app/app/map.service.ts +++ b/erdblick_app/app/map.service.ts @@ -115,6 +115,7 @@ export class MapService { } | null = null; zoomLevel: BehaviorSubject = new BehaviorSubject(0); statsDialogVisible: boolean = false; + statsDialogNeedsUpdate: Subject = new Subject(); clientId: string = ""; constructor(public styleService: StyleService, @@ -203,7 +204,10 @@ export class MapService { this.visualizeHighlights(coreLib.HighlightMode.HOVER_HIGHLIGHT, hoveredFeatureWrappers); }); - this.keyboardService.registerShortcuts(["Ctrl+x", "Ctrl+X"], ()=>{this.statsDialogVisible = true;}); + this.keyboardService.registerShortcuts(["Ctrl+x", "Ctrl+X"], ()=>{ + this.statsDialogVisible = true; + this.statsDialogNeedsUpdate.next(); + }); } private processTileStream() { diff --git a/erdblick_app/app/stats.component.ts b/erdblick_app/app/stats.component.ts index 6965b23f..59e39c73 100644 --- a/erdblick_app/app/stats.component.ts +++ b/erdblick_app/app/stats.component.ts @@ -17,6 +17,7 @@ import {MapService} from "./map.service"; [style]="{'width': '100%'}"> +
    Total number of considered tiles: {{ consideredTilesCount }}
    @@ -65,9 +66,11 @@ export class StatsDialogComponent { public availableMapLayers: { label: string }[] = []; public selectedMapLayers: { label: string }[] = []; public considerEmptyTiles: boolean = false; + public consideredTilesCount: number = 0; constructor(public mapService: MapService) { this.update(); + this.mapService.statsDialogNeedsUpdate.subscribe(_ => this.update()); } update(): void { @@ -89,6 +92,7 @@ export class StatsDialogComponent { const statsAccumulator: Map = new Map(); // Accumulate statistics from all tiles + this.consideredTilesCount = 0; this.mapService.loadedTileLayers.forEach(tile => { if (!this.considerEmptyTiles && tile.numFeatures <= 0) { return; @@ -96,6 +100,7 @@ export class StatsDialogComponent { if (this.selectedMapLayers.findIndex(entry => entry.label == `${tile.mapName} - ${tile.layerName}`) < 0) { return; } + this.consideredTilesCount++; const stats = tile.stats; for (let [key, value] of stats.entries()) { if (!statsAccumulator.has(key)) { @@ -110,6 +115,6 @@ export class StatsDialogComponent { const peak = Math.max(...values); const average = values.reduce((sum, val) => sum + val, 0) / values.length; return { name: statKey, peak, average }; - }); + }).sort((a, b) => a.name.localeCompare(b.name)); } -} \ No newline at end of file +} diff --git a/erdblick_app/app/visualization.model.ts b/erdblick_app/app/visualization.model.ts index 35ef8802..547d9e60 100644 --- a/erdblick_app/app/visualization.model.ts +++ b/erdblick_app/app/visualization.model.ts @@ -1,331 +1,338 @@ -import {FeatureTile} from "./features.model"; -import {coreLib} from "./wasm"; -import { - Color, - Entity, - PrimitiveCollection, - Rectangle, - Viewer, - CallbackProperty, - HeightReference -} from "./cesium"; -import {FeatureLayerStyle, TileFeatureLayer, HighlightMode} from "../../build/libs/core/erdblick-core"; -import {MergedPointVisualization, PointMergeService} from "./pointmerge.service"; - -export interface LocateResolution { - tileId: string, - typeId: string, - featureId: Array -} - -export interface LocateResponse { - responses: Array> -} - -interface StyleWithIsDeleted extends FeatureLayerStyle { - isDeleted(): boolean; -} - -/** - * Ensure that low-detail representations are only rendered once - * per map tile layer. Otherwise, they are rendered once per - * (style sheet, tile layer) combination. - */ -class TileBoxVisualization { - static visualizations: Map = new Map(); - - static get(tile: FeatureTile, featureCount: number, viewer: Viewer): TileBoxVisualization { - if (!TileBoxVisualization.visualizations.has(tile.tileId)) { - TileBoxVisualization.visualizations.set( - tile.tileId, new TileBoxVisualization(viewer, tile)); - } - let result = this.visualizations.get(tile.tileId)!; - ++result.refCount; - result.featureCount += featureCount; - return result; - } - - // Keep track of how many TileVisualizations are using this low-detail one. - // We can delete this instance, as soon as refCount is 0. - refCount: number = 0; - featureCount: number = 0; - private readonly entity: Entity; - private readonly id: bigint; - - constructor(viewer: Viewer, tile: FeatureTile) { - let tileBox = coreLib.getTileBox(BigInt(tile.tileId)); - this.entity = viewer.entities.add({ - rectangle: { - coordinates: Rectangle.fromDegrees(...tileBox), - height: HeightReference.CLAMP_TO_GROUND, - material: Color.TRANSPARENT, - outlineWidth: 2, - outline: true, - outlineColor: new CallbackProperty((time, result) => { - if (this.featureCount > 0) { - return Color.YELLOW.withAlpha(0.7); - } else { - return Color.AQUA.withAlpha(0.3); - } - }, false) - } - }); - this.id = tile.tileId; - } - - delete(viewer: Viewer, featureCount: number) { - --this.refCount; - this.featureCount -= featureCount; - if (this.refCount <= 0) { - viewer.entities.remove(this.entity); - TileBoxVisualization.visualizations.delete(this.id); - } - } -} - -/** Bundle of a FeatureTile, a style, and a rendered Cesium visualization. */ -export class TileVisualization { - tile: FeatureTile; - isHighDetail: boolean; - showTileBorder: boolean = false; - - private readonly style: StyleWithIsDeleted; - private readonly styleName: string; - private lowDetailVisu: TileBoxVisualization|null = null; - private primitiveCollection: PrimitiveCollection|null = null; - private hasHighDetailVisualization: boolean = false; - private hasTileBorder: boolean = false; - private renderingInProgress: boolean = false; - private readonly highlightMode: HighlightMode; - private readonly featureIdSubset: string[]; - private deleted: boolean = false; - private readonly auxTileFun: (key: string)=>FeatureTile|null; - private readonly options: Record; - private readonly pointMergeService: PointMergeService; - - /** - * Create a tile visualization. - * @param tile The tile to visualize. - * @param pointMergeService Instance of the central PointMergeService, used to visualize merged point features. - * @param auxTileFun Callback which may be called to resolve external references - * for relation visualization. - * @param style The style to use for visualization. - * @param highDetail The level of detail to use. Currently, - * a low-detail representation is indicated by `false`, and - * will result in a dot representation. A high-detail representation - * based on the style can be triggered using `true`. - * @param highlightMode Controls whether the visualization will run rules that - * have a specific highlight mode. - * @param featureIdSubset Subset of feature IDs for visualization. If not set, - * all features in the tile will be visualized. - * @param boxGrid Sets a flag to wrap this tile visualization into a bounding box - * @param options Option values for option variables defined by the style sheet. - */ - constructor( - tile: FeatureTile, - pointMergeService: PointMergeService, - auxTileFun: (key: string) => FeatureTile | null, - style: FeatureLayerStyle, - highDetail: boolean, - highlightMode: HighlightMode = coreLib.HighlightMode.NO_HIGHLIGHT, - featureIdSubset?: string[], - boxGrid?: boolean, - options?: Record) - { - this.tile = tile; - this.style = style as StyleWithIsDeleted; - this.styleName = this.style.name(); - this.isHighDetail = highDetail; - this.renderingInProgress = false; - this.highlightMode = highlightMode; - this.featureIdSubset = featureIdSubset || []; - this.deleted = false; - this.auxTileFun = auxTileFun; - this.showTileBorder = boxGrid === undefined ? false : boxGrid; - this.options = options || {}; - this.pointMergeService = pointMergeService; - } - - /** - * Actually create the visualization. - * @param viewer {Viewer} The viewer to add the rendered entity to. - * @return True if anything was rendered, false otherwise. - */ - async render(viewer: Viewer) { - if (this.renderingInProgress || this.deleted) - return false; - - // Remove any previous render-result, as a new one is generated. - this.destroy(viewer); - this.deleted = false; - - // Do not continue if the style was deleted while we were waiting. - if (this.style.isDeleted()) { - return false; - } - - // Create potential high-detail visualization. - this.renderingInProgress = true; - let returnValue = true; - if (this.isHighDetailAndNotEmpty()) { - returnValue = await this.tile.peekAsync(async (tileFeatureLayer: TileFeatureLayer) => { - let wasmVisualization = new coreLib.FeatureLayerVisualization( - this.tile.mapTileKey, - this.style, - this.options, - this.pointMergeService, - this.highlightMode, - this.featureIdSubset); - - let startTime = performance.now(); - wasmVisualization.addTileFeatureLayer(tileFeatureLayer); - try { - wasmVisualization.run(); - } - catch (e) { - console.error(`Exception while rendering: ${e}`); - return false; - } - - // Try to resolve externally referenced auxiliary tiles. - let extRefs = {requests: wasmVisualization.externalReferences()}; - if (extRefs.requests && extRefs.requests.length > 0) { - let response = await fetch("/locate", { - body: JSON.stringify(extRefs, (_, value) => - typeof value === 'bigint' - ? Number(value) - : value), - method: "POST" - }).catch((err)=>console.error(`Error during /locate call: ${err}`)); - if (!response) { - return false; - } - - let extRefsResolved = await response.json() as LocateResponse; - if (this.style.isDeleted()) { - // Do not continue if the style was deleted while we were waiting. - return false; - } - - // Resolve located external tile IDs to actual tiles. - let seenTileIds = new Set(); - let auxTiles = new Array(); - for (let resolutions of extRefsResolved.responses) { - for (let resolution of resolutions) { - if (!seenTileIds.has(resolution.tileId)) { - let tile = this.auxTileFun(resolution.tileId); - if (tile) { - auxTiles.push(tile); - } - seenTileIds.add(resolution.tileId); - } - } - } - - // Now we can actually parse the auxiliary layers, - // add them to the visualization, and let it process them. - await FeatureTile.peekMany(auxTiles, async (tileFeatureLayers: Array) => { - for (let auxTile of tileFeatureLayers) - wasmVisualization.addTileFeatureLayer(auxTile); - - try { - wasmVisualization.processResolvedExternalReferences(extRefsResolved.responses); - } - catch (e) { - console.error(`Exception while rendering: ${e}`); - } - }); - } - - - if (!this.deleted) { - this.primitiveCollection = wasmVisualization.primitiveCollection(); - for (const [mapLayerStyleRuleId, mergedPointVisualizations] of Object.entries(wasmVisualization.mergedPointFeatures())) { - for (let finishedCornerTile of this.pointMergeService.insert(mergedPointVisualizations as MergedPointVisualization[], this.tile.tileId, mapLayerStyleRuleId)) { - finishedCornerTile.render(viewer); - } - } - } - wasmVisualization.delete(); - let endTime = performance.now(); - this.tile.stats.get(FeatureTile.statRenderTime)!.push(endTime - startTime); - return true; - }); - if (this.primitiveCollection) { - viewer.scene.primitives.add(this.primitiveCollection); - } - this.hasHighDetailVisualization = true; - } - - if (this.showTileBorder) { - // Else: Low-detail bounding box representation - this.lowDetailVisu = TileBoxVisualization.get(this.tile, this.tile.numFeatures, viewer); - this.hasTileBorder = true; - } - - this.renderingInProgress = false; - if (this.deleted) - this.destroy(viewer); - return returnValue; - } - - /** - * Destroy any current visualization. - * @param viewer {Viewer} The viewer to remove the rendered entity from. - */ - destroy(viewer: Viewer) { - this.deleted = true; - if (this.renderingInProgress) { - return; - } - - // Remove point-merge contributions that were made by this map-layer+style visualization combo. - let removedCornerTiles = this.pointMergeService.remove( - this.tile.tileId, - this.mapLayerStyleId()); - for (let removedCornerTile of removedCornerTiles) { - removedCornerTile.remove(viewer); - } - - if (this.primitiveCollection) { - viewer.scene.primitives.remove(this.primitiveCollection); - if (!this.primitiveCollection.isDestroyed()) - this.primitiveCollection.destroy(); - this.primitiveCollection = null; - } - if (this.lowDetailVisu) { - this.lowDetailVisu.delete(viewer, this.tile.numFeatures); - this.lowDetailVisu = null; - } - this.hasHighDetailVisualization = false; - this.hasTileBorder = false; - } - - /** - * Check if the visualization is high-detail, and the - * underlying data is not empty. - */ - private isHighDetailAndNotEmpty() { - return this.isHighDetail && (this.tile.numFeatures > 0 || this.tile.preventCulling); - } - - /** - * Check if this visualization needs re-rendering, based on - * whether the isHighDetail flag changed. - */ - isDirty() { - return ( - this.isHighDetailAndNotEmpty() != this.hasHighDetailVisualization || - this.showTileBorder != this.hasTileBorder - ); - } - - /** - * Combination of map name, layer name, style name and highlight mode which - * (in combination with the tile id) uniquely identifies that rendered contents - * if this TileVisualization as expected by the surrounding MergedPointsTiles. - */ - private mapLayerStyleId() { - return `${this.tile.mapName}:${this.tile.layerName}:${this.styleName}:${this.highlightMode.value}`; - } -} +import {FeatureTile} from "./features.model"; +import {coreLib} from "./wasm"; +import { + Color, + Entity, + PrimitiveCollection, + Rectangle, + Viewer, + CallbackProperty, + HeightReference +} from "./cesium"; +import {FeatureLayerStyle, TileFeatureLayer, HighlightMode} from "../../build/libs/core/erdblick-core"; +import {MergedPointVisualization, PointMergeService} from "./pointmerge.service"; + +export interface LocateResolution { + tileId: string, + typeId: string, + featureId: Array +} + +export interface LocateResponse { + responses: Array> +} + +interface StyleWithIsDeleted extends FeatureLayerStyle { + isDeleted(): boolean; +} + +/** + * Ensure that low-detail representations are only rendered once + * per map tile layer. Otherwise, they are rendered once per + * (style sheet, tile layer) combination. + */ +class TileBoxVisualization { + static visualizations: Map = new Map(); + + static get(tile: FeatureTile, featureCount: number, viewer: Viewer): TileBoxVisualization { + if (!TileBoxVisualization.visualizations.has(tile.tileId)) { + TileBoxVisualization.visualizations.set( + tile.tileId, new TileBoxVisualization(viewer, tile)); + } + let result = this.visualizations.get(tile.tileId)!; + ++result.refCount; + result.featureCount += featureCount; + return result; + } + + // Keep track of how many TileVisualizations are using this low-detail one. + // We can delete this instance, as soon as refCount is 0. + refCount: number = 0; + featureCount: number = 0; + private readonly entity: Entity; + private readonly id: bigint; + + constructor(viewer: Viewer, tile: FeatureTile) { + let tileBox = coreLib.getTileBox(BigInt(tile.tileId)); + this.entity = viewer.entities.add({ + rectangle: { + coordinates: Rectangle.fromDegrees(...tileBox), + height: HeightReference.CLAMP_TO_GROUND, + material: Color.TRANSPARENT, + outlineWidth: 2, + outline: true, + outlineColor: new CallbackProperty((time, result) => { + if (this.featureCount > 0) { + return Color.YELLOW.withAlpha(0.7); + } else { + return Color.AQUA.withAlpha(0.3); + } + }, false) + } + }); + this.id = tile.tileId; + } + + delete(viewer: Viewer, featureCount: number) { + --this.refCount; + this.featureCount -= featureCount; + if (this.refCount <= 0) { + viewer.entities.remove(this.entity); + TileBoxVisualization.visualizations.delete(this.id); + } + } +} + +/** Bundle of a FeatureTile, a style, and a rendered Cesium visualization. */ +export class TileVisualization { + tile: FeatureTile; + isHighDetail: boolean; + showTileBorder: boolean = false; + + private readonly style: StyleWithIsDeleted; + private readonly styleName: string; + private lowDetailVisu: TileBoxVisualization|null = null; + private primitiveCollection: PrimitiveCollection|null = null; + private hasHighDetailVisualization: boolean = false; + private hasTileBorder: boolean = false; + private renderingInProgress: boolean = false; + private readonly highlightMode: HighlightMode; + private readonly featureIdSubset: string[]; + private deleted: boolean = false; + private readonly auxTileFun: (key: string)=>FeatureTile|null; + private readonly options: Record; + private readonly pointMergeService: PointMergeService; + + /** + * Create a tile visualization. + * @param tile The tile to visualize. + * @param pointMergeService Instance of the central PointMergeService, used to visualize merged point features. + * @param auxTileFun Callback which may be called to resolve external references + * for relation visualization. + * @param style The style to use for visualization. + * @param highDetail The level of detail to use. Currently, + * a low-detail representation is indicated by `false`, and + * will result in a dot representation. A high-detail representation + * based on the style can be triggered using `true`. + * @param highlightMode Controls whether the visualization will run rules that + * have a specific highlight mode. + * @param featureIdSubset Subset of feature IDs for visualization. If not set, + * all features in the tile will be visualized. + * @param boxGrid Sets a flag to wrap this tile visualization into a bounding box + * @param options Option values for option variables defined by the style sheet. + */ + constructor( + tile: FeatureTile, + pointMergeService: PointMergeService, + auxTileFun: (key: string) => FeatureTile | null, + style: FeatureLayerStyle, + highDetail: boolean, + highlightMode: HighlightMode = coreLib.HighlightMode.NO_HIGHLIGHT, + featureIdSubset?: string[], + boxGrid?: boolean, + options?: Record) + { + this.tile = tile; + this.style = style as StyleWithIsDeleted; + this.styleName = this.style.name(); + this.isHighDetail = highDetail; + this.renderingInProgress = false; + this.highlightMode = highlightMode; + this.featureIdSubset = featureIdSubset || []; + this.deleted = false; + this.auxTileFun = auxTileFun; + this.showTileBorder = boxGrid === undefined ? false : boxGrid; + this.options = options || {}; + this.pointMergeService = pointMergeService; + } + + /** + * Actually create the visualization. + * @param viewer {Viewer} The viewer to add the rendered entity to. + * @return True if anything was rendered, false otherwise. + */ + async render(viewer: Viewer) { + if (this.renderingInProgress || this.deleted) + return false; + + // Remove any previous render-result, as a new one is generated. + this.destroy(viewer); + this.deleted = false; + + // Do not continue if the style was deleted while we were waiting. + if (this.style.isDeleted()) { + return false; + } + + // Create potential high-detail visualization. + this.renderingInProgress = true; + let returnValue = true; + if (this.isHighDetailAndNotEmpty()) { + returnValue = await this.tile.peekAsync(async (tileFeatureLayer: TileFeatureLayer) => { + let wasmVisualization = new coreLib.FeatureLayerVisualization( + this.tile.mapTileKey, + this.style, + this.options, + this.pointMergeService, + this.highlightMode, + this.featureIdSubset); + + let startTime = performance.now(); + wasmVisualization.addTileFeatureLayer(tileFeatureLayer); + try { + wasmVisualization.run(); + } + catch (e) { + console.error(`Exception while rendering: ${e}`); + return false; + } + + // Try to resolve externally referenced auxiliary tiles. + let extRefs = {requests: wasmVisualization.externalReferences()}; + if (extRefs.requests && extRefs.requests.length > 0) { + let response = await fetch("/locate", { + body: JSON.stringify(extRefs, (_, value) => + typeof value === 'bigint' + ? Number(value) + : value), + method: "POST" + }).catch((err)=>console.error(`Error during /locate call: ${err}`)); + if (!response) { + return false; + } + + let extRefsResolved = await response.json() as LocateResponse; + if (this.style.isDeleted()) { + // Do not continue if the style was deleted while we were waiting. + return false; + } + + // Resolve located external tile IDs to actual tiles. + let seenTileIds = new Set(); + let auxTiles = new Array(); + for (let resolutions of extRefsResolved.responses) { + for (let resolution of resolutions) { + if (!seenTileIds.has(resolution.tileId)) { + let tile = this.auxTileFun(resolution.tileId); + if (tile) { + auxTiles.push(tile); + } + seenTileIds.add(resolution.tileId); + } + } + } + + // Now we can actually parse the auxiliary layers, + // add them to the visualization, and let it process them. + await FeatureTile.peekMany(auxTiles, async (tileFeatureLayers: Array) => { + for (let auxTile of tileFeatureLayers) + wasmVisualization.addTileFeatureLayer(auxTile); + + try { + wasmVisualization.processResolvedExternalReferences(extRefsResolved.responses); + } + catch (e) { + console.error(`Exception while rendering: ${e}`); + } + }); + } + + if (!this.deleted) { + this.primitiveCollection = wasmVisualization.primitiveCollection(); + for (const [mapLayerStyleRuleId, mergedPointVisualizations] of Object.entries(wasmVisualization.mergedPointFeatures())) { + for (let finishedCornerTile of this.pointMergeService.insert(mergedPointVisualizations as MergedPointVisualization[], this.tile.tileId, mapLayerStyleRuleId)) { + finishedCornerTile.render(viewer); + } + } + } + wasmVisualization.delete(); + let endTime = performance.now(); + + // Add the render time for this style sheet as a statistic to the tile. + let timingListKey = `render-time-${this.styleName.toLowerCase()}-${["normal", "hover", "selection"][this.highlightMode.value]}-ms`; + let timingList = this.tile.stats.get(timingListKey); + if (!timingList) { + timingList = []; + this.tile.stats.set(timingListKey, timingList); + } + timingList.push(endTime - startTime); + return true; + }); + if (this.primitiveCollection) { + viewer.scene.primitives.add(this.primitiveCollection); + } + this.hasHighDetailVisualization = true; + } + + if (this.showTileBorder) { + // Else: Low-detail bounding box representation + this.lowDetailVisu = TileBoxVisualization.get(this.tile, this.tile.numFeatures, viewer); + this.hasTileBorder = true; + } + + this.renderingInProgress = false; + if (this.deleted) + this.destroy(viewer); + return returnValue; + } + + /** + * Destroy any current visualization. + * @param viewer {Viewer} The viewer to remove the rendered entity from. + */ + destroy(viewer: Viewer) { + this.deleted = true; + if (this.renderingInProgress) { + return; + } + + // Remove point-merge contributions that were made by this map-layer+style visualization combo. + let removedCornerTiles = this.pointMergeService.remove( + this.tile.tileId, + this.mapLayerStyleId()); + for (let removedCornerTile of removedCornerTiles) { + removedCornerTile.remove(viewer); + } + + if (this.primitiveCollection) { + viewer.scene.primitives.remove(this.primitiveCollection); + if (!this.primitiveCollection.isDestroyed()) + this.primitiveCollection.destroy(); + this.primitiveCollection = null; + } + if (this.lowDetailVisu) { + this.lowDetailVisu.delete(viewer, this.tile.numFeatures); + this.lowDetailVisu = null; + } + this.hasHighDetailVisualization = false; + this.hasTileBorder = false; + } + + /** + * Check if the visualization is high-detail, and the + * underlying data is not empty. + */ + private isHighDetailAndNotEmpty() { + return this.isHighDetail && (this.tile.numFeatures > 0 || this.tile.preventCulling); + } + + /** + * Check if this visualization needs re-rendering, based on + * whether the isHighDetail flag changed. + */ + isDirty() { + return ( + this.isHighDetailAndNotEmpty() != this.hasHighDetailVisualization || + this.showTileBorder != this.hasTileBorder + ); + } + + /** + * Combination of map name, layer name, style name and highlight mode which + * (in combination with the tile id) uniquely identifies that rendered contents + * if this TileVisualization as expected by the surrounding MergedPointsTiles. + */ + private mapLayerStyleId() { + return `${this.tile.mapName}:${this.tile.layerName}:${this.styleName}:${this.highlightMode.value}`; + } +} From 30bacb2657cfcf329ff974e7ac2aa53e4a0808ac Mon Sep 17 00:00:00 2001 From: Joseph Birkner Date: Tue, 22 Oct 2024 23:06:55 +0200 Subject: [PATCH 11/38] Switch to synchronous Polyline rendering, turns out to be faster. --- .../erdblick/cesium-interface/object.h | 494 +++++++-------- .../erdblick/cesium-interface/primitive.h | 278 ++++----- libs/core/include/erdblick/parser.h | 278 ++++----- libs/core/src/bindings.cpp | 2 +- libs/core/src/cesium-interface/primitive.cpp | 324 +++++----- libs/core/src/parser.cpp | 564 +++++++++--------- 6 files changed, 976 insertions(+), 964 deletions(-) diff --git a/libs/core/include/erdblick/cesium-interface/object.h b/libs/core/include/erdblick/cesium-interface/object.h index aa314d8c..5e735e18 100644 --- a/libs/core/include/erdblick/cesium-interface/object.h +++ b/libs/core/include/erdblick/cesium-interface/object.h @@ -1,247 +1,247 @@ -#pragma once - -#include -#include -#include "mapget/model/info.h" - -#ifdef EMSCRIPTEN -#include -#else -#include "nlohmann/json.hpp" -#endif - -namespace erdblick -{ - -#ifdef EMSCRIPTEN -using NativeJsValue = emscripten::val; -#else -using NativeJsValue = nlohmann::json; -#endif - -template -struct always_false : std::false_type {}; - -/** - * Class representing an emscripten JavaScript object, - * or a mock object based on an nlohmann::json value - * for debugging or compiling without emscripten support. - * - * The mock object has two JSON fields: - * - `properties` is a dict recording all field accesses. - * - `methodCalls` is a list containing dicts like {`methodName`: ..., `arguments`: [...]}. - */ -struct JsValue -{ - template - static auto UnpackNativeValue(T&& v) - { - if constexpr (std::is_base_of_v>) { - return *v; - } else { - return std::forward(v); - } - } - - /** - * Construct an Object from a global JavaScript name using em::val::global. - * If EMSCRIPTEN is not defined, simply returns an empty JSON object. - */ - static JsValue fromGlobal(std::string const& globalName); - - /** - * Construct an Object as a new JS or JSON dictionary with provided initializers. - * @param initializers An initializer list of key-value pairs. - */ - static JsValue Dict(std::initializer_list> initializers = {}); - - /** - * Construct an Object as a new JS or JSON list with provided initializers. - * @param initializers An initializer list of CesiumObject items. - */ - static JsValue List(std::initializer_list initializers = {}); - - /** - * Construct an Object as a new JS Float64 TypedArray. - * @param coordinates Float64 buffer to fill the typed array. - */ - static JsValue Float64Array(std::vector const& coordinates); - - /** - * Construct an undefined value. - */ - static JsValue Undefined(); - - /** Construct a JsValue from a variant with specific alternatives. */ - template - static JsValue fromVariant(T const& variant) { - JsValue result; - std::visit([&result](auto&& v){ - if constexpr (std::is_same_v, std::string_view>) { - result = JsValue(std::string(v)); - } else if constexpr (std::is_same_v, std::string>) { - result = JsValue(v); - } else if constexpr (std::is_same_v, int64_t>) { - result = JsValue(static_cast(v)); - } else { - static_assert(always_false::value, "Type of 'v' is not supported."); - } - }, variant); - return result; - } - - /** - * Constructs a JavaScript or JSON null value. - */ - JsValue(); - - /** - * Constructor from any type. - */ - template - explicit JsValue(T const& v) : value_(v) {} - - /** - * Default assignment/copy implementations. - */ - JsValue(const JsValue& other) = default; - JsValue(JsValue&& other) noexcept = default; - JsValue& operator=(const JsValue& other) = default; - JsValue& operator=(JsValue&& other) noexcept = default; - - /** - * Templated method for making arbitrary method calls. - * For EMSCRIPTEN, it will utilize the value_.call(Args...) function. - * For the mock version, it will add the method call to `methodCalls` and return an empty Object. - */ - template - ReturnType call(std::string const& methodName, Args... args); - - /** - * Property access using operator[]. - * Read-access to a non-existing mock property will add the property as an empty object. - */ - JsValue operator[](std::string const& propertyName); - - /** - * Assuming this is a dict, check if the entry with the given key exists. - */ - bool has(std::string const& propertyName); - - /** - * Get the value at the specified index, assuming that this - * is a list. For both EMSCRIPTEN and the mock version, - * it will return value_[i]. - */ - [[nodiscard]] JsValue at(uint32_t index) const; - - /** - * Set an object field or dictionary entry to a given value. - */ - void set(std::string const& key, JsValue const& value); - - /** - * Append a value, assuming that this value is a JS list. - * For EMSCRIPTEN, it will use value_.push(o.value_). - * For the mock version, it will append the push action to `methodCalls`. - */ - void push(const JsValue& o); - - /** - * Get the list length, assuming that this is a list. - * Returns ["length"] for EMSCRIPTEN, and .size() for - * the mock version. - */ - [[nodiscard]] uint32_t size() const; - - /** - * Convert this JsValue to string representation. - */ - std::string toString() const; - - enum class Type { - Undefined, - Null, - Bool, - Number, - String, - ObjectOrList - }; - - /** - * Get the type of this value. - */ - [[nodiscard]] Type type() const; - - template - T as() const { - #ifdef EMSCRIPTEN - return value_.as(); - #else - return value_.get(); - #endif - } - - /** - * Dereference operator to access the underlying value. - */ - inline NativeJsValue& operator*() {return value_;}; - inline const NativeJsValue& operator*() const {return value_;}; - - /** Turn a [key, value, keyN, valueN, ...] list into KeyValuePairs. */ - [[nodiscard]] mapget::KeyValuePairs toKeyValuePairs() const; - - /** - * Actual JS or JSON object. - */ - NativeJsValue value_; -}; - -template -ReturnType JsValue::call(std::string const& methodName, Args... args) -{ -#ifdef EMSCRIPTEN - return value_.call(methodName.c_str(), UnpackNativeValue(args)...); -#else - // Record the method call in the mock object - value_["methodCalls"].push_back({ - {"methodName", methodName}, - {"arguments", {UnpackNativeValue(args)...}} // This assumes Args are convertible to nlohmann::json - }); - return ReturnType(); // default-constructed value -#endif -} - -struct CesiumClass : public JsValue -{ -public: - explicit CesiumClass(std::string const& className); - - /** - * Create a new instance of the represented class using the provided arguments. - * For EMSCRIPTEN, it utilizes value_.new_(Args...). - * For the mock version, it will return an empty nlohmann JSON object. - */ - [[nodiscard]] JsValue New(std::initializer_list> kwArgs = {}) const; - template - JsValue New(Args... args) const; - -private: - std::string className_; -}; - -template -JsValue CesiumClass::New(Args... args) const -{ -#ifdef EMSCRIPTEN - auto result = value_.new_(args...); - return JsValue(result); -#else - return JsValue(nlohmann::json::object({ - {"className", className_}, - {"constructedWith", nlohmann::json::array({args...})} - })); -#endif -} - -} +#pragma once + +#include +#include +#include "mapget/model/info.h" + +#ifdef EMSCRIPTEN +#include +#else +#include "nlohmann/json.hpp" +#endif + +namespace erdblick +{ + +#ifdef EMSCRIPTEN +using NativeJsValue = emscripten::val; +#else +using NativeJsValue = nlohmann::json; +#endif + +template +struct always_false : std::false_type {}; + +/** + * Class representing an emscripten JavaScript object, + * or a mock object based on an nlohmann::json value + * for debugging or compiling without emscripten support. + * + * The mock object has two JSON fields: + * - `properties` is a dict recording all field accesses. + * - `methodCalls` is a list containing dicts like {`methodName`: ..., `arguments`: [...]}. + */ +struct JsValue +{ + template + static auto UnpackNativeValue(T&& v) + { + if constexpr (std::is_base_of_v>) { + return *v; + } else { + return std::forward(v); + } + } + + /** + * Construct an Object from a global JavaScript name using em::val::global. + * If EMSCRIPTEN is not defined, simply returns an empty JSON object. + */ + static JsValue fromGlobal(std::string const& globalName); + + /** + * Construct an Object as a new JS or JSON dictionary with provided initializers. + * @param initializers An initializer list of key-value pairs. + */ + static JsValue Dict(std::initializer_list> initializers = {}); + + /** + * Construct an Object as a new JS or JSON list with provided initializers. + * @param initializers An initializer list of CesiumObject items. + */ + static JsValue List(std::initializer_list initializers = {}); + + /** + * Construct an Object as a new JS Float64 TypedArray. + * @param coordinates Float64 buffer to fill the typed array. + */ + static JsValue Float64Array(std::vector const& coordinates); + + /** + * Construct an undefined value. + */ + static JsValue Undefined(); + + /** Construct a JsValue from a variant with specific alternatives. */ + template + static JsValue fromVariant(T const& variant) { + JsValue result; + std::visit([&result](auto&& v){ + if constexpr (std::is_same_v, std::string_view>) { + result = JsValue(std::string(v)); + } else if constexpr (std::is_same_v, std::string>) { + result = JsValue(v); + } else if constexpr (std::is_same_v, int64_t>) { + result = JsValue(static_cast(v)); + } else { + static_assert(always_false::value, "Type of 'v' is not supported."); + } + }, variant); + return result; + } + + /** + * Constructs a JavaScript or JSON null value. + */ + JsValue(); + + /** + * Constructor from any type. + */ + template + explicit JsValue(T const& v) : value_(v) {} + + /** + * Default assignment/copy implementations. + */ + JsValue(const JsValue& other) = default; + JsValue(JsValue&& other) noexcept = default; + JsValue& operator=(const JsValue& other) = default; + JsValue& operator=(JsValue&& other) noexcept = default; + + /** + * Templated method for making arbitrary method calls. + * For EMSCRIPTEN, it will utilize the value_.call(Args...) function. + * For the mock version, it will add the method call to `methodCalls` and return an empty Object. + */ + template + ReturnType call(std::string const& methodName, Args... args); + + /** + * Property access using operator[]. + * Read-access to a non-existing mock property will add the property as an empty object. + */ + JsValue operator[](std::string const& propertyName); + + /** + * Assuming this is a dict, check if the entry with the given key exists. + */ + bool has(std::string const& propertyName); + + /** + * Get the value at the specified index, assuming that this + * is a list. For both EMSCRIPTEN and the mock version, + * it will return value_[i]. + */ + [[nodiscard]] JsValue at(uint32_t index) const; + + /** + * Set an object field or dictionary entry to a given value. + */ + void set(std::string const& key, JsValue const& value); + + /** + * Append a value, assuming that this value is a JS list. + * For EMSCRIPTEN, it will use value_.push(o.value_). + * For the mock version, it will append the push action to `methodCalls`. + */ + void push(const JsValue& o); + + /** + * Get the list length, assuming that this is a list. + * Returns ["length"] for EMSCRIPTEN, and .size() for + * the mock version. + */ + [[nodiscard]] uint32_t size() const; + + /** + * Convert this JsValue to string representation. + */ + std::string toString() const; + + enum class Type { + Undefined, + Null, + Bool, + Number, + String, + ObjectOrList + }; + + /** + * Get the type of this value. + */ + [[nodiscard]] Type type() const; + + template + T as() const { + #ifdef EMSCRIPTEN + return value_.as(); + #else + return value_.get(); + #endif + } + + /** + * Dereference operator to access the underlying value. + */ + inline NativeJsValue& operator*() {return value_;}; + inline const NativeJsValue& operator*() const {return value_;}; + + /** Turn a [key, value, keyN, valueN, ...] list into KeyValuePairs. */ + [[nodiscard]] mapget::KeyValuePairs toKeyValuePairs() const; + + /** + * Actual JS or JSON object. + */ + NativeJsValue value_; +}; + +template +ReturnType JsValue::call(std::string const& methodName, Args... args) +{ +#ifdef EMSCRIPTEN + return value_.call(methodName.c_str(), UnpackNativeValue(args)...); +#else + // Record the method call in the mock object + value_["methodCalls"].push_back({ + {"methodName", methodName}, + {"arguments", {UnpackNativeValue(args)...}} // This assumes Args are convertible to nlohmann::json + }); + return ReturnType(); // default-constructed value +#endif +} + +struct CesiumClass : public JsValue +{ +public: + explicit CesiumClass(std::string const& className); + + /** + * Create a new instance of the represented class using the provided arguments. + * For EMSCRIPTEN, it utilizes value_.new_(Args...). + * For the mock version, it will return an empty nlohmann JSON object. + */ + [[nodiscard]] JsValue New(std::initializer_list> kwArgs = {}) const; + template + JsValue New(Args... args) const; + +private: + std::string className_; +}; + +template +JsValue CesiumClass::New(Args... args) const +{ +#ifdef EMSCRIPTEN + auto result = value_.new_(UnpackNativeValue(args)...); + return JsValue(result); +#else + return JsValue(nlohmann::json::object({ + {"className", className_}, + {"constructedWith", nlohmann::json::array({UnpackNativeValue(args)...})} + })); +#endif +} + +} diff --git a/libs/core/include/erdblick/cesium-interface/primitive.h b/libs/core/include/erdblick/cesium-interface/primitive.h index 7e69b465..6ee07f29 100644 --- a/libs/core/include/erdblick/cesium-interface/primitive.h +++ b/libs/core/include/erdblick/cesium-interface/primitive.h @@ -1,139 +1,139 @@ -#pragma once - -#include "object.h" -#include "mapget/model/tileid.h" -#include "../rule.h" - -namespace erdblick -{ - -/** - * C++ Interface for the Cesium Primitive class. See - * https://cesium.com/learn/cesiumjs/ref-doc/Primitive.html - * - * The actual Cesium primitive is constructed after all geometry - * has been added, by calling `toJsObject`. This is, because - * the JS primitive constructor already expects all geometry to be ready. - */ -struct CesiumPrimitive -{ - /** - * Create a primitive which uses the PolylineColorAppearance. - * See https://cesium.com/learn/cesiumjs/ref-doc/PolylineColorAppearance.html - */ - static CesiumPrimitive withPolylineColorAppearance(bool clampToGround = false); - - /** - * Create a primitive which uses the PolylineMaterialAppearance for PolylineDash material. - * See https://cesium.com/learn/cesiumjs/ref-doc/PolylineMaterialAppearance.html - * See https://cesium.com/learn/cesiumjs/ref-doc/Material.html - */ - static CesiumPrimitive withPolylineDashMaterialAppearance( - const FeatureStyleRule& style, - bool clampToGround, - glm::fvec4 const& resolvedColor); - - /** - * Create a primitive which uses the PolylineMaterialAppearance for PolylineArrow material. - * See https://cesium.com/learn/cesiumjs/ref-doc/PolylineMaterialAppearance.html - * See https://cesium.com/learn/cesiumjs/ref-doc/Material.html - */ - static CesiumPrimitive withPolylineArrowMaterialAppearance( - const FeatureStyleRule& style, - bool clampToGround, - glm::fvec4 const& resolvedColor); - - /** - * Create a primitive which uses the PerInstanceColorAppearance. - * See https://cesium.com/learn/cesiumjs/ref-doc/PerInstanceColorAppearance.html - * - * The parameter flatAndSynchronous must be set to true for primitives - * which contain basic triangle meshes. In the future, we can also have - * smoothly shaded triangle meshes by calling Cesium.GeometryPipeline.computeNormal - * and Cesium.GeometryPipeline.compressVertices on the mesh geometry. - */ - static CesiumPrimitive withPerInstanceColorAppearance(bool flatAndSynchronous = false, bool clampToGround = false); - - /** - * Add a 3D polyline to the primitive. The provided vertices - * must be a JS list of Point objects in Cesium cartesian coordinates. - * - * Note: In order to visualize the line correctly, the primitive - * must have been constructed using withPolyline*Appearance. - */ - void addPolyLine( - JsValue const& vertices, - FeatureStyleRule const& style, - JsValue const& id, - BoundEvalFun const& evalFun); - - /** - * Add a 3D polygon to the primitive. The provided vertices - * must be a JS list of Point objects in Cesium cartesian coordinates. - * - * Note: In order to visualize the polygon correctly, the primitive - * must have been constructed using withPerInstanceColorAppearance. - */ - void addPolygon( - JsValue const& vertices, - FeatureStyleRule const& style, - JsValue const& id, - BoundEvalFun const& evalFun); - - /** - * Add a 3D triangle mesh to the primitive. The provided vertices - * must be a JS Float64Array like [x0,y0,z0,x1,y1,z2...]. This is unlike other functions - * here which need a JS list of Point objects, due to Cesium internals. - * - * Note: In order to visualize the triangles correctly, the primitive - * must have been constructed using withPerInstanceColorAppearance(true). - */ - void addTriangles( - JsValue const& float64Array, - FeatureStyleRule const& style, - JsValue const& id, - BoundEvalFun const& evalFun); - - /** - * Constructs a JS Primitive from the provided Geometry instances. - */ - [[nodiscard]] NativeJsValue toJsObject() const; - - /** - * Check if any geometry has been added to the primitive. - */ - [[nodiscard]] bool empty() const; - -private: - /** - * Add a Cesium GeometryInstance which wraps a Cesium Geometry, - * and add it to this primitive's geometryInstances_ collection. - */ - void addGeometryInstance( - const FeatureStyleRule& style, - JsValue const& id, - const JsValue& geom, - BoundEvalFun const& evalFun); - - /** Number of entries in geometryInstances_. */ - size_t numGeometryInstances_ = 0; - - /** geometryInstances option for the Primitive JS Object ctor. */ - JsValue geometryInstances_ = JsValue::List(); - - /** appearance option for the Primitive JS Object ctor. */ - JsValue appearance_; - JsValue material_; - - /** Flag which enables the direct triangle display required for addTriangles. */ - bool flatAndSynchronous_ = false; - - /** Flags to clamp geometries to ground. */ - bool clampToGround_ = false; - bool polyLinePrimitive_ = false; - - /** Flag to control if we need to compute the color for every geometry instance. */ - bool perInstanceColor_ = false; -}; - -} +#pragma once + +#include "object.h" +#include "mapget/model/tileid.h" +#include "../rule.h" + +namespace erdblick +{ + +/** + * C++ Interface for the Cesium Primitive class. See + * https://cesium.com/learn/cesiumjs/ref-doc/Primitive.html + * + * The actual Cesium primitive is constructed after all geometry + * has been added, by calling `toJsObject`. This is, because + * the JS primitive constructor already expects all geometry to be ready. + */ +struct CesiumPrimitive +{ + /** + * Create a primitive which uses the PolylineColorAppearance. + * See https://cesium.com/learn/cesiumjs/ref-doc/PolylineColorAppearance.html + */ + static CesiumPrimitive withPolylineColorAppearance(bool clampToGround = false); + + /** + * Create a primitive which uses the PolylineMaterialAppearance for PolylineDash material. + * See https://cesium.com/learn/cesiumjs/ref-doc/PolylineMaterialAppearance.html + * See https://cesium.com/learn/cesiumjs/ref-doc/Material.html + */ + static CesiumPrimitive withPolylineDashMaterialAppearance( + const FeatureStyleRule& style, + bool clampToGround, + glm::fvec4 const& resolvedColor); + + /** + * Create a primitive which uses the PolylineMaterialAppearance for PolylineArrow material. + * See https://cesium.com/learn/cesiumjs/ref-doc/PolylineMaterialAppearance.html + * See https://cesium.com/learn/cesiumjs/ref-doc/Material.html + */ + static CesiumPrimitive withPolylineArrowMaterialAppearance( + const FeatureStyleRule& style, + bool clampToGround, + glm::fvec4 const& resolvedColor); + + /** + * Create a primitive which uses the PerInstanceColorAppearance. + * See https://cesium.com/learn/cesiumjs/ref-doc/PerInstanceColorAppearance.html + * + * The parameter flatAndSynchronous must be set to true for primitives + * which contain basic triangle meshes. In the future, we can also have + * smoothly shaded triangle meshes by calling Cesium.GeometryPipeline.computeNormal + * and Cesium.GeometryPipeline.compressVertices on the mesh geometry. + */ + static CesiumPrimitive withPerInstanceColorAppearance(bool flatAndSynchronous = false, bool clampToGround = false); + + /** + * Add a 3D polyline to the primitive. The provided vertices + * must be a JS list of Point objects in Cesium cartesian coordinates. + * + * Note: In order to visualize the line correctly, the primitive + * must have been constructed using withPolyline*Appearance. + */ + void addPolyLine( + JsValue const& vertices, + FeatureStyleRule const& style, + JsValue const& id, + BoundEvalFun const& evalFun); + + /** + * Add a 3D polygon to the primitive. The provided vertices + * must be a JS list of Point objects in Cesium cartesian coordinates. + * + * Note: In order to visualize the polygon correctly, the primitive + * must have been constructed using withPerInstanceColorAppearance. + */ + void addPolygon( + JsValue const& vertices, + FeatureStyleRule const& style, + JsValue const& id, + BoundEvalFun const& evalFun); + + /** + * Add a 3D triangle mesh to the primitive. The provided vertices + * must be a JS Float64Array like [x0,y0,z0,x1,y1,z2...]. This is unlike other functions + * here which need a JS list of Point objects, due to Cesium internals. + * + * Note: In order to visualize the triangles correctly, the primitive + * must have been constructed using withPerInstanceColorAppearance(true). + */ + void addTriangles( + JsValue const& float64Array, + FeatureStyleRule const& style, + JsValue const& id, + BoundEvalFun const& evalFun); + + /** + * Constructs a JS Primitive from the provided Geometry instances. + */ + [[nodiscard]] NativeJsValue toJsObject() const; + + /** + * Check if any geometry has been added to the primitive. + */ + [[nodiscard]] bool empty() const; + +private: + /** + * Add a Cesium GeometryInstance which wraps a Cesium Geometry, + * and add it to this primitive's geometryInstances_ collection. + */ + void addGeometryInstance( + const FeatureStyleRule& style, + JsValue const& id, + const JsValue& geom, + BoundEvalFun const& evalFun); + + /** Number of entries in geometryInstances_. */ + size_t numGeometryInstances_ = 0; + + /** geometryInstances option for the Primitive JS Object ctor. */ + JsValue geometryInstances_ = JsValue::List(); + + /** appearance option for the Primitive JS Object ctor. */ + JsValue appearance_; + JsValue material_; + + /** Flag which enables the direct triangle display required for addTriangles. */ + bool synchronous_ = false; + + /** Flags to clamp geometries to ground. */ + bool clampToGround_ = false; + bool polyLinePrimitive_ = false; + + /** Flag to control if we need to compute the color for every geometry instance. */ + bool perInstanceColor_ = false; +}; + +} diff --git a/libs/core/include/erdblick/parser.h b/libs/core/include/erdblick/parser.h index b1518c42..be7339c2 100644 --- a/libs/core/include/erdblick/parser.h +++ b/libs/core/include/erdblick/parser.h @@ -1,139 +1,139 @@ -#pragma once - -#include "mapget/model/stream.h" -#include "mapget/model/featurelayer.h" -#include "buffer.h" -#include "cesium-interface/object.h" -#include "mapget/model/featurelayer.h" -#include "mapget/model/sourcedatalayer.h" -#include "layer.h" - -namespace erdblick -{ - -class TileLayerParser -{ - friend class TestDataProvider; - -public: - explicit TileLayerParser(); - - /** - * Update the data source info metadata which the parser uses - * to supply parsed TileFeatureLayers with map metadata info. - */ - void setDataSourceInfo(SharedUint8Array const& dataSourceInfoJson); - - /** - * Get the data source info JSON that was set earlier. - */ - void getDataSourceInfo(SharedUint8Array& dataSourceInfoJson, std::string const& mapId); - - /** - * Parse a TileFeatureLayer from a buffer as returned by writeTileFeatureLayer. - */ - TileFeatureLayer readTileFeatureLayer(SharedUint8Array const& buffer); - - /** - * Parse a TileSourceDataLayer from a buffer. - */ - TileSourceDataLayer readTileSourceDataLayer(SharedUint8Array const& buffer); - - /** - * Parse only the stringified MapTileKey and tile id from the tile layer blob. - * Returns two-element JS list, containing both. - */ - struct TileLayerMetadata { - std::string id; - std::string nodeId; - std::string mapName; - std::string layerName; - uint64_t tileId; - int32_t numFeatures; - uint32_t fillTime; - }; - TileLayerMetadata readTileLayerMetadata(SharedUint8Array const& buffer); - - /** - * Reset the parser by removing any buffered unparsed stream chunks. - */ - void reset(); - - /** - * Access the field id dictionary offsets as currently known by this parser. - * This is used to tell the server whether additional field-id mapping updates - * need to be sent. - */ - NativeJsValue getFieldDictOffsets(); - - /** - * Add a chunk of streamed fields into this TileLayerParser. - */ - void readFieldDictUpdate(SharedUint8Array const& buffer); - - /** - * Get a serialized field dictionary, which can be passed into addFieldDict(). - */ - void getFieldDict(SharedUint8Array& out, std::string const& nodeId); - - /** - * Add a serialized field dictionary that is not wrapped in a message frame. - */ - void addFieldDict(SharedUint8Array const& buffer); - - /** - * Set layer info which will be used if the external doesn't fit. - * Used for test data, which does not have layer info among the - * info fetched from the connected mapget service. - */ - void setFallbackLayerInfo(std::shared_ptr info); - - /** - * Aggregates a feature type id composition with map-layers - * that provide this type. - */ - struct FeatureJumpTarget - { - std::string name_; - std::vector maps_; - std::vector idParts_; - std::shared_ptr layerInfo_; - }; - - /** - * A single result from filterFeatureJumpTargets. - */ - struct FilteredFeatureJumpTarget - { - FeatureJumpTarget const& jumpTarget_; - mapget::KeyValuePairs parsedParams_; - std::optional error_; - - JsValue toJsValue() const; - }; - - /** - * Takes a parameter string. - * Checks if the first parameter is the prefix of a feature type name. - * No valid feature type prefix: Try parsing with all feature types. - * Otherwise: Try only feature type names where the prefix matches. - * @return Vector of parsing results. An invalid parsing result will have - * a set `error_`. The Id-Part-values of errored parses may be indicative - * of the problem, e.g. `Expecting I32`. - */ - std::vector filterFeatureJumpTargets(std::string const& queryString) const; - - std::map info_; - std::unique_ptr reader_; - std::shared_ptr cachedStrings_; - std::function tileParsedFun_; - std::shared_ptr fallbackLayerInfo_; - - std::shared_ptr - resolveMapLayerInfo(std::string const& mapId, std::string const& layerId); - - /** Type info registry. */ - std::map featureJumpTargets_; -}; - -} +#pragma once + +#include "mapget/model/stream.h" +#include "mapget/model/featurelayer.h" +#include "buffer.h" +#include "cesium-interface/object.h" +#include "mapget/model/featurelayer.h" +#include "mapget/model/sourcedatalayer.h" +#include "layer.h" + +namespace erdblick +{ + +class TileLayerParser +{ + friend class TestDataProvider; + +public: + explicit TileLayerParser(); + + /** + * Update the data source info metadata which the parser uses + * to supply parsed TileFeatureLayers with map metadata info. + */ + void setDataSourceInfo(SharedUint8Array const& dataSourceInfoJson); + + /** + * Get the data source info JSON that was set earlier. + */ + void getDataSourceInfo(SharedUint8Array& dataSourceInfoJson, std::string const& mapId); + + /** + * Parse a TileFeatureLayer from a buffer as returned by writeTileFeatureLayer. + */ + TileFeatureLayer readTileFeatureLayer(SharedUint8Array const& buffer); + + /** + * Parse a TileSourceDataLayer from a buffer. + */ + TileSourceDataLayer readTileSourceDataLayer(SharedUint8Array const& buffer); + + /** + * Parse only the stringified MapTileKey and tile id from the tile layer blob. + * Returns two-element JS list, containing both. + */ + struct TileLayerMetadata { + std::string id; + std::string nodeId; + std::string mapName; + std::string layerName; + uint64_t tileId; + int32_t numFeatures; + NativeJsValue scalarFields; + }; + TileLayerMetadata readTileLayerMetadata(SharedUint8Array const& buffer); + + /** + * Reset the parser by removing any buffered unparsed stream chunks. + */ + void reset(); + + /** + * Access the field id dictionary offsets as currently known by this parser. + * This is used to tell the server whether additional field-id mapping updates + * need to be sent. + */ + NativeJsValue getFieldDictOffsets(); + + /** + * Add a chunk of streamed fields into this TileLayerParser. + */ + void readFieldDictUpdate(SharedUint8Array const& buffer); + + /** + * Get a serialized field dictionary, which can be passed into addFieldDict(). + */ + void getFieldDict(SharedUint8Array& out, std::string const& nodeId); + + /** + * Add a serialized field dictionary that is not wrapped in a message frame. + */ + void addFieldDict(SharedUint8Array const& buffer); + + /** + * Set layer info which will be used if the external doesn't fit. + * Used for test data, which does not have layer info among the + * info fetched from the connected mapget service. + */ + void setFallbackLayerInfo(std::shared_ptr info); + + /** + * Aggregates a feature type id composition with map-layers + * that provide this type. + */ + struct FeatureJumpTarget + { + std::string name_; + std::vector maps_; + std::vector idParts_; + std::shared_ptr layerInfo_; + }; + + /** + * A single result from filterFeatureJumpTargets. + */ + struct FilteredFeatureJumpTarget + { + FeatureJumpTarget const& jumpTarget_; + mapget::KeyValuePairs parsedParams_; + std::optional error_; + + JsValue toJsValue() const; + }; + + /** + * Takes a parameter string. + * Checks if the first parameter is the prefix of a feature type name. + * No valid feature type prefix: Try parsing with all feature types. + * Otherwise: Try only feature type names where the prefix matches. + * @return Vector of parsing results. An invalid parsing result will have + * a set `error_`. The Id-Part-values of errored parses may be indicative + * of the problem, e.g. `Expecting I32`. + */ + std::vector filterFeatureJumpTargets(std::string const& queryString) const; + + std::map info_; + std::unique_ptr reader_; + std::shared_ptr cachedStrings_; + std::function tileParsedFun_; + std::shared_ptr fallbackLayerInfo_; + + std::shared_ptr + resolveMapLayerInfo(std::string const& mapId, std::string const& layerId); + + /** Type info registry. */ + std::map featureJumpTargets_; +}; + +} diff --git a/libs/core/src/bindings.cpp b/libs/core/src/bindings.cpp index ef2485d7..504dd115 100644 --- a/libs/core/src/bindings.cpp +++ b/libs/core/src/bindings.cpp @@ -446,7 +446,7 @@ EMSCRIPTEN_BINDINGS(erdblick) .field("layerName", &TileLayerParser::TileLayerMetadata::layerName) .field("tileId", &TileLayerParser::TileLayerMetadata::tileId) .field("numFeatures", &TileLayerParser::TileLayerMetadata::numFeatures) - .field("fillTime", &TileLayerParser::TileLayerMetadata::fillTime); + .field("scalarFields", &TileLayerParser::TileLayerMetadata::scalarFields); ////////// TileLayerParser em::class_("TileLayerParser") diff --git a/libs/core/src/cesium-interface/primitive.cpp b/libs/core/src/cesium-interface/primitive.cpp index b59dea93..12a23a21 100644 --- a/libs/core/src/cesium-interface/primitive.cpp +++ b/libs/core/src/cesium-interface/primitive.cpp @@ -1,159 +1,167 @@ -#include -#include -#include "cesium-interface/primitive.h" -#include "cesium-interface/cesium.h" -#include "cesium-interface/point-conversion.h" - -namespace erdblick { - -CesiumPrimitive CesiumPrimitive::withPolylineColorAppearance(bool clampToGround) { - CesiumPrimitive result; - result.appearance_ = Cesium().PolylineColorAppearance.New(); - result.clampToGround_ = clampToGround; - result.polyLinePrimitive_ = true; - result.perInstanceColor_ = true; - return result; -} - -CesiumPrimitive CesiumPrimitive::withPolylineDashMaterialAppearance( - const FeatureStyleRule &style, - bool clampToGround, - glm::fvec4 const &resolvedColor) { - CesiumPrimitive result; - auto const &gapColor = style.gapColor(); - result.appearance_ = Cesium().PolylineMaterialAppearance.New({ - {"material", Cesium().MaterialFromType("PolylineDash", JsValue::Dict({ - {"color", Cesium().Color.New(resolvedColor.r, resolvedColor.g, resolvedColor.b, resolvedColor.a)}, - {"gapColor", Cesium().Color.New(gapColor.r, gapColor.g, gapColor.b, gapColor.a)}, - {"dashLength", JsValue(style.dashLength())}, - {"dashPattern", JsValue(style.dashPattern())} - }))} - }); - result.clampToGround_ = clampToGround; - result.polyLinePrimitive_ = true; - return result; -} - -CesiumPrimitive CesiumPrimitive::withPolylineArrowMaterialAppearance( - const FeatureStyleRule &style, - bool clampToGround, - glm::fvec4 const &resolvedColor) { - CesiumPrimitive result; - result.appearance_ = Cesium().PolylineMaterialAppearance.New({ - {"material", Cesium().MaterialFromType("PolylineArrow", JsValue::Dict({ - {"color", Cesium().Color.New(resolvedColor.r, resolvedColor.g, resolvedColor.b, resolvedColor.a)} - }))} - }); - result.clampToGround_ = clampToGround; - result.polyLinePrimitive_ = true; - return result; -} - -CesiumPrimitive CesiumPrimitive::withPerInstanceColorAppearance(bool flatAndSynchronous, bool clampToGround) { - CesiumPrimitive result; - result.flatAndSynchronous_ = flatAndSynchronous; - result.appearance_ = Cesium().PerInstanceColorAppearance.New({ - {"flat", JsValue(flatAndSynchronous)} - }); - result.clampToGround_ = clampToGround; - result.polyLinePrimitive_ = false; - result.perInstanceColor_ = true; - return result; -} - -void CesiumPrimitive::addPolyLine( - JsValue const &vertices, - FeatureStyleRule const &style, - JsValue const& id, - BoundEvalFun const &evalFun) { - JsValue polyline; - if (clampToGround_) { - polyline = Cesium().GroundPolylineGeometry.New({ - {"positions", vertices}, - {"width", JsValue(style.width())} - }); - } else { - polyline = Cesium().PolylineGeometry.New({ - {"positions", vertices}, - {"width", JsValue(style.width())}, - {"arcType", Cesium().ArcType["NONE"]} - }); - } - addGeometryInstance(style, id, polyline, evalFun); -} - -void CesiumPrimitive::addPolygon( - const JsValue &vertices, - const FeatureStyleRule &style, - JsValue const& id, - BoundEvalFun const &evalFun) { - auto polygon = Cesium().PolygonGeometry.New({ - {"polygonHierarchy", Cesium().PolygonHierarchy.New(*vertices)}, - {"arcType", Cesium().ArcType["GEODESIC"]}, - {"perPositionHeight", JsValue(true)} - }); - addGeometryInstance(style, id, polygon, evalFun); -} - -void CesiumPrimitive::addTriangles( - const JsValue &float64Array, - const FeatureStyleRule &style, - JsValue const& id, - BoundEvalFun const &evalFun) { - auto geometry = Cesium().Geometry.New({ - {"attributes", JsValue::Dict({ - {"position", Cesium().GeometryAttribute.New({ - {"componentDatatype", Cesium().ComponentDatatype["DOUBLE"]}, - {"componentsPerAttribute", JsValue(3)}, - {"values", float64Array} - })} - })}, - {"boundingSphere", JsValue(Cesium().BoundingSphere.call("fromVertices", *float64Array))} - }); - addGeometryInstance(style, id, geometry, evalFun); -} - -void CesiumPrimitive::addGeometryInstance( - const FeatureStyleRule &style, - JsValue const& id, - const JsValue &geom, - BoundEvalFun const &evalFun) { - auto attributes = JsValue::Dict(); - if (perInstanceColor_) { - auto const color = style.color(evalFun); - attributes.set("color", Cesium().ColorGeometryInstanceAttribute.New(color.r, color.g, color.b, color.a)); - } - auto geometryInstance = Cesium().GeometryInstance.New({ - {"geometry", geom}, - {"id", id}, - {"attributes", attributes} - }); - ++numGeometryInstances_; - geometryInstances_.push(geometryInstance); -} - -NativeJsValue CesiumPrimitive::toJsObject() const { - JsValue result; - - auto primitiveOptions = JsValue::Dict({ - {"geometryInstances", geometryInstances_}, - {"appearance", appearance_}, - {"releaseGeometryInstances", JsValue(true)}, - {"asynchronous", JsValue(!flatAndSynchronous_)} - }); - - if (clampToGround_ && polyLinePrimitive_) - result = Cesium().GroundPolylinePrimitive.New(*primitiveOptions); - else if (clampToGround_) - result = Cesium().GroundPrimitive.New(*primitiveOptions); - else - result = Cesium().Primitive.New(*primitiveOptions); - - return *result; -} - -bool CesiumPrimitive::empty() const { - return numGeometryInstances_ == 0; -} - +#include +#include +#include "cesium-interface/primitive.h" +#include "cesium-interface/cesium.h" +#include "cesium-interface/point-conversion.h" + +namespace erdblick { + +CesiumPrimitive CesiumPrimitive::withPolylineColorAppearance(bool clampToGround) { + CesiumPrimitive result; + result.appearance_ = Cesium().PolylineColorAppearance.New(); + result.clampToGround_ = clampToGround; + result.polyLinePrimitive_ = true; + result.perInstanceColor_ = true; + result.synchronous_ = true; + return result; +} + +CesiumPrimitive CesiumPrimitive::withPolylineDashMaterialAppearance( + const FeatureStyleRule &style, + bool clampToGround, + glm::fvec4 const &resolvedColor) { + CesiumPrimitive result; + auto const &gapColor = style.gapColor(); + result.appearance_ = Cesium().PolylineMaterialAppearance.New({ + {"material", Cesium().MaterialFromType("PolylineDash", JsValue::Dict({ + {"color", Cesium().Color.New(resolvedColor.r, resolvedColor.g, resolvedColor.b, resolvedColor.a)}, + {"gapColor", Cesium().Color.New(gapColor.r, gapColor.g, gapColor.b, gapColor.a)}, + {"dashLength", JsValue(style.dashLength())}, + {"dashPattern", JsValue(style.dashPattern())} + }))} + }); + result.clampToGround_ = clampToGround; + result.polyLinePrimitive_ = true; + return result; +} + +CesiumPrimitive CesiumPrimitive::withPolylineArrowMaterialAppearance( + const FeatureStyleRule &style, + bool clampToGround, + glm::fvec4 const &resolvedColor) { + CesiumPrimitive result; + result.appearance_ = Cesium().PolylineMaterialAppearance.New({ + {"material", Cesium().MaterialFromType("PolylineArrow", JsValue::Dict({ + {"color", Cesium().Color.New(resolvedColor.r, resolvedColor.g, resolvedColor.b, resolvedColor.a)} + }))} + }); + result.clampToGround_ = clampToGround; + result.polyLinePrimitive_ = true; + return result; +} + +CesiumPrimitive CesiumPrimitive::withPerInstanceColorAppearance(bool flatAndSynchronous, bool clampToGround) { + CesiumPrimitive result; + result.synchronous_ = flatAndSynchronous; + result.appearance_ = Cesium().PerInstanceColorAppearance.New({ + {"flat", JsValue(flatAndSynchronous)} + }); + result.clampToGround_ = clampToGround; + result.polyLinePrimitive_ = false; + result.perInstanceColor_ = true; + return result; +} + +void CesiumPrimitive::addPolyLine( + JsValue const &vertices, + FeatureStyleRule const &style, + JsValue const& id, + BoundEvalFun const &evalFun) { + JsValue polylineArgs; + CesiumClass* polylineClass = nullptr; + if (clampToGround_) { + polylineClass = &Cesium().GroundPolylineGeometry; + polylineArgs = JsValue::Dict({ + {"positions", vertices}, + {"width", JsValue(style.width())} + }); + } else { + polylineClass = &Cesium().PolylineGeometry; + polylineArgs = JsValue::Dict({ + {"positions", vertices}, + {"width", JsValue(style.width())}, + {"arcType", Cesium().ArcType["NONE"]} + }); + } + auto polyline = polylineClass->New(polylineArgs); + if (synchronous_) { + polyline = JsValue(polylineClass->call("createGeometry", polyline)); + } + addGeometryInstance(style, id, polyline, evalFun); +} + +void CesiumPrimitive::addPolygon( + const JsValue &vertices, + const FeatureStyleRule &style, + JsValue const& id, + BoundEvalFun const &evalFun) { + auto polygon = Cesium().PolygonGeometry.New({ + {"polygonHierarchy", Cesium().PolygonHierarchy.New(*vertices)}, + {"arcType", Cesium().ArcType["GEODESIC"]}, + {"perPositionHeight", JsValue(true)} + }); + addGeometryInstance(style, id, polygon, evalFun); +} + +void CesiumPrimitive::addTriangles( + const JsValue &float64Array, + const FeatureStyleRule &style, + JsValue const& id, + BoundEvalFun const &evalFun) { + auto geometry = Cesium().Geometry.New({ + {"attributes", JsValue::Dict({ + {"position", Cesium().GeometryAttribute.New({ + {"componentDatatype", Cesium().ComponentDatatype["DOUBLE"]}, + {"componentsPerAttribute", JsValue(3)}, + {"values", float64Array} + })} + })}, + {"boundingSphere", JsValue(Cesium().BoundingSphere.call("fromVertices", *float64Array))} + }); + addGeometryInstance(style, id, geometry, evalFun); +} + +void CesiumPrimitive::addGeometryInstance( + const FeatureStyleRule &style, + JsValue const& id, + const JsValue &geom, + BoundEvalFun const &evalFun) { + auto attributes = JsValue::Dict(); + if (perInstanceColor_) { + auto const color = style.color(evalFun); + attributes.set("color", Cesium().ColorGeometryInstanceAttribute.New(color.r, color.g, color.b, color.a)); + } + auto geometryInstance = Cesium().GeometryInstance.New({ + {"geometry", geom}, + {"id", id}, + {"attributes", attributes} + }); + ++numGeometryInstances_; + geometryInstances_.push(geometryInstance); +} + +NativeJsValue CesiumPrimitive::toJsObject() const { + JsValue result; + + auto primitiveOptions = JsValue::Dict({ + {"geometryInstances", geometryInstances_}, + {"appearance", appearance_}, + {"releaseGeometryInstances", JsValue(true)}, + {"asynchronous", JsValue(!synchronous_)} + }); + + if (clampToGround_ && polyLinePrimitive_) + result = Cesium().GroundPolylinePrimitive.New(*primitiveOptions); + else if (clampToGround_) + result = Cesium().GroundPrimitive.New(*primitiveOptions); + else + result = Cesium().Primitive.New(*primitiveOptions); + + return *result; +} + +bool CesiumPrimitive::empty() const { + return numGeometryInstances_ == 0; +} + } \ No newline at end of file diff --git a/libs/core/src/parser.cpp b/libs/core/src/parser.cpp index 61893af5..0bf080c3 100644 --- a/libs/core/src/parser.cpp +++ b/libs/core/src/parser.cpp @@ -1,280 +1,284 @@ -#include -#include -#include "mapget/model/stringpool.h" -#include "parser.h" - -using namespace mapget; - -namespace erdblick -{ - -TileLayerParser::TileLayerParser() -{ - // Create field dict cache - cachedStrings_ = std::make_shared(); - - // Create fresh mapget stream parser. - reset(); -} - -void TileLayerParser::setDataSourceInfo(const erdblick::SharedUint8Array& dataSourceInfoJson) -{ - // Parse data source info - auto srcInfoParsed = nlohmann::json::parse(dataSourceInfoJson.toString()); - - // Index available feature types by their feature id compositions. - // These will be the available jump-to-feature targets. - // For each composition, allow a version with and without optional params. - for (auto const& node : srcInfoParsed) { - auto dsInfo = DataSourceInfo::fromJson(node); - if (dsInfo.isAddOn_) { - // Do not expose add-on datasources in the frontend. - continue; - } - for (auto const& [_, l] : dsInfo.layers_) { - for (auto const& tp : l->featureTypes_) { - for (auto const& composition : tp.uniqueIdCompositions_) { - for (auto const& withOptionals : {false, true}) { - std::vector idParts; - std::stringstream compositionId; - compositionId << tp.name_; - - for (auto const& idPart : composition) { - if (!idPart.isOptional_ || withOptionals) { - compositionId << "." << idPart.idPartLabel_ << ":" << static_cast(idPart.datatype_); - idParts.push_back(idPart); - } - } - - auto& typeInfo = featureJumpTargets_[compositionId.str()]; - if (typeInfo.idParts_.empty()) { - typeInfo.idParts_ = idParts; - typeInfo.name_ = tp.name_; - typeInfo.layerInfo_ = l; - } - if (std::ranges::find(typeInfo.maps_, dsInfo.mapId_) == typeInfo.maps_.end()) - typeInfo.maps_.emplace_back(dsInfo.mapId_); - } - } - } - } - - info_.emplace(dsInfo.mapId_, std::move(dsInfo)); - } -} - -void TileLayerParser::readFieldDictUpdate(SharedUint8Array const& bytes) -{ - try { - reader_->read(bytes.toString()); - } - catch(std::exception const& e) { - std::cout << "ERROR: " << e.what() << std::endl; - } -} - -NativeJsValue TileLayerParser::getFieldDictOffsets() -{ - auto offsets = reader_->stringPoolCache()->stringPoolOffsets(); - auto result = JsValue::Dict(); - for (auto const& [nodeId, highestFieldId] : offsets) - result.set(nodeId, JsValue(highestFieldId)); - return *result; -} - -void TileLayerParser::reset() -{ - // Note: The reader is only ever used to read field dict updates. - // For this, it does not need a layer info provider or onParsedLayer callback. - reader_ = std::make_unique( - [](auto&& mapId, auto&& layerId){return nullptr;}, - [](auto&& layer){}, - cachedStrings_); -} - -TileFeatureLayer TileLayerParser::readTileFeatureLayer(const SharedUint8Array& buffer) -{ - std::stringstream inputStream; - inputStream << buffer.toString(); - auto result = TileFeatureLayer(std::make_shared( - inputStream, - [this](auto&& mapId, auto&& layerId) - { - return resolveMapLayerInfo(std::string(mapId), std::string(layerId)); - }, - [this](auto&& nodeId) { return cachedStrings_->getStringPool(nodeId); })); - return result; -} - -TileSourceDataLayer TileLayerParser::readTileSourceDataLayer(SharedUint8Array const& buffer) -{ - std::stringstream inputStream; - inputStream << buffer.toString(); - auto result = TileSourceDataLayer(std::make_shared( - inputStream, - [this](auto&& mapId, auto&& layerId) - { - return resolveMapLayerInfo(std::string(mapId), std::string(layerId)); - }, - [this](auto&& nodeId) { return cachedStrings_->getStringPool(nodeId); })); - return result; -} - -TileLayerParser::TileLayerMetadata TileLayerParser::readTileLayerMetadata(const SharedUint8Array& buffer) -{ - std::stringstream inputStream; - inputStream << buffer.toString(); - // Parse just the TileLayer part of the blob, which is the base class of - // e.g. the TileFeatureLayer. The base class blob always precedes the - // blob from the derived class. - TileLayer tileLayer( - inputStream, - [this](auto&& mapId, auto&& layerId) - { - return resolveMapLayerInfo(std::string(mapId), std::string(layerId)); - } - ); - int32_t numFeatures = -1; - uint32_t fillTime = 0; - auto layerInfo = tileLayer.info(); - if (layerInfo.is_object()) { - numFeatures = layerInfo.value("num-features", -1); - fillTime = layerInfo.value("fill-time", -1); - } - return { - tileLayer.id().toString(), - tileLayer.nodeId(), - tileLayer.id().mapId_, - tileLayer.id().layerId_, - tileLayer.tileId().value_, - numFeatures, - fillTime - }; -} - -void TileLayerParser::setFallbackLayerInfo(std::shared_ptr info) { - fallbackLayerInfo_ = std::move(info); -} - -std::shared_ptr -TileLayerParser::resolveMapLayerInfo(std::string const& mapId, std::string const& layerId) -{ - auto& map = info_[mapId]; - auto it = info_[mapId].layers_.find(layerId); - if (it != map.layers_.end()) - return it->second; - return fallbackLayerInfo_; -} - -std::vector -TileLayerParser::filterFeatureJumpTargets(const std::string& queryString) const -{ - std::vector results; - std::regex sep("[\\.,;|\\s]+"); // Regex to split the input based on multiple delimiters - std::vector tokens( - std::sregex_token_iterator(queryString.begin(), queryString.end(), sep, -1), - std::sregex_token_iterator()); - - // Find applicable feature types based on the prefix. - std::string prefix; - std::vector targetsWithPrefixMatch; - if (!tokens.empty()) { - prefix = tokens[0]; - for (const auto& [_, target] : featureJumpTargets_) { - if (!prefix.empty() && target.name_.substr(0, prefix.size()) == prefix) - targetsWithPrefixMatch.push_back(&target); - } - } - - // Match all targets if there are no matching ones, or there is no prefix. - if (targetsWithPrefixMatch.empty()) { - for (const auto& [_, target] : featureJumpTargets_) { - targetsWithPrefixMatch.push_back(&target); - } - prefix.clear(); - } - - // Try to match the parameters. - for (const auto& target : targetsWithPrefixMatch) { - FilteredFeatureJumpTarget result{*target, {}, std::nullopt}; - - size_t tokenIndex = !prefix.empty() ? 1 : 0; // Start parsing after the prefix. - for (const auto& part : target->idParts_) { - auto partError = "?"; - - if (tokenIndex >= tokens.size()) { - result.error_ = "Insufficient parameters."; - result.parsedParams_.emplace_back(part.idPartLabel_, partError); - continue; // Skip optional parts if no more tokens. - } - - std::variant parsedValue = tokens[tokenIndex++]; - std::string error; - if (!part.validate(parsedValue, &error)) { - result.error_ = error; - parsedValue = partError; - } - - result.parsedParams_.emplace_back(part.idPartLabel_, parsedValue); - } - - if (tokenIndex < tokens.size()) { - result.error_ = "Too many parameters."; - } - - results.push_back(result); - } - - return results; -} - -void TileLayerParser::getDataSourceInfo(SharedUint8Array& out, std::string const& mapId) -{ - auto const& infoIt = info_.find(mapId); - if (infoIt == info_.end()) { - std::cout << "Could not find mapId!" << std::endl; - return; - } - out.writeToArray("[" + infoIt->second.toJson().dump() + "]"); -} - -void TileLayerParser::getFieldDict(SharedUint8Array& out, std::string const& nodeId) -{ - auto fieldDict = cachedStrings_->getStringPool(nodeId); - std::stringstream outStream; - fieldDict->write(outStream, 0); - out.writeToArray(outStream.str()); -} - -void TileLayerParser::addFieldDict(const SharedUint8Array& buffer) -{ - std::stringstream bufferStream; - bufferStream << buffer.toString(); - auto nodeId = mapget::StringPool::readDataSourceNodeId(bufferStream); - auto fieldDict = cachedStrings_->getStringPool(nodeId); - fieldDict->read(bufferStream); -} - -JsValue TileLayerParser::FilteredFeatureJumpTarget::toJsValue() const -{ - auto result = JsValue::Dict({ - {"name", JsValue(jumpTarget_.name_)}, - {"error", error_ ? JsValue(*error_) : JsValue()}, - }); - auto mapNameList = JsValue::List(); - for (auto const& m : jumpTarget_.maps_) { - mapNameList.push(JsValue(m)); - } - result.set("maps", mapNameList); - auto idPartList = JsValue::List(); - for (auto const& [key, value] : parsedParams_) { - idPartList.push(JsValue::Dict({ - {"key", JsValue(key)}, - {"value", JsValue::fromVariant(value)} - })); - } - result.set("idParts", idPartList); - return result; -} - -} +#include +#include +#include "mapget/model/stringpool.h" +#include "parser.h" + +using namespace mapget; + +namespace erdblick +{ + +TileLayerParser::TileLayerParser() +{ + // Create field dict cache + cachedStrings_ = std::make_shared(); + + // Create fresh mapget stream parser. + reset(); +} + +void TileLayerParser::setDataSourceInfo(const erdblick::SharedUint8Array& dataSourceInfoJson) +{ + // Parse data source info + auto srcInfoParsed = nlohmann::json::parse(dataSourceInfoJson.toString()); + + // Index available feature types by their feature id compositions. + // These will be the available jump-to-feature targets. + // For each composition, allow a version with and without optional params. + for (auto const& node : srcInfoParsed) { + auto dsInfo = DataSourceInfo::fromJson(node); + if (dsInfo.isAddOn_) { + // Do not expose add-on datasources in the frontend. + continue; + } + for (auto const& [_, l] : dsInfo.layers_) { + for (auto const& tp : l->featureTypes_) { + for (auto const& composition : tp.uniqueIdCompositions_) { + for (auto const& withOptionals : {false, true}) { + std::vector idParts; + std::stringstream compositionId; + compositionId << tp.name_; + + for (auto const& idPart : composition) { + if (!idPart.isOptional_ || withOptionals) { + compositionId << "." << idPart.idPartLabel_ << ":" << static_cast(idPart.datatype_); + idParts.push_back(idPart); + } + } + + auto& typeInfo = featureJumpTargets_[compositionId.str()]; + if (typeInfo.idParts_.empty()) { + typeInfo.idParts_ = idParts; + typeInfo.name_ = tp.name_; + typeInfo.layerInfo_ = l; + } + if (std::ranges::find(typeInfo.maps_, dsInfo.mapId_) == typeInfo.maps_.end()) + typeInfo.maps_.emplace_back(dsInfo.mapId_); + } + } + } + } + + info_.emplace(dsInfo.mapId_, std::move(dsInfo)); + } +} + +void TileLayerParser::readFieldDictUpdate(SharedUint8Array const& bytes) +{ + try { + reader_->read(bytes.toString()); + } + catch(std::exception const& e) { + std::cout << "ERROR: " << e.what() << std::endl; + } +} + +NativeJsValue TileLayerParser::getFieldDictOffsets() +{ + auto offsets = reader_->stringPoolCache()->stringPoolOffsets(); + auto result = JsValue::Dict(); + for (auto const& [nodeId, highestFieldId] : offsets) + result.set(nodeId, JsValue(highestFieldId)); + return *result; +} + +void TileLayerParser::reset() +{ + // Note: The reader is only ever used to read field dict updates. + // For this, it does not need a layer info provider or onParsedLayer callback. + reader_ = std::make_unique( + [](auto&& mapId, auto&& layerId){return nullptr;}, + [](auto&& layer){}, + cachedStrings_); +} + +TileFeatureLayer TileLayerParser::readTileFeatureLayer(const SharedUint8Array& buffer) +{ + std::stringstream inputStream; + inputStream << buffer.toString(); + auto result = TileFeatureLayer(std::make_shared( + inputStream, + [this](auto&& mapId, auto&& layerId) + { + return resolveMapLayerInfo(std::string(mapId), std::string(layerId)); + }, + [this](auto&& nodeId) { return cachedStrings_->getStringPool(nodeId); })); + return result; +} + +TileSourceDataLayer TileLayerParser::readTileSourceDataLayer(SharedUint8Array const& buffer) +{ + std::stringstream inputStream; + inputStream << buffer.toString(); + auto result = TileSourceDataLayer(std::make_shared( + inputStream, + [this](auto&& mapId, auto&& layerId) + { + return resolveMapLayerInfo(std::string(mapId), std::string(layerId)); + }, + [this](auto&& nodeId) { return cachedStrings_->getStringPool(nodeId); })); + return result; +} + +TileLayerParser::TileLayerMetadata TileLayerParser::readTileLayerMetadata(const SharedUint8Array& buffer) +{ + std::stringstream inputStream; + inputStream << buffer.toString(); + // Parse just the TileLayer part of the blob, which is the base class of + // e.g. the TileFeatureLayer. The base class blob always precedes the + // blob from the derived class. + TileLayer tileLayer( + inputStream, + [this](auto&& mapId, auto&& layerId) + { + return resolveMapLayerInfo(std::string(mapId), std::string(layerId)); + } + ); + int32_t numFeatures = -1; + auto layerInfo = tileLayer.info(); + auto allScalarFields = JsValue::Dict(); + if (layerInfo.is_object()) { + numFeatures = layerInfo.value("num-features", -1); + for (auto const& [k, v] : layerInfo.items()) { + if (v.is_number()) { + allScalarFields.set(k, JsValue(v.get())); + } + } + } + return { + tileLayer.id().toString(), + tileLayer.nodeId(), + tileLayer.id().mapId_, + tileLayer.id().layerId_, + tileLayer.tileId().value_, + numFeatures, + *allScalarFields + }; +} + +void TileLayerParser::setFallbackLayerInfo(std::shared_ptr info) { + fallbackLayerInfo_ = std::move(info); +} + +std::shared_ptr +TileLayerParser::resolveMapLayerInfo(std::string const& mapId, std::string const& layerId) +{ + auto& map = info_[mapId]; + auto it = info_[mapId].layers_.find(layerId); + if (it != map.layers_.end()) + return it->second; + return fallbackLayerInfo_; +} + +std::vector +TileLayerParser::filterFeatureJumpTargets(const std::string& queryString) const +{ + std::vector results; + std::regex sep("[\\.,;|\\s]+"); // Regex to split the input based on multiple delimiters + std::vector tokens( + std::sregex_token_iterator(queryString.begin(), queryString.end(), sep, -1), + std::sregex_token_iterator()); + + // Find applicable feature types based on the prefix. + std::string prefix; + std::vector targetsWithPrefixMatch; + if (!tokens.empty()) { + prefix = tokens[0]; + for (const auto& [_, target] : featureJumpTargets_) { + if (!prefix.empty() && target.name_.substr(0, prefix.size()) == prefix) + targetsWithPrefixMatch.push_back(&target); + } + } + + // Match all targets if there are no matching ones, or there is no prefix. + if (targetsWithPrefixMatch.empty()) { + for (const auto& [_, target] : featureJumpTargets_) { + targetsWithPrefixMatch.push_back(&target); + } + prefix.clear(); + } + + // Try to match the parameters. + for (const auto& target : targetsWithPrefixMatch) { + FilteredFeatureJumpTarget result{*target, {}, std::nullopt}; + + size_t tokenIndex = !prefix.empty() ? 1 : 0; // Start parsing after the prefix. + for (const auto& part : target->idParts_) { + auto partError = "?"; + + if (tokenIndex >= tokens.size()) { + result.error_ = "Insufficient parameters."; + result.parsedParams_.emplace_back(part.idPartLabel_, partError); + continue; // Skip optional parts if no more tokens. + } + + std::variant parsedValue = tokens[tokenIndex++]; + std::string error; + if (!part.validate(parsedValue, &error)) { + result.error_ = error; + parsedValue = partError; + } + + result.parsedParams_.emplace_back(part.idPartLabel_, parsedValue); + } + + if (tokenIndex < tokens.size()) { + result.error_ = "Too many parameters."; + } + + results.push_back(result); + } + + return results; +} + +void TileLayerParser::getDataSourceInfo(SharedUint8Array& out, std::string const& mapId) +{ + auto const& infoIt = info_.find(mapId); + if (infoIt == info_.end()) { + std::cout << "Could not find mapId!" << std::endl; + return; + } + out.writeToArray("[" + infoIt->second.toJson().dump() + "]"); +} + +void TileLayerParser::getFieldDict(SharedUint8Array& out, std::string const& nodeId) +{ + auto fieldDict = cachedStrings_->getStringPool(nodeId); + std::stringstream outStream; + fieldDict->write(outStream, 0); + out.writeToArray(outStream.str()); +} + +void TileLayerParser::addFieldDict(const SharedUint8Array& buffer) +{ + std::stringstream bufferStream; + bufferStream << buffer.toString(); + auto nodeId = mapget::StringPool::readDataSourceNodeId(bufferStream); + auto fieldDict = cachedStrings_->getStringPool(nodeId); + fieldDict->read(bufferStream); +} + +JsValue TileLayerParser::FilteredFeatureJumpTarget::toJsValue() const +{ + auto result = JsValue::Dict({ + {"name", JsValue(jumpTarget_.name_)}, + {"error", error_ ? JsValue(*error_) : JsValue()}, + }); + auto mapNameList = JsValue::List(); + for (auto const& m : jumpTarget_.maps_) { + mapNameList.push(JsValue(m)); + } + result.set("maps", mapNameList); + auto idPartList = JsValue::List(); + for (auto const& [key, value] : parsedParams_) { + idPartList.push(JsValue::Dict({ + {"key", JsValue(key)}, + {"value", JsValue::fromVariant(value)} + })); + } + result.set("idParts", idPartList); + return result; +} + +} From cf57276fbab568bd1e3df7ef1c0cc7521b78c9a9 Mon Sep 17 00:00:00 2001 From: Serein Pfeiffer Date: Wed, 23 Oct 2024 11:30:04 +0200 Subject: [PATCH 12/38] git: Refine attributes, use text auto mode for native line endings and explicitly list some binary exts. --- .gitattributes | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.gitattributes b/.gitattributes index 07764a78..190de0b7 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,8 @@ -* text eol=lf \ No newline at end of file +* text=auto + +# Explicitly list (some) binary exts +# to avoid false positive text detection +*.png binary +*.jpg binary +*.ico binary +*.glb binary From d8a8f6fc0fa0de968317e0797023b922f97e8da8 Mon Sep 17 00:00:00 2001 From: Wagram Airiian Date: Wed, 23 Oct 2024 13:37:24 +0200 Subject: [PATCH 13/38] Add UI to request inspection of Tiles' source data layers --- erdblick_app/app/app.module.ts | 8 +- erdblick_app/app/datasources.component.ts | 1 - erdblick_app/app/feature.panel.component.ts | 32 ++-- .../app/inspection.panel.component.ts | 14 +- erdblick_app/app/inspection.service.ts | 14 +- erdblick_app/app/map.service.ts | 2 +- erdblick_app/app/parameters.service.ts | 6 +- erdblick_app/app/rightclickmenu.service.ts | 21 +++ .../app/sourcedata.panel.component.ts | 40 ++--- erdblick_app/app/tilesources.component.ts | 140 ++++++++++++++++++ erdblick_app/app/view.component.ts | 41 ++++- erdblick_app/styles.scss | 10 ++ 12 files changed, 275 insertions(+), 54 deletions(-) create mode 100644 erdblick_app/app/rightclickmenu.service.ts create mode 100644 erdblick_app/app/tilesources.component.ts diff --git a/erdblick_app/app/app.module.ts b/erdblick_app/app/app.module.ts index d290b01c..5bad1861 100644 --- a/erdblick_app/app/app.module.ts +++ b/erdblick_app/app/app.module.ts @@ -72,6 +72,9 @@ import {ReactiveFormsModule} from '@angular/forms'; import {FormlyPrimeNGModule} from "@ngx-formly/primeng"; import {DataSourcesService} from "./datasources.service"; import {ProgressSpinnerModule} from "primeng/progressspinner"; +import {TileSourceDataComponent} from "./tilesources.component"; +import {ContextMenuModule} from "primeng/contextmenu"; +import {RightClickMenuService} from "./rightclickmenu.service"; export function initializeServices(styleService: StyleService, mapService: MapService, coordService: CoordinatesService) { return async () => { @@ -147,6 +150,7 @@ export function typeValidationMessage({ schemaType }: any) { MultiSchemaTypeComponent, HighlightSearch, TreeTableFilterPatchDirective, + TileSourceDataComponent ], bootstrap: [ AppComponent @@ -213,7 +217,8 @@ export function typeValidationMessage({ schemaType }: any) { {name: 'multischema', component: MultiSchemaTypeComponent} ], }), - ProgressSpinnerModule + ProgressSpinnerModule, + ContextMenuModule ], providers: [ { @@ -233,6 +238,7 @@ export function typeValidationMessage({ schemaType }: any) { ClipboardService, EditorService, DataSourcesService, + RightClickMenuService, provideHttpClient() ] }) diff --git a/erdblick_app/app/datasources.component.ts b/erdblick_app/app/datasources.component.ts index 17ee9b11..60cee168 100644 --- a/erdblick_app/app/datasources.component.ts +++ b/erdblick_app/app/datasources.component.ts @@ -208,7 +208,6 @@ export class DatasourcesComponent { } closeEditorDialog(event: any) { - console.log(event); if (this.editorDialog !== undefined) { if (this.wasModified) { event.stopPropagation(); diff --git a/erdblick_app/app/feature.panel.component.ts b/erdblick_app/app/feature.panel.component.ts index 7205cca0..f983b1a3 100644 --- a/erdblick_app/app/feature.panel.component.ts +++ b/erdblick_app/app/feature.panel.component.ts @@ -15,6 +15,7 @@ import {coreLib} from "./wasm"; import {ClipboardService} from "./clipboard.service"; import {TreeTable} from "primeng/treetable"; import {ParametersService} from "./parameters.service"; +import {InfoMessageService} from "./info.service"; interface Column { field: string; @@ -193,6 +194,7 @@ export class FeaturePanelComponent implements OnInit, AfterViewInit, OnDestroy public jumpService: JumpTargetService, public parameterService: ParametersService, private renderer: Renderer2, + private messageService: InfoMessageService, public mapService: MapService) { this.inspectionService.featureTree.pipe(distinctUntilChanged()).subscribe((tree: string) => { this.jsonTree = tree; @@ -360,19 +362,23 @@ export class FeaturePanelComponent implements OnInit, AfterViewInit, OnDestroy showSourceData(event: any, sourceDataRef: any) { event.stopPropagation(); - const layerId = sourceDataRef.layerId; - const tileId = sourceDataRef.tileId; - const address = sourceDataRef.address; - const mapId = this.inspectionService.selectedFeatures[0].featureTile.mapName; - const featureIds = this.inspectionService.selectedFeatures.map(f=>f.featureId).join(", "); - - this.inspectionService.selectedSourceData.next({ - tileId: Number(tileId), - layerId: String(layerId), - mapId: String(mapId), - address: BigInt(address), - featureIds: featureIds, - }) + try { + const layerId = sourceDataRef.layerId; + const tileId = sourceDataRef.tileId; + const address = sourceDataRef.address; + const mapId = this.inspectionService.selectedFeatures[0].featureTile.mapName; + const featureIds = this.inspectionService.selectedFeatures.map(f => f.featureId).join(", "); + + this.inspectionService.selectedSourceData.next({ + tileId: Number(tileId), + layerId: String(layerId), + mapId: String(mapId), + address: BigInt(address), + featureIds: featureIds, + }) + } catch (e) { + this.messageService.showError(`Encountered error: ${e}`); + } } onValueClick(event: any, rowData: any) { diff --git a/erdblick_app/app/inspection.panel.component.ts b/erdblick_app/app/inspection.panel.component.ts index e57066db..03562550 100644 --- a/erdblick_app/app/inspection.panel.component.ts +++ b/erdblick_app/app/inspection.panel.component.ts @@ -29,13 +29,14 @@ export interface InspectionContainerSize { @Component({ selector: 'inspection-panel', template: ` - - + {{ tabs[activeIndex].title || '' }} @@ -87,7 +88,7 @@ export class InspectionPanelComponent private parameterService: ParametersService) { this.pushFeatureInspector(); - this.inspectionService.featureTree.pipe(distinctUntilChanged()).subscribe((tree: string) => { + this.inspectionService.featureTree.pipe(distinctUntilChanged()).subscribe(_ => { this.reset(); // TODO: Create a new FeaturePanelComponent instance for each unique feature selection. @@ -96,12 +97,11 @@ export class InspectionPanelComponent const featureIds = this.inspectionService.selectedFeatures.map(f=>f.featureId).join(", "); if (this.inspectionService.selectedFeatures.length == 1) { this.tabs[0].title = featureIds; - } - else { + } else { this.tabs[0].title = `Selected ${this.inspectionService.selectedFeatures.length} Features`; } - const selectedSourceData = parameterService.getSelectedSourceData() + const selectedSourceData = this.parameterService.getSelectedSourceData() if (selectedSourceData?.featureIds === featureIds) this.inspectionService.selectedSourceData.next(selectedSourceData); else @@ -131,7 +131,7 @@ export class InspectionPanelComponent } this.pushSourceDataInspector(selection); } - }) + }); } reset() { diff --git a/erdblick_app/app/inspection.service.ts b/erdblick_app/app/inspection.service.ts index 2e2c7600..c8eab300 100644 --- a/erdblick_app/app/inspection.service.ts +++ b/erdblick_app/app/inspection.service.ts @@ -29,8 +29,8 @@ export interface SelectedSourceData { mapId: string, tileId: number, layerId: string, - address: bigint, - featureIds: string, + address?: bigint, + featureIds?: string, } export function selectedSourceDataEqualTo(a: SelectedSourceData | null, b: SelectedSourceData | null) { @@ -73,7 +73,6 @@ export class InspectionService { inspectionPanelChanged = new EventEmitter(); constructor(private mapService: MapService, - private jumpService: JumpTargetService, private infoMessageService: InfoMessageService, private keyboardService: KeyboardService, public parametersService: ParametersService) { @@ -98,14 +97,14 @@ export class InspectionService { selectedFeatures[0].peek((feature: Feature) => { this.selectedFeatureInspectionModel.push(...feature.inspectionModel()); this.selectedFeatureGeoJsonTexts.push(feature.geojson() as string); - this.isInspectionPanelVisible = true; const center = feature.center() as Cartesian3; this.selectedFeatureCenter = center; this.selectedFeatureOrigin = Cartesian3.fromDegrees(center.x, center.y, center.z); let radiusPoint = feature.boundingRadiusEndPoint() as Cartesian3; radiusPoint = Cartesian3.fromDegrees(radiusPoint.x, radiusPoint.y, radiusPoint.z); this.selectedFeatureBoundingRadius = Cartesian3.distance(this.selectedFeatureOrigin, radiusPoint); - this.selectedFeatureGeometryType = feature.getGeometryType() as any;this.isInspectionPanelVisible = true; + this.selectedFeatureGeometryType = feature.getGeometryType() as any; + this.isInspectionPanelVisible = true; }); } if (selectedFeatures.length > 1) { @@ -123,10 +122,11 @@ export class InspectionService { }); this.selectedSourceData.pipe(distinctUntilChanged(selectedSourceDataEqualTo)).subscribe(selection => { - if (selection) + if (selection) { this.parametersService.setSelectedSourceData(selection); - else + } else { this.parametersService.unsetSelectedSourceData(); + } }); } diff --git a/erdblick_app/app/map.service.ts b/erdblick_app/app/map.service.ts index 70a2ad01..f4670bf1 100644 --- a/erdblick_app/app/map.service.ts +++ b/erdblick_app/app/map.service.ts @@ -388,7 +388,7 @@ export class MapService { ...this.currentVisibleTileIds, ...new Set( allViewportTileIds.slice(0, this.parameterService.parameters.getValue().tilesVisualizeLimit)) - ]) + ]); } } diff --git a/erdblick_app/app/parameters.service.ts b/erdblick_app/app/parameters.service.ts index f21d0451..59cd9fa4 100644 --- a/erdblick_app/app/parameters.service.ts +++ b/erdblick_app/app/parameters.service.ts @@ -210,6 +210,8 @@ export class ParametersService { lastSearchHistoryEntry: BehaviorSubject<[number, string] | null> = new BehaviorSubject<[number, string] | null>(null); + tileIdsForSourceData: Array = []; + baseFontSize: number = 16; inspectionContainerWidth: number = 40; inspectionContainerHeight: number = (window.innerHeight - 10.5 * this.baseFontSize); @@ -255,8 +257,8 @@ export class ParametersService { selection.tileId, selection.layerId, selection.mapId, - selection.address.toString(), - selection.featureIds, + selection.address ? selection.address.toString() : "", + selection.featureIds ? selection.featureIds : "", ]; this.parameters.next(this.p()); } diff --git a/erdblick_app/app/rightclickmenu.service.ts b/erdblick_app/app/rightclickmenu.service.ts new file mode 100644 index 00000000..20138135 --- /dev/null +++ b/erdblick_app/app/rightclickmenu.service.ts @@ -0,0 +1,21 @@ +import {Injectable} from "@angular/core"; +import {MenuItem} from "primeng/api"; +import {BehaviorSubject} from "rxjs"; + +@Injectable() +export class RightClickMenuService { + + menuItems: MenuItem[]; + tileIdsReady: BehaviorSubject = new BehaviorSubject(false); + tileSourceDataDialogVisible: boolean = false; + + constructor() { + this.menuItems = [{ + label: 'Tile Source Data', + icon: 'pi pi-database', + command: () => { + this.tileSourceDataDialogVisible = true; + } + }]; + } +} \ No newline at end of file diff --git a/erdblick_app/app/sourcedata.panel.component.ts b/erdblick_app/app/sourcedata.panel.component.ts index 9bac6a13..94551c12 100644 --- a/erdblick_app/app/sourcedata.panel.component.ts +++ b/erdblick_app/app/sourcedata.panel.component.ts @@ -233,26 +233,28 @@ export class SourceDataPanelComponent implements OnInit, AfterViewInit, OnDestro } } - selectItemWithAddress(address: bigint) { + selectItemWithAddress(address?: bigint) { let addressInRange: any; - if (this.addressFormat == coreLib.SourceDataAddressFormat.BIT_RANGE) { - const searchAddress = { - offset: address >> BigInt(32) & BigInt(0xFFFFFFFF), - size: address & BigInt(0xFFFFFFFF), - } + if (address) { + if (this.addressFormat == coreLib.SourceDataAddressFormat.BIT_RANGE) { + const searchAddress = { + offset: address >> BigInt(32) & BigInt(0xFFFFFFFF), + size: address & BigInt(0xFFFFFFFF), + } - const addressLow = typeof searchAddress === 'object' ? searchAddress['offset'] : searchAddress; - const addressHigh = addressLow + (typeof searchAddress === 'object' ? searchAddress['size'] : searchAddress); + const addressLow = typeof searchAddress === 'object' ? searchAddress['offset'] : searchAddress; + const addressHigh = addressLow + (typeof searchAddress === 'object' ? searchAddress['size'] : searchAddress); - addressInRange = (address: any) => { - return address.offset >= addressLow && - address.offset + address.size <= addressHigh && - (address.size != 0 || addressLow == addressHigh); - } - } else { - const searchAddress = address; - addressInRange = (address: any) => { - return address == searchAddress; + addressInRange = (address: any) => { + return address.offset >= addressLow && + address.offset + address.size <= addressHigh && + (address.size != 0 || addressLow == addressHigh); + } + } else { + const searchAddress = address; + addressInRange = (address: any) => { + return address == searchAddress; + } } } @@ -268,7 +270,7 @@ export class SourceDataPanelComponent implements OnInit, AfterViewInit, OnDestro node.data.styleClass = "highlight"; } - if (node.data.address && addressInRange(node.data.address)) { + if (node.data.address && addressInRange && addressInRange(node.data.address)) { highlight = true; if (!firstHighlightedItemIndex) @@ -277,7 +279,7 @@ export class SourceDataPanelComponent implements OnInit, AfterViewInit, OnDestro node.data.styleClass = "highlight"; parents.forEach((parent: TreeTableNode) =>{ parent.expanded = true; - }) + }); } if (node.children) { diff --git a/erdblick_app/app/tilesources.component.ts b/erdblick_app/app/tilesources.component.ts new file mode 100644 index 00000000..089f0aa1 --- /dev/null +++ b/erdblick_app/app/tilesources.component.ts @@ -0,0 +1,140 @@ +import {Component} from "@angular/core"; +import {ParametersService} from "./parameters.service"; +import {RightClickMenuService} from "./rightclickmenu.service"; +import {MapService} from "./map.service"; +import {SourceDataPanelComponent} from "./sourcedata.panel.component"; +import {InspectionService} from "./inspection.service"; + + +@Component({ + selector: 'tilesources', + template: ` + +
    + +
    +
    +

    {{ errorString }}

    + + + +
    + + +
    +
    +
    + `, + styles: [``] +}) +export class TileSourceDataComponent { + selectedTileId: any | undefined; + tileIds: any[] = []; + selectedSourceDataLayer: any | undefined; + sourceDataLayers: any[] = []; + selectedMapId: any | undefined; + mapIds: any[] = []; + errorString: string = ""; + loading: boolean = true; + + constructor(private parameterService: ParametersService, + private mapService: MapService, + private inspectionService: InspectionService, + public menuService: RightClickMenuService) { + this.menuService.tileIdsReady.subscribe(ready => { + if (ready) { + this.load(); + } + this.loading = !ready; + }); + } + + load() { + const tileIds = this.parameterService.tileIdsForSourceData; + if (tileIds.length) { + this.tileIds = tileIds; + } else { + this.tileIds = []; + this.selectedTileId = undefined; + this.errorString = "No tile IDs available for the clicked position!"; + } + this.mapIds = []; + this.sourceDataLayers = []; + } + + onTileIdChange(tileId: any) { + this.selectedMapId = undefined; + this.selectedSourceDataLayer = undefined; + const maps = new Set(); + for (const featureTile of this.mapService.loadedTileLayers.values()) { + if (featureTile.tileId == tileId.id) { + maps.add(featureTile.mapName); + } + } + this.mapIds = [...maps].map(mapId => ({ id: mapId, name: mapId })); + this.sourceDataLayers = []; + } + + onMapIdChange(mapId: any) { + // Reset sourceDataLayer selection + this.selectedSourceDataLayer = undefined; + + // Update sourceDataLayers based on the selected mapId + const map = this.mapService.maps.getValue().get(mapId.id); + if (map) { + const dataLayers = new Set(); + for (const layer of map.layers.values()) { + if (layer.type == "SourceData") { + dataLayers.add(layer.layerId); + } + } + this.sourceDataLayers = [...dataLayers].map(layerId => ({ + id: layerId, + name: SourceDataPanelComponent.layerNameForLayerId(layerId) + })); + } + } + + requestSourceData() { + this.inspectionService.isInspectionPanelVisible = true; + this.inspectionService.selectedSourceData.next({ + tileId: Number(this.selectedTileId.id), + layerId: String(this.selectedSourceDataLayer.id), + mapId: String(this.selectedMapId.id) + }); + this.close(); + } + + reset() { + this.loading = true; + this.errorString = ""; + this.selectedTileId = undefined; + this.selectedMapId = undefined; + this.selectedSourceDataLayer = undefined; + } + + close() { + this.menuService.tileSourceDataDialogVisible = false; + } +} \ No newline at end of file diff --git a/erdblick_app/app/view.component.ts b/erdblick_app/app/view.component.ts index ebace4c4..8be759a8 100644 --- a/erdblick_app/app/view.component.ts +++ b/erdblick_app/app/view.component.ts @@ -16,7 +16,7 @@ import { defined } from "./cesium"; import {ParametersService} from "./parameters.service"; -import {AfterViewInit, Component} from "@angular/core"; +import {AfterViewInit, Component, OnInit} from "@angular/core"; import {MapService} from "./map.service"; import {DebugWindow, ErdblickDebugApi} from "./debugapi.component"; import {StyleService} from "./style.service"; @@ -28,6 +28,8 @@ import {SearchResultPosition} from "./featurefilter.worker"; import {InspectionService} from "./inspection.service"; import {KeyboardService} from "./keyboard.service"; import {coreLib} from "./wasm"; +import {MenuItem} from "primeng/api"; +import {RightClickMenuService} from "./rightclickmenu.service"; // Redeclare window with extended interface declare let window: DebugWindow; @@ -35,7 +37,9 @@ declare let window: DebugWindow; @Component({ selector: 'erdblick-view', template: ` -
    +
    + + `, styles: [` @media only screen and (max-width: 56em) { @@ -46,12 +50,14 @@ declare let window: DebugWindow; } `] }) -export class ErdblickViewComponent implements AfterViewInit { +export class ErdblickViewComponent implements OnInit, AfterViewInit { viewer!: Viewer; private mouseHandler: ScreenSpaceEventHandler | null = null; private openStreetMapLayer: ImageryLayer | null = null; private marker: Entity | null = null; + items: MenuItem[] | undefined; + /** * Construct a Cesium View with a Model. * @param mapService The map model service providing access to data @@ -68,6 +74,7 @@ export class ErdblickViewComponent implements AfterViewInit { public jumpService: JumpTargetService, public inspectionService: InspectionService, public keyboardService: KeyboardService, + public menuService: RightClickMenuService, public coordinatesService: CoordinatesService) { this.mapService.tileVisualizationTopic.subscribe((tileVis: TileVisualization) => { @@ -99,6 +106,10 @@ export class ErdblickViewComponent implements AfterViewInit { }); } + ngOnInit() { + this.items = this.menuService.menuItems; + } + ngAfterViewInit() { this.viewer = new Viewer("mapViewContainer", { @@ -123,6 +134,27 @@ export class ErdblickViewComponent implements AfterViewInit { this.mouseHandler = new ScreenSpaceEventHandler(this.viewer.scene.canvas); + this.mouseHandler.setInputAction((movement: any) => { + const position = movement.position; + const cartesian = this.viewer.camera.pickEllipsoid( + new Cartesian2(position.x, position.y), + this.viewer.scene.globe.ellipsoid + ); + if (defined(cartesian)) { + const cartographic = Cartographic.fromCartesian(cartesian); + const longitude = CesiumMath.toDegrees(cartographic.longitude); + const latitude = CesiumMath.toDegrees(cartographic.latitude); + this.parameterService.tileIdsForSourceData = [...Array(16).keys()].map(level => { + const tileId = coreLib.getTileIdFromPosition(longitude, latitude, level); + return {id: tileId, name: `${tileId} (level ${level})`}; + }); + this.menuService.tileIdsReady.next(true); + } else { + this.parameterService.tileIdsForSourceData = []; + this.menuService.tileIdsReady.next(false); + } + }, ScreenSpaceEventType.RIGHT_DOWN); + // Add a handler for selection. this.mouseHandler.setInputAction((movement: any) => { const position = movement.position; @@ -145,6 +177,9 @@ export class ErdblickViewComponent implements AfterViewInit { }); } } + if (!defined(feature)) { + this.inspectionService.isInspectionPanelVisible = false; + } this.mapService.highlightFeatures( Array.isArray(feature?.id) ? feature.id : [feature?.id], false, diff --git a/erdblick_app/styles.scss b/erdblick_app/styles.scss index 58b36d44..9c71408f 100644 --- a/erdblick_app/styles.scss +++ b/erdblick_app/styles.scss @@ -1042,6 +1042,16 @@ body { } } +.tilesource-options { + display:flex; + flex-direction: column; + gap: 0.5em; + + .p-dropdown { + width: 100%; + } +} + @media only screen and (max-width: 56em) { .help-button { width: 3em; From c2dee9f1296ae1ab687ef09f3239a17b5e4b30ae Mon Sep 17 00:00:00 2001 From: Joseph Birkner Date: Thu, 24 Oct 2024 13:07:06 +0200 Subject: [PATCH 14/38] Fix Ctrl+X default when text editing. --- erdblick_app/app/keyboard.service.ts | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/erdblick_app/app/keyboard.service.ts b/erdblick_app/app/keyboard.service.ts index 9642207e..fb020aaa 100644 --- a/erdblick_app/app/keyboard.service.ts +++ b/erdblick_app/app/keyboard.service.ts @@ -40,21 +40,19 @@ export class KeyboardService { const isInput = target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable; const key = this.getKeyCombination(event); - if (!isInput || key.includes("Ctrl")) { - if (key === 'Escape' || key === 'Esc') { - // TODO: make this work! - // if (this.dialogStack.length > 0) { - // event.preventDefault(); - // const topDialog = this.dialogStack.pop(); - // if (topDialog) { - // topDialog.close(new MouseEvent("mousedown")); - // } - // } - } else if (this.shortcuts.has(key)) { - event.preventDefault(); - this.shortcuts.get(key)?.(event); - } + // Let non-ctrl key events or text editing shortcuts do their default things. + if (isInput && (!key.includes("Ctrl") || ["ctrl+x", "ctrl+c", "ctrl+v"].includes(key.toLowerCase()))) { + return; } + + if (this.shortcuts.has(key)) { + event.preventDefault(); + this.shortcuts.get(key)?.(event); + } + + // TODO: Else-if Escape was hit, close the most recent dialog + // in the stack. (JB: Can we get rid of this? Things seem + // to work fine without the dialog stack). }); } From 2cace909f532d6200cd82939329c2b5604d60c8f Mon Sep 17 00:00:00 2001 From: Wagram Airiian Date: Thu, 24 Oct 2024 20:27:13 +0200 Subject: [PATCH 15/38] * Rename and refactor * Fix Subject usage * Introduce better filtering for maps amd layers * Make dropdowns and context menu larger * Optimise entries in dropdowns --- erdblick_app/app/app.module.ts | 4 +- .../app/inspection.panel.component.ts | 2 +- erdblick_app/app/inspection.service.ts | 9 + erdblick_app/app/map.service.ts | 11 + erdblick_app/app/parameters.service.ts | 2 - erdblick_app/app/rightclickmenu.service.ts | 45 +++- .../app/sourcedata.panel.component.ts | 14 +- .../sourcedataselection.dialog.component.ts | 198 ++++++++++++++++++ erdblick_app/app/tilesources.component.ts | 140 ------------- erdblick_app/app/view.component.ts | 18 +- erdblick_app/app/visualization.model.ts | 41 ++-- erdblick_app/styles.scss | 4 + 12 files changed, 305 insertions(+), 183 deletions(-) create mode 100644 erdblick_app/app/sourcedataselection.dialog.component.ts delete mode 100644 erdblick_app/app/tilesources.component.ts diff --git a/erdblick_app/app/app.module.ts b/erdblick_app/app/app.module.ts index 5bad1861..c1f97b70 100644 --- a/erdblick_app/app/app.module.ts +++ b/erdblick_app/app/app.module.ts @@ -72,7 +72,7 @@ import {ReactiveFormsModule} from '@angular/forms'; import {FormlyPrimeNGModule} from "@ngx-formly/primeng"; import {DataSourcesService} from "./datasources.service"; import {ProgressSpinnerModule} from "primeng/progressspinner"; -import {TileSourceDataComponent} from "./tilesources.component"; +import {SourceDataLayerSelectionDialogComponent} from "./sourcedataselection.dialog.component"; import {ContextMenuModule} from "primeng/contextmenu"; import {RightClickMenuService} from "./rightclickmenu.service"; @@ -150,7 +150,7 @@ export function typeValidationMessage({ schemaType }: any) { MultiSchemaTypeComponent, HighlightSearch, TreeTableFilterPatchDirective, - TileSourceDataComponent + SourceDataLayerSelectionDialogComponent ], bootstrap: [ AppComponent diff --git a/erdblick_app/app/inspection.panel.component.ts b/erdblick_app/app/inspection.panel.component.ts index 03562550..70c0532b 100644 --- a/erdblick_app/app/inspection.panel.component.ts +++ b/erdblick_app/app/inspection.panel.component.ts @@ -41,7 +41,7 @@ export interface InspectionContainerSize { {{ tabs[activeIndex].title || '' }}
    diff --git a/erdblick_app/app/inspection.service.ts b/erdblick_app/app/inspection.service.ts index c8eab300..05220c84 100644 --- a/erdblick_app/app/inspection.service.ts +++ b/erdblick_app/app/inspection.service.ts @@ -308,6 +308,15 @@ export class InspectionService { return `{"type": "FeatureCollection", "features": [${this.selectedFeatureGeoJsonTexts.join(", ")}]}`; } + loadSourceDataInspection(tileId: number, mapId: string, layerId: string) { + this.isInspectionPanelVisible = true; + this.selectedSourceData.next({ + tileId: tileId, + layerId: layerId, + mapId: mapId + }); + } + protected readonly InspectionValueType = coreLib.ValueType; protected readonly GeometryType = coreLib.GeomType; } diff --git a/erdblick_app/app/map.service.ts b/erdblick_app/app/map.service.ts index f4670bf1..df9e8062 100644 --- a/erdblick_app/app/map.service.ts +++ b/erdblick_app/app/map.service.ts @@ -11,6 +11,7 @@ import {SidePanelService, SidePanelState} from "./sidepanel.service"; import {InfoMessageService} from "./info.service"; import {MAX_ZOOM_LEVEL} from "./feature.search.service"; import {PointMergeService} from "./pointmerge.service"; +import {Color} from "./cesium"; /** Expected structure of a LayerInfoItem's coverage entry. */ export interface CoverageRectItem extends Record { @@ -91,6 +92,7 @@ export class MapService { private tileVisualizationQueue: [string, TileVisualization][]; private selectionVisualizations: TileVisualization[]; private hoverVisualizations: TileVisualization[]; + private specialTileBorderColourForTiles: [bigint, Color] = [-1n, Color.TRANSPARENT]; tileParser: TileLayerParser|null = null; tileVisualizationTopic: Subject; @@ -426,6 +428,10 @@ export class MapService { return false; } tileVisu.showTileBorder = this.getMapLayerBorderState(mapName, layerName); + if (this.specialTileBorderColourForTiles[0] == tileVisu.tile.tileId) { + tileVisu.showTileBorder = true; + tileVisu.specialBorderColour = this.specialTileBorderColourForTiles[1]; + } tileVisu.isHighDetail = this.currentHighDetailTileIds.has(tileVisu.tile.tileId) || tileVisu.tile.preventCulling; return true; }); @@ -804,4 +810,9 @@ export class MapService { } } } + + setSpecialTileBorder(tileId: bigint, color: Color) { + this.specialTileBorderColourForTiles = [tileId, color]; + this.update(); + } } diff --git a/erdblick_app/app/parameters.service.ts b/erdblick_app/app/parameters.service.ts index 59cd9fa4..84851dee 100644 --- a/erdblick_app/app/parameters.service.ts +++ b/erdblick_app/app/parameters.service.ts @@ -210,8 +210,6 @@ export class ParametersService { lastSearchHistoryEntry: BehaviorSubject<[number, string] | null> = new BehaviorSubject<[number, string] | null>(null); - tileIdsForSourceData: Array = []; - baseFontSize: number = 16; inspectionContainerWidth: number = 40; inspectionContainerHeight: number = (window.innerHeight - 10.5 * this.baseFontSize); diff --git a/erdblick_app/app/rightclickmenu.service.ts b/erdblick_app/app/rightclickmenu.service.ts index 20138135..63a93bfd 100644 --- a/erdblick_app/app/rightclickmenu.service.ts +++ b/erdblick_app/app/rightclickmenu.service.ts @@ -1,21 +1,58 @@ import {Injectable} from "@angular/core"; import {MenuItem} from "primeng/api"; -import {BehaviorSubject} from "rxjs"; +import {BehaviorSubject, Subject} from "rxjs"; +import {InspectionService} from "./inspection.service"; + +export interface SourceDataDropdownOption { + id: bigint | string, + name: string, + disabled?: boolean +} @Injectable() export class RightClickMenuService { menuItems: MenuItem[]; - tileIdsReady: BehaviorSubject = new BehaviorSubject(false); tileSourceDataDialogVisible: boolean = false; + lastInspectedTileSourceDataOption: BehaviorSubject<{tileId: number, mapId: string, layerId: string} | null> = + new BehaviorSubject<{tileId: number, mapId: string, layerId: string} | null>(null); + tileIdsForSourceData: Subject = new Subject(); - constructor() { + constructor(private inspectionService: InspectionService) { this.menuItems = [{ - label: 'Tile Source Data', + label: 'Inspect Source Data for Tile', icon: 'pi pi-database', command: () => { this.tileSourceDataDialogVisible = true; } }]; + + this.lastInspectedTileSourceDataOption.subscribe(lastInspectedTileSourceData => { + if (lastInspectedTileSourceData) { + this.updateMenuForLastInspectedSourceData(lastInspectedTileSourceData); + } else if (this.menuItems.length > 1) { + this.menuItems.shift(); + } + }); + } + + private updateMenuForLastInspectedSourceData(sourceDataParams: {tileId: number, mapId: string, layerId: string}) { + const menuItem = { + label: 'Inspect Last Selected Source Data', + icon: 'pi pi-database', + command: () => { + this.inspectionService.loadSourceDataInspection( + sourceDataParams.tileId, + sourceDataParams.mapId, + sourceDataParams.layerId + ); + } + }; + + if (this.menuItems.length > 1) { + this.menuItems[0] = menuItem; + } else { + this.menuItems.unshift(menuItem); + } } } \ No newline at end of file diff --git a/erdblick_app/app/sourcedata.panel.component.ts b/erdblick_app/app/sourcedata.panel.component.ts index 94551c12..28843285 100644 --- a/erdblick_app/app/sourcedata.panel.component.ts +++ b/erdblick_app/app/sourcedata.panel.component.ts @@ -234,8 +234,8 @@ export class SourceDataPanelComponent implements OnInit, AfterViewInit, OnDestro } selectItemWithAddress(address?: bigint) { - let addressInRange: any; - if (address) { + let addressInRange: Function | undefined; + if (address !== undefined) { if (this.addressFormat == coreLib.SourceDataAddressFormat.BIT_RANGE) { const searchAddress = { offset: address >> BigInt(32) & BigInt(0xFFFFFFFF), @@ -282,6 +282,10 @@ export class SourceDataPanelComponent implements OnInit, AfterViewInit, OnDestro }); } + if (address === undefined && node.children?.length == 1) { + node.expanded = true; + } + if (node.children) { node.children.forEach((item: TreeTableNode, index) => { select(item, [...parents, node], highlight, 1 + virtualRowIndex + index) }) } @@ -291,6 +295,12 @@ export class SourceDataPanelComponent implements OnInit, AfterViewInit, OnDestro select(item, [], false, index); }); + if (address === undefined) { + for (const item of this.treeData) { + item.expanded = true; + } + } + setTimeout(() => { this.table.scrollToVirtualIndex(firstHighlightedItemIndex || 0); }, 0); diff --git a/erdblick_app/app/sourcedataselection.dialog.component.ts b/erdblick_app/app/sourcedataselection.dialog.component.ts new file mode 100644 index 00000000..25d637a8 --- /dev/null +++ b/erdblick_app/app/sourcedataselection.dialog.component.ts @@ -0,0 +1,198 @@ +import {Component} from "@angular/core"; +import {ParametersService} from "./parameters.service"; +import {RightClickMenuService, SourceDataDropdownOption} from "./rightclickmenu.service"; +import {MapService} from "./map.service"; +import {SourceDataPanelComponent} from "./sourcedata.panel.component"; +import {InspectionService} from "./inspection.service"; +import {Color} from "./cesium"; + +@Component({ + selector: 'sourcedatadialog', + template: ` + +
    + +
    +
    +

    {{ errorString }}

    + + + +
    + + +
    +
    +
    + `, + styles: [``] +}) +export class SourceDataLayerSelectionDialogComponent { + selectedTileId: SourceDataDropdownOption | undefined; + tileIds: SourceDataDropdownOption[] = []; + selectedSourceDataLayer: SourceDataDropdownOption | undefined; + sourceDataLayers: SourceDataDropdownOption[] = []; + sourceDataLayersMap: Map = new Map(); + selectedMapId: SourceDataDropdownOption | undefined; + mapIdsMap: Map = new Map(); + mapIds: SourceDataDropdownOption[] = []; + errorString: string = ""; + loading: boolean = true; + + constructor(private parameterService: ParametersService, + private mapService: MapService, + private inspectionService: InspectionService, + public menuService: RightClickMenuService) { + this.menuService.tileIdsForSourceData.subscribe(data => { + this.tileIds = data; + this.loading = !data.length; + this.load(); + }); + } + + load() { + if (this.tileIds.length) { + for (let i = 0; i < this.tileIds.length; i++) { + const id = this.tileIds[i].id as bigint; + const maps = this.findMapsForTileId(id); + this.tileIds[i]["disabled"] = !maps.length; + this.mapIdsMap.set(id, maps); + } + } else { + this.selectedTileId = undefined; + this.loading = false; + this.errorString = "No tile IDs available for the clicked position!"; + } + this.mapIds = []; + this.sourceDataLayers = []; + this.selectedTileId = this.tileIds.find(element => !element.disabled); + if (this.selectedTileId !== undefined) { + this.onTileIdChange(this.selectedTileId); + if (this.mapIds.length) { + this.selectedMapId = this.mapIds[0]; + this.onMapIdChange(this.selectedMapId); + if (this.sourceDataLayers.length) { + this.selectedSourceDataLayer = this.sourceDataLayers[0]; + this.onLayerIdChange(this.selectedSourceDataLayer); + } + } + } + } + + findMapsForTileId(tileId: bigint) { + const maps = new Set(); + for (const featureTile of this.mapService.loadedTileLayers.values()) { + if (featureTile.tileId == tileId) { + maps.add(featureTile.mapName); + } + } + return [...maps].map(mapId => ({ id: mapId, name: mapId })); + } + + onTileIdChange(tileId: SourceDataDropdownOption) { + this.selectedMapId = undefined; + this.selectedSourceDataLayer = undefined; + this.sourceDataLayers = []; + // TODO: Fix this. + // Consider just drawing a tile box rectangle without visualising the tile. + // for (const featureTile of this.mapService.loadedTileLayers.values()) { + // if (featureTile.tileId == tileId.id as bigint) { + // this.mapService.setSpecialTileBorder(tileId.id as bigint, Color.HOTPINK); + // } + // } + const mapIds = this.mapIdsMap.get(tileId.id as bigint); + if (mapIds !== undefined) { + this.mapIds = mapIds.sort((a, b) => a.name.localeCompare(b.name)); + for (let i = 0; i < this.mapIds.length; i++) { + const id = this.mapIds[i].id as string; + const layers = this.findLayersForMapId(id); + this.mapIds[i]["disabled"] = !layers.length; + this.sourceDataLayersMap.set(id, layers); + } + } + } + + findLayersForMapId(mapId: string) { + const map = this.mapService.maps.getValue().get(mapId); + if (map) { + const dataLayers = new Set(); + for (const layer of map.layers.values()) { + if (layer.type == "SourceData") { + dataLayers.add(layer.layerId); + } + } + return [...dataLayers].map(layerId => ({ + id: layerId, + name: SourceDataPanelComponent.layerNameForLayerId(layerId) + })); + } + return []; + } + + onMapIdChange(mapId: SourceDataDropdownOption) { + this.selectedSourceDataLayer = undefined; + const sourceDataLayers = this.sourceDataLayersMap.get(mapId.id as string); + if (sourceDataLayers !== undefined) { + this.sourceDataLayers = sourceDataLayers; + } + } + + onLayerIdChange(layerId: SourceDataDropdownOption) { + if (this.selectedTileId === undefined || + this.selectedMapId === undefined || + this.selectedSourceDataLayer === undefined) { + return; + } + this.menuService.lastInspectedTileSourceDataOption.next({ + tileId: Number(this.selectedTileId.id), + mapId: String(this.selectedMapId.id), + layerId: String(this.selectedSourceDataLayer.id) + }); + } + + requestSourceData() { + this.inspectionService.loadSourceDataInspection( + Number(this.selectedTileId?.id), + String(this.selectedMapId?.id), + String(this.selectedSourceDataLayer?.id) + ); + this.close(); + } + + reset() { + this.loading = true; + this.errorString = ""; + this.selectedTileId = undefined; + this.selectedMapId = undefined; + this.selectedSourceDataLayer = undefined; + } + + close() { + this.menuService.tileSourceDataDialogVisible = false; + } +} \ No newline at end of file diff --git a/erdblick_app/app/tilesources.component.ts b/erdblick_app/app/tilesources.component.ts deleted file mode 100644 index 089f0aa1..00000000 --- a/erdblick_app/app/tilesources.component.ts +++ /dev/null @@ -1,140 +0,0 @@ -import {Component} from "@angular/core"; -import {ParametersService} from "./parameters.service"; -import {RightClickMenuService} from "./rightclickmenu.service"; -import {MapService} from "./map.service"; -import {SourceDataPanelComponent} from "./sourcedata.panel.component"; -import {InspectionService} from "./inspection.service"; - - -@Component({ - selector: 'tilesources', - template: ` - -
    - -
    -
    -

    {{ errorString }}

    - - - -
    - - -
    -
    -
    - `, - styles: [``] -}) -export class TileSourceDataComponent { - selectedTileId: any | undefined; - tileIds: any[] = []; - selectedSourceDataLayer: any | undefined; - sourceDataLayers: any[] = []; - selectedMapId: any | undefined; - mapIds: any[] = []; - errorString: string = ""; - loading: boolean = true; - - constructor(private parameterService: ParametersService, - private mapService: MapService, - private inspectionService: InspectionService, - public menuService: RightClickMenuService) { - this.menuService.tileIdsReady.subscribe(ready => { - if (ready) { - this.load(); - } - this.loading = !ready; - }); - } - - load() { - const tileIds = this.parameterService.tileIdsForSourceData; - if (tileIds.length) { - this.tileIds = tileIds; - } else { - this.tileIds = []; - this.selectedTileId = undefined; - this.errorString = "No tile IDs available for the clicked position!"; - } - this.mapIds = []; - this.sourceDataLayers = []; - } - - onTileIdChange(tileId: any) { - this.selectedMapId = undefined; - this.selectedSourceDataLayer = undefined; - const maps = new Set(); - for (const featureTile of this.mapService.loadedTileLayers.values()) { - if (featureTile.tileId == tileId.id) { - maps.add(featureTile.mapName); - } - } - this.mapIds = [...maps].map(mapId => ({ id: mapId, name: mapId })); - this.sourceDataLayers = []; - } - - onMapIdChange(mapId: any) { - // Reset sourceDataLayer selection - this.selectedSourceDataLayer = undefined; - - // Update sourceDataLayers based on the selected mapId - const map = this.mapService.maps.getValue().get(mapId.id); - if (map) { - const dataLayers = new Set(); - for (const layer of map.layers.values()) { - if (layer.type == "SourceData") { - dataLayers.add(layer.layerId); - } - } - this.sourceDataLayers = [...dataLayers].map(layerId => ({ - id: layerId, - name: SourceDataPanelComponent.layerNameForLayerId(layerId) - })); - } - } - - requestSourceData() { - this.inspectionService.isInspectionPanelVisible = true; - this.inspectionService.selectedSourceData.next({ - tileId: Number(this.selectedTileId.id), - layerId: String(this.selectedSourceDataLayer.id), - mapId: String(this.selectedMapId.id) - }); - this.close(); - } - - reset() { - this.loading = true; - this.errorString = ""; - this.selectedTileId = undefined; - this.selectedMapId = undefined; - this.selectedSourceDataLayer = undefined; - } - - close() { - this.menuService.tileSourceDataDialogVisible = false; - } -} \ No newline at end of file diff --git a/erdblick_app/app/view.component.ts b/erdblick_app/app/view.component.ts index 8be759a8..cba5d14b 100644 --- a/erdblick_app/app/view.component.ts +++ b/erdblick_app/app/view.component.ts @@ -39,7 +39,7 @@ declare let window: DebugWindow; template: `
    - + `, styles: [` @media only screen and (max-width: 56em) { @@ -50,14 +50,12 @@ declare let window: DebugWindow; } `] }) -export class ErdblickViewComponent implements OnInit, AfterViewInit { +export class ErdblickViewComponent implements AfterViewInit { viewer!: Viewer; private mouseHandler: ScreenSpaceEventHandler | null = null; private openStreetMapLayer: ImageryLayer | null = null; private marker: Entity | null = null; - items: MenuItem[] | undefined; - /** * Construct a Cesium View with a Model. * @param mapService The map model service providing access to data @@ -106,10 +104,6 @@ export class ErdblickViewComponent implements OnInit, AfterViewInit { }); } - ngOnInit() { - this.items = this.menuService.menuItems; - } - ngAfterViewInit() { this.viewer = new Viewer("mapViewContainer", { @@ -144,14 +138,12 @@ export class ErdblickViewComponent implements OnInit, AfterViewInit { const cartographic = Cartographic.fromCartesian(cartesian); const longitude = CesiumMath.toDegrees(cartographic.longitude); const latitude = CesiumMath.toDegrees(cartographic.latitude); - this.parameterService.tileIdsForSourceData = [...Array(16).keys()].map(level => { + this.menuService.tileIdsForSourceData.next([...Array(16).keys()].map(level => { const tileId = coreLib.getTileIdFromPosition(longitude, latitude, level); return {id: tileId, name: `${tileId} (level ${level})`}; - }); - this.menuService.tileIdsReady.next(true); + })); } else { - this.parameterService.tileIdsForSourceData = []; - this.menuService.tileIdsReady.next(false); + this.menuService.tileIdsForSourceData.next([]); } }, ScreenSpaceEventType.RIGHT_DOWN); diff --git a/erdblick_app/app/visualization.model.ts b/erdblick_app/app/visualization.model.ts index 0db041ee..93c12dd0 100644 --- a/erdblick_app/app/visualization.model.ts +++ b/erdblick_app/app/visualization.model.ts @@ -34,10 +34,10 @@ interface StyleWithIsDeleted extends FeatureLayerStyle { class TileBoxVisualization { static visualizations: Map = new Map(); - static get(tile: FeatureTile, featureCount: number, viewer: Viewer): TileBoxVisualization { + static get(tile: FeatureTile, featureCount: number, viewer: Viewer, color?: Color): TileBoxVisualization { if (!TileBoxVisualization.visualizations.has(tile.tileId)) { TileBoxVisualization.visualizations.set( - tile.tileId, new TileBoxVisualization(viewer, tile)); + tile.tileId, new TileBoxVisualization(viewer, tile, color)); } let result = this.visualizations.get(tile.tileId)!; ++result.refCount; @@ -52,7 +52,7 @@ class TileBoxVisualization { private readonly entity: Entity; private readonly id: bigint; - constructor(viewer: Viewer, tile: FeatureTile) { + constructor(viewer: Viewer, tile: FeatureTile, color?: Color) { let tileBox = coreLib.getTileBox(BigInt(tile.tileId)); this.entity = viewer.entities.add({ rectangle: { @@ -62,10 +62,14 @@ class TileBoxVisualization { outlineWidth: 2, outline: true, outlineColor: new CallbackProperty((time, result) => { - if (this.featureCount > 0) { - return Color.YELLOW.withAlpha(0.7); - } else { - return Color.AQUA.withAlpha(0.3); + if (color !== undefined) { + return color.withAlpha(0.7); + } else{ + if (this.featureCount > 0) { + return Color.YELLOW.withAlpha(0.7); + } else { + return Color.AQUA.withAlpha(0.3); + } } }, false) } @@ -88,6 +92,7 @@ export class TileVisualization { tile: FeatureTile; isHighDetail: boolean; showTileBorder: boolean = false; + specialBorderColour: Color | undefined; private readonly style: StyleWithIsDeleted; private readonly styleName: string; @@ -121,17 +126,15 @@ export class TileVisualization { * @param boxGrid Sets a flag to wrap this tile visualization into a bounding box * @param options Option values for option variables defined by the style sheet. */ - constructor( - tile: FeatureTile, - pointMergeService: PointMergeService, - auxTileFun: (key: string) => FeatureTile | null, - style: FeatureLayerStyle, - highDetail: boolean, - highlightMode: HighlightMode = coreLib.HighlightMode.NO_HIGHLIGHT, - featureIdSubset?: string[], - boxGrid?: boolean, - options?: Record) - { + constructor(tile: FeatureTile, + pointMergeService: PointMergeService, + auxTileFun: (key: string) => FeatureTile | null, + style: FeatureLayerStyle, + highDetail: boolean, + highlightMode: HighlightMode = coreLib.HighlightMode.NO_HIGHLIGHT, + featureIdSubset?: string[], + boxGrid?: boolean, + options?: Record) { this.tile = tile; this.style = style as StyleWithIsDeleted; this.styleName = this.style.name(); @@ -255,7 +258,7 @@ export class TileVisualization { if (this.showTileBorder) { // Else: Low-detail bounding box representation - this.lowDetailVisu = TileBoxVisualization.get(this.tile, this.tile.numFeatures, viewer); + this.lowDetailVisu = TileBoxVisualization.get(this.tile, this.tile.numFeatures, viewer, this.specialBorderColour); this.hasTileBorder = true; } diff --git a/erdblick_app/styles.scss b/erdblick_app/styles.scss index 9c71408f..0e00e49d 100644 --- a/erdblick_app/styles.scss +++ b/erdblick_app/styles.scss @@ -40,6 +40,10 @@ body { padding: 0.5em 0.75em; } } + + .p-contextmenu { + width: 20em; + } } .mapviewer-renderlayer { From 1a81fc809abb5d3825bafbeaedb64b95db6d132f Mon Sep 17 00:00:00 2001 From: Joseph Birkner Date: Thu, 24 Oct 2024 21:17:22 +0200 Subject: [PATCH 16/38] Temporarily use mapget release branch. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 225ca521..d219c040 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,7 +20,7 @@ message("Building for ${CMAKE_SYSTEM_NAME}.") FetchContent_Declare(mapget GIT_REPOSITORY "https://github.com/Klebert-Engineering/mapget" - GIT_TAG "v2024.4.0" + GIT_TAG "release/2024.4.1" GIT_SHALLOW ON) FetchContent_MakeAvailable(mapget) From 3e2f6e01a6ec1c9fa5bd5f696d58795296cbeecc Mon Sep 17 00:00:00 2001 From: Joseph Birkner Date: Thu, 24 Oct 2024 21:18:50 +0200 Subject: [PATCH 17/38] Auto-update stats dialog and a button for it. --- erdblick_app/app/keyboard.service.ts | 4 + erdblick_app/app/map.service.ts | 2 + erdblick_app/app/preferences.component.ts | 170 ++++++++++++---------- erdblick_app/app/stats.component.ts | 11 +- 4 files changed, 104 insertions(+), 83 deletions(-) diff --git a/erdblick_app/app/keyboard.service.ts b/erdblick_app/app/keyboard.service.ts index fb020aaa..e87a3dab 100644 --- a/erdblick_app/app/keyboard.service.ts +++ b/erdblick_app/app/keyboard.service.ts @@ -40,6 +40,10 @@ export class KeyboardService { const isInput = target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable; const key = this.getKeyCombination(event); + // TODO: Ensure that tab and escape, when pressed in a text area, + // result in a tab character/autocomplete cancelation rather than + // focusing another control/closing the enclosing dialog. + // Let non-ctrl key events or text editing shortcuts do their default things. if (isInput && (!key.includes("Ctrl") || ["ctrl+x", "ctrl+c", "ctrl+v"].includes(key.toLowerCase()))) { return; diff --git a/erdblick_app/app/map.service.ts b/erdblick_app/app/map.service.ts index 1ea2d5f9..836ffb55 100644 --- a/erdblick_app/app/map.service.ts +++ b/erdblick_app/app/map.service.ts @@ -599,6 +599,7 @@ export class MapService { this.removeTileLayer(this.loadedTileLayers.get(tileLayer.mapTileKey)!); } this.loadedTileLayers.set(tileLayer.mapTileKey, tileLayer); + this.statsDialogNeedsUpdate.next(); // Schedule the visualization of the newly added tile layer, // but don't do it synchronously to avoid stalling the main thread. @@ -633,6 +634,7 @@ export class MapService { return tileVisu.tile.mapTileKey !== tileLayer.mapTileKey; }); this.loadedTileLayers.delete(tileLayer.mapTileKey); + this.statsDialogNeedsUpdate.next(); } private renderTileLayer(tileLayer: FeatureTile, style: ErdblickStyle|FeatureLayerStyle, styleId: string = "") { diff --git a/erdblick_app/app/preferences.component.ts b/erdblick_app/app/preferences.component.ts index 5cc3262a..eeff2ba7 100644 --- a/erdblick_app/app/preferences.component.ts +++ b/erdblick_app/app/preferences.component.ts @@ -17,6 +17,10 @@ import {MAX_NUM_TILES_TO_LOAD, MAX_NUM_TILES_TO_VISUALIZE, ParametersService} fr pTooltip="Controls" tooltipPosition="right"> keyboard + + insights + @@ -24,7 +28,7 @@ import {MAX_NUM_TILES_TO_LOAD, MAX_NUM_TILES_TO_VISUALIZE, ParametersService} fr
    - +
    @@ -32,7 +36,7 @@ import {MAX_NUM_TILES_TO_LOAD, MAX_NUM_TILES_TO_VISUALIZE, ParametersService} fr
    - +
    @@ -116,94 +120,95 @@ import {MAX_NUM_TILES_TO_LOAD, MAX_NUM_TILES_TO_VISUALIZE, ParametersService} fr
    `, - styles: [` - .slider-container { - display: flex; - justify-content: space-between; - align-items: center; - width: 30em; - margin: 1em 0; - } - - .tiles-input { - font-size: medium; - text-align: center; - width: 17em; - padding: 0.5em; - } - - .keyboard-dialog { - width: 25em; - text-align: center; - background-color: white; - } + styles: [ + ` + .slider-container { + display: flex; + justify-content: space-between; + align-items: center; + width: 30em; + margin: 1em 0; + } - h2 { - font-size: 1.5em; - color: #333; - margin-bottom: 1em; - font-weight: bold; - } + .tiles-input { + font-size: medium; + text-align: center; + width: 17em; + padding: 0.5em; + } - .keyboard-list { - list-style-type: none; - padding: 0; - } + .keyboard-dialog { + width: 25em; + text-align: center; + background-color: white; + } - .keyboard-list li { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 1em; - } + h2 { + font-size: 1.5em; + color: #333; + margin-bottom: 1em; + font-weight: bold; + } - .keyboard-list li span { - display: inline-block; - background-color: #eef1f7; - padding: 0.5em 0.75em; - border-radius: 0.5em; - color: #333; - font-weight: bold; - min-width: 4em; - text-align: center; - } + .keyboard-list { + list-style-type: none; + padding: 0; + } - .control-desc { - color: #666; - font-size: 0.9em; - } + .keyboard-list li { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 1em; + } - /* Keyboard key styling */ - .key { - border-radius: 0.5em; - background-color: #ffcc00; - font-size: 1em; - padding: 0.5em 0.75em; - color: #333; - } + .keyboard-list li span { + display: inline-block; + background-color: #eef1f7; + padding: 0.5em 0.75em; + border-radius: 0.5em; + color: #333; + font-weight: bold; + min-width: 4em; + text-align: center; + } - .key-multi { - display: flex; - gap: 0.25em; - } + .control-desc { + color: #666; + font-size: 0.9em; + } - .key-multi .key { - background-color: #00bcd4; - padding: 0.3em 0.6em; - } + /* Keyboard key styling */ + .key { + border-radius: 0.5em; + background-color: #ffcc00; + font-size: 1em; + padding: 0.5em 0.75em; + color: #333; + } - .highlight { - background-color: #ff5722; - color: white; - } - - @media only screen and (max-width: 56em) { - .elevated { - bottom: 3.5em; - padding-bottom: 0; + .key-multi { + display: flex; + gap: 0.25em; } - } - `] + + .key-multi .key { + background-color: #00bcd4; + padding: 0.3em 0.6em; + } + + .highlight { + background-color: #ff5722; + color: white; + } + + @media only screen and (max-width: 56em) { + .elevated { + bottom: 3.5em; + padding-bottom: 0; + } + } + `] }) export class PreferencesComponent { @@ -246,6 +251,11 @@ export class PreferencesComponent { this.controlsDialogVisible = true; } + showStatsDialog() { + this.mapService.statsDialogVisible = true; + this.mapService.statsDialogNeedsUpdate.next(); + } + openHelp() { window.open("https://developer.nds.live/tools/the-new-mapviewer/user-guide", "_blank"); } diff --git a/erdblick_app/app/stats.component.ts b/erdblick_app/app/stats.component.ts index 59e39c73..acd08adf 100644 --- a/erdblick_app/app/stats.component.ts +++ b/erdblick_app/app/stats.component.ts @@ -1,5 +1,6 @@ import {Component} from "@angular/core"; import {MapService} from "./map.service"; +import {debounceTime} from "rxjs"; @Component({ selector: 'stats-dialog', @@ -17,7 +18,7 @@ import {MapService} from "./map.service"; [style]="{'width': '100%'}"> -
    Total number of considered tiles: {{ consideredTilesCount }}
    +
    Total number of considered tile layers: {{ consideredTilesCount }}
    @@ -34,7 +35,7 @@ import {MapService} from "./map.service";
    - + `, @@ -67,10 +68,12 @@ export class StatsDialogComponent { public selectedMapLayers: { label: string }[] = []; public considerEmptyTiles: boolean = false; public consideredTilesCount: number = 0; + public needsUpdate: boolean = false; constructor(public mapService: MapService) { this.update(); - this.mapService.statsDialogNeedsUpdate.subscribe(_ => this.update()); + this.mapService.statsDialogNeedsUpdate.subscribe(_ => this.needsUpdate = true); + this.mapService.statsDialogNeedsUpdate.pipe(debounceTime(1000)).subscribe(_ => this.update()); } update(): void { @@ -116,5 +119,7 @@ export class StatsDialogComponent { const average = values.reduce((sum, val) => sum + val, 0) / values.length; return { name: statKey, peak, average }; }).sort((a, b) => a.name.localeCompare(b.name)); + + this.needsUpdate = false; } } From 997bd17bb0f0fe4d6bc29ad984b7821e37326b72 Mon Sep 17 00:00:00 2001 From: Joseph Birkner Date: Thu, 24 Oct 2024 21:19:05 +0200 Subject: [PATCH 18/38] Fix crash when createGeometry returns undefined. --- libs/core/src/cesium-interface/primitive.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libs/core/src/cesium-interface/primitive.cpp b/libs/core/src/cesium-interface/primitive.cpp index 12a23a21..827877c5 100644 --- a/libs/core/src/cesium-interface/primitive.cpp +++ b/libs/core/src/cesium-interface/primitive.cpp @@ -87,7 +87,9 @@ void CesiumPrimitive::addPolyLine( if (synchronous_) { polyline = JsValue(polylineClass->call("createGeometry", polyline)); } - addGeometryInstance(style, id, polyline, evalFun); + if (polyline.type() > JsValue::Type::Null) { + addGeometryInstance(style, id, polyline, evalFun); + } } void CesiumPrimitive::addPolygon( From cdc5a0c2ff86af222f03ee7b46dd6a800194a86a Mon Sep 17 00:00:00 2001 From: Joseph Birkner Date: Mon, 28 Oct 2024 11:02:07 +0100 Subject: [PATCH 19/38] Skip hover events while camera is being moved. --- erdblick_app/app/cesium.ts | 10 ++++++++++ erdblick_app/app/view.component.ts | 13 ++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/erdblick_app/app/cesium.ts b/erdblick_app/app/cesium.ts index a6792f04..f676501b 100644 --- a/erdblick_app/app/cesium.ts +++ b/erdblick_app/app/cesium.ts @@ -22,6 +22,16 @@ export type Matrix3 = Cesium.Matrix3; export const Matrix3 = Cesium.Matrix3; export type Color = Cesium.Color; export const Color = Cesium.Color; +export type GeometryInstance = Cesium.GeometryInstance; +export const GeometryInstance = Cesium.GeometryInstance; +export type PerInstanceColorAppearance = Cesium.PerInstanceColorAppearance; +export const PerInstanceColorAppearance = Cesium.PerInstanceColorAppearance; +export type Primitive = Cesium.Primitive; +export const Primitive = Cesium.Primitive; +export type RectangleGeometry = Cesium.RectangleGeometry; +export const RectangleGeometry = Cesium.RectangleGeometry; +export type RectangleOutlineGeometry = Cesium.RectangleOutlineGeometry; +export const RectangleOutlineGeometry = Cesium.RectangleOutlineGeometry; export type ColorGeometryInstanceAttribute = Cesium.ColorGeometryInstanceAttribute; export const ColorGeometryInstanceAttribute = Cesium.ColorGeometryInstanceAttribute; export type ImageryLayer = Cesium.ImageryLayer; diff --git a/erdblick_app/app/view.component.ts b/erdblick_app/app/view.component.ts index cba5d14b..8a49b192 100644 --- a/erdblick_app/app/view.component.ts +++ b/erdblick_app/app/view.component.ts @@ -55,6 +55,7 @@ export class ErdblickViewComponent implements AfterViewInit { private mouseHandler: ScreenSpaceEventHandler | null = null; private openStreetMapLayer: ImageryLayer | null = null; private marker: Entity | null = null; + private cameraIsMoving: boolean = false; /** * Construct a Cesium View with a Model. @@ -125,8 +126,8 @@ export class ErdblickViewComponent implements AfterViewInit { this.openStreetMapLayer = this.viewer.imageryLayers.addImageryProvider(this.getOpenStreetMapLayerProvider()); this.openStreetMapLayer.alpha = 0.3; - this.mouseHandler = new ScreenSpaceEventHandler(this.viewer.scene.canvas); + this.cameraIsMoving = false; this.mouseHandler.setInputAction((movement: any) => { const position = movement.position; @@ -193,6 +194,10 @@ export class ErdblickViewComponent implements AfterViewInit { if (document.elementFromPoint(position.x, position.y)?.tagName.toLowerCase() !== "canvas") { return; } + // Do not handle mouse move here, if the camera is currently being moved. + if (this.cameraIsMoving) { + return; + } const coordinates = this.viewer.camera.pickEllipsoid(position, this.viewer.scene.globe.ellipsoid); if (coordinates !== undefined) { this.coordinatesService.mouseMoveCoordinates.next(Cartographic.fromCartesian(coordinates)) @@ -210,6 +215,12 @@ export class ErdblickViewComponent implements AfterViewInit { this.parameterService.setCameraState(this.viewer.camera); this.updateViewport(); }); + this.viewer.camera.moveStart.addEventListener(() => { + this.cameraIsMoving = true; + }); + this.viewer.camera.moveEnd.addEventListener(() => { + this.cameraIsMoving = false; + }); this.viewer.scene.globe.baseColor = new Color(0.1, 0.1, 0.1, 1); // Remove fullscreen button as unnecessary From 4d2eeac2280f5a25b8a100cc80d37c5d91645374 Mon Sep 17 00:00:00 2001 From: Joseph Birkner Date: Mon, 28 Oct 2024 11:02:30 +0100 Subject: [PATCH 20/38] Show sum in viewport statistics. --- erdblick_app/app/stats.component.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/erdblick_app/app/stats.component.ts b/erdblick_app/app/stats.component.ts index acd08adf..c71652c1 100644 --- a/erdblick_app/app/stats.component.ts +++ b/erdblick_app/app/stats.component.ts @@ -24,6 +24,7 @@ import {debounceTime} from "rxjs"; Statistic Peak Value + Sum Value Average Value @@ -31,6 +32,7 @@ import {debounceTime} from "rxjs"; {{ stat.name }} {{ stat.peak | number: '1.2-2' }} + {{ stat.sum | number: '1.2-2' }} {{ stat.average | number: '1.2-2' }} @@ -63,7 +65,7 @@ import {debounceTime} from "rxjs"; ] }) export class StatsDialogComponent { - public aggregatedStats: { name: string, peak: number, average: number }[] = []; + public aggregatedStats: { name: string, peak: number, average: number, sum: number }[] = []; public availableMapLayers: { label: string }[] = []; public selectedMapLayers: { label: string }[] = []; public considerEmptyTiles: boolean = false; @@ -116,8 +118,9 @@ export class StatsDialogComponent { // Calculate peak and average for each statistic this.aggregatedStats = Array.from(statsAccumulator.entries()).map(([statKey, values]) => { const peak = Math.max(...values); - const average = values.reduce((sum, val) => sum + val, 0) / values.length; - return { name: statKey, peak, average }; + const sum = values.reduce((sum, val) => sum + val, 0); + const average = sum / values.length; + return { name: statKey, peak, average, sum }; }).sort((a, b) => a.name.localeCompare(b.name)); this.needsUpdate = false; From 06c0901ed3cb1b601046301987b6c10ae4220285 Mon Sep 17 00:00:00 2001 From: Joseph Birkner Date: Mon, 28 Oct 2024 11:04:00 +0100 Subject: [PATCH 21/38] Switch to synchronous rendering for tile border lines. --- erdblick_app/app/visualization.model.ts | 94 +++++++++++++++++++------ 1 file changed, 71 insertions(+), 23 deletions(-) diff --git a/erdblick_app/app/visualization.model.ts b/erdblick_app/app/visualization.model.ts index ca4d63d4..f10ff728 100644 --- a/erdblick_app/app/visualization.model.ts +++ b/erdblick_app/app/visualization.model.ts @@ -7,7 +7,13 @@ import { Rectangle, Viewer, CallbackProperty, - HeightReference + HeightReference, + ColorGeometryInstanceAttribute, + GeometryInstance, + PerInstanceColorAppearance, + Primitive, + RectangleGeometry, + RectangleOutlineGeometry } from "./cesium"; import {FeatureLayerStyle, TileFeatureLayer, HighlightMode} from "../../build/libs/core/erdblick-core"; import {MergedPointVisualization, PointMergeService} from "./pointmerge.service"; @@ -33,56 +39,98 @@ interface StyleWithIsDeleted extends FeatureLayerStyle { */ class TileBoxVisualization { static visualizations: Map = new Map(); + static outlinePrimitive: Primitive|null = null; static get(tile: FeatureTile, featureCount: number, viewer: Viewer, color?: Color): TileBoxVisualization { if (!TileBoxVisualization.visualizations.has(tile.tileId)) { TileBoxVisualization.visualizations.set( tile.tileId, new TileBoxVisualization(viewer, tile, color)); + TileBoxVisualization.updatePrimitive(viewer); } let result = this.visualizations.get(tile.tileId)!; ++result.refCount; result.featureCount += featureCount; + result.updateOutlineColor(); return result; } - // Keep track of how many TileVisualizations are using this low-detail one. - // We can delete this instance, as soon as refCount is 0. + static updatePrimitive(viewer: Viewer) { + if (this.outlinePrimitive) { + viewer.scene.primitives.remove(this.outlinePrimitive); + } + this.outlinePrimitive = viewer.scene.primitives.add(new Primitive({ + geometryInstances: [...this.visualizations].map(kv => kv[1].instance), + appearance: new PerInstanceColorAppearance({ + flat: true, + renderState: { + depthTest: { + enabled: true + } + } + }), + asynchronous: false + })); + } + refCount: number = 0; featureCount: number = 0; - private readonly entity: Entity; private readonly id: bigint; + private readonly color?: Color; + private outlineColorAttribute: ColorGeometryInstanceAttribute; + private instance: GeometryInstance; constructor(viewer: Viewer, tile: FeatureTile, color?: Color) { + this.color = color; + this.outlineColorAttribute = ColorGeometryInstanceAttribute.fromColor(this.getCurrentOutlineColor()); + let tileBox = coreLib.getTileBox(BigInt(tile.tileId)); - this.entity = viewer.entities.add({ - rectangle: { - coordinates: Rectangle.fromDegrees(...tileBox), - height: HeightReference.CLAMP_TO_GROUND, - material: Color.TRANSPARENT, - outlineWidth: 2, - outline: true, - outlineColor: new CallbackProperty((time, result) => { - if (color !== undefined) { - return color.withAlpha(0.7); - } else{ - if (this.featureCount > 0) { - return Color.YELLOW.withAlpha(0.7); - } else { - return Color.AQUA.withAlpha(0.3); - } - } - }, false) + let rectangle = Rectangle.fromDegrees(...tileBox); + let outlineGeometry = RectangleOutlineGeometry.createGeometry(new RectangleOutlineGeometry({ + rectangle: rectangle, + height: 0.0 + })); + if (!outlineGeometry) { + console.error("Failed to create RectangleOutlineGeometry!"); + } + + this.instance = new GeometryInstance({ + geometry: outlineGeometry!, + attributes: { + color: this.outlineColorAttribute } }); + this.id = tile.tileId; } + private getCurrentOutlineColor(): Color { + if (this.color !== undefined) { + return this.color.withAlpha(0.7); + } else { + if (this.featureCount > 0) { + return Color.YELLOW.withAlpha(0.7); + } else { + return Color.AQUA.withAlpha(0.3); + } + } + } + + updateOutlineColor() { + let newColor = this.getCurrentOutlineColor(); + // Update the color attribute + ColorGeometryInstanceAttribute.toValue(newColor, this.outlineColorAttribute.value); + } + delete(viewer: Viewer, featureCount: number) { --this.refCount; this.featureCount -= featureCount; if (this.refCount <= 0) { - viewer.entities.remove(this.entity); TileBoxVisualization.visualizations.delete(this.id); + TileBoxVisualization.updatePrimitive(viewer); + } + else { + // Update the outline color since featureCount has changed + this.updateOutlineColor(); } } } From ed8b759ea421798abc93d61787218a10eec3dc85 Mon Sep 17 00:00:00 2001 From: Joseph Birkner Date: Mon, 28 Oct 2024 11:05:10 +0100 Subject: [PATCH 22/38] Fix build. --- erdblick_app/app/sourcedata.panel.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erdblick_app/app/sourcedata.panel.component.ts b/erdblick_app/app/sourcedata.panel.component.ts index 28843285..3ac0f351 100644 --- a/erdblick_app/app/sourcedata.panel.component.ts +++ b/erdblick_app/app/sourcedata.panel.component.ts @@ -234,7 +234,7 @@ export class SourceDataPanelComponent implements OnInit, AfterViewInit, OnDestro } selectItemWithAddress(address?: bigint) { - let addressInRange: Function | undefined; + let addressInRange: (address: any) => boolean | undefined; if (address !== undefined) { if (this.addressFormat == coreLib.SourceDataAddressFormat.BIT_RANGE) { const searchAddress = { From 13a519b3e3f1f3b11e7764b50644d47709cf273f Mon Sep 17 00:00:00 2001 From: Wagram Airiian Date: Mon, 4 Nov 2024 14:29:38 +0100 Subject: [PATCH 23/38] Update build-release.yml to setup-node v4 and up node version to 22 --- .github/workflows/build-release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-release.yml b/.github/workflows/build-release.yml index 32f8bd8b..e4cb4f4c 100644 --- a/.github/workflows/build-release.yml +++ b/.github/workflows/build-release.yml @@ -12,9 +12,9 @@ jobs: uses: actions/checkout@v3 - name: Use Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: - node-version: '21.x' + node-version: '22.x' cache: "npm" cache-dependency-path: package-lock.json From 8d4dc6532f1da6c10ea171150e8f780c6b16089a Mon Sep 17 00:00:00 2001 From: Joseph Birkner Date: Mon, 4 Nov 2024 16:05:34 +0100 Subject: [PATCH 24/38] Add preventOnInput parameter to registerShortcut. --- erdblick_app/app/inspection.service.ts | 2 +- erdblick_app/app/keyboard.service.ts | 12 ++++++------ erdblick_app/app/map.panel.component.ts | 2 +- erdblick_app/app/map.service.ts | 4 ++-- erdblick_app/app/search.panel.component.ts | 2 +- erdblick_app/app/view.component.ts | 14 +++++++------- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/erdblick_app/app/inspection.service.ts b/erdblick_app/app/inspection.service.ts index 05220c84..f9931bc0 100644 --- a/erdblick_app/app/inspection.service.ts +++ b/erdblick_app/app/inspection.service.ts @@ -77,7 +77,7 @@ export class InspectionService { private keyboardService: KeyboardService, public parametersService: ParametersService) { - this.keyboardService.registerShortcuts(["Ctrl+j", "Ctrl+J"], this.zoomToFeature.bind(this)); + this.keyboardService.registerShortcut("Ctrl+j", this.zoomToFeature.bind(this)); this.mapService.selectionTopic.pipe(distinctUntilChanged(selectedFeaturesEqualTo)).subscribe(selectedFeatures => { if (!selectedFeatures?.length) { diff --git a/erdblick_app/app/keyboard.service.ts b/erdblick_app/app/keyboard.service.ts index e87a3dab..3f530b77 100644 --- a/erdblick_app/app/keyboard.service.ts +++ b/erdblick_app/app/keyboard.service.ts @@ -20,6 +20,7 @@ export class KeyboardService { private renderer: Renderer2; private dialogStack: Array = []; private shortcuts = new Map void>(); + private preventOnInputShortcuts: Set = new Set(); constructor(rendererFactory: RendererFactory2) { this.renderer = rendererFactory.createRenderer(null, null); @@ -45,7 +46,7 @@ export class KeyboardService { // focusing another control/closing the enclosing dialog. // Let non-ctrl key events or text editing shortcuts do their default things. - if (isInput && (!key.includes("Ctrl") || ["ctrl+x", "ctrl+c", "ctrl+v"].includes(key.toLowerCase()))) { + if (isInput && this.preventOnInputShortcuts.has(key)) { return; } @@ -69,12 +70,11 @@ export class KeyboardService { return key; } - registerShortcuts(keys: string[], callback: (event: KeyboardEvent) => void) { - keys.forEach(keys_ => this.registerShortcut(keys_, callback)); - } - - registerShortcut(keys: string, callback: (event: KeyboardEvent) => void) { + registerShortcut(keys: string, callback: (event: KeyboardEvent) => void, preventOnInput: boolean=false) { this.shortcuts.set(keys, callback); + if (preventOnInput) { + this.preventOnInputShortcuts.add(keys); + } } ngOnDestroy() { diff --git a/erdblick_app/app/map.panel.component.ts b/erdblick_app/app/map.panel.component.ts index 633b4ab6..bcf0bc9a 100644 --- a/erdblick_app/app/map.panel.component.ts +++ b/erdblick_app/app/map.panel.component.ts @@ -244,7 +244,7 @@ export class MapPanelComponent { public editorService: EditorService, public dsService: DataSourcesService, private sidePanelService: SidePanelService) { - this.keyboardService.registerShortcuts(['m', 'M'], this.showLayerDialog.bind(this)); + this.keyboardService.registerShortcut('m', this.showLayerDialog.bind(this), true); this.parameterService.parameters.subscribe(parameters => { this.osmEnabled = parameters.osm; diff --git a/erdblick_app/app/map.service.ts b/erdblick_app/app/map.service.ts index 221662df..2947a0b9 100644 --- a/erdblick_app/app/map.service.ts +++ b/erdblick_app/app/map.service.ts @@ -206,10 +206,10 @@ export class MapService { this.visualizeHighlights(coreLib.HighlightMode.HOVER_HIGHLIGHT, hoveredFeatureWrappers); }); - this.keyboardService.registerShortcuts(["Ctrl+x", "Ctrl+X"], ()=>{ + this.keyboardService.registerShortcut("Ctrl+x", ()=>{ this.statsDialogVisible = true; this.statsDialogNeedsUpdate.next(); - }); + }, true); } private processTileStream() { diff --git a/erdblick_app/app/search.panel.component.ts b/erdblick_app/app/search.panel.component.ts index aa47c29e..da11d652 100644 --- a/erdblick_app/app/search.panel.component.ts +++ b/erdblick_app/app/search.panel.component.ts @@ -204,7 +204,7 @@ export class SearchPanelComponent implements AfterViewInit { private messageService: InfoMessageService, private jumpToTargetService: JumpTargetService, private sidePanelService: SidePanelService) { - this.keyboardService.registerShortcuts(["Ctrl+k", "Ctrl+K"], this.clickOnSearchToStart.bind(this)); + this.keyboardService.registerShortcut("Ctrl+k", this.clickOnSearchToStart.bind(this)); this.clickListener = this.renderer.listen('document', 'click', this.handleClickOut.bind(this)); this.jumpToTargetService.targetValueSubject.subscribe((event: string) => { diff --git a/erdblick_app/app/view.component.ts b/erdblick_app/app/view.component.ts index 8a49b192..e67c5f09 100644 --- a/erdblick_app/app/view.component.ts +++ b/erdblick_app/app/view.component.ts @@ -291,13 +291,13 @@ export class ErdblickViewComponent implements AfterViewInit { }); }); - this.keyboardService.registerShortcuts(['q', 'Q'], this.zoomIn.bind(this)); - this.keyboardService.registerShortcuts(['e', 'E'], this.zoomOut.bind(this)); - this.keyboardService.registerShortcuts(['w', 'W'], this.moveUp.bind(this)); - this.keyboardService.registerShortcuts(['a', 'A'], this.moveLeft.bind(this)); - this.keyboardService.registerShortcuts(['s', 'S'], this.moveDown.bind(this)); - this.keyboardService.registerShortcuts(['d', 'D'], this.moveRight.bind(this)); - this.keyboardService.registerShortcuts(['r', 'R'], this.resetOrientation.bind(this)); + this.keyboardService.registerShortcut('q', this.zoomIn.bind(this), true); + this.keyboardService.registerShortcut('e', this.zoomOut.bind(this), true); + this.keyboardService.registerShortcut('w', this.moveUp.bind(this), true); + this.keyboardService.registerShortcut('a', this.moveLeft.bind(this), true); + this.keyboardService.registerShortcut('s', this.moveDown.bind(this), true); + this.keyboardService.registerShortcut('d', this.moveRight.bind(this), true); + this.keyboardService.registerShortcut('r', this.resetOrientation.bind(this), true); // Hide the global loading spinner. const spinner = document.getElementById('global-spinner-container'); From 7947f407cde2e75e84a6eaa73906e86909295582 Mon Sep 17 00:00:00 2001 From: Wagram Airiian Date: Thu, 24 Oct 2024 23:10:30 +0200 Subject: [PATCH 25/38] Add text field for a custom tile id --- .../sourcedataselection.dialog.component.ts | 115 +++++++++++++----- erdblick_app/styles.scss | 23 ++++ 2 files changed, 107 insertions(+), 31 deletions(-) diff --git a/erdblick_app/app/sourcedataselection.dialog.component.ts b/erdblick_app/app/sourcedataselection.dialog.component.ts index 25d637a8..dd1406df 100644 --- a/erdblick_app/app/sourcedataselection.dialog.component.ts +++ b/erdblick_app/app/sourcedataselection.dialog.component.ts @@ -16,14 +16,23 @@ import {Color} from "./cesium";

    {{ errorString }}

    - + + !element.disabled); - if (this.selectedTileId !== undefined) { - this.onTileIdChange(this.selectedTileId); - if (this.mapIds.length) { - this.selectedMapId = this.mapIds[0]; - this.onMapIdChange(this.selectedMapId); - if (this.sourceDataLayers.length) { - this.selectedSourceDataLayer = this.sourceDataLayers[0]; - this.onLayerIdChange(this.selectedSourceDataLayer); - } - } + if (this.selectedTileId === undefined) { + return; } + this.triggerModelChange(this.selectedTileId); } findMapsForTileId(tileId: bigint) { + // TODO: Load the tile if not loaded. const maps = new Set(); for (const featureTile of this.mapService.loadedTileLayers.values()) { - if (featureTile.tileId == tileId) { + if (featureTile.tileId == tileId && featureTile.numFeatures > 0) { maps.add(featureTile.mapName); } } return [...maps].map(mapId => ({ id: mapId, name: mapId })); } + onCustomTileIdChange(tileIdString: string) { + if (!tileIdString) { + this.mapIds = []; + this.sourceDataLayers = []; + return; + } + + const tileId = BigInt(tileIdString); + const maps = this.findMapsForTileId(tileId); + this.mapIdsMap.set(tileId, maps); + this.triggerModelChange({id: tileId, name: tileIdString}); + } + + private triggerModelChange(tileId: SourceDataDropdownOption) { + this.onTileIdChange(tileId); + if (this.mapIds.length) { + this.selectedMapId = this.mapIds[0]; + this.onMapIdChange(this.selectedMapId); + if (this.sourceDataLayers.length) { + this.selectedSourceDataLayer = this.sourceDataLayers[0]; + this.onLayerIdChange(this.selectedSourceDataLayer); + } + } + } + onTileIdChange(tileId: SourceDataDropdownOption) { this.selectedMapId = undefined; this.selectedSourceDataLayer = undefined; @@ -176,20 +209,40 @@ export class SourceDataLayerSelectionDialogComponent { } requestSourceData() { + const tileId = this.customTileId ? this.customTileId : this.selectedTileId?.id; this.inspectionService.loadSourceDataInspection( - Number(this.selectedTileId?.id), + Number(tileId), String(this.selectedMapId?.id), String(this.selectedSourceDataLayer?.id) ); this.close(); } + toggleCustomTileIdInput() { + this.showCustomTileIdInput = !this.showCustomTileIdInput; + if (!this.showCustomTileIdInput) { + this.load(); + } else { + this.errorString = ""; + this.mapIds = []; + this.sourceDataLayers = []; + this.selectedTileId = undefined; + this.selectedMapId = undefined; + this.selectedSourceDataLayer = undefined; + this.customTileId = ""; + } + } + reset() { this.loading = true; this.errorString = ""; this.selectedTileId = undefined; this.selectedMapId = undefined; this.selectedSourceDataLayer = undefined; + this.mapIds = []; + this.sourceDataLayers = []; + this.showCustomTileIdInput = false; + this.customTileId = ""; } close() { diff --git a/erdblick_app/styles.scss b/erdblick_app/styles.scss index 0e00e49d..9bfe58a9 100644 --- a/erdblick_app/styles.scss +++ b/erdblick_app/styles.scss @@ -1051,6 +1051,29 @@ body { flex-direction: column; gap: 0.5em; + .main-dropdown { + width: 100%; + display: flex; + flex-direction: row; + gap: 0.5em; + + p-dropdown { + width: 100%; + } + + .p-inputtext { + width: 100%; + } + + button { + padding-left: 0; + padding-right: 0; + width: 2.85em; + height: 2.85em; + box-shadow: none; + } + } + .p-dropdown { width: 100%; } From 86b3d4fa1153f8d4097c369db7785c4b7f1f5b2c Mon Sep 17 00:00:00 2001 From: Wagram Airiian Date: Tue, 29 Oct 2024 17:30:19 +0100 Subject: [PATCH 26/38] * Move validateMapgetTileId and parseMapgetTileId helper functions to JumpTargetService. * Implement tile source data inspection target in JumpTargetService. * Modify RightClickMenuService to use BehaviorSubject for menuItems management. * Update SourceDataLayerSelectionDialogComponent with map/tile ID custom loading and tile outlining. * Adjust ErdblickViewComponent to manage tile outlines and bind menu items. * Increase width of context menu in styles.scss and add .red background style. --- erdblick_app/app/jump.service.ts | 130 +++++++++++++++++- erdblick_app/app/map.service.ts | 10 -- erdblick_app/app/parameters.service.ts | 3 +- erdblick_app/app/rightclickmenu.service.ts | 24 ++-- erdblick_app/app/search.panel.component.ts | 48 +++---- .../app/sourcedata.panel.component.ts | 16 ++- .../sourcedataselection.dialog.component.ts | 111 ++++++++++----- erdblick_app/app/view.component.ts | 17 ++- erdblick_app/styles.scss | 6 +- 9 files changed, 284 insertions(+), 81 deletions(-) diff --git a/erdblick_app/app/jump.service.ts b/erdblick_app/app/jump.service.ts index b8c48e85..64c01204 100644 --- a/erdblick_app/app/jump.service.ts +++ b/erdblick_app/app/jump.service.ts @@ -8,6 +8,8 @@ import {coreLib} from "./wasm"; import {FeatureSearchService} from "./feature.search.service"; import {SidePanelService, SidePanelState} from "./sidepanel.service"; import {HighlightMode} from "build/libs/core/erdblick-core"; +import {InspectionService} from "./inspection.service"; +import {RightClickMenuService} from "./rightclickmenu.service"; export interface SearchTarget { icon: string; @@ -46,6 +48,8 @@ export class JumpTargetService { private mapService: MapService, private messageService: InfoMessageService, private sidePanelService: SidePanelService, + private inspectionService: InspectionService, + private menuService: RightClickMenuService, private searchService: FeatureSearchService) { this.httpClient.get("/config.json", {responseType: 'json'}).subscribe({ next: (data: any) => { @@ -108,6 +112,124 @@ export class JumpTargetService { } } + validateMapgetTileId(value: string) { + return value.length > 0 && !/\s/g.test(value.trim()) && !isNaN(+value.trim()); + } + + parseMapgetTileId(value: string): number[] | undefined { + if (!value) { + this.messageService.showError("No value provided!"); + return; + } + try { + let wgs84TileId = BigInt(value); + let position = coreLib.getTilePosition(wgs84TileId); + return [position.x, position.y, position.z] + } catch (e) { + this.messageService.showError("Possibly malformed TileId: " + (e as Error).message.toString()); + } + return undefined; + } + + getInspectTileSourceDataTarget() { + const searchString = this.targetValueSubject.getValue(); + let label = "tileId = ? | (mapId = ?) | (sourceLayerId = ?)"; + + const matchSourceDataElements = (value: string) => { + const regex = /^\s*(\d+)\s*(?:[,\s;]+)?\s*([^\s,;]*)\s*(?:[,\s;]+)?\s*([^\s,;]*)?\s*$/; + const match = value.match(regex); + let tileId: bigint | null = null; + let mapId = null; + let sourceLayerId = null; + let valid = true; + + if (match) { + const [_, bigintStr, str1, str2] = match; + try { + tileId = BigInt(bigintStr); + valid = this.validateMapgetTileId(tileId.toString()); + } catch { + valid = false; + } + + // TODO: check whether the mapId and layerId are valid + if (str1) { + mapId = str1; + } + if (str2) { + sourceLayerId = str2; + } + } else { + valid = false; + } + + if (!tileId || !valid) { + return null; + } + + + + return [tileId, mapId, sourceLayerId] + } + + const matches = matchSourceDataElements(searchString); + if (matches) { + const [tileId, mapId, sourceLayerId] = matches; + if (tileId) { + label = `tileId = ${tileId}`; + if (mapId) { + label = `${label} | mapId = ${mapId}`; + if (sourceLayerId) { + label = `${label} | sourceLayerId = ${sourceLayerId}`; + } else { + label = `${label} | (sourceLayerId = ?)`; + } + } else { + label = `${label} | (mapId = ?) | (sourceLayerId = ?)` + } + } else { + label += `
    Insufficient parameters`; + } + } + + return { + icon: "pi-database", + color: "red", + name: "Inspect Mapget Tile", + label: label, + enabled: false, + execute: (value: string) => { + const matches = matchSourceDataElements(value); + if (matches) { + const [tileId, mapId, sourceLayerId] = matches; + try { + if (tileId) { + if (mapId) { + if (sourceLayerId) { + this.inspectionService.loadSourceDataInspection( + Number(tileId), + String(mapId), + String(sourceLayerId) + ) + } else { + this.menuService.customTileAndMapId.next([String(tileId), String(mapId)]); + } + } else { + this.menuService.customTileAndMapId.next([String(tileId), ""]); + } + } + } catch (e) { + this.messageService.showError(String(e)); + } + } + }, + validate: (value: string) => { + const matches = matchSourceDataElements(value); + return matches && matches.length && matches[0]; + } + } + } + update() { let featureJumpTargets = this.mapService.tileParser?.filterFeatureJumpTargets(this.targetValueSubject.getValue()); let featureJumpTargetsConverted = []; @@ -123,7 +245,12 @@ export class JumpTargetService { name: `Jump to ${fjt.name}`, label: label, enabled: !fjt.error, - execute: (_: string) => { this.highlightByJumpTarget(fjt).then(); }, + execute: (_: string) => { + if (fjt.name.toLowerCase().includes("tileid")) { + + } + this.highlightByJumpTarget(fjt).then(); + }, validate: (_: string) => { return !fjt.error; }, } }); @@ -131,6 +258,7 @@ export class JumpTargetService { this.jumpTargets.next([ this.getFeatureMatchTarget(), + this.getInspectTileSourceDataTarget(), ...featureJumpTargetsConverted, ...this.extJumpTargets ]); diff --git a/erdblick_app/app/map.service.ts b/erdblick_app/app/map.service.ts index 2947a0b9..6ef53abf 100644 --- a/erdblick_app/app/map.service.ts +++ b/erdblick_app/app/map.service.ts @@ -97,7 +97,6 @@ export class MapService { private tileVisualizationQueue: [string, TileVisualization][]; private selectionVisualizations: TileVisualization[]; private hoverVisualizations: TileVisualization[]; - private specialTileBorderColourForTiles: [bigint, Color] = [-1n, Color.TRANSPARENT]; tileParser: TileLayerParser|null = null; tileVisualizationTopic: Subject; @@ -446,10 +445,6 @@ export class MapService { return false; } tileVisu.showTileBorder = this.getMapLayerBorderState(mapName, layerName); - if (this.specialTileBorderColourForTiles[0] == tileVisu.tile.tileId) { - tileVisu.showTileBorder = true; - tileVisu.specialBorderColour = this.specialTileBorderColourForTiles[1]; - } tileVisu.isHighDetail = this.currentHighDetailTileIds.has(tileVisu.tile.tileId) || tileVisu.tile.preventCulling; return true; }); @@ -857,9 +852,4 @@ export class MapService { } } } - - setSpecialTileBorder(tileId: bigint, color: Color) { - this.specialTileBorderColourForTiles = [tileId, color]; - this.update(); - } } diff --git a/erdblick_app/app/parameters.service.ts b/erdblick_app/app/parameters.service.ts index 84851dee..b4dfa3a0 100644 --- a/erdblick_app/app/parameters.service.ts +++ b/erdblick_app/app/parameters.service.ts @@ -499,10 +499,11 @@ export class ParametersService { this.saveHistoryStateValue(value); } } + console.log(value); this.p().search = value ? value : []; this._replaceUrl = false; - this.parameters.next(this.p()) this.lastSearchHistoryEntry.next(value); + this.parameters.next(this.p()) } private saveHistoryStateValue(value: [number, string]) { diff --git a/erdblick_app/app/rightclickmenu.service.ts b/erdblick_app/app/rightclickmenu.service.ts index 63a93bfd..e2f9857b 100644 --- a/erdblick_app/app/rightclickmenu.service.ts +++ b/erdblick_app/app/rightclickmenu.service.ts @@ -2,6 +2,7 @@ import {Injectable} from "@angular/core"; import {MenuItem} from "primeng/api"; import {BehaviorSubject, Subject} from "rxjs"; import {InspectionService} from "./inspection.service"; +import {Entity} from "./cesium"; export interface SourceDataDropdownOption { id: bigint | string, @@ -12,26 +13,30 @@ export interface SourceDataDropdownOption { @Injectable() export class RightClickMenuService { - menuItems: MenuItem[]; + menuItems: BehaviorSubject = new BehaviorSubject([]); tileSourceDataDialogVisible: boolean = false; lastInspectedTileSourceDataOption: BehaviorSubject<{tileId: number, mapId: string, layerId: string} | null> = new BehaviorSubject<{tileId: number, mapId: string, layerId: string} | null>(null); tileIdsForSourceData: Subject = new Subject(); + tileOutiline: Subject = new Subject(); + customTileAndMapId: Subject<[string, string]> = new Subject<[string, string]>(); constructor(private inspectionService: InspectionService) { - this.menuItems = [{ + this.menuItems.next([{ label: 'Inspect Source Data for Tile', icon: 'pi pi-database', command: () => { this.tileSourceDataDialogVisible = true; } - }]; + }]); this.lastInspectedTileSourceDataOption.subscribe(lastInspectedTileSourceData => { + const items = this.menuItems.getValue(); if (lastInspectedTileSourceData) { this.updateMenuForLastInspectedSourceData(lastInspectedTileSourceData); - } else if (this.menuItems.length > 1) { - this.menuItems.shift(); + } else if (items.length > 1) { + items.shift(); + this.menuItems.next(items); } }); } @@ -48,11 +53,12 @@ export class RightClickMenuService { ); } }; - - if (this.menuItems.length > 1) { - this.menuItems[0] = menuItem; + const items = this.menuItems.getValue(); + if (items.length > 1) { + items[0] = menuItem; } else { - this.menuItems.unshift(menuItem); + items.unshift(menuItem); } + this.menuItems.next(items); } } \ No newline at end of file diff --git a/erdblick_app/app/search.panel.component.ts b/erdblick_app/app/search.panel.component.ts index da11d652..bc4a0c1c 100644 --- a/erdblick_app/app/search.panel.component.ts +++ b/erdblick_app/app/search.panel.component.ts @@ -9,6 +9,7 @@ import {SidePanelService, SidePanelState} from "./sidepanel.service"; import {Dialog} from "primeng/dialog"; import {KeyboardService} from "./keyboard.service"; import {distinctUntilChanged} from "rxjs"; +import {RightClickMenuService} from "./rightclickmenu.service"; interface ExtendedSearchTarget extends SearchTarget { index: number; @@ -116,7 +117,7 @@ export class SearchPanelComponent implements AfterViewInit { const targetsArray: Array = []; const value = this.searchInputValue.trim(); let label = "tileId = ?"; - if (this.validateMapgetTileId(value)) { + if (this.jumpToTargetService.validateMapgetTileId(value)) { label = `tileId = ${value}`; } else { label += `
    Insufficient parameters`; @@ -127,8 +128,8 @@ export class SearchPanelComponent implements AfterViewInit { name: "Mapget Tile ID", label: label, enabled: false, - jump: (value: string) => { return this.parseMapgetTileId(value) }, - validate: (value: string) => { return this.validateMapgetTileId(value) } + jump: (value: string) => { return this.jumpToTargetService.parseMapgetTileId(value) }, + validate: (value: string) => { return this.jumpToTargetService.validateMapgetTileId(value) } }); label = "lon = ? | lat = ? | (level = ?)" if (this.validateWGS84(value, true)) { @@ -203,6 +204,7 @@ export class SearchPanelComponent implements AfterViewInit { private keyboardService: KeyboardService, private messageService: InfoMessageService, private jumpToTargetService: JumpTargetService, + private menuService: RightClickMenuService, private sidePanelService: SidePanelService) { this.keyboardService.registerShortcut("Ctrl+k", this.clickOnSearchToStart.bind(this)); this.clickListener = this.renderer.listen('document', 'click', this.handleClickOut.bind(this)); @@ -233,7 +235,11 @@ export class SearchPanelComponent implements AfterViewInit { this.parametersService.parameters.pipe(distinctUntilChanged()).subscribe(parameters => { if (parameters.search.length) { const lastEntry = this.parametersService.lastSearchHistoryEntry.getValue(); - if (lastEntry && parameters.search[0] != lastEntry[0] && parameters.search[1] != lastEntry[1]) { + if (lastEntry) { + if (parameters.search[0] != lastEntry[0] && parameters.search[1] != lastEntry[1]) { + this.parametersService.lastSearchHistoryEntry.next(parameters.search); + } + } else { this.parametersService.lastSearchHistoryEntry.next(parameters.search); } } @@ -256,6 +262,21 @@ export class SearchPanelComponent implements AfterViewInit { this.reloadSearchHistory(); }); + this.menuService.lastInspectedTileSourceDataOption.subscribe(lastInspectedData => { + if (lastInspectedData && lastInspectedData.tileId && lastInspectedData.mapId && lastInspectedData.layerId) { + const value = `${lastInspectedData?.tileId} ${lastInspectedData?.mapId} ${lastInspectedData?.layerId}`; + for (let i = 0; i < this.searchItems.length; i++) { + if (!this.searchItems[i].name.toLowerCase().includes("features") && + this.searchItems[i].validate(value)) { + console.log("VALIDATED") + console.log("SET HISTORY") + this.parametersService.setSearchHistoryState([i, value]); + break; + } + } + } + }); + this.reloadSearchHistory(); } @@ -298,21 +319,6 @@ export class SearchPanelComponent implements AfterViewInit { } } - parseMapgetTileId(value: string): number[] | undefined { - if (!value) { - this.messageService.showError("No value provided!"); - return; - } - try { - let wgs84TileId = BigInt(value); - let position = coreLib.getTilePosition(wgs84TileId); - return [position.x, position.y, position.z] - } catch (e) { - this.messageService.showError("Possibly malformed TileId: " + (e as Error).message.toString()); - } - return undefined; - } - parseWgs84Coordinates(coordinateString: string, isLonLat: boolean): number[] | undefined { let lon = 0; let lat = 0; @@ -442,10 +448,6 @@ export class SearchPanelComponent implements AfterViewInit { ); } - validateMapgetTileId(value: string) { - return value.length > 0 && !/\s/g.test(value.trim()) && !isNaN(+value.trim()); - } - validateWGS84(value: string, isLonLat: boolean = false) { const coords = this.parseWgs84Coordinates(value, isLonLat); return coords !== undefined && coords[0] >= -90 && coords[0] <= 90 && coords[1] >= -180 && coords[1] <= 180; diff --git a/erdblick_app/app/sourcedata.panel.component.ts b/erdblick_app/app/sourcedata.panel.component.ts index 3ac0f351..18826ed5 100644 --- a/erdblick_app/app/sourcedata.panel.component.ts +++ b/erdblick_app/app/sourcedata.panel.component.ts @@ -282,8 +282,13 @@ export class SourceDataPanelComponent implements OnInit, AfterViewInit, OnDestro }); } - if (address === undefined && node.children?.length == 1) { + if (address === undefined && node.children && node.children.length < 5) { node.expanded = true; + for (const child of node.children) { + if (child.children && child.children.length < 5) { + child.expanded = true; + } + } } if (node.children) { @@ -297,7 +302,14 @@ export class SourceDataPanelComponent implements OnInit, AfterViewInit, OnDestro if (address === undefined) { for (const item of this.treeData) { - item.expanded = true; + if (item.children) { + item.expanded = true; + for (const child of item.children) { + if (child.children && child.children.length < 5) { + child.expanded = true; + } + } + } } } diff --git a/erdblick_app/app/sourcedataselection.dialog.component.ts b/erdblick_app/app/sourcedataselection.dialog.component.ts index dd1406df..c6ed8b75 100644 --- a/erdblick_app/app/sourcedataselection.dialog.component.ts +++ b/erdblick_app/app/sourcedataselection.dialog.component.ts @@ -4,7 +4,8 @@ import {RightClickMenuService, SourceDataDropdownOption} from "./rightclickmenu. import {MapService} from "./map.service"; import {SourceDataPanelComponent} from "./sourcedata.panel.component"; import {InspectionService} from "./inspection.service"; -import {Color} from "./cesium"; +import {CallbackProperty, Color, HeightReference, Rectangle} from "./cesium"; +import {coreLib} from "./wasm"; @Component({ selector: 'sourcedatadialog', @@ -29,7 +30,7 @@ import {Color} from "./cesium"; pInputText [(ngModel)]="customTileId" (ngModelChange)="onCustomTileIdChange($event)"/> + label="" [pTooltip]="showCustomTileIdInput ? 'Reset custom Tile ID' : 'Enter custom Tile ID'" tooltipPosition="bottom" tabindex="0"> @@ -73,10 +74,10 @@ export class SourceDataLayerSelectionDialogComponent { errorString: string = ""; loading: boolean = true; customTileId: string = ""; + customMapId: string = ""; showCustomTileIdInput: boolean = false; - constructor(private parameterService: ParametersService, - private mapService: MapService, + constructor(private mapService: MapService, private inspectionService: InspectionService, public menuService: RightClickMenuService) { this.menuService.tileIdsForSourceData.subscribe(data => { @@ -84,14 +85,26 @@ export class SourceDataLayerSelectionDialogComponent { this.loading = !data.length; this.load(); }); + this.menuService.customTileAndMapId.subscribe(([tileId, mapId]: [string, string]) => { + this.load(tileId.length > 0, tileId, mapId); + this.menuService.tileSourceDataDialogVisible = true; + }); } - load() { - this.showCustomTileIdInput = false; - this.customTileId = ""; + load(withCustomTileId: boolean = false, customTileId: string = "", customMapId: string = "") { + this.showCustomTileIdInput = withCustomTileId; + this.customTileId = customTileId; + this.customMapId = customMapId; this.mapIds = []; this.sourceDataLayers = []; this.loading = false; + this.menuService.tileOutiline.next(null); + if (withCustomTileId && customTileId) { + const tileId = BigInt(customTileId); + this.triggerModelChange({id: tileId, name: customTileId}); + return; + } + if (!this.tileIds.length) { this.selectedTileId = undefined; this.errorString = "No tile IDs available for the clicked position!"; @@ -100,7 +113,7 @@ export class SourceDataLayerSelectionDialogComponent { for (let i = 0; i < this.tileIds.length; i++) { const id = this.tileIds[i].id as bigint; - const maps = this.findMapsForTileId(id); + const maps = [...this.findMapsForTileId(id)]; this.tileIds[i]["disabled"] = !maps.length; this.mapIdsMap.set(id, maps); } @@ -111,15 +124,25 @@ export class SourceDataLayerSelectionDialogComponent { this.triggerModelChange(this.selectedTileId); } - findMapsForTileId(tileId: bigint) { - // TODO: Load the tile if not loaded. - const maps = new Set(); - for (const featureTile of this.mapService.loadedTileLayers.values()) { - if (featureTile.tileId == tileId && featureTile.numFeatures > 0) { - maps.add(featureTile.mapName); + *findMapsForTileId(tileId: bigint): Generator { + const level = coreLib.getTileLevel(tileId); + for (const [mapId, mapInfo] of this.mapService.maps.getValue().entries()) { + for (const [_, layerInfo] of mapInfo.layers.entries()) { + if (layerInfo.type == "SourceData") { + if (layerInfo.zoomLevels.includes(level)) { + yield { id: mapId, name: mapId }; + break; + } else { + for (const featureTile of this.mapService.loadedTileLayers.values()) { + if (featureTile.tileId == tileId) { + yield { id: mapId, name: mapId }; + break; + } + } + } + } } } - return [...maps].map(mapId => ({ id: mapId, name: mapId })); } onCustomTileIdChange(tileIdString: string) { @@ -130,13 +153,26 @@ export class SourceDataLayerSelectionDialogComponent { } const tileId = BigInt(tileIdString); - const maps = this.findMapsForTileId(tileId); + const maps = [...this.findMapsForTileId(tileId)]; this.mapIdsMap.set(tileId, maps); this.triggerModelChange({id: tileId, name: tileIdString}); } private triggerModelChange(tileId: SourceDataDropdownOption) { this.onTileIdChange(tileId); + if (this.customMapId.length) { + const mapId = { id: this.customMapId, name: this.customMapId }; + if (!this.mapIds.includes(mapId)) { + this.mapIds.push(mapId); + } + this.selectedMapId = mapId; + this.onMapIdChange(this.selectedMapId); + if (this.sourceDataLayers.length) { + this.selectedSourceDataLayer = this.sourceDataLayers[0]; + this.onLayerIdChange(this.selectedSourceDataLayer); + } + return; + } if (this.mapIds.length) { this.selectedMapId = this.mapIds[0]; this.onMapIdChange(this.selectedMapId); @@ -151,13 +187,7 @@ export class SourceDataLayerSelectionDialogComponent { this.selectedMapId = undefined; this.selectedSourceDataLayer = undefined; this.sourceDataLayers = []; - // TODO: Fix this. - // Consider just drawing a tile box rectangle without visualising the tile. - // for (const featureTile of this.mapService.loadedTileLayers.values()) { - // if (featureTile.tileId == tileId.id as bigint) { - // this.mapService.setSpecialTileBorder(tileId.id as bigint, Color.HOTPINK); - // } - // } + this.outlineTheTileBox(BigInt(tileId.id), Color.HOTPINK); const mapIds = this.mapIdsMap.get(tileId.id as bigint); if (mapIds !== undefined) { this.mapIds = mapIds.sort((a, b) => a.name.localeCompare(b.name)); @@ -170,6 +200,22 @@ export class SourceDataLayerSelectionDialogComponent { } } + outlineTheTileBox(tileId: bigint, color: Color) { + this.menuService.tileOutiline.next(null); + const tileBox = coreLib.getTileBox(tileId); + const entity = { + rectangle: { + coordinates: Rectangle.fromDegrees(...tileBox), + height: HeightReference.CLAMP_TO_GROUND, + material: Color.TRANSPARENT, + outlineWidth: 2, + outline: true, + outlineColor: color.withAlpha(0.5) + } + } + this.menuService.tileOutiline.next(entity); + } + findLayersForMapId(mapId: string) { const map = this.mapService.maps.getValue().get(mapId); if (map) { @@ -195,7 +241,9 @@ export class SourceDataLayerSelectionDialogComponent { } } - onLayerIdChange(layerId: SourceDataDropdownOption) { + onLayerIdChange(_: SourceDataDropdownOption) {} + + requestSourceData() { if (this.selectedTileId === undefined || this.selectedMapId === undefined || this.selectedSourceDataLayer === undefined) { @@ -206,15 +254,12 @@ export class SourceDataLayerSelectionDialogComponent { mapId: String(this.selectedMapId.id), layerId: String(this.selectedSourceDataLayer.id) }); - } - - requestSourceData() { - const tileId = this.customTileId ? this.customTileId : this.selectedTileId?.id; - this.inspectionService.loadSourceDataInspection( - Number(tileId), - String(this.selectedMapId?.id), - String(this.selectedSourceDataLayer?.id) - ); + // const tileId = this.customTileId ? this.customTileId : this.selectedTileId?.id; + // this.inspectionService.loadSourceDataInspection( + // Number(tileId), + // String(this.selectedMapId?.id), + // String(this.selectedSourceDataLayer?.id) + // ); this.close(); } diff --git a/erdblick_app/app/view.component.ts b/erdblick_app/app/view.component.ts index e67c5f09..e17f11e8 100644 --- a/erdblick_app/app/view.component.ts +++ b/erdblick_app/app/view.component.ts @@ -38,7 +38,7 @@ declare let window: DebugWindow; selector: 'erdblick-view', template: `
    - + `, styles: [` @@ -55,6 +55,8 @@ export class ErdblickViewComponent implements AfterViewInit { private mouseHandler: ScreenSpaceEventHandler | null = null; private openStreetMapLayer: ImageryLayer | null = null; private marker: Entity | null = null; + private tileOutlineEntity: Entity | null = null; + menuItems: MenuItem[] = []; private cameraIsMoving: boolean = false; /** @@ -103,6 +105,10 @@ export class ErdblickViewComponent implements AfterViewInit { } ); }); + + this.menuService.menuItems.subscribe(items => { + this.menuItems = [...items]; + }); } ngAfterViewInit() { @@ -172,6 +178,7 @@ export class ErdblickViewComponent implements AfterViewInit { } if (!defined(feature)) { this.inspectionService.isInspectionPanelVisible = false; + this.menuService.tileOutiline.next(null); } this.mapService.highlightFeatures( Array.isArray(feature?.id) ? feature.id : [feature?.id], @@ -304,6 +311,14 @@ export class ErdblickViewComponent implements AfterViewInit { if (spinner) { spinner.style.display = 'none'; } + + this.menuService.tileOutiline.subscribe(entity => { + if (entity) { + this.tileOutlineEntity = this.viewer.entities.add(entity); + } else if (this.tileOutlineEntity) { + this.viewer.entities.remove(this.tileOutlineEntity); + } + }); } /** diff --git a/erdblick_app/styles.scss b/erdblick_app/styles.scss index 9bfe58a9..7c57110f 100644 --- a/erdblick_app/styles.scss +++ b/erdblick_app/styles.scss @@ -42,7 +42,7 @@ body { } .p-contextmenu { - width: 20em; + width: 22em; } } @@ -459,6 +459,10 @@ body { background-color: var(--primary-color); } + .red { + background-color: indianred; + } + .orange { background-color: darkorange; } From 353678f59cd5bbe979ea02e63df53025c139af87 Mon Sep 17 00:00:00 2001 From: Wagram Airiian Date: Tue, 29 Oct 2024 18:04:26 +0100 Subject: [PATCH 27/38] Fix tslint errors --- erdblick_app/app/jump.service.ts | 5 ----- erdblick_app/app/rightclickmenu.service.ts | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/erdblick_app/app/jump.service.ts b/erdblick_app/app/jump.service.ts index 64c01204..b75f5a70 100644 --- a/erdblick_app/app/jump.service.ts +++ b/erdblick_app/app/jump.service.ts @@ -167,8 +167,6 @@ export class JumpTargetService { return null; } - - return [tileId, mapId, sourceLayerId] } @@ -246,9 +244,6 @@ export class JumpTargetService { label: label, enabled: !fjt.error, execute: (_: string) => { - if (fjt.name.toLowerCase().includes("tileid")) { - - } this.highlightByJumpTarget(fjt).then(); }, validate: (_: string) => { return !fjt.error; }, diff --git a/erdblick_app/app/rightclickmenu.service.ts b/erdblick_app/app/rightclickmenu.service.ts index e2f9857b..dc78a3e6 100644 --- a/erdblick_app/app/rightclickmenu.service.ts +++ b/erdblick_app/app/rightclickmenu.service.ts @@ -18,7 +18,7 @@ export class RightClickMenuService { lastInspectedTileSourceDataOption: BehaviorSubject<{tileId: number, mapId: string, layerId: string} | null> = new BehaviorSubject<{tileId: number, mapId: string, layerId: string} | null>(null); tileIdsForSourceData: Subject = new Subject(); - tileOutiline: Subject = new Subject(); + tileOutiline: Subject = new Subject(); customTileAndMapId: Subject<[string, string]> = new Subject<[string, string]>(); constructor(private inspectionService: InspectionService) { From 398ff36aa619fec8ed2545cbf3508f42f3ddb1b3 Mon Sep 17 00:00:00 2001 From: Wagram Airiian Date: Mon, 4 Nov 2024 13:32:54 +0100 Subject: [PATCH 28/38] * Fix jump to Mapget tile id * Fix space characters in mapId and layerId for search menu entry * Allow using layerName instead of layerId --- .../app/inspection.panel.component.ts | 2 +- erdblick_app/app/inspection.service.ts | 33 +++++++++++ erdblick_app/app/jump.service.ts | 59 +++++++++++++------ .../app/sourcedata.panel.component.ts | 12 ---- .../sourcedataselection.dialog.component.ts | 9 +-- 5 files changed, 81 insertions(+), 34 deletions(-) diff --git a/erdblick_app/app/inspection.panel.component.ts b/erdblick_app/app/inspection.panel.component.ts index 70c0532b..c9903cbe 100644 --- a/erdblick_app/app/inspection.panel.component.ts +++ b/erdblick_app/app/inspection.panel.component.ts @@ -115,7 +115,7 @@ export class InspectionPanelComponent if (map) { this.layerMenuItems = Array.from(map.layers.values()).filter(item => item.type == "SourceData").map(item => { return { - label: SourceDataPanelComponent.layerNameForLayerId(item.layerId), + label: this.inspectionService.layerNameForLayerId(item.layerId), disabled: item.layerId === selection.layerId, command: () => { let sourceData = {...selection}; diff --git a/erdblick_app/app/inspection.service.ts b/erdblick_app/app/inspection.service.ts index f9931bc0..6ac0dca0 100644 --- a/erdblick_app/app/inspection.service.ts +++ b/erdblick_app/app/inspection.service.ts @@ -317,6 +317,39 @@ export class InspectionService { }); } + /** + * Returns a human-readable layer name for a layer id. + * + * @param layerId Layer id to get the name for + */ + layerNameForLayerId(layerId: string) { + const match = layerId.match(/^SourceData-([^.]+\.)*(.*)-([\d]+)/); + if (match) + return `${match[2]}.${match[3]}`; + return layerId; + } + + /** + * Returns an internal layerId for a human-readable layer name. + * + * @param layerId Layer id to get the name for + */ + layerIdForLayerName(layerName: string) { + for (const [_, mapInfo] of this.mapService.maps.getValue().entries()) { + for (const [_, layerInfo] of mapInfo.layers.entries()) { + if (layerInfo.type == "SourceData") { + console.log(layerInfo.layerId, this.layerNameForLayerId(layerInfo.layerId), layerName) + if (this.layerNameForLayerId(layerInfo.layerId) == layerName || + this.layerNameForLayerId(layerInfo.layerId) == layerName.replace('-', '.') || + layerInfo.layerId == layerName) { + return layerInfo.layerId; + } + } + } + } + return null; + } + protected readonly InspectionValueType = coreLib.ValueType; protected readonly GeometryType = coreLib.GeomType; } diff --git a/erdblick_app/app/jump.service.ts b/erdblick_app/app/jump.service.ts index b75f5a70..6d1afc2d 100644 --- a/erdblick_app/app/jump.service.ts +++ b/erdblick_app/app/jump.service.ts @@ -124,7 +124,7 @@ export class JumpTargetService { try { let wgs84TileId = BigInt(value); let position = coreLib.getTilePosition(wgs84TileId); - return [position.x, position.y, position.z] + return [position.y, position.x, position.z] } catch (e) { this.messageService.showError("Possibly malformed TileId: " + (e as Error).message.toString()); } @@ -136,7 +136,7 @@ export class JumpTargetService { let label = "tileId = ? | (mapId = ?) | (sourceLayerId = ?)"; const matchSourceDataElements = (value: string) => { - const regex = /^\s*(\d+)\s*(?:[,\s;]+)?\s*([^\s,;]*)\s*(?:[,\s;]+)?\s*([^\s,;]*)?\s*$/; + const regex = /^\s*(\d+)\s+(?:"([^"]+)"|([^\s,;"]+(?:\\\s[^\s,;"]+)*))\s+(?:"([^"]+)"|([^\s,;"]+(?:\\\s[^\s,;"]+)*))?\s*$/; const match = value.match(regex); let tileId: bigint | null = null; let mapId = null; @@ -144,20 +144,30 @@ export class JumpTargetService { let valid = true; if (match) { - const [_, bigintStr, str1, str2] = match; + const [_, bigintStr, quoted1, unquoted1, quoted2, unquoted2] = match; try { tileId = BigInt(bigintStr); - valid = this.validateMapgetTileId(tileId.toString()); } catch { valid = false; } - // TODO: check whether the mapId and layerId are valid - if (str1) { - mapId = str1; + if (quoted1 || unquoted1) { + mapId = (quoted1 ? quoted1 : unquoted1).replace(/\\ /g, ' '); + if (mapId.startsWith('"') || mapId.startsWith("'")) { + mapId = mapId.slice(1, -1); + } + if (mapId.endsWith('"') || mapId.endsWith("'")) { + mapId = mapId.slice(1, -1); + } } - if (str2) { - sourceLayerId = str2; + if (quoted2 || unquoted2) { + sourceLayerId = (quoted2 ? quoted2 : unquoted2).replace(/\\ /g, ' '); + if (sourceLayerId.startsWith('"') || sourceLayerId.startsWith("'")) { + sourceLayerId = sourceLayerId.slice(1, -1); + } + if (sourceLayerId.endsWith('"') || sourceLayerId.endsWith("'")) { + mapId = sourceLayerId.slice(1, -1); + } } } else { valid = false; @@ -199,18 +209,27 @@ export class JumpTargetService { execute: (value: string) => { const matches = matchSourceDataElements(value); if (matches) { - const [tileId, mapId, sourceLayerId] = matches; + let [tileId, mapId, sourceLayerId] = matches; try { if (tileId) { if (mapId) { + mapId = String(mapId); if (sourceLayerId) { - this.inspectionService.loadSourceDataInspection( - Number(tileId), - String(mapId), - String(sourceLayerId) - ) + sourceLayerId = String(sourceLayerId); + if (!sourceLayerId.startsWith("SourceData")) { + sourceLayerId = this.inspectionService.layerIdForLayerName(sourceLayerId); + } + if (sourceLayerId) { + this.inspectionService.loadSourceDataInspection( + Number(tileId), + String(mapId), + sourceLayerId + ) + } else { + this.menuService.customTileAndMapId.next([String(tileId), mapId]); + } } else { - this.menuService.customTileAndMapId.next([String(tileId), String(mapId)]); + this.menuService.customTileAndMapId.next([String(tileId), mapId]); } } else { this.menuService.customTileAndMapId.next([String(tileId), ""]); @@ -223,7 +242,13 @@ export class JumpTargetService { }, validate: (value: string) => { const matches = matchSourceDataElements(value); - return matches && matches.length && matches[0]; + // TODO: check whether the mapId and layerId are valid + if (matches?.length == 3 && matches[2]) { + if (!this.inspectionService.layerIdForLayerName(String(matches[2]))) { + return false; + } + } + return matches && matches.length && matches[0] && this.validateMapgetTileId(matches[0].toString()); } } } diff --git a/erdblick_app/app/sourcedata.panel.component.ts b/erdblick_app/app/sourcedata.panel.component.ts index 18826ed5..532f81ef 100644 --- a/erdblick_app/app/sourcedata.panel.component.ts +++ b/erdblick_app/app/sourcedata.panel.component.ts @@ -126,18 +126,6 @@ export class SourceDataPanelComponent implements OnInit, AfterViewInit, OnDestro inspectionContainerHeight: number; containerSizeSubscription: Subscription; - /** - * Returns a human-readable layer name for a layer id. - * - * @param layerId Layer id to get the name for - */ - public static layerNameForLayerId(layerId: string) { - const match = layerId.match(/^SourceData-([^.]+\.)*(.*)-([\d]+)/); - if (match) - return `${match[2]}.${match[3]}`; - return layerId; - } - constructor(private inspectionService: InspectionService, public parameterService: ParametersService, private renderer: Renderer2, diff --git a/erdblick_app/app/sourcedataselection.dialog.component.ts b/erdblick_app/app/sourcedataselection.dialog.component.ts index c6ed8b75..a35f67e7 100644 --- a/erdblick_app/app/sourcedataselection.dialog.component.ts +++ b/erdblick_app/app/sourcedataselection.dialog.component.ts @@ -126,16 +126,16 @@ export class SourceDataLayerSelectionDialogComponent { *findMapsForTileId(tileId: bigint): Generator { const level = coreLib.getTileLevel(tileId); - for (const [mapId, mapInfo] of this.mapService.maps.getValue().entries()) { + for (const [_, mapInfo] of this.mapService.maps.getValue().entries()) { for (const [_, layerInfo] of mapInfo.layers.entries()) { if (layerInfo.type == "SourceData") { if (layerInfo.zoomLevels.includes(level)) { - yield { id: mapId, name: mapId }; + yield { id: mapInfo.mapId, name: mapInfo.mapId }; break; } else { for (const featureTile of this.mapService.loadedTileLayers.values()) { if (featureTile.tileId == tileId) { - yield { id: mapId, name: mapId }; + yield { id: mapInfo.mapId, name: mapInfo.mapId }; break; } } @@ -227,7 +227,7 @@ export class SourceDataLayerSelectionDialogComponent { } return [...dataLayers].map(layerId => ({ id: layerId, - name: SourceDataPanelComponent.layerNameForLayerId(layerId) + name: this.inspectionService.layerNameForLayerId(layerId) })); } return []; @@ -254,6 +254,7 @@ export class SourceDataLayerSelectionDialogComponent { mapId: String(this.selectedMapId.id), layerId: String(this.selectedSourceDataLayer.id) }); + // TODO: TBR // const tileId = this.customTileId ? this.customTileId : this.selectedTileId?.id; // this.inspectionService.loadSourceDataInspection( // Number(tileId), From e833a4ac0c1812c1520a78581303ad5c7661060c Mon Sep 17 00:00:00 2001 From: Joseph Birkner Date: Mon, 4 Nov 2024 19:35:29 +0100 Subject: [PATCH 29/38] Bugfixes for SourceDataLayer selection. --- .../app/inspection.panel.component.ts | 2 +- erdblick_app/app/inspection.service.ts | 10 ++-- erdblick_app/app/jump.service.ts | 58 ++++++++++--------- erdblick_app/app/parameters.service.ts | 2 +- erdblick_app/app/preferences.component.ts | 2 +- erdblick_app/app/search.panel.component.ts | 14 ++--- .../sourcedataselection.dialog.component.ts | 19 +----- 7 files changed, 50 insertions(+), 57 deletions(-) diff --git a/erdblick_app/app/inspection.panel.component.ts b/erdblick_app/app/inspection.panel.component.ts index c9903cbe..d80c1aa0 100644 --- a/erdblick_app/app/inspection.panel.component.ts +++ b/erdblick_app/app/inspection.panel.component.ts @@ -115,7 +115,7 @@ export class InspectionPanelComponent if (map) { this.layerMenuItems = Array.from(map.layers.values()).filter(item => item.type == "SourceData").map(item => { return { - label: this.inspectionService.layerNameForLayerId(item.layerId), + label: this.inspectionService.layerNameForSourceDataLayerId(item.layerId), disabled: item.layerId === selection.layerId, command: () => { let sourceData = {...selection}; diff --git a/erdblick_app/app/inspection.service.ts b/erdblick_app/app/inspection.service.ts index 6ac0dca0..e8090b50 100644 --- a/erdblick_app/app/inspection.service.ts +++ b/erdblick_app/app/inspection.service.ts @@ -322,7 +322,7 @@ export class InspectionService { * * @param layerId Layer id to get the name for */ - layerNameForLayerId(layerId: string) { + layerNameForSourceDataLayerId(layerId: string) { const match = layerId.match(/^SourceData-([^.]+\.)*(.*)-([\d]+)/); if (match) return `${match[2]}.${match[3]}`; @@ -334,13 +334,13 @@ export class InspectionService { * * @param layerId Layer id to get the name for */ - layerIdForLayerName(layerName: string) { + sourceDataLayerIdForLayerName(layerName: string) { for (const [_, mapInfo] of this.mapService.maps.getValue().entries()) { for (const [_, layerInfo] of mapInfo.layers.entries()) { if (layerInfo.type == "SourceData") { - console.log(layerInfo.layerId, this.layerNameForLayerId(layerInfo.layerId), layerName) - if (this.layerNameForLayerId(layerInfo.layerId) == layerName || - this.layerNameForLayerId(layerInfo.layerId) == layerName.replace('-', '.') || + console.log(layerInfo.layerId, this.layerNameForSourceDataLayerId(layerInfo.layerId), layerName) + if (this.layerNameForSourceDataLayerId(layerInfo.layerId) == layerName || + this.layerNameForSourceDataLayerId(layerInfo.layerId) == layerName.replace('-', '.') || layerInfo.layerId == layerName) { return layerInfo.layerId; } diff --git a/erdblick_app/app/jump.service.ts b/erdblick_app/app/jump.service.ts index 6d1afc2d..8bd1a390 100644 --- a/erdblick_app/app/jump.service.ts +++ b/erdblick_app/app/jump.service.ts @@ -89,8 +89,8 @@ export class JumpTargetService { try { coreLib.validateSimfilQuery(this.targetValueSubject.getValue()); } catch (e: any) { - const parsingError = e.message.split(':', 2); - simfilError = parsingError.length > 1 ? parsingError[1] : parsingError[0]; + const parsingError = e.message.split(': '); + simfilError = parsingError.length > 1 ? parsingError.slice(1).join(": ") : parsingError[0]; } let label = "Match features with a filter expression"; if (simfilError) { @@ -134,14 +134,14 @@ export class JumpTargetService { getInspectTileSourceDataTarget() { const searchString = this.targetValueSubject.getValue(); let label = "tileId = ? | (mapId = ?) | (sourceLayerId = ?)"; + let valid = true; - const matchSourceDataElements = (value: string) => { - const regex = /^\s*(\d+)\s+(?:"([^"]+)"|([^\s,;"]+(?:\\\s[^\s,;"]+)*))\s+(?:"([^"]+)"|([^\s,;"]+(?:\\\s[^\s,;"]+)*))?\s*$/; + const matchSourceDataElements = (value: string): [bigint, string, string]|null => { + const regex = /^\s*(\d+)(?:\s+"([^"]+)"|\s+([^\s,;"]+(?:\\\s[^\s,;"]+)*))?(?:\s+"([^"]+)"|\s+([^\s,;"]+(?:\\\s[^\s,;"]+)*))?\s*$/; const match = value.match(regex); - let tileId: bigint | null = null; - let mapId = null; - let sourceLayerId = null; - let valid = true; + let tileId: bigint = -1n; + let mapId = ""; + let sourceLayerId = ""; if (match) { const [_, bigintStr, quoted1, unquoted1, quoted2, unquoted2] = match; @@ -173,7 +173,7 @@ export class JumpTargetService { valid = false; } - if (!tileId || !valid) { + if (tileId === -1n || !valid) { return null; } @@ -183,7 +183,7 @@ export class JumpTargetService { const matches = matchSourceDataElements(searchString); if (matches) { const [tileId, mapId, sourceLayerId] = matches; - if (tileId) { + if (tileId !== -1n) { label = `tileId = ${tileId}`; if (mapId) { label = `${label} | mapId = ${mapId}`; @@ -193,17 +193,34 @@ export class JumpTargetService { label = `${label} | (sourceLayerId = ?)`; } } else { - label = `${label} | (mapId = ?) | (sourceLayerId = ?)` + label = `${label} | (mapId = ?) | (sourceLayerId = ?)`; } } else { label += `
    Insufficient parameters`; + valid = false; + } + + if (matches.length > 1 && matches[1]) { + if (!this.mapService.maps.getValue().has(matches[1])) { + label += `
    Map ID not found.`; + valid = false; + } + } + + if (matches.length == 3 && matches[2]) { + if (!this.inspectionService.sourceDataLayerIdForLayerName(matches[2])) { + label += `
    SourceData layer ID not found.`; + valid = false; + } } + + valid &&= this.validateMapgetTileId(matches[0].toString()); } return { icon: "pi-database", color: "red", - name: "Inspect Mapget Tile", + name: "Inspect Tile Layer Source Data", label: label, enabled: false, execute: (value: string) => { @@ -213,16 +230,12 @@ export class JumpTargetService { try { if (tileId) { if (mapId) { - mapId = String(mapId); if (sourceLayerId) { - sourceLayerId = String(sourceLayerId); - if (!sourceLayerId.startsWith("SourceData")) { - sourceLayerId = this.inspectionService.layerIdForLayerName(sourceLayerId); - } + sourceLayerId = this.inspectionService.sourceDataLayerIdForLayerName(sourceLayerId) || ""; if (sourceLayerId) { this.inspectionService.loadSourceDataInspection( Number(tileId), - String(mapId), + mapId, sourceLayerId ) } else { @@ -241,14 +254,7 @@ export class JumpTargetService { } }, validate: (value: string) => { - const matches = matchSourceDataElements(value); - // TODO: check whether the mapId and layerId are valid - if (matches?.length == 3 && matches[2]) { - if (!this.inspectionService.layerIdForLayerName(String(matches[2]))) { - return false; - } - } - return matches && matches.length && matches[0] && this.validateMapgetTileId(matches[0].toString()); + return valid; } } } diff --git a/erdblick_app/app/parameters.service.ts b/erdblick_app/app/parameters.service.ts index b4dfa3a0..0e09841e 100644 --- a/erdblick_app/app/parameters.service.ts +++ b/erdblick_app/app/parameters.service.ts @@ -449,6 +449,7 @@ export class ParametersService { resetStorage() { localStorage.removeItem('erdblickParameters'); + localStorage.removeItem('searchHistory'); window.location.href = this.router.url.split('?')[0]; } @@ -499,7 +500,6 @@ export class ParametersService { this.saveHistoryStateValue(value); } } - console.log(value); this.p().search = value ? value : []; this._replaceUrl = false; this.lastSearchHistoryEntry.next(value); diff --git a/erdblick_app/app/preferences.component.ts b/erdblick_app/app/preferences.component.ts index eeff2ba7..f31d3998 100644 --- a/erdblick_app/app/preferences.component.ts +++ b/erdblick_app/app/preferences.component.ts @@ -44,7 +44,7 @@ import {MAX_NUM_TILES_TO_LOAD, MAX_NUM_TILES_TO_VISUALIZE, ParametersService} fr
    - +
    diff --git a/erdblick_app/app/search.panel.component.ts b/erdblick_app/app/search.panel.component.ts index bc4a0c1c..3b6454e5 100644 --- a/erdblick_app/app/search.panel.component.ts +++ b/erdblick_app/app/search.panel.component.ts @@ -258,18 +258,18 @@ export class SearchPanelComponent implements AfterViewInit { .replace(/Ü/g, "Ue"); this.searchInputValue = query; this.runTarget(entry[0]); + this.sidePanelService.panel = SidePanelState.NONE; } this.reloadSearchHistory(); }); this.menuService.lastInspectedTileSourceDataOption.subscribe(lastInspectedData => { if (lastInspectedData && lastInspectedData.tileId && lastInspectedData.mapId && lastInspectedData.layerId) { - const value = `${lastInspectedData?.tileId} ${lastInspectedData?.mapId} ${lastInspectedData?.layerId}`; + const value = `${lastInspectedData?.tileId} "${lastInspectedData?.mapId}" "${lastInspectedData?.layerId}"`; for (let i = 0; i < this.searchItems.length; i++) { - if (!this.searchItems[i].name.toLowerCase().includes("features") && - this.searchItems[i].validate(value)) { - console.log("VALIDATED") - console.log("SET HISTORY") + // TODO: Introduce a static ID for the action, so we can reference it directly. + if (this.searchItems[i].name === "Inspect Tile Layer Source Data") { + console.assert(this.searchItems[i].validate(value)) this.parametersService.setSearchHistoryState([i, value]); break; } @@ -523,8 +523,8 @@ export class SearchPanelComponent implements AfterViewInit { onKeydown(event: KeyboardEvent) { if (event.key === 'Enter') { - if (this.searchInputValue.trim()) { - this.parametersService.setSearchHistoryState([0, this.searchInputValue]); + if (this.searchInputValue.trim() && this.activeSearchItems.length) { + this.parametersService.setSearchHistoryState([this.activeSearchItems[0].index, this.searchInputValue]); } else { this.parametersService.setSearchHistoryState(null); } diff --git a/erdblick_app/app/sourcedataselection.dialog.component.ts b/erdblick_app/app/sourcedataselection.dialog.component.ts index a35f67e7..72fc3ad3 100644 --- a/erdblick_app/app/sourcedataselection.dialog.component.ts +++ b/erdblick_app/app/sourcedataselection.dialog.component.ts @@ -129,16 +129,9 @@ export class SourceDataLayerSelectionDialogComponent { for (const [_, mapInfo] of this.mapService.maps.getValue().entries()) { for (const [_, layerInfo] of mapInfo.layers.entries()) { if (layerInfo.type == "SourceData") { - if (layerInfo.zoomLevels.includes(level)) { + if (!layerInfo.zoomLevels.length || layerInfo.zoomLevels.includes(level)) { yield { id: mapInfo.mapId, name: mapInfo.mapId }; break; - } else { - for (const featureTile of this.mapService.loadedTileLayers.values()) { - if (featureTile.tileId == tileId) { - yield { id: mapInfo.mapId, name: mapInfo.mapId }; - break; - } - } } } } @@ -166,6 +159,7 @@ export class SourceDataLayerSelectionDialogComponent { this.mapIds.push(mapId); } this.selectedMapId = mapId; + this.findLayersForMapId(mapId.id); this.onMapIdChange(this.selectedMapId); if (this.sourceDataLayers.length) { this.selectedSourceDataLayer = this.sourceDataLayers[0]; @@ -227,7 +221,7 @@ export class SourceDataLayerSelectionDialogComponent { } return [...dataLayers].map(layerId => ({ id: layerId, - name: this.inspectionService.layerNameForLayerId(layerId) + name: this.inspectionService.layerNameForSourceDataLayerId(layerId) })); } return []; @@ -254,13 +248,6 @@ export class SourceDataLayerSelectionDialogComponent { mapId: String(this.selectedMapId.id), layerId: String(this.selectedSourceDataLayer.id) }); - // TODO: TBR - // const tileId = this.customTileId ? this.customTileId : this.selectedTileId?.id; - // this.inspectionService.loadSourceDataInspection( - // Number(tileId), - // String(this.selectedMapId?.id), - // String(this.selectedSourceDataLayer?.id) - // ); this.close(); } From ec15c72b99b46449a02bc622be0574b4bd2123ff Mon Sep 17 00:00:00 2001 From: Joseph Birkner Date: Tue, 5 Nov 2024 11:30:52 +0100 Subject: [PATCH 30/38] Fix layer selection for custom tile ID. --- erdblick_app/app/jump.service.ts | 11 ++- erdblick_app/app/search.panel.component.ts | 1 - .../sourcedataselection.dialog.component.ts | 75 ++++++++++--------- 3 files changed, 48 insertions(+), 39 deletions(-) diff --git a/erdblick_app/app/jump.service.ts b/erdblick_app/app/jump.service.ts index 8bd1a390..f1432c65 100644 --- a/erdblick_app/app/jump.service.ts +++ b/erdblick_app/app/jump.service.ts @@ -148,7 +148,7 @@ export class JumpTargetService { try { tileId = BigInt(bigintStr); } catch { - valid = false; + return null; } if (quoted1 || unquoted1) { @@ -170,10 +170,10 @@ export class JumpTargetService { } } } else { - valid = false; + return null; } - if (tileId === -1n || !valid) { + if (tileId === -1n) { return null; } @@ -216,6 +216,9 @@ export class JumpTargetService { valid &&= this.validateMapgetTileId(matches[0].toString()); } + else { + valid = false; + } return { icon: "pi-database", @@ -253,7 +256,7 @@ export class JumpTargetService { } } }, - validate: (value: string) => { + validate: (_: string) => { return valid; } } diff --git a/erdblick_app/app/search.panel.component.ts b/erdblick_app/app/search.panel.component.ts index 3b6454e5..62e17df2 100644 --- a/erdblick_app/app/search.panel.component.ts +++ b/erdblick_app/app/search.panel.component.ts @@ -269,7 +269,6 @@ export class SearchPanelComponent implements AfterViewInit { for (let i = 0; i < this.searchItems.length; i++) { // TODO: Introduce a static ID for the action, so we can reference it directly. if (this.searchItems[i].name === "Inspect Tile Layer Source Data") { - console.assert(this.searchItems[i].validate(value)) this.parametersService.setSearchHistoryState([i, value]); break; } diff --git a/erdblick_app/app/sourcedataselection.dialog.component.ts b/erdblick_app/app/sourcedataselection.dialog.component.ts index 72fc3ad3..bfca4987 100644 --- a/erdblick_app/app/sourcedataselection.dialog.component.ts +++ b/erdblick_app/app/sourcedataselection.dialog.component.ts @@ -64,13 +64,16 @@ import {coreLib} from "./wasm"; }) export class SourceDataLayerSelectionDialogComponent { selectedTileId: SourceDataDropdownOption | undefined; - tileIds: SourceDataDropdownOption[] = []; - selectedSourceDataLayer: SourceDataDropdownOption | undefined; - sourceDataLayers: SourceDataDropdownOption[] = []; - sourceDataLayersMap: Map = new Map(); selectedMapId: SourceDataDropdownOption | undefined; - mapIdsMap: Map = new Map(); + selectedSourceDataLayer: SourceDataDropdownOption | undefined; + + tileIds: SourceDataDropdownOption[] = []; mapIds: SourceDataDropdownOption[] = []; + sourceDataLayers: SourceDataDropdownOption[] = []; + + mapIdsPerTileId: Map = new Map(); + sourceDataLayersPerMapId: Map = new Map(); + errorString: string = ""; loading: boolean = true; customTileId: string = ""; @@ -86,42 +89,46 @@ export class SourceDataLayerSelectionDialogComponent { this.load(); }); this.menuService.customTileAndMapId.subscribe(([tileId, mapId]: [string, string]) => { - this.load(tileId.length > 0, tileId, mapId); + this.load(tileId, mapId); this.menuService.tileSourceDataDialogVisible = true; }); } - load(withCustomTileId: boolean = false, customTileId: string = "", customMapId: string = "") { - this.showCustomTileIdInput = withCustomTileId; + load(customTileId: string = "", customMapId: string = "") { + this.showCustomTileIdInput = customTileId.length > 0; this.customTileId = customTileId; this.customMapId = customMapId; this.mapIds = []; this.sourceDataLayers = []; this.loading = false; this.menuService.tileOutiline.next(null); - if (withCustomTileId && customTileId) { - const tileId = BigInt(customTileId); - this.triggerModelChange({id: tileId, name: customTileId}); + + // Special case: There is a custom tile ID. + if (customTileId) { + this.onCustomTileIdChange(customTileId); return; } + // Abort if no Tile IDs were provided by the menu service. if (!this.tileIds.length) { this.selectedTileId = undefined; this.errorString = "No tile IDs available for the clicked position!"; return; } + // Fill map IDs per tile ID. for (let i = 0; i < this.tileIds.length; i++) { const id = this.tileIds[i].id as bigint; const maps = [...this.findMapsForTileId(id)]; this.tileIds[i]["disabled"] = !maps.length; - this.mapIdsMap.set(id, maps); + this.mapIdsPerTileId.set(id, maps); } - this.selectedTileId = this.tileIds.find(element => !element.disabled); - if (this.selectedTileId === undefined) { - return; + + // Pre-select the tile ID. + let tileIdSelection = this.tileIds.find(element => !element.disabled); + if (tileIdSelection) { + this.setCurrentTileId(tileIdSelection); } - this.triggerModelChange(this.selectedTileId); } *findMapsForTileId(tileId: bigint): Generator { @@ -147,28 +154,28 @@ export class SourceDataLayerSelectionDialogComponent { const tileId = BigInt(tileIdString); const maps = [...this.findMapsForTileId(tileId)]; - this.mapIdsMap.set(tileId, maps); - this.triggerModelChange({id: tileId, name: tileIdString}); + this.mapIdsPerTileId.set(tileId, maps); + this.setCurrentTileId({id: tileId, name: tileIdString}); } - private triggerModelChange(tileId: SourceDataDropdownOption) { + private setCurrentTileId(tileId: SourceDataDropdownOption) { + this.selectedTileId = tileId; this.onTileIdChange(tileId); - if (this.customMapId.length) { - const mapId = { id: this.customMapId, name: this.customMapId }; - if (!this.mapIds.includes(mapId)) { - this.mapIds.push(mapId); + + if (this.customMapId) { + let mapSelection = this.mapIds.find(entry => entry.id == this.customMapId); + if (mapSelection) { + this.selectedMapId = mapSelection; } - this.selectedMapId = mapId; - this.findLayersForMapId(mapId.id); - this.onMapIdChange(this.selectedMapId); - if (this.sourceDataLayers.length) { - this.selectedSourceDataLayer = this.sourceDataLayers[0]; - this.onLayerIdChange(this.selectedSourceDataLayer); + else { + this.mapIds.unshift({ id: this.customMapId, name: this.customMapId }); } - return; } + if (this.mapIds.length) { - this.selectedMapId = this.mapIds[0]; + if (!this.selectedMapId) { + this.selectedMapId = this.mapIds[0]; + } this.onMapIdChange(this.selectedMapId); if (this.sourceDataLayers.length) { this.selectedSourceDataLayer = this.sourceDataLayers[0]; @@ -182,14 +189,14 @@ export class SourceDataLayerSelectionDialogComponent { this.selectedSourceDataLayer = undefined; this.sourceDataLayers = []; this.outlineTheTileBox(BigInt(tileId.id), Color.HOTPINK); - const mapIds = this.mapIdsMap.get(tileId.id as bigint); + const mapIds = this.mapIdsPerTileId.get(tileId.id as bigint); if (mapIds !== undefined) { this.mapIds = mapIds.sort((a, b) => a.name.localeCompare(b.name)); for (let i = 0; i < this.mapIds.length; i++) { const id = this.mapIds[i].id as string; const layers = this.findLayersForMapId(id); this.mapIds[i]["disabled"] = !layers.length; - this.sourceDataLayersMap.set(id, layers); + this.sourceDataLayersPerMapId.set(id, layers); } } } @@ -229,7 +236,7 @@ export class SourceDataLayerSelectionDialogComponent { onMapIdChange(mapId: SourceDataDropdownOption) { this.selectedSourceDataLayer = undefined; - const sourceDataLayers = this.sourceDataLayersMap.get(mapId.id as string); + const sourceDataLayers = this.sourceDataLayersPerMapId.get(mapId.id as string); if (sourceDataLayers !== undefined) { this.sourceDataLayers = sourceDataLayers; } From a2436475d6021fece71b911f9f76af2e11c47650 Mon Sep 17 00:00:00 2001 From: Wagram Airiian Date: Tue, 5 Nov 2024 12:02:03 +0100 Subject: [PATCH 31/38] Fix pre-selection for tileIds --- erdblick_app/app/map.service.ts | 8 ++++++++ erdblick_app/app/sourcedataselection.dialog.component.ts | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/erdblick_app/app/map.service.ts b/erdblick_app/app/map.service.ts index 6ef53abf..78bf7657 100644 --- a/erdblick_app/app/map.service.ts +++ b/erdblick_app/app/map.service.ts @@ -809,6 +809,14 @@ export class MapService { this.zoomLevel.next(MAX_ZOOM_LEVEL); } + *tileLayersForTileId(tileId: bigint): Generator { + for (const tile of this.loadedTileLayers.values()) { + if (tile.tileId == tileId) { + yield tile; + } + } + } + private visualizeHighlights(mode: HighlightMode, featureWrappers: Array) { let visualizationCollection = null; switch (mode) { diff --git a/erdblick_app/app/sourcedataselection.dialog.component.ts b/erdblick_app/app/sourcedataselection.dialog.component.ts index bfca4987..0debaaa7 100644 --- a/erdblick_app/app/sourcedataselection.dialog.component.ts +++ b/erdblick_app/app/sourcedataselection.dialog.component.ts @@ -125,7 +125,9 @@ export class SourceDataLayerSelectionDialogComponent { } // Pre-select the tile ID. - let tileIdSelection = this.tileIds.find(element => !element.disabled); + let tileIdSelection = this.tileIds.find(element => + !element.disabled && [...this.mapService.tileLayersForTileId(element.id as bigint)] + ); if (tileIdSelection) { this.setCurrentTileId(tileIdSelection); } From dfc450f7901615ff3e69f9a5664bef3455e8162f Mon Sep 17 00:00:00 2001 From: Joseph Birkner Date: Tue, 5 Nov 2024 13:07:43 +0100 Subject: [PATCH 32/38] Tile outline visualization fixes. --- erdblick_app/app/rightclickmenu.service.ts | 2 +- .../app/sourcedataselection.dialog.component.ts | 15 ++++++++------- erdblick_app/app/view.component.ts | 14 +++++++++++--- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/erdblick_app/app/rightclickmenu.service.ts b/erdblick_app/app/rightclickmenu.service.ts index dc78a3e6..655ec28c 100644 --- a/erdblick_app/app/rightclickmenu.service.ts +++ b/erdblick_app/app/rightclickmenu.service.ts @@ -18,7 +18,7 @@ export class RightClickMenuService { lastInspectedTileSourceDataOption: BehaviorSubject<{tileId: number, mapId: string, layerId: string} | null> = new BehaviorSubject<{tileId: number, mapId: string, layerId: string} | null>(null); tileIdsForSourceData: Subject = new Subject(); - tileOutiline: Subject = new Subject(); + tileOutline: Subject = new Subject(); customTileAndMapId: Subject<[string, string]> = new Subject<[string, string]>(); constructor(private inspectionService: InspectionService) { diff --git a/erdblick_app/app/sourcedataselection.dialog.component.ts b/erdblick_app/app/sourcedataselection.dialog.component.ts index 0debaaa7..9368e6cb 100644 --- a/erdblick_app/app/sourcedataselection.dialog.component.ts +++ b/erdblick_app/app/sourcedataselection.dialog.component.ts @@ -101,7 +101,7 @@ export class SourceDataLayerSelectionDialogComponent { this.mapIds = []; this.sourceDataLayers = []; this.loading = false; - this.menuService.tileOutiline.next(null); + this.menuService.tileOutline.next(null); // Special case: There is a custom tile ID. if (customTileId) { @@ -126,7 +126,7 @@ export class SourceDataLayerSelectionDialogComponent { // Pre-select the tile ID. let tileIdSelection = this.tileIds.find(element => - !element.disabled && [...this.mapService.tileLayersForTileId(element.id as bigint)] + !element.disabled && [...this.mapService.tileLayersForTileId(element.id as bigint)].length ); if (tileIdSelection) { this.setCurrentTileId(tileIdSelection); @@ -204,19 +204,19 @@ export class SourceDataLayerSelectionDialogComponent { } outlineTheTileBox(tileId: bigint, color: Color) { - this.menuService.tileOutiline.next(null); + this.menuService.tileOutline.next(null); const tileBox = coreLib.getTileBox(tileId); const entity = { rectangle: { coordinates: Rectangle.fromDegrees(...tileBox), height: HeightReference.CLAMP_TO_GROUND, - material: Color.TRANSPARENT, - outlineWidth: 2, + material: color.withAlpha(0.2), outline: true, - outlineColor: color.withAlpha(0.5) + outlineWidth: 3., + outlineColor: color } } - this.menuService.tileOutiline.next(entity); + this.menuService.tileOutline.next(entity); } findLayersForMapId(mapId: string) { @@ -285,6 +285,7 @@ export class SourceDataLayerSelectionDialogComponent { this.sourceDataLayers = []; this.showCustomTileIdInput = false; this.customTileId = ""; + this.menuService.tileOutline.next(null); } close() { diff --git a/erdblick_app/app/view.component.ts b/erdblick_app/app/view.component.ts index e17f11e8..525e855e 100644 --- a/erdblick_app/app/view.component.ts +++ b/erdblick_app/app/view.component.ts @@ -38,7 +38,7 @@ declare let window: DebugWindow; selector: 'erdblick-view', template: `
    - + `, styles: [` @@ -178,7 +178,7 @@ export class ErdblickViewComponent implements AfterViewInit { } if (!defined(feature)) { this.inspectionService.isInspectionPanelVisible = false; - this.menuService.tileOutiline.next(null); + this.menuService.tileOutline.next(null); } this.mapService.highlightFeatures( Array.isArray(feature?.id) ? feature.id : [feature?.id], @@ -312,11 +312,13 @@ export class ErdblickViewComponent implements AfterViewInit { spinner.style.display = 'none'; } - this.menuService.tileOutiline.subscribe(entity => { + this.menuService.tileOutline.subscribe(entity => { if (entity) { this.tileOutlineEntity = this.viewer.entities.add(entity); + this.viewer.scene.requestRender(); } else if (this.tileOutlineEntity) { this.viewer.entities.remove(this.tileOutlineEntity); + this.viewer.scene.requestRender(); } }); } @@ -481,4 +483,10 @@ export class ErdblickViewComponent implements AfterViewInit { roll: 0.0 }); } + + onContextMenuHide() { + if (!this.menuService.tileSourceDataDialogVisible) { + this.menuService.tileOutline.next(null) + } + } } From 3b51b76520f5f7d37cb9162093265663302444e6 Mon Sep 17 00:00:00 2001 From: Wagram Airiian Date: Tue, 5 Nov 2024 13:28:26 +0100 Subject: [PATCH 33/38] Fix last inspected Source Data parameters --- erdblick_app/app/rightclickmenu.service.ts | 29 ++++++++++++++++------ erdblick_app/app/view.component.ts | 2 +- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/erdblick_app/app/rightclickmenu.service.ts b/erdblick_app/app/rightclickmenu.service.ts index 655ec28c..db91424c 100644 --- a/erdblick_app/app/rightclickmenu.service.ts +++ b/erdblick_app/app/rightclickmenu.service.ts @@ -2,12 +2,13 @@ import {Injectable} from "@angular/core"; import {MenuItem} from "primeng/api"; import {BehaviorSubject, Subject} from "rxjs"; import {InspectionService} from "./inspection.service"; -import {Entity} from "./cesium"; +import {coreLib} from "./wasm"; export interface SourceDataDropdownOption { id: bigint | string, name: string, disabled?: boolean + tileLevel?: number; } @Injectable() @@ -30,24 +31,36 @@ export class RightClickMenuService { } }]); - this.lastInspectedTileSourceDataOption.subscribe(lastInspectedTileSourceData => { + this.tileIdsForSourceData.subscribe(tileIds => { const items = this.menuItems.getValue(); - if (lastInspectedTileSourceData) { - this.updateMenuForLastInspectedSourceData(lastInspectedTileSourceData); - } else if (items.length > 1) { + const lastOption = this.lastInspectedTileSourceDataOption.getValue(); + if (lastOption) { + const level = coreLib.getTileLevel(BigInt(lastOption.tileId)); + const tileId = tileIds.find(tileId => tileId.tileLevel === level); + if (tileId) { + this.updateMenuForLastInspectedSourceData({ + tileId: tileId.id as bigint, + mapId: lastOption.mapId, + layerId: lastOption.layerId + }); + return; + } + } + + if (items.length > 1) { items.shift(); this.menuItems.next(items); } }); } - private updateMenuForLastInspectedSourceData(sourceDataParams: {tileId: number, mapId: string, layerId: string}) { + private updateMenuForLastInspectedSourceData(sourceDataParams: {tileId: bigint, mapId: string, layerId: string}) { const menuItem = { - label: 'Inspect Last Selected Source Data', + label: 'Inspect for Last Selected Source Data Parameters', icon: 'pi pi-database', command: () => { this.inspectionService.loadSourceDataInspection( - sourceDataParams.tileId, + Number(sourceDataParams.tileId), sourceDataParams.mapId, sourceDataParams.layerId ); diff --git a/erdblick_app/app/view.component.ts b/erdblick_app/app/view.component.ts index 525e855e..56047fa0 100644 --- a/erdblick_app/app/view.component.ts +++ b/erdblick_app/app/view.component.ts @@ -147,7 +147,7 @@ export class ErdblickViewComponent implements AfterViewInit { const latitude = CesiumMath.toDegrees(cartographic.latitude); this.menuService.tileIdsForSourceData.next([...Array(16).keys()].map(level => { const tileId = coreLib.getTileIdFromPosition(longitude, latitude, level); - return {id: tileId, name: `${tileId} (level ${level})`}; + return {id: tileId, name: `${tileId} (level ${level})`, tileLevel: level}; })); } else { this.menuService.tileIdsForSourceData.next([]); From 520dc94ccd2af57f482362a442aa5ea2a0a797f5 Mon Sep 17 00:00:00 2001 From: Joseph Birkner Date: Tue, 5 Nov 2024 13:36:18 +0100 Subject: [PATCH 34/38] Shorten menu item label. --- erdblick_app/app/rightclickmenu.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erdblick_app/app/rightclickmenu.service.ts b/erdblick_app/app/rightclickmenu.service.ts index db91424c..ddd7075e 100644 --- a/erdblick_app/app/rightclickmenu.service.ts +++ b/erdblick_app/app/rightclickmenu.service.ts @@ -56,7 +56,7 @@ export class RightClickMenuService { private updateMenuForLastInspectedSourceData(sourceDataParams: {tileId: bigint, mapId: string, layerId: string}) { const menuItem = { - label: 'Inspect for Last Selected Source Data Parameters', + label: 'Inspect Source Data with Last Layer', icon: 'pi pi-database', command: () => { this.inspectionService.loadSourceDataInspection( From 4db885f22ad20b405729826f8050f5b02b973b4d Mon Sep 17 00:00:00 2001 From: Joseph Birkner Date: Tue, 5 Nov 2024 14:40:09 +0100 Subject: [PATCH 35/38] Remove some log output. --- erdblick_app/app/inspection.service.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/erdblick_app/app/inspection.service.ts b/erdblick_app/app/inspection.service.ts index e8090b50..c70b6264 100644 --- a/erdblick_app/app/inspection.service.ts +++ b/erdblick_app/app/inspection.service.ts @@ -260,8 +260,6 @@ export class InspectionService { } async loadSourceDataLayer(tileId: number, layerId: string, mapId: string) : Promise { - console.log(`Loading SourceDataLayer layerId=${layerId} tileId=${tileId}`); - const tileParser = new coreLib.TileLayerParser(); const newRequestBody = JSON.stringify({ requests: [{ @@ -338,7 +336,6 @@ export class InspectionService { for (const [_, mapInfo] of this.mapService.maps.getValue().entries()) { for (const [_, layerInfo] of mapInfo.layers.entries()) { if (layerInfo.type == "SourceData") { - console.log(layerInfo.layerId, this.layerNameForSourceDataLayerId(layerInfo.layerId), layerName) if (this.layerNameForSourceDataLayerId(layerInfo.layerId) == layerName || this.layerNameForSourceDataLayerId(layerInfo.layerId) == layerName.replace('-', '.') || layerInfo.layerId == layerName) { From 5c742483e229a3937a0a910cc6cb0bf5f4af6fce Mon Sep 17 00:00:00 2001 From: Joseph Birkner Date: Wed, 6 Nov 2024 09:39:49 +0100 Subject: [PATCH 36/38] Update CMakeLists.txt --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d219c040..5c6d3dbe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,7 +20,7 @@ message("Building for ${CMAKE_SYSTEM_NAME}.") FetchContent_Declare(mapget GIT_REPOSITORY "https://github.com/Klebert-Engineering/mapget" - GIT_TAG "release/2024.4.1" + GIT_TAG "v2024.4.1" GIT_SHALLOW ON) FetchContent_MakeAvailable(mapget) From cc31551464fb64e543a88b8ca9edd8e2e1c20222 Mon Sep 17 00:00:00 2001 From: Joseph Birkner Date: Wed, 6 Nov 2024 12:51:57 +0100 Subject: [PATCH 37/38] Bump version. --- VERSION | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/VERSION b/VERSION index d6d6d28d..f38c6cea 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2024.4.0 \ No newline at end of file +2024.4.1 \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index b81cf8de..96d26283 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "erdblick", - "version": "2024.4.0", + "version": "2024.4.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "erdblick", - "version": "2024.4.0", + "version": "2024.4.1", "dependencies": { "@angular/animations": "^18.2.0", "@angular/common": "^18.2.0", diff --git a/package.json b/package.json index 9ae54b57..ec521841 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "erdblick", - "version": "2024.4.0", + "version": "2024.4.1", "scripts": { "ng": "ng", "start": "ng serve", From c1ea3bcce23d813dec54f741dfe8a9bb55565999 Mon Sep 17 00:00:00 2001 From: Joseph Birkner Date: Wed, 6 Nov 2024 16:23:11 +0100 Subject: [PATCH 38/38] Allow viewing/copying tile ID of peak value tile. --- erdblick_app/app/stats.component.ts | 70 +++++++++++++++++++---------- 1 file changed, 47 insertions(+), 23 deletions(-) diff --git a/erdblick_app/app/stats.component.ts b/erdblick_app/app/stats.component.ts index c71652c1..641cebe5 100644 --- a/erdblick_app/app/stats.component.ts +++ b/erdblick_app/app/stats.component.ts @@ -1,6 +1,7 @@ -import {Component} from "@angular/core"; -import {MapService} from "./map.service"; -import {debounceTime} from "rxjs"; +import { Component } from "@angular/core"; +import { MapService } from "./map.service"; +import { debounceTime } from "rxjs"; +import { ClipboardService } from "./clipboard.service"; @Component({ selector: 'stats-dialog', @@ -9,32 +10,35 @@ import {debounceTime} from "rxjs"; [style]="{'min-height': '20em', 'min-width': '40em'}">
    + [options]="availableMapLayers" + [(ngModel)]="selectedMapLayers" + (ngModelChange)="update()" + optionLabel="label" + placeholder="Select Map Layers" + [showHeader]="false" + [style]="{'width': '100%'}">
    Total number of considered tile layers: {{ consideredTilesCount }}
    - - - - - - + + + + + + - - - - - - + + + + + +
    StatisticPeak ValueSum ValueAverage Value
    StatisticPeak ValueSum ValueAverage Value
    {{ stat.name }}{{ stat.peak | number: '1.2-2' }}{{ stat.sum | number: '1.2-2' }}{{ stat.average | number: '1.2-2' }}
    {{ stat.name }} + {{ stat.peak | number: '1.2-2' }} + + {{ stat.sum | number: '1.2-2' }}{{ stat.average | number: '1.2-2' }}
    @@ -72,7 +76,7 @@ export class StatsDialogComponent { public consideredTilesCount: number = 0; public needsUpdate: boolean = false; - constructor(public mapService: MapService) { + constructor(public mapService: MapService, public clipboardService: ClipboardService) { this.update(); this.mapService.statsDialogNeedsUpdate.subscribe(_ => this.needsUpdate = true); this.mapService.statsDialogNeedsUpdate.pipe(debounceTime(1000)).subscribe(_ => this.update()); @@ -125,4 +129,24 @@ export class StatsDialogComponent { this.needsUpdate = false; } + + getTileIdWithPeak(statName: string): string { + let peakValue = -Infinity; + let peakTileId = ''; + this.mapService.loadedTileLayers.forEach(tile => { + if (!this.considerEmptyTiles && tile.numFeatures <= 0) { + return; + } + if (this.selectedMapLayers.findIndex(entry => entry.label == `${tile.mapName} - ${tile.layerName}`) < 0) { + return; + } + const stats = tile.stats; + if (stats.has(statName) && stats.get(statName)?.some(v => v > peakValue)) { + peakValue = Math.max(...stats.get(statName)!); + peakTileId = String(tile.tileId); + } + }); + return peakTileId; + } } +