From ba9beef2d07313e97beab777175d4b4cd32c471f Mon Sep 17 00:00:00 2001 From: fraser-qs Date: Thu, 12 Feb 2026 21:25:55 +0000 Subject: [PATCH] [ENHANCEMENT] Clickhouse: support label and time access in table view Signed-off-by: fraser-qs --- clickhouse/src/components/constants.ts | 34 ++-- .../click-house-datasource-types.ts | 13 +- clickhouse/src/model/click-house-client.ts | 5 +- .../src/model/click-house-data-types.ts | 11 -- .../get-click-house-log-data.ts | 14 +- .../get-click-house-data.ts | 116 +++++++++--- .../replace-click-house-builtin-variables.ts | 61 +++++++ package-lock.json | 167 ++++++++---------- 8 files changed, 257 insertions(+), 164 deletions(-) create mode 100644 clickhouse/src/queries/replace-click-house-builtin-variables.ts diff --git a/clickhouse/src/components/constants.ts b/clickhouse/src/components/constants.ts index 0046c12a5..5827a744f 100644 --- a/clickhouse/src/components/constants.ts +++ b/clickhouse/src/components/constants.ts @@ -11,22 +11,20 @@ // See the License for the specific language governing permissions and // limitations under the License. -export const queryExample = `-- Time Series Query -SELECT - toStartOfMinute(timestamp) as time, - avg(cpu_usage) as avg_cpu, - max(memory_usage) as max_memory -FROM system_metrics -WHERE timestamp BETWEEN '{start}' AND '{end}' +export const queryExample = `-- Time Series Query (must alias to 'time' and 'value') +-- Available macros: $__timeFrom, $__timeTo, $__interval, $__interval_ms +SELECT + toStartOfInterval(timestamp, INTERVAL $__interval second) as time, + avg(cpu_usage) as value +FROM system_metrics +WHERE timestamp BETWEEN '$__timeFrom' AND '$__timeTo' GROUP BY time ORDER BY time --- Logs Query -SELECT - Timestamp as log_time, - Body, - ServiceName, - ResourceAttributes, - SeverityNumber, - SeverityText -FROM application_logs -WHERE timestamp >= '{start}' -ORDER BY time DESC LIMIT 1000`; + +-- With labels (extra columns become labels) +SELECT + toStartOfInterval(timestamp, INTERVAL $__interval second) as time, + count(*) as value, + service_name +FROM logs +WHERE timestamp BETWEEN '$__timeFrom' AND '$__timeTo' +GROUP BY time, service_name ORDER BY time`; diff --git a/clickhouse/src/datasources/click-house-datasource/click-house-datasource-types.ts b/clickhouse/src/datasources/click-house-datasource/click-house-datasource-types.ts index 486138bb4..c24c71cee 100644 --- a/clickhouse/src/datasources/click-house-datasource/click-house-datasource-types.ts +++ b/clickhouse/src/datasources/click-house-datasource/click-house-datasource-types.ts @@ -13,18 +13,13 @@ import { HTTPProxy, RequestHeaders } from '@perses-dev/core'; import { DatasourceClient } from '@perses-dev/plugin-system'; +import { ClickHouseQueryParams } from '../../model/click-house-client'; export interface ClickHouseDatasourceSpec { directUrl?: string; proxy?: HTTPProxy; } -interface QueryRequestParameters extends Record { - query: string; - start: string; - end: string; -} - interface ClickHouseDatasourceClientOptions { datasourceUrl: string; headers?: RequestHeaders; @@ -33,11 +28,11 @@ interface ClickHouseDatasourceClientOptions { export interface ClickHouseDatasourceResponse { status: string; warnings?: string[]; - // TODO: adjust this type to match your datasource response shape - data: unknown; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + data: any; } export interface ClickHouseDatasourceClient extends DatasourceClient { options: ClickHouseDatasourceClientOptions; - query(params: QueryRequestParameters, headers?: RequestHeaders): Promise; + query(params: ClickHouseQueryParams, headers?: RequestHeaders): Promise; } diff --git a/clickhouse/src/model/click-house-client.ts b/clickhouse/src/model/click-house-client.ts index 363611957..bb2511886 100644 --- a/clickhouse/src/model/click-house-client.ts +++ b/clickhouse/src/model/click-house-client.ts @@ -25,11 +25,12 @@ export interface ClickHouseQueryOptions { export interface ClickHouseQueryResponse { status: 'success' | 'error'; - data: unknown; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + data: any; } export interface ClickHouseClient { - query: (params: { start: string; end: string; query: string }) => Promise; + query: (params: ClickHouseQueryParams) => Promise; } export async function query( diff --git a/clickhouse/src/model/click-house-data-types.ts b/clickhouse/src/model/click-house-data-types.ts index f3b71e886..7d2273f2f 100644 --- a/clickhouse/src/model/click-house-data-types.ts +++ b/clickhouse/src/model/click-house-data-types.ts @@ -10,14 +10,3 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. - -import { LogData, TimeSeriesData } from '@perses-dev/core'; - -export interface ClickHouseTimeSeriesData extends TimeSeriesData { - logs?: LogData; -} - -export interface TimeSeriesEntry { - time: string; - log_count: number | string; -} diff --git a/clickhouse/src/queries/click-house-log-query/get-click-house-log-data.ts b/clickhouse/src/queries/click-house-log-query/get-click-house-log-data.ts index 5ea71ec56..2a03def68 100644 --- a/clickhouse/src/queries/click-house-log-query/get-click-house-log-data.ts +++ b/clickhouse/src/queries/click-house-log-query/get-click-house-log-data.ts @@ -17,6 +17,7 @@ import { ClickHouseClient, ClickHouseQueryResponse } from '../../model/click-hou import { DEFAULT_DATASOURCE } from '../constants'; import { ClickHouseLogQuerySpec } from './click-house-log-query-types'; import { LogQueryPlugin } from './log-query-plugin-interface'; +import { replaceClickHouseBuiltinVariables } from '../replace-click-house-builtin-variables'; function flattenObject( obj: Record, @@ -76,17 +77,20 @@ export const getClickHouseLogData: LogQueryPlugin['getLo }; } - const query = replaceVariables(spec.query, context.variableState); + const { start, end } = context.timeRange; + + // Default step for log queries (60 seconds) + const stepMs = 60 * 1000; + + // Replace built-in variables first, then user-defined variables + let query = replaceClickHouseBuiltinVariables(spec.query, start, end, stepMs); + query = replaceVariables(query, context.variableState); const client = (await context.datasourceStore.getDatasourceClient( spec.datasource ?? DEFAULT_DATASOURCE )) as ClickHouseClient; - const { start, end } = context.timeRange; - const response: ClickHouseQueryResponse = await client.query({ - start: start.getTime().toString(), - end: end.getTime().toString(), query, }); diff --git a/clickhouse/src/queries/click-house-time-series-query/get-click-house-data.ts b/clickhouse/src/queries/click-house-time-series-query/get-click-house-data.ts index ec21523f8..b3b755b5e 100644 --- a/clickhouse/src/queries/click-house-time-series-query/get-click-house-data.ts +++ b/clickhouse/src/queries/click-house-time-series-query/get-click-house-data.ts @@ -11,31 +11,102 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { TimeSeries } from '@perses-dev/core'; +import { Labels, TimeSeries } from '@perses-dev/core'; import { TimeSeriesQueryPlugin, replaceVariables } from '@perses-dev/plugin-system'; +import { ClickHouseTimeSeriesQuerySpec } from './click-house-query-types'; import { DEFAULT_DATASOURCE } from '../constants'; -import { TimeSeriesEntry } from '../../model/click-house-data-types'; import { ClickHouseClient, ClickHouseQueryResponse } from '../../model/click-house-client'; -import { ClickHouseTimeSeriesQuerySpec, DatasourceQueryResponse } from './click-house-query-types'; +import { replaceClickHouseBuiltinVariables } from '../replace-click-house-builtin-variables'; -function buildTimeSeries(response?: DatasourceQueryResponse): TimeSeries[] { - const data = response?.data as TimeSeriesEntry[]; - if (!response || !data || data.length === 0) { +// Default minimum step in milliseconds (15 seconds) +const DEFAULT_MIN_STEP_MS = 15 * 1000; + +// Calculate step based on time range, aiming for ~1000 data points +function calculateStep(start: Date, end: Date, suggestedStepMs?: number): number { + const rangeMs = end.getTime() - start.getTime(); + const calculatedStep = Math.ceil(rangeMs / 1000); + const step = Math.max(calculatedStep, DEFAULT_MIN_STEP_MS); + return suggestedStepMs ? Math.max(step, suggestedStepMs) : step; +} + +// Fixed column names - queries must alias their columns to these names +const TIMESTAMP_COLUMN = 'time'; +const VALUE_COLUMN = 'value'; + +// Build labels from all columns except timestamp and value +function buildLabels(row: Record, timestampCol: string, valueCol: string): Labels { + const labels: Labels = {}; + for (const [key, value] of Object.entries(row)) { + if (key !== timestampCol && key !== valueCol) { + labels[key] = value === null || value === undefined ? '' : String(value); + } + } + return labels; +} + +// Create a unique key from labels for grouping +function labelsToKey(labels: Labels): string { + return Object.entries(labels) + .sort(([a], [b]) => a.localeCompare(b)) + .map(([k, v]) => `${k}=${v}`) + .join(','); +} + +// Create a display name from labels +function labelsToName(labels: Labels): string { + const entries = Object.entries(labels); + if (entries.length === 0) return 'series'; + if (entries.length === 1) return entries[0]?.[1] ?? 'series'; + return entries.map(([k, v]) => `${k}="${v}"`).join(', '); +} + +function buildTimeSeries(response: ClickHouseQueryResponse | undefined): TimeSeries[] { + if (!response || !response.data || response.data.length === 0) { return []; } - const values: Array<[number, number]> = data.map((row: TimeSeriesEntry) => { - const timestamp = new Date(row.time).getTime(); - const value = Number(row.log_count); - return [timestamp, value]; - }); + const data = response.data as Record[]; + + // Group rows by their label combination + const seriesMap = new Map }>(); - return [ - { - name: 'log_count', + for (const row of data) { + const labels = buildLabels(row, TIMESTAMP_COLUMN, VALUE_COLUMN); + const key = labelsToKey(labels); + + // Parse timestamp + const rawTime = row[TIMESTAMP_COLUMN]; + let timestamp: number; + if (typeof rawTime === 'number') { + timestamp = rawTime > 1e12 ? rawTime : rawTime * 1000; // Handle seconds vs ms + } else { + timestamp = new Date(String(rawTime)).getTime(); + } + + // Parse value + const rawValue = row[VALUE_COLUMN]; + const value = typeof rawValue === 'number' ? rawValue : Number(rawValue) || 0; + + if (!seriesMap.has(key)) { + seriesMap.set(key, { labels, values: [] }); + } + seriesMap.get(key)!.values.push([timestamp, value]); + } + + // Convert map to array of TimeSeries + const result: TimeSeries[] = []; + for (const { labels, values } of seriesMap.values()) { + // Sort values by timestamp + values.sort((a, b) => a[0]! - b[0]!); + + result.push({ + name: labelsToName(labels), + labels, values, - }, - ]; + }); + } + + return result; } export const getTimeSeriesData: TimeSeriesQueryPlugin['getTimeSeriesData'] = async ( @@ -46,24 +117,25 @@ export const getTimeSeriesData: TimeSeriesQueryPlugin n.toString().padStart(2, '0'); + return `${date.getUTCFullYear()}-${pad(date.getUTCMonth() + 1)}-${pad(date.getUTCDate())} ${pad(date.getUTCHours())}:${pad(date.getUTCMinutes())}:${pad(date.getUTCSeconds())}`; +} + +/** + * Replace ClickHouse built-in variable placeholders in a query + * + * Supported variables: + * - $__timeFrom / $__timeTo - Time range as ClickHouse DateTime (YYYY-MM-DD HH:MM:SS) + * - $__timeFrom_ms / $__timeTo_ms - Time range as Unix milliseconds + * - $__interval - Step interval in seconds (for toStartOfInterval) + * - $__interval_ms - Step interval in milliseconds + * + * @param query The SQL query containing variable placeholders + * @param start The start time of the query range + * @param end The end time of the query range + * @param intervalMs The step interval in milliseconds + * @returns The query with variables replaced + */ +export function replaceClickHouseBuiltinVariables( + query: string, + start: Date, + end: Date, + intervalMs: number +): string { + let updatedQuery = query; + + // Time range as ClickHouse DateTime format + updatedQuery = replaceVariable(updatedQuery, '__timeFrom', formatClickHouseDateTime(start)); + updatedQuery = replaceVariable(updatedQuery, '__timeTo', formatClickHouseDateTime(end)); + + // Time range as Unix milliseconds + updatedQuery = replaceVariable(updatedQuery, '__timeFrom_ms', start.getTime().toString()); + updatedQuery = replaceVariable(updatedQuery, '__timeTo_ms', end.getTime().toString()); + + // Interval + const intervalSeconds = Math.floor(intervalMs / 1000); + updatedQuery = replaceVariable(updatedQuery, '__interval', intervalSeconds.toString()); + updatedQuery = replaceVariable(updatedQuery, '__interval_ms', intervalMs.toString()); + + return updatedQuery; +} diff --git a/package-lock.json b/package-lock.json index 69bf86e96..279ac2c79 100644 --- a/package-lock.json +++ b/package-lock.json @@ -532,6 +532,7 @@ "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.2", @@ -1025,6 +1026,7 @@ "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.20.0.tgz", "integrity": "sha512-bOwvTOIJcG5FVo5gUUupiwYh8MioPLQ4UcqbcRf7UQ98X90tCa9E1kZ3Z7tqwpZxYyOvh1YTYbmZE9RTfTp5hg==", "license": "MIT", + "peer": true, "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", @@ -1059,6 +1061,7 @@ "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.11.0.tgz", "integrity": "sha512-A7+f++LodNNc1wGgoRDTt78cOwWm9KVezApgjOMp1W4hM0898nsqBXwF+sbePE7ZRcjN7Sa1Z5m2oN27XkmEjQ==", "license": "MIT", + "peer": true, "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.23.0", @@ -1073,6 +1076,7 @@ "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.8.4.tgz", "integrity": "sha512-u4q7PnZlJUojeRe8FJa/njJcMctISGgPQ4PnWsd9268R4ZTtU+tfFYmwkBvgcrK2+QQ8tYFVALVb5fVJykKc5A==", "license": "MIT", + "peer": true, "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.35.0", @@ -1095,6 +1099,7 @@ "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.5.2.tgz", "integrity": "sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==", "license": "MIT", + "peer": true, "dependencies": { "@marijn/find-cluster-break": "^1.0.0" } @@ -1116,6 +1121,7 @@ "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.36.4.tgz", "integrity": "sha512-ZQ0V5ovw/miKEXTvjgzRyjnrk9TwriUB1k4R5p7uNnHR9Hus+D1SXHGdJshijEzPFjU25xea/7nhIeSqYFKdbA==", "license": "MIT", + "peer": true, "dependencies": { "@codemirror/state": "^6.5.0", "style-mod": "^4.1.0", @@ -1182,7 +1188,6 @@ "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==", "license": "MIT", - "peer": true, "dependencies": { "@babel/helper-module-imports": "^7.16.7", "@babel/runtime": "^7.18.3", @@ -1201,15 +1206,13 @@ "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==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@emotion/babel-plugin/node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "license": "BSD-3-Clause", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -1219,7 +1222,6 @@ "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz", "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", "license": "MIT", - "peer": true, "dependencies": { "@emotion/memoize": "^0.9.0", "@emotion/sheet": "^1.4.0", @@ -1232,15 +1234,13 @@ "version": "0.9.2", "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@emotion/is-prop-valid": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz", "integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==", "license": "MIT", - "peer": true, "dependencies": { "@emotion/memoize": "^0.9.0" } @@ -1249,8 +1249,7 @@ "version": "0.9.0", "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@emotion/react": { "version": "11.14.0", @@ -1282,7 +1281,6 @@ "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", "license": "MIT", - "peer": true, "dependencies": { "@emotion/hash": "^0.9.2", "@emotion/memoize": "^0.9.0", @@ -1295,8 +1293,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@emotion/styled": { "version": "11.14.0", @@ -1326,15 +1323,13 @@ "version": "0.10.0", "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@emotion/use-insertion-effect-with-fallbacks": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz", "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==", "license": "MIT", - "peer": true, "peerDependencies": { "react": ">=16.8.0" } @@ -1343,15 +1338,13 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@emotion/weak-memoize": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@esbuild/aix-ppc64": { "version": "0.25.5", @@ -2519,7 +2512,6 @@ "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" @@ -2551,13 +2543,15 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.4.0.tgz", "integrity": "sha512-DVeMRoGrgn/k45oQNu189BoW4SZwgZFzJ1+1TV5j2NJ/KFC83oa/enRqZSGshyeMk5cPWMhsKs9nx+8o0unwGg==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@lezer/highlight": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.3.tgz", "integrity": "sha512-qXdH7UqTvGfdVBINrgKhDsVTJTxactNNxLk7+UMwZhU13lMHaOBlJe9Vqp907ya56Y3+ed2tlqzys7jDkTmW0g==", "license": "MIT", + "peer": true, "dependencies": { "@lezer/common": "^1.3.0" } @@ -2578,6 +2572,7 @@ "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.2.tgz", "integrity": "sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==", "license": "MIT", + "peer": true, "dependencies": { "@lezer/common": "^1.0.0" } @@ -2962,6 +2957,7 @@ "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.21.6.tgz", "integrity": "sha512-fnP+ZOZTFeBGiTAnxve+axGmiYn2D60h86nUISXjXClK3LUY1krUfPgf6MaD4YDJ4i51OGXZWPekeMe16pkd8Q==", "license": "MIT", + "peer": true, "dependencies": { "@module-federation/runtime": "0.21.6", "@module-federation/webpack-bundler-runtime": "0.21.6" @@ -3016,7 +3012,6 @@ "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.4.8.tgz", "integrity": "sha512-vjP4+A1ybyCRhDZC7r5EPWu/gLseFZxaGyPdDl94vzVvk6Yj6gahdaqcjbhkaCrJjdZj90m3VioltWPAnWF/zw==", "license": "MIT", - "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/mui-org" @@ -3076,15 +3071,13 @@ "version": "19.0.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.0.0.tgz", "integrity": "sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@mui/private-theming": { "version": "6.4.8", "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.4.8.tgz", "integrity": "sha512-sWwQoNSn6elsPTAtSqCf+w5aaGoh7AASURNmpy+QTTD/zwJ0Jgwt0ZaaP6mXq2IcgHxYnYloM/+vJgHPMkRKTQ==", "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.26.0", "@mui/utils": "^6.4.8", @@ -3112,7 +3105,6 @@ "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.4.8.tgz", "integrity": "sha512-oyjx1b1FvUCI85ZMO4trrjNxGm90eLN3Ohy0AP/SqK5gWvRQg1677UjNf7t6iETOKAleHctJjuq0B3aXO2gtmw==", "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.26.0", "@emotion/cache": "^11.13.5", @@ -3714,6 +3706,7 @@ "resolved": "https://registry.npmjs.org/@perses-dev/components/-/components-0.53.0-rc.2.tgz", "integrity": "sha512-faH+rdmUIVjpkc4tJAWnOw0dx6DAHqikKh/ODCuVAnWUmZ8X25K1MBueLWreOABto6vzzL1ZVYkUaO2DuPjp0w==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@atlaskit/pragmatic-drag-and-drop": "^1.4.0", "@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.0.3", @@ -3748,6 +3741,7 @@ "resolved": "https://registry.npmjs.org/@perses-dev/core/-/core-0.53.0-rc.0.tgz", "integrity": "sha512-hcFY/l7PlQZ9lz/uAh0J8Txw0l+W2mkalNcDu+CGvusc2sgQznrCyn7hh/UppSN7ls1JgwaCqjjVeqBEHEjsrQ==", "license": "Apache-2.0", + "peer": true, "dependencies": { "date-fns": "^4.1.0", "lodash": "^4.17.21", @@ -3761,6 +3755,7 @@ "resolved": "https://registry.npmjs.org/@perses-dev/dashboards/-/dashboards-0.53.0-rc.2.tgz", "integrity": "sha512-MNDgv3gGBa5hb3LZu/dlKRNoL1x2bQWnXxQlma7yOQ1J/m/W5ZB2DpkaZ2ttxori7yJyRvYYEFoT9fnVJOlZ/Q==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@perses-dev/components": "0.53.0-rc.2", "@perses-dev/core": "0.53.0-rc.0", @@ -3794,6 +3789,7 @@ "resolved": "https://registry.npmjs.org/@perses-dev/explore/-/explore-0.53.0-rc.2.tgz", "integrity": "sha512-mehc1IxBcAFwzBR7vyG/AbrYprLK75FhgXzBIfhnQSIIQJFpjRyspcY3M2TTLaXxTUld+Jc5mlLYJFu1o10U8A==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@nexucis/fuzzy": "^0.5.1", "@perses-dev/components": "0.53.0-rc.2", @@ -3859,6 +3855,7 @@ "resolved": "https://registry.npmjs.org/@perses-dev/plugin-system/-/plugin-system-0.53.0-rc.2.tgz", "integrity": "sha512-+Gr96xBt4+pf6MsKy1ZiEy1beSEJ2OJ7V7y1W2rEkO+pek0afu90EyEDWLUNfVS+3k5YcXf4BLUgKTA6XtQExQ==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@module-federation/enhanced": "^0.21.4", "@perses-dev/components": "0.53.0-rc.2", @@ -3949,7 +3946,6 @@ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", "license": "MIT", - "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" @@ -4009,6 +4005,7 @@ "integrity": "sha512-V0INbMrT/LwyhzKmvpupe2oSvPFWaivz7sdriFRp381BJvD0d2pYcq9iRW91bxgMRX78MgTzFYAu868hMAzoSw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rspack/core": "1.6.4", "@rspack/lite-tapable": "~1.1.0", @@ -4190,6 +4187,7 @@ "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.6.4.tgz", "integrity": "sha512-5F1+MQD8rfbFbUHnaiZe4jqOu9pnSb+PliqQvi0lj+uvpMpcS3sJDIs/mz6P1u87lfkfBXChIT4zSLAzeOgMWw==", "license": "MIT", + "peer": true, "dependencies": { "@module-federation/runtime-tools": "0.21.4", "@rspack/binding": "1.6.4", @@ -4398,6 +4396,7 @@ "dev": true, "hasInstallScript": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@swc/counter": "^0.1.3", "@swc/types": "^0.1.25" @@ -4612,6 +4611,7 @@ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", "devOptional": true, + "peer": true, "dependencies": { "tslib": "^2.8.0" } @@ -4660,7 +4660,6 @@ "version": "4.39.1", "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.39.1.tgz", "license": "MIT", - "peer": true, "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" @@ -4687,6 +4686,7 @@ "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.21.2.tgz", "integrity": "sha512-11tNlEDTdIhMJba2RBH+ecJ9l1zgS2kjmexDPAraulc8jeNA4xocSNeyzextT0XJyASil4XsCYlJmf5jEWAtYg==", "license": "MIT", + "peer": true, "dependencies": { "@tanstack/table-core": "8.21.2" }, @@ -4721,6 +4721,7 @@ "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -4969,7 +4970,6 @@ "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -4981,7 +4981,6 @@ "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@types/eslint": "*", "@types/estree": "*" @@ -4992,8 +4991,7 @@ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "devOptional": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@types/express": { "version": "5.0.1", @@ -5161,6 +5159,7 @@ "integrity": "sha512-ClsL5nMwKaBRwPcCvH8E7+nU4GxHVx1axNvMZTFHMEfNI7oahimt26P5zjVCRrjiIWj6YFXfE1v3dEp94wLcGQ==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~6.20.0" } @@ -5169,8 +5168,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@types/prop-types": { "version": "15.7.14", @@ -5197,6 +5195,7 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.20.tgz", "integrity": "sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==", "license": "MIT", + "peer": true, "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -5523,6 +5522,7 @@ "resolved": "https://registry.npmjs.org/@uiw/react-codemirror/-/react-codemirror-4.25.3.tgz", "integrity": "sha512-1wtBZTXPIp8u6F/xjHvsUAYlEeF5Dic4xZBnqJyLzv7o7GjGYEUfSz9Z7bo9aK9GAx2uojG/AuBMfhA4uhvIVQ==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.18.6", "@codemirror/commands": "^6.1.0", @@ -5557,7 +5557,6 @@ "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.13.2", "@webassemblyjs/helper-wasm-bytecode": "1.13.2" @@ -5568,24 +5567,21 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", "devOptional": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", "devOptional": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", "devOptional": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.13.2", @@ -5593,7 +5589,6 @@ "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.13.2", "@webassemblyjs/helper-api-error": "1.13.2", @@ -5605,8 +5600,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", "devOptional": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.14.1", @@ -5614,7 +5608,6 @@ "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -5628,7 +5621,6 @@ "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -5639,7 +5631,6 @@ "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", "devOptional": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@xtuc/long": "4.2.2" } @@ -5649,8 +5640,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", "devOptional": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.14.1", @@ -5658,7 +5648,6 @@ "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -5676,7 +5665,6 @@ "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-wasm-bytecode": "1.13.2", @@ -5691,7 +5679,6 @@ "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -5705,7 +5692,6 @@ "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-api-error": "1.13.2", @@ -5721,7 +5707,6 @@ "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" @@ -5880,16 +5865,14 @@ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "devOptional": true, - "license": "BSD-3-Clause", - "peer": 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==", "devOptional": true, - "license": "Apache-2.0", - "peer": true + "license": "Apache-2.0" }, "node_modules/abab": { "version": "2.0.6", @@ -5918,6 +5901,7 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "devOptional": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -5942,7 +5926,6 @@ "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", "devOptional": true, "license": "MIT", - "peer": true, "engines": { "node": ">=10.13.0" }, @@ -6769,6 +6752,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -7008,7 +6992,6 @@ "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "devOptional": true, "license": "MIT", - "peer": true, "engines": { "node": ">=6.0" } @@ -7273,7 +7256,6 @@ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "license": "MIT", - "peer": true, "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -7290,7 +7272,6 @@ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "license": "ISC", - "peer": true, "engines": { "node": ">= 6" } @@ -7414,7 +7395,8 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/damerau-levenshtein": { "version": "1.0.8", @@ -7497,6 +7479,7 @@ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", "license": "MIT", + "peer": true, "funding": { "type": "github", "url": "https://github.com/sponsors/kossnocorp" @@ -7507,6 +7490,7 @@ "resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-3.2.0.tgz", "integrity": "sha512-sg8HqoTEulcbbbVXeg84u5UnlsQa8GS5QXMqjjYIhS4abEVVKIUwe0/l/UhrZdKaL/W5eWZNlbTeEIiOXTcsBQ==", "license": "MIT", + "peer": true, "peerDependencies": { "date-fns": "^3.0.0 || ^4.0.0" } @@ -7810,6 +7794,7 @@ "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.5.0.tgz", "integrity": "sha512-rNYnNCzqDAPCr4m/fqyUFv7fD9qIsd50S6GDFgO1DxZhncCsNsG7IfUlAlvZe5oSEQxtsjnHiUuppzccry93Xw==", "license": "Apache-2.0", + "peer": true, "dependencies": { "tslib": "2.3.0", "zrender": "5.5.0" @@ -7892,7 +7877,6 @@ "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.0" @@ -8050,8 +8034,7 @@ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", "devOptional": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/es-object-atoms": { "version": "1.1.1", @@ -8215,6 +8198,7 @@ "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -8271,6 +8255,7 @@ "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, "license": "MIT", + "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -8773,7 +8758,6 @@ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "devOptional": true, "license": "MIT", - "peer": true, "engines": { "node": ">=0.8.x" } @@ -9196,8 +9180,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/find-up": { "version": "5.0.0", @@ -9582,8 +9565,7 @@ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "devOptional": true, - "license": "BSD-2-Clause", - "peer": true + "license": "BSD-2-Clause" }, "node_modules/glob/node_modules/brace-expansion": { "version": "1.1.12", @@ -9838,7 +9820,6 @@ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", "license": "BSD-3-Clause", - "peer": true, "dependencies": { "react-is": "^16.7.0" } @@ -9847,8 +9828,7 @@ "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/homedir-polyfill": { "version": "1.0.3", @@ -10067,6 +10047,7 @@ "resolved": "https://registry.npmjs.org/immer/-/immer-10.1.1.tgz", "integrity": "sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==", "license": "MIT", + "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/immer" @@ -12032,7 +12013,6 @@ "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", "devOptional": true, "license": "MIT", - "peer": true, "engines": { "node": ">=6.11.5" }, @@ -12061,7 +12041,8 @@ "version": "4.17.23", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/lodash.clonedeepwith": { "version": "4.5.0", @@ -12418,8 +12399,7 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "devOptional": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/node-fetch": { "version": "2.7.0", @@ -12935,7 +12915,6 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "license": "MIT", - "peer": true, "engines": { "node": ">=8" } @@ -13307,7 +13286,6 @@ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "safe-buffer": "^5.1.0" } @@ -13465,6 +13443,7 @@ "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.54.2.tgz", "integrity": "sha512-eHpAUgUjWbZocoQYUHposymRb4ZP6d0uwUnooL2uOybA9/3tPUvoAKqEWK1WaSiTxxOfTpffNZP7QwlnM3/gEg==", "license": "MIT", + "peer": true, "engines": { "node": ">=18.0.0" }, @@ -13504,6 +13483,7 @@ "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -13539,6 +13519,7 @@ "version": "6.30.3", "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.3.tgz", "integrity": "sha512-pxPcv1AczD4vso7G4Z3TKcvlxK7g7TNt3/FNGMhfqyntocvYKj+GCatfigGDjbLozC4baguJ0ReCigoDJXb0ag==", + "peer": true, "dependencies": { "@remix-run/router": "1.23.2", "react-router": "6.30.3" @@ -13982,7 +13963,6 @@ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0" } @@ -14011,6 +13991,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -14166,7 +14147,6 @@ "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "devOptional": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "randombytes": "^2.1.0" } @@ -14780,8 +14760,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/supports-color": { "version": "7.2.0", @@ -14837,7 +14816,6 @@ "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", "devOptional": true, "license": "MIT", - "peer": true, "engines": { "node": ">=6" }, @@ -14863,7 +14841,6 @@ "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==", "devOptional": true, "license": "BSD-2-Clause", - "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.15.0", @@ -14883,7 +14860,6 @@ "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", @@ -14919,7 +14895,6 @@ "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -14935,7 +14910,6 @@ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -14951,8 +14925,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "devOptional": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/terser/node_modules/source-map-support": { "version": "0.5.21", @@ -14960,7 +14933,6 @@ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -15074,6 +15046,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -15184,6 +15157,7 @@ "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -15537,6 +15511,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -15713,6 +15688,7 @@ "resolved": "https://registry.npmjs.org/use-resize-observer/-/use-resize-observer-9.1.0.tgz", "integrity": "sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==", "license": "MIT", + "peer": true, "dependencies": { "@juggle/resize-observer": "^3.3.1" }, @@ -15806,7 +15782,6 @@ "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -15881,7 +15856,6 @@ "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", "devOptional": true, "license": "MIT", - "peer": true, "engines": { "node": ">=10.13.0" } @@ -15892,7 +15866,6 @@ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "devOptional": true, "license": "BSD-2-Clause", - "peer": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -15907,7 +15880,6 @@ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "devOptional": true, "license": "BSD-2-Clause", - "peer": true, "engines": { "node": ">=4.0" } @@ -16121,6 +16093,7 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", "license": "MIT", + "peer": true, "engines": { "node": ">=10.0.0" },