From ea589fd22aec3a9cf9beaf7abd735fc3409046c4 Mon Sep 17 00:00:00 2001 From: uditDewan Date: Fri, 17 Jul 2026 01:37:38 -0400 Subject: [PATCH] chore: remove 10 dead/duplicated deps and vendored code (dep diet) Deletes dependencies that were unused, deprecated, or duplicating functionality already present in the stdlib, the platform, or another installed dependency. Net -813 lines. No functional changes intended; see PR description for the full per-change risk analysis. - delete unused deps: google-ads-api, recharts, stopwatch-node, @types/pg-promise - cuid -> juava randomId() (cuid is deprecated upstream) - use-debounce -> local 6-line useDebouncedValue hook - react-use -> local 3-line useTitle hook - @loadable/component -> next/dynamic - timezones-list -> Intl.supportedValuesOf("timeZone") - object-hash -> juavaHash("md5", stableHash(...)) (existing in-repo idiom) - delete juava/src/debounce.ts (130-line vendored lodash debounce) -> 4-line resettable setTimeout in singleton.ts - juava deepCopy -> structuredClone one-liner --- cli/jitsu-cli/package.json | 1 - cli/jitsu-cli/src/commands/deploy.ts | 4 +- libs/juava/src/debounce.ts | 130 ---- libs/juava/src/objects.ts | 20 +- libs/juava/src/singleton.ts | 14 +- pnpm-lock.yaml | 734 +----------------- services/rotor/src/lib/udf-chain.ts | 2 + .../console/components/AuditLog/AuditLog.tsx | 4 +- .../ConfigObjectEditor/ConfigEditor.tsx | 7 +- .../console/components/DataView/JSONView.tsx | 4 +- .../SyncEditorPage/SyncEditorPage.tsx | 14 +- webapps/console/lib/ui.tsx | 18 +- webapps/console/package.json | 10 - .../pages/[workspaceId]/settings/domains.tsx | 4 +- .../pages/[workspaceId]/syncs/tasks.tsx | 2 +- .../pages/api/admin/export/[name]/index.ts | 4 +- webapps/console/pages/workspaces.tsx | 5 +- 17 files changed, 82 insertions(+), 895 deletions(-) delete mode 100644 libs/juava/src/debounce.ts diff --git a/cli/jitsu-cli/package.json b/cli/jitsu-cli/package.json index 0840a9e0f..6e2184119 100644 --- a/cli/jitsu-cli/package.json +++ b/cli/jitsu-cli/package.json @@ -51,7 +51,6 @@ "chalk": "^5.3.0", "commander": "^11.0.0", "cross-fetch": "^4.0.0", - "cuid": "^2.1.8", "etag": "^1.8.1", "inquirer": "^9.2.11", "jest": "^29.7.0", diff --git a/cli/jitsu-cli/src/commands/deploy.ts b/cli/jitsu-cli/src/commands/deploy.ts index b5149089c..60dc5dd39 100644 --- a/cli/jitsu-cli/src/commands/deploy.ts +++ b/cli/jitsu-cli/src/commands/deploy.ts @@ -3,7 +3,7 @@ import { homedir } from "os"; import inquirer from "inquirer"; import { existsSync, readdirSync, readFileSync } from "fs"; import { loadPackageJson } from "./shared"; -import cuid from "cuid"; +import { randomId } from "juava"; import { b, green, red } from "../lib/chalk-code-highlight"; import { getFunctionFromFilePath } from "../lib/compiled-function"; import { loadProjectConfig } from "../lib/project-config"; @@ -298,7 +298,7 @@ async function deployFunction( }; } if (!existingFunctionId) { - const id = cuid(); + const id = randomId(); const res = await fetch(`${host}/api/${workspace.id}/config/function`, { method: "POST", headers: { diff --git a/libs/juava/src/debounce.ts b/libs/juava/src/debounce.ts deleted file mode 100644 index b45cbcc05..000000000 --- a/libs/juava/src/debounce.ts +++ /dev/null @@ -1,130 +0,0 @@ -function debounce(func, wait) { - let lastArgs, lastThis, maxWait, result, timerId, lastCallTime; - - let lastInvokeTime = 0; - let leading = false; - let maxing = false; - let trailing = true; - - if (typeof func !== "function") { - throw new TypeError("Expected a function"); - } - wait = +wait || 0; - - function invokeFunc(time) { - const args = lastArgs; - const thisArg = lastThis; - - lastArgs = lastThis = undefined; - lastInvokeTime = time; - result = func.apply(thisArg, args); - return result; - } - - function startTimer(pendingFunc, wait) { - return setTimeout(pendingFunc, wait); - } - - function cancelTimer(id) { - clearTimeout(id); - } - - function leadingEdge(time) { - // Reset any `maxWait` timer. - lastInvokeTime = time; - // Start the timer for the trailing edge. - timerId = startTimer(timerExpired, wait); - // Invoke the leading edge. - return leading ? invokeFunc(time) : result; - } - - function remainingWait(time) { - const timeSinceLastCall = time - lastCallTime; - const timeSinceLastInvoke = time - lastInvokeTime; - const timeWaiting = wait - timeSinceLastCall; - - return maxing ? Math.min(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting; - } - - function shouldInvoke(time) { - const timeSinceLastCall = time - lastCallTime; - const timeSinceLastInvoke = time - lastInvokeTime; - - // Either this is the first call, activity has stopped and we're at the - // trailing edge, the system time has gone backwards and we're treating - // it as the trailing edge, or we've hit the `maxWait` limit. - return ( - lastCallTime === undefined || - timeSinceLastCall >= wait || - timeSinceLastCall < 0 || - (maxing && timeSinceLastInvoke >= maxWait) - ); - } - - function timerExpired() { - const time = Date.now(); - if (shouldInvoke(time)) { - return trailingEdge(time); - } - // Restart the timer. - timerId = startTimer(timerExpired, remainingWait(time)); - } - - function trailingEdge(time) { - timerId = undefined; - - // Only invoke if we have `lastArgs` which means `func` has been - // debounced at least once. - if (trailing && lastArgs) { - return invokeFunc(time); - } - lastArgs = lastThis = undefined; - return result; - } - - function cancel() { - if (timerId !== undefined) { - cancelTimer(timerId); - } - lastInvokeTime = 0; - lastArgs = lastCallTime = lastThis = timerId = undefined; - } - - function flush() { - return timerId === undefined ? result : trailingEdge(Date.now()); - } - - function pending() { - return timerId !== undefined; - } - - function debounced(this: any, ...args) { - const time = Date.now(); - const isInvoking = shouldInvoke(time); - - lastArgs = args; - lastThis = this; - lastCallTime = time; - - if (isInvoking) { - if (timerId === undefined) { - return leadingEdge(lastCallTime); - } - if (maxing) { - // Handle invocations in a tight loop. - timerId = startTimer(timerExpired, wait); - return invokeFunc(lastCallTime); - } - } - if (timerId === undefined) { - timerId = startTimer(timerExpired, wait); - } - return result; - } - debounced.cancel = cancel; - debounced.flush = flush; - debounced.pending = pending; - return debounced; -} - -export { debounce }; diff --git a/libs/juava/src/objects.ts b/libs/juava/src/objects.ts index ed16a58d9..35cb6c4f8 100644 --- a/libs/juava/src/objects.ts +++ b/libs/juava/src/objects.ts @@ -11,23 +11,9 @@ export function deepMerge(target: any, source: any) { }, target); } -export function deepCopy(o: T): T { - if (typeof o !== "object") return o; - if (!o) return o; - if (Array.isArray(o)) { - const newO: any[] = []; - for (let i = 0; i < o.length; i++) { - const v = o[i]; - newO[i] = !v || typeof v !== "object" ? v : deepCopy(v); - } - return newO as T; - } - const newO: Record = {}; - for (const [k, v] of Object.entries(o)) { - newO[k] = !v || typeof v !== "object" ? v : deepCopy(v); - } - return newO as T; -} +// ponytail: structuredClone is native; unlike the old hand-rolled copy it throws on +// functions in the tree — callers pass JSON-safe data only +export const deepCopy = (o: T): T => structuredClone(o); export function isEqual(x: any, y: any) { const ok = Object.keys, diff --git a/libs/juava/src/singleton.ts b/libs/juava/src/singleton.ts index cb97aa9c5..a53ca883b 100644 --- a/libs/juava/src/singleton.ts +++ b/libs/juava/src/singleton.ts @@ -1,6 +1,5 @@ import { getErrorMessage, getLog, newError, requireDefined } from "./index"; import * as process from "process"; -import { debounce } from "./debounce"; const log = getLog("singleton"); export type CachedValue = ( @@ -74,14 +73,19 @@ export function getSingleton( return singleton as Singleton; } + // ponytail: resettable timeout replaces a vendored 130-line lodash debounce — + // each call postpones cleanup to ttlSec after the last access + let cleanupTimer: ReturnType | undefined; + const scheduleCleanup = () => { + clearTimeout(cleanupTimer); + cleanupTimer = setTimeout(() => clearSingleton(globalName, opts.cleanupFunc), 1000 * opts.ttlSec!); + }; + const handleSuccess = (value: T, startedAtTs: number): T => { global[`singletons_${globalName}`] = { success: true, value, - debounceCleanup: - opts.ttlSec && opts.ttlSec > 0 - ? debounce(() => clearSingleton(globalName, opts.cleanupFunc), 1000 * opts.ttlSec) - : () => {}, + debounceCleanup: opts.ttlSec && opts.ttlSec > 0 ? scheduleCleanup : () => {}, }; if (!opts.silent) { log.atInfo().log(`️⚡️⚡️⚡️ ${globalName} connected in ${Date.now() - startedAtTs}ms!`); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 507136706..23d701966 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -199,9 +199,6 @@ importers: cross-fetch: specifier: ^4.0.0 version: 4.1.0(encoding@0.1.13) - cuid: - specifier: ^2.1.8 - version: 2.1.8 etag: specifier: ^1.8.1 version: 1.8.1 @@ -871,9 +868,6 @@ importers: '@jitsu/protocols': specifier: workspace:* version: link:../../types/protocols - '@loadable/component': - specifier: ^5.15.3 - version: 5.16.7(react@18.3.1) '@modelcontextprotocol/sdk': specifier: ^1.29.0 version: 1.29.0(zod@3.25.76) @@ -913,9 +907,6 @@ importers: '@types/cookie': specifier: ^1.0.0 version: 1.0.0 - '@types/pg-promise': - specifier: ^5.4.3 - version: 5.4.3(pg-query-stream@4.7.1(pg@8.20.0)) agentkeepalive: specifier: ^4.6.0 version: 4.6.0 @@ -934,9 +925,6 @@ importers: cron-parser: specifier: ^5.5.0 version: 5.5.0 - cuid: - specifier: ^2.1.8 - version: 2.1.8 dayjs: specifier: ^1.11.10 version: 1.11.20 @@ -946,9 +934,6 @@ importers: firebase-admin: specifier: ^13.2.0 version: 13.8.0(encoding@0.1.13) - google-ads-api: - specifier: ^17.1.0-rest-beta - version: 17.1.0(encoding@0.1.13) googleapis: specifier: ^126.0.1 version: 126.0.1(encoding@0.1.13) @@ -1003,9 +988,6 @@ importers: nodemailer: specifier: ^9.0.1 version: 9.0.1 - object-hash: - specifier: ^3.0.0 - version: 3.0.0 openapi3-ts: specifier: ^4.5.0 version: 4.5.0 @@ -1030,27 +1012,12 @@ importers: react-json-view: specifier: ^1.19.1 version: 1.21.3(@types/react@18.3.0)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react-use: - specifier: ^17.4.0 - version: 17.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - recharts: - specifier: ^2.10.4 - version: 2.15.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) stable-hash: specifier: 0.0.3 version: 0.0.3 - stopwatch-node: - specifier: ^1.1.0 - version: 1.1.0 - timezones-list: - specifier: ^3.0.2 - version: 3.1.0 tslib: specifier: 'catalog:' version: 2.8.1 - use-debounce: - specifier: ^10.0.4 - version: 10.1.1(react@18.3.1) zod: specifier: ^3.23.8 version: 3.25.76 @@ -2478,10 +2445,6 @@ packages: resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} engines: {node: '>=18.0.0'} - '@isaacs/ttlcache@1.4.1': - resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==} - engines: {node: '>=12'} - '@istanbuljs/load-nyc-config@1.1.0': resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} @@ -2576,9 +2539,6 @@ packages: '@jridgewell/source-map@0.3.11': resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} @@ -2600,12 +2560,6 @@ packages: '@kwsites/file-exists@1.1.1': resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==} - '@loadable/component@5.16.7': - resolution: {integrity: sha512-XvkFixLUOTEaj8lI7uwc4nf8Wmq3IulYG7SZHCWcPm/Li5gjJDFfIkgWOLPnD7jqPJVtAG9bEz4SCek+SpHYYg==} - engines: {node: '>=8'} - peerDependencies: - react: ^16.3.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@lukeed/csprng@1.1.0': resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} engines: {node: '>=8'} @@ -3945,33 +3899,6 @@ packages: '@types/cross-spawn@6.0.2': resolution: {integrity: sha512-KuwNhp3eza+Rhu8IFI5HUXRP0LIhqH5cAjubUvGXXthh4YYBuP2ntwEX+Cz8GJoZUHlKo247wPWOfA9LYEq4cw==} - '@types/d3-array@3.2.1': - resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==} - - '@types/d3-color@3.1.3': - resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} - - '@types/d3-ease@3.0.2': - resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==} - - '@types/d3-interpolate@3.0.4': - resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} - - '@types/d3-path@3.1.0': - resolution: {integrity: sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ==} - - '@types/d3-scale@4.0.8': - resolution: {integrity: sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==} - - '@types/d3-shape@3.1.6': - resolution: {integrity: sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==} - - '@types/d3-time@3.0.3': - resolution: {integrity: sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==} - - '@types/d3-timer@3.0.2': - resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} - '@types/debug@4.1.7': resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} @@ -4026,9 +3953,6 @@ packages: '@types/jest@29.5.14': resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} - '@types/js-cookie@2.2.7': - resolution: {integrity: sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==} - '@types/js-yaml@4.0.9': resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} @@ -4074,10 +3998,6 @@ packages: '@types/pg-cursor@2.7.2': resolution: {integrity: sha512-m3xT8bVFCvx98LuzbvXyuCdT/Hjdd/v8ml4jL4K1QF70Y8clOfCFdgoaEB1FWdcSwcpoFYZTJQaMD9/GQ27efQ==} - '@types/pg-promise@5.4.3': - resolution: {integrity: sha512-ABgy5hzmcyRZxLNG6HUafpxbpmXGeVJ5dopKwssEsFeA7rpRakdoodt75HJNIjQB4He+s3PTfG1AoWQWm7OuCg==} - deprecated: This is a stub types definition for pg-promise (https://github.com/vitaly-t/pg-promise). pg-promise provides its own type definitions, so you don't need @types/pg-promise installed! - '@types/pg-query-stream@3.4.0': resolution: {integrity: sha512-oqGAu+5CMPAVNqemN9xYT3LBDy2qXBke15cstEuVYIvJL6lcKSNKeG61fONlVrxTYIFi9sPuGVtIweanrEZcJw==} deprecated: This is a stub types definition. pg-query-stream provides its own type definitions, so you do not need this installed. @@ -4351,9 +4271,6 @@ packages: '@webassemblyjs/wast-printer@1.14.1': resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} - '@xobotyi/scrollbar-width@1.9.5': - resolution: {integrity: sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==} - '@xtuc/ieee754@1.2.0': resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} @@ -4599,10 +4516,6 @@ packages: asn1@0.2.6: resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} - assert-options@0.8.2: - resolution: {integrity: sha512-XaXoMxY0zuwAb0YuZjxIm8FeWvNq0aWNIbrzHhFjme8Smxw4JlPoyrAKQ6808k5UvQdhvnWqHZCphq5mXd4TDA==} - engines: {node: '>=10.0.0'} - assert-plus@1.0.0: resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} engines: {node: '>=0.8'} @@ -5170,9 +5083,6 @@ packages: resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} engines: {node: '>=12.13'} - copy-to-clipboard@3.3.3: - resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} - core-js@2.6.12: resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==} deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js. @@ -5241,16 +5151,9 @@ packages: peerDependencies: postcss: ^8.5.10 - css-in-js-utils@3.1.0: - resolution: {integrity: sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==} - css-select@5.1.0: resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} - css-tree@1.1.3: - resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} - engines: {node: '>=8.0.0'} - css-tree@2.2.1: resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} @@ -5315,54 +5218,6 @@ packages: csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} - cuid@2.1.8: - resolution: {integrity: sha512-xiEMER6E7TlTPnDxrM4eRiC6TRgjNX9xzEZ5U/Se2YJKr7Mq4pJn/2XEHjl3STcSh96GmkHPcBXLES8M29wyyg==} - deprecated: Cuid and other k-sortable and non-cryptographic ids (Ulid, ObjectId, KSUID, all UUIDs) are all insecure. Use @paralleldrive/cuid2 instead. - - d3-array@3.2.4: - resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} - engines: {node: '>=12'} - - d3-color@3.1.0: - resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} - engines: {node: '>=12'} - - d3-ease@3.0.1: - resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} - engines: {node: '>=12'} - - d3-format@3.1.0: - resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} - engines: {node: '>=12'} - - d3-interpolate@3.0.1: - resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} - engines: {node: '>=12'} - - d3-path@3.1.0: - resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} - engines: {node: '>=12'} - - d3-scale@4.0.2: - resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} - engines: {node: '>=12'} - - d3-shape@3.2.0: - resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} - engines: {node: '>=12'} - - d3-time-format@4.1.0: - resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} - engines: {node: '>=12'} - - d3-time@3.1.0: - resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} - engines: {node: '>=12'} - - d3-timer@3.0.1: - resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} - engines: {node: '>=12'} - damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} @@ -5438,9 +5293,6 @@ packages: supports-color: optional: true - decimal.js-light@2.5.1: - resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==} - decimal.js@10.6.0: resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} @@ -5566,9 +5418,6 @@ packages: dom-align@1.12.4: resolution: {integrity: sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==} - dom-helpers@5.2.1: - resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} - dom-serializer@1.4.1: resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} @@ -5726,9 +5575,6 @@ packages: error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - error-stack-parser@2.1.4: - resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} - es-abstract@1.24.0: resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} engines: {node: '>= 0.4'} @@ -5958,9 +5804,6 @@ packages: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} - eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - eventemitter3@5.0.4: resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} @@ -6037,10 +5880,6 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-equals@5.4.0: - resolution: {integrity: sha512-jt2DW/aNFNwke7AUd+Z+e6pz39KO5rzdbbFCg2sGafS4mk13MI7Z8O5z9cADNn5lhGODIgLwug6TZO2ctf7kcw==} - engines: {node: '>=6.0.0'} - fast-fifo@1.3.2: resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} @@ -6058,18 +5897,12 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-shallow-equal@1.0.0: - resolution: {integrity: sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==} - fast-string-truncated-width@3.0.3: resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==} fast-string-width@3.0.2: resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==} - fast-text-encoding@1.0.6: - resolution: {integrity: sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==} - fast-uri@3.1.2: resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} @@ -6083,9 +5916,6 @@ packages: resolution: {integrity: sha512-8Cc3f8GUGUULg34pBch/KGyPLglS+OFs05deyOlY7fL2MTagYPKrVQNmR1fLF/yJ9PH5ZSTd3YDF6pnmeZU+zA==} hasBin: true - fastest-stable-stringify@2.0.2: - resolution: {integrity: sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==} - fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} @@ -6241,10 +6071,6 @@ packages: functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - gaxios@4.3.3: - resolution: {integrity: sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==} - engines: {node: '>=10'} - gaxios@6.7.1: resolution: {integrity: sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==} engines: {node: '>=14'} @@ -6253,10 +6079,6 @@ packages: resolution: {integrity: sha512-bTIgTsM2bWn3XklZISBTQX7ZSddGW+IO3bMdGaemHZ3tbqExMENHLx6kKZ/KlejgrMtj8q7wBItt51yegqalrA==} engines: {node: '>=18'} - gcp-metadata@4.3.1: - resolution: {integrity: sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==} - engines: {node: '>=10'} - gcp-metadata@6.1.0: resolution: {integrity: sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==} engines: {node: '>=14'} @@ -6355,20 +6177,10 @@ packages: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} - google-ads-api@17.1.0: - resolution: {integrity: sha512-dI8vtEb+Rkaxh1UudHyla2jw119ffKypvGOcaRXqh3mckk6mGVDkx04FdovVemBid5/cfJR8Hvb90gVU9hyZmw==} - - google-ads-node@14.0.0: - resolution: {integrity: sha512-rbgZkcaRSCQKnwRki4Jl2GY6Csd12a3ouX45xcK1ttFbJqtKrm8GPkctAIVnwAx0yVi8VMgpFWaEls8/i0SGJg==} - google-auth-library@10.6.2: resolution: {integrity: sha512-e27Z6EThmVNNvtYASwQxose/G57rkRuaRbQyxM2bvYLLX/GqWZ5chWq2EBoUchJbCc57eC9ArzO5wMsEmWftCw==} engines: {node: '>=18'} - google-auth-library@7.14.1: - resolution: {integrity: sha512-5Rk7iLNDFhFeBYc3s8l1CqzbEBcdhwR193RlD4vSNFajIcINKI8W8P0JLmBpwymHqqWbX34pJDQu39cSy/6RsA==} - engines: {node: '>=10'} - google-auth-library@9.14.2: resolution: {integrity: sha512-R+FRIfk1GBo3RdlRYWPdwk8nmtVUOn6+BkDomAC46KoU8kzXzE1HLmOasSCbWUByMMAGkknVF0G5kQ69Vj7dlA==} engines: {node: '>=14'} @@ -6389,12 +6201,6 @@ packages: resolution: {integrity: sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA==} engines: {node: '>=14'} - google-p12-pem@3.1.4: - resolution: {integrity: sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==} - engines: {node: '>=10'} - deprecated: Package is no longer maintained - hasBin: true - googleapis-common@7.2.0: resolution: {integrity: sha512-/fhDZEJZvOV3X5jmD+fKxMqma5q2Q9nZNSF3kn1F18tpxmA86BcTxAGBQdM0N89Z3bEaIs+HVznSmFJEAmMTjA==} engines: {node: '>=14.0.0'} @@ -6414,10 +6220,6 @@ packages: resolution: {integrity: sha512-Chq1s4CY7jmh8gO2qvLIJyfCDIN+EHLFW/9iShnp1z8FjBQMoodWP1kDC36VAMXXIvAjj4ARa7ntfAV2BrjsbA==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} - gtoken@5.3.2: - resolution: {integrity: sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==} - engines: {node: '>=10'} - gtoken@7.1.0: resolution: {integrity: sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==} engines: {node: '>=14.0.0'} @@ -6478,9 +6280,6 @@ packages: resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==} engines: {node: '>=12.0.0'} - hoist-non-react-statics@3.3.2: - resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} - hono@4.12.27: resolution: {integrity: sha512-1yrb/+w6HWQJrUCLkJ2IF5jNIPvvFkblV5RNOYl6bV+OA6p9GLcMpHFFGTosSvHvcAUibuUukRqhlYI4z32C7Q==} engines: {node: '>=16.9.0'} @@ -6584,9 +6383,6 @@ packages: engines: {node: '>=14'} hasBin: true - hyphenate-style-name@1.1.0: - resolution: {integrity: sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==} - iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -6652,9 +6448,6 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - inline-style-prefixer@7.0.1: - resolution: {integrity: sha512-lhYo5qNTQp3EvSSp3sRvXMbVQTLrvGV6DycRMJ5dm2BLMiJ30wpXKdDdgX+GmJZ5uQMucwRKHamXSst3Sj/Giw==} - inquirer@9.3.8: resolution: {integrity: sha512-pFGGdaHrmRKMh4WoDDSowddgjT1Vkl90atobmTeSmcPGdYiwikch/m/Ef5wRaiamHejtw0cUUMMerzDUXCci2w==} engines: {node: '>=18'} @@ -6667,10 +6460,6 @@ packages: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} - internmap@2.0.3: - resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} - engines: {node: '>=12'} - ioredis@5.10.1: resolution: {integrity: sha512-HuEDBTI70aYdx1v6U97SbNx9F1+svQKBDo30o0b9fw055LMepzpOOd0Ccg9Q6tbqmBSJaMuY0fB7yw9/vjBYCA==} engines: {node: '>=12.22.0'} @@ -7344,9 +7133,6 @@ packages: resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} engines: {node: '>=18'} - long@4.0.0: - resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} - long@5.3.2: resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} @@ -7423,9 +7209,6 @@ packages: resolution: {integrity: sha512-dfLO11mE77ELTEIXNezfW0eslodsFLsZ1lQkLauP+5Zsg1m7kCGtljqRyVOd9E5Ne2RJgvY6UU09qvnVocOZvA==} engines: {node: '>=12', npm: '>=6'} - mdn-data@2.0.14: - resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} - mdn-data@2.0.28: resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} @@ -7735,12 +7518,6 @@ packages: nan@2.22.0: resolution: {integrity: sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==} - nano-css@5.6.2: - resolution: {integrity: sha512-+6bHaC8dSDGALM1HJjOHVXpuastdu2xFoZlC77Jh4cg+33Zcgm+Gxd+1xsnpZK14eyHObSp82+ll5y3SX75liw==} - peerDependencies: - react: '*' - react-dom: '*' - nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -8151,21 +7928,11 @@ packages: resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} engines: {node: '>=4.0.0'} - pg-minify@1.6.5: - resolution: {integrity: sha512-u0UE8veaCnMfJmoklqneeBBopOAPG3/6DHqGVHYAhz8DkJXh9dnjPlz25fRxn4e+6XVzdOp7kau63Rp52fZ3WQ==} - engines: {node: '>=14.0.0'} - pg-pool@3.13.0: resolution: {integrity: sha512-gB+R+Xud1gLFuRD/QgOIgGOBE2KCQPaPwkzBBGC9oG69pHTkhQeIuejVIk3/cnDyX39av2AxomQiyPT13WKHQA==} peerDependencies: pg: '>=8.0' - pg-promise@11.10.1: - resolution: {integrity: sha512-TceugkypE+VkHTjlklMmLYLN5hUDbM9dIhKZQq2onxN9F//6X6Q5czQ7Ms5sCi0JB5pkbt8fgoC7OLHM2EVI7Q==} - engines: {node: '>=14.0'} - peerDependencies: - pg-query-stream: 4.7.0 - pg-protocol@1.13.0: resolution: {integrity: sha512-zzdvXfS6v89r6v7OcFCHfHlyG/wvry1ALxZo4LqgUoy7W9xhBDMaqOuMiF3qEV45VqsN6rdlcehHrfDtlCPc8w==} @@ -8178,15 +7945,6 @@ packages: resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} engines: {node: '>=4'} - pg@8.13.0: - resolution: {integrity: sha512-34wkUTh3SxTClfoHB3pQ7bIMvw9dpFU1audQQeZG837fmHfHpr14n/AELVDoOYVDW2h5RDWU78tFjkD+erSBsw==} - engines: {node: '>= 8.0.0'} - peerDependencies: - pg-native: '>=3.0.1' - peerDependenciesMeta: - pg-native: - optional: true - pg@8.20.0: resolution: {integrity: sha512-ldhMxz2r8fl/6QkXnBD3CR9/xg694oT6DZQ2s6c/RI28OjtSOpxnPrUCGOBJ46RCUxcWdx3p6kw/xnDHjKvaRA==} engines: {node: '>= 16.0.0'} @@ -8755,36 +8513,12 @@ packages: react-dom: optional: true - react-smooth@4.0.4: - resolution: {integrity: sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-textarea-autosize@8.5.4: resolution: {integrity: sha512-eSSjVtRLcLfFwFcariT77t9hcbVJHQV76b51QjQGarQIHml2+gM2lms0n3XrhnDmgK5B+/Z7TmQk5OHNzqYm/A==} engines: {node: '>=10'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-transition-group@4.4.5: - resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} - peerDependencies: - react: '>=16.6.0' - react-dom: '>=16.6.0' - - react-universal-interface@0.6.2: - resolution: {integrity: sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==} - peerDependencies: - react: '*' - tslib: '*' - - react-use@17.6.0: - resolution: {integrity: sha512-OmedEScUMKFfzn1Ir8dBxiLLSOzhKe/dPZwVxcujweSj45aNM7BEGPb9BEVIgVEqEXx6f3/TsXzwIktNgUR02g==} - peerDependencies: - react: '*' - react-dom: '*' - react@18.3.1: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} @@ -8814,17 +8548,6 @@ packages: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} - recharts-scale@0.4.5: - resolution: {integrity: sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==} - - recharts@2.15.4: - resolution: {integrity: sha512-UT/q6fwS3c1dHbXv2uFgYJ9BMFHu3fwnd7AYZaEQhXuYQ4hgsxLvsUXzGdKeZrW5xopzDCvuA2N41WJ88I7zIw==} - engines: {node: '>=14'} - deprecated: 1.x and 2.x branches are no longer active. Bump to Recharts v3 to receive latest features and bugfixes. See https://github.com/recharts/recharts/wiki/3.0-migration-guide - peerDependencies: - react: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - redent@3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} @@ -8938,9 +8661,6 @@ packages: resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} engines: {node: '>= 18'} - rtl-css-js@1.16.1: - resolution: {integrity: sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==} - run-async@3.0.0: resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} engines: {node: '>=0.12.0'} @@ -8997,10 +8717,6 @@ packages: resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==} engines: {node: '>= 10.13.0'} - screenfull@5.2.0: - resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==} - engines: {node: '>=0.10.0'} - scroll-into-view-if-needed@3.1.0: resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} @@ -9050,10 +8766,6 @@ packages: resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} engines: {node: '>= 0.4'} - set-harmonic-interval@1.0.1: - resolution: {integrity: sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==} - engines: {node: '>=6.9'} - set-proto@1.0.0: resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} engines: {node: '>= 0.4'} @@ -9165,10 +8877,6 @@ packages: source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - source-map@0.5.6: - resolution: {integrity: sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==} - engines: {node: '>=0.10.0'} - source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -9176,10 +8884,6 @@ packages: sparse-bitfield@3.0.3: resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==} - spex@3.4.0: - resolution: {integrity: sha512-8JeZJ7QlEBnSj1W1fKXgbB2KUPA8k4BxFMf6lZX/c1ZagU/1b9uZWZK0yD6yjfzqAIuTNG4YlRmtMpQiXuohsg==} - engines: {node: '>=14.0.0'} - split-ca@1.0.1: resolution: {integrity: sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==} @@ -9197,9 +8901,6 @@ packages: stable-hash@0.0.3: resolution: {integrity: sha512-c63fvNCQ7ip1wBfPv54MflMA5L6OE5J0p6Fg13IpKft4JAFoNal8+s/jtJ8PibrwqXm4onnbeQsADs8k0NQGUA==} - stack-generator@2.0.10: - resolution: {integrity: sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==} - stack-utils@2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} @@ -9207,15 +8908,6 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - stackframe@1.3.4: - resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} - - stacktrace-gps@3.1.2: - resolution: {integrity: sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==} - - stacktrace-js@2.0.2: - resolution: {integrity: sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==} - standard-as-callback@2.1.0: resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} @@ -9245,9 +8937,6 @@ packages: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} engines: {node: '>= 0.4'} - stopwatch-node@1.1.0: - resolution: {integrity: sha512-TpRTztFjiq/B5wn84oKK0YHHtprgrC8pLOUkqVU+MN+2DgdBMaEIeSyGeAn2n+7mT9zrfJyhM33Yw4j/rRV2Bg==} - stream-events@1.0.5: resolution: {integrity: sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==} @@ -9518,20 +9207,10 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - throttle-debounce@3.0.1: - resolution: {integrity: sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==} - engines: {node: '>=10'} - throttle-debounce@5.0.2: resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==} engines: {node: '>=12.22'} - timezones-list@3.1.0: - resolution: {integrity: sha512-PcDBt9tae330KTOIufK/wArTlJp+unuuRcG0EEu+4oLHZACHefKQyP2D51gMZID+urye92mHND60KRVuDDAmbA==} - - tiny-invariant@1.3.3: - resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - tiny-lru@11.2.11: resolution: {integrity: sha512-27BIW0dIWTYYoWNnqSmoNMKe5WIbkXsc0xaCQHd3/3xT2XMuMJrzHdrO9QBFR14emBz1Bu0dOAs2sCBBrvgPQA==} engines: {node: '>=12'} @@ -9573,9 +9252,6 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - toggle-selection@1.0.6: - resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} - toidentifier@1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} @@ -9613,9 +9289,6 @@ packages: peerDependencies: typescript: '>=4.8.4' - ts-easing@0.2.0: - resolution: {integrity: sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==} - ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} @@ -9843,12 +9516,6 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 - use-debounce@10.1.1: - resolution: {integrity: sha512-kvds8BHR2k28cFsxW8k3nc/tRga2rs1RHYCqmmGqb90MEeE++oALwzh2COiuBLO1/QXiOuShXoSN2ZpWnMmvuQ==} - engines: {node: '>= 16.0.0'} - peerDependencies: - react: '*' - use-isomorphic-layout-effect@1.1.2: resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} peerDependencies: @@ -9917,9 +9584,6 @@ packages: resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} engines: {'0': node >=0.6.0} - victory-vendor@36.9.2: - resolution: {integrity: sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==} - vite@6.4.3: resolution: {integrity: sha512-NTKlcQjlAK7MlQoyb6LgaqHc8sso/pVyUJYWMws3jg21uTJw/LddqIFPcPqP6PzpgbIcZyKI85sFE4HBrQDA8A==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} @@ -11719,6 +11383,7 @@ snapshots: long: 5.3.2 protobufjs: 7.6.4 yargs: 17.7.2 + optional: true '@grpc/proto-loader@0.7.15': dependencies: @@ -11936,8 +11601,6 @@ snapshots: dependencies: minipass: 7.1.3 - '@isaacs/ttlcache@1.4.1': {} - '@istanbuljs/load-nyc-config@1.1.0': dependencies: camelcase: 5.3.1 @@ -12169,8 +11832,6 @@ snapshots: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 - '@jridgewell/sourcemap-codec@1.5.0': {} - '@jridgewell/sourcemap-codec@1.5.5': {} '@jridgewell/trace-mapping@0.3.29': @@ -12199,13 +11860,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@loadable/component@5.16.7(react@18.3.1)': - dependencies: - '@babel/runtime': 7.29.2 - hoist-non-react-statics: 3.3.2 - react: 18.3.1 - react-is: 16.13.1 - '@lukeed/csprng@1.1.0': {} '@lukeed/uuid@2.0.1': @@ -13561,7 +13215,8 @@ snapshots: dependencies: '@testing-library/dom': 10.4.0 - '@tootallnate/once@3.0.1': {} + '@tootallnate/once@3.0.1': + optional: true '@ts-morph/common@0.12.3': dependencies: @@ -13628,7 +13283,8 @@ snapshots: '@types/connect': 3.4.38 '@types/node': 18.19.61 - '@types/caseless@0.12.5': {} + '@types/caseless@0.12.5': + optional: true '@types/chai@5.2.3': dependencies: @@ -13663,30 +13319,6 @@ snapshots: dependencies: '@types/node': 26.0.0 - '@types/d3-array@3.2.1': {} - - '@types/d3-color@3.1.3': {} - - '@types/d3-ease@3.0.2': {} - - '@types/d3-interpolate@3.0.4': - dependencies: - '@types/d3-color': 3.1.3 - - '@types/d3-path@3.1.0': {} - - '@types/d3-scale@4.0.8': - dependencies: - '@types/d3-time': 3.0.3 - - '@types/d3-shape@3.1.6': - dependencies: - '@types/d3-path': 3.1.0 - - '@types/d3-time@3.0.3': {} - - '@types/d3-timer@3.0.2': {} - '@types/debug@4.1.7': dependencies: '@types/ms': 2.1.0 @@ -13760,8 +13392,6 @@ snapshots: expect: 29.7.0 pretty-format: 29.7.0 - '@types/js-cookie@2.2.7': {} - '@types/js-yaml@4.0.9': {} '@types/json-schema@7.0.15': {} @@ -13775,7 +13405,8 @@ snapshots: '@types/lodash@4.17.24': {} - '@types/long@4.0.2': {} + '@types/long@4.0.2': + optional: true '@types/mime@1.3.5': {} @@ -13808,13 +13439,6 @@ snapshots: '@types/node': 18.19.61 '@types/pg': 8.20.0 - '@types/pg-promise@5.4.3(pg-query-stream@4.7.1(pg@8.20.0))': - dependencies: - pg-promise: 11.10.1(pg-query-stream@4.7.1(pg@8.20.0)) - transitivePeerDependencies: - - pg-native - - pg-query-stream - '@types/pg-query-stream@3.4.0(pg@8.20.0)': dependencies: pg-query-stream: 4.7.1(pg@8.20.0) @@ -13855,6 +13479,7 @@ snapshots: '@types/node': 26.0.0 '@types/tough-cookie': 4.0.5 form-data: 4.0.6 + optional: true '@types/send@0.17.4': dependencies: @@ -13892,7 +13517,8 @@ snapshots: dependencies: '@types/node': 18.19.61 - '@types/tough-cookie@4.0.5': {} + '@types/tough-cookie@4.0.5': + optional: true '@types/web@0.0.152': {} @@ -14245,8 +13871,6 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@xtuc/long': 4.2.2 - '@xobotyi/scrollbar-width@1.9.5': {} - '@xtuc/ieee754@1.2.0': {} '@xtuc/long@4.2.2': {} @@ -14566,7 +14190,8 @@ snapshots: get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 - arrify@2.0.1: {} + arrify@2.0.1: + optional: true asap@2.0.6: {} @@ -14574,8 +14199,6 @@ snapshots: dependencies: safer-buffer: 2.1.2 - assert-options@0.8.2: {} - assert-plus@1.0.0: {} assertion-error@2.0.1: {} @@ -15149,10 +14772,6 @@ snapshots: dependencies: is-what: 4.1.16 - copy-to-clipboard@3.3.3: - dependencies: - toggle-selection: 1.0.6 - core-js@2.6.12: {} core-util-is@1.0.2: {} @@ -15259,10 +14878,6 @@ snapshots: dependencies: postcss: 8.5.15 - css-in-js-utils@3.1.0: - dependencies: - hyphenate-style-name: 1.1.0 - css-select@5.1.0: dependencies: boolbase: 1.0.0 @@ -15271,11 +14886,6 @@ snapshots: domutils: 3.1.0 nth-check: 2.1.1 - css-tree@1.1.3: - dependencies: - mdn-data: 2.0.14 - source-map: 0.6.1 - css-tree@2.2.1: dependencies: mdn-data: 2.0.28 @@ -15410,46 +15020,6 @@ snapshots: csstype@3.2.3: {} - cuid@2.1.8: {} - - d3-array@3.2.4: - dependencies: - internmap: 2.0.3 - - d3-color@3.1.0: {} - - d3-ease@3.0.1: {} - - d3-format@3.1.0: {} - - d3-interpolate@3.0.1: - dependencies: - d3-color: 3.1.0 - - d3-path@3.1.0: {} - - d3-scale@4.0.2: - dependencies: - d3-array: 3.2.4 - d3-format: 3.1.0 - d3-interpolate: 3.0.1 - d3-time: 3.1.0 - d3-time-format: 4.1.0 - - d3-shape@3.2.0: - dependencies: - d3-path: 3.1.0 - - d3-time-format@4.1.0: - dependencies: - d3-time: 3.1.0 - - d3-time@3.1.0: - dependencies: - d3-array: 3.2.4 - - d3-timer@3.0.1: {} - damerau-levenshtein@1.0.8: {} data-uri-to-buffer@4.0.1: {} @@ -15511,8 +15081,6 @@ snapshots: dependencies: ms: 2.1.3 - decimal.js-light@2.5.1: {} - decimal.js@10.6.0: optional: true @@ -15635,11 +15203,6 @@ snapshots: dom-align@1.12.4: {} - dom-helpers@5.2.1: - dependencies: - '@babel/runtime': 7.29.2 - csstype: 3.2.3 - dom-serializer@1.4.1: dependencies: domelementtype: 2.3.0 @@ -15705,6 +15268,7 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 stream-shift: 1.0.3 + optional: true eastasianwidth@0.2.0: {} @@ -15804,10 +15368,6 @@ snapshots: dependencies: is-arrayish: 0.2.1 - error-stack-parser@2.1.4: - dependencies: - stackframe: 1.3.4 - es-abstract@1.24.0: dependencies: array-buffer-byte-length: 1.0.2 @@ -16208,8 +15768,6 @@ snapshots: event-target-shim@5.0.1: {} - eventemitter3@4.0.7: {} - eventemitter3@5.0.4: {} events-universal@1.0.1: @@ -16342,8 +15900,6 @@ snapshots: fast-deep-equal@3.1.3: {} - fast-equals@5.4.0: {} - fast-fifo@1.3.2: {} fast-glob@3.3.1: @@ -16366,16 +15922,12 @@ snapshots: fast-levenshtein@2.0.6: {} - fast-shallow-equal@1.0.0: {} - fast-string-truncated-width@3.0.3: {} fast-string-width@3.0.2: dependencies: fast-string-truncated-width: 3.0.3 - fast-text-encoding@1.0.6: {} - fast-uri@3.1.2: {} fast-wrap-ansi@0.2.2: @@ -16394,8 +15946,6 @@ snapshots: path-expression-matcher: 1.5.0 strnum: 2.2.3 - fastest-stable-stringify@2.0.2: {} - fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -16618,17 +16168,6 @@ snapshots: functions-have-names@1.2.3: {} - gaxios@4.3.3(encoding@0.1.13): - dependencies: - abort-controller: 3.0.0 - extend: 3.0.2 - https-proxy-agent: 5.0.1 - is-stream: 2.0.1 - node-fetch: 2.7.0(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - supports-color - gaxios@6.7.1(encoding@0.1.13): dependencies: extend: 3.0.2 @@ -16648,14 +16187,6 @@ snapshots: transitivePeerDependencies: - supports-color - gcp-metadata@4.3.1(encoding@0.1.13): - dependencies: - gaxios: 4.3.3(encoding@0.1.13) - json-bigint: 1.0.0 - transitivePeerDependencies: - - encoding - - supports-color - gcp-metadata@6.1.0(encoding@0.1.13): dependencies: gaxios: 6.7.1(encoding@0.1.13) @@ -16672,6 +16203,7 @@ snapshots: transitivePeerDependencies: - encoding - supports-color + optional: true gcp-metadata@8.1.2: dependencies: @@ -16777,25 +16309,6 @@ snapshots: define-properties: 1.2.1 gopd: 1.2.0 - google-ads-api@17.1.0(encoding@0.1.13): - dependencies: - '@isaacs/ttlcache': 1.4.1 - google-ads-node: 14.0.0(encoding@0.1.13) - google-auth-library: 7.14.1(encoding@0.1.13) - google-gax: 4.4.1(encoding@0.1.13) - long: 4.0.0 - transitivePeerDependencies: - - encoding - - supports-color - - google-ads-node@14.0.0(encoding@0.1.13): - dependencies: - google-gax: 4.4.1(encoding@0.1.13) - lru-cache: 10.4.3 - transitivePeerDependencies: - - encoding - - supports-color - google-auth-library@10.6.2: dependencies: base64-js: 1.5.1 @@ -16807,21 +16320,6 @@ snapshots: transitivePeerDependencies: - supports-color - google-auth-library@7.14.1(encoding@0.1.13): - dependencies: - arrify: 2.0.1 - base64-js: 1.5.1 - ecdsa-sig-formatter: 1.0.11 - fast-text-encoding: 1.0.6 - gaxios: 4.3.3(encoding@0.1.13) - gcp-metadata: 4.3.1(encoding@0.1.13) - gtoken: 5.3.2(encoding@0.1.13) - jws: 4.0.1 - lru-cache: 6.0.0 - transitivePeerDependencies: - - encoding - - supports-color - google-auth-library@9.14.2(encoding@0.1.13): dependencies: base64-js: 1.5.1 @@ -16845,6 +16343,7 @@ snapshots: transitivePeerDependencies: - encoding - supports-color + optional: true google-gax@4.4.1(encoding@0.1.13): dependencies: @@ -16863,15 +16362,13 @@ snapshots: transitivePeerDependencies: - encoding - supports-color + optional: true - google-logging-utils@0.0.2: {} + google-logging-utils@0.0.2: + optional: true google-logging-utils@1.1.3: {} - google-p12-pem@3.1.4: - dependencies: - node-forge: 1.4.0 - googleapis-common@7.2.0(encoding@0.1.13): dependencies: extend: 3.0.2 @@ -16898,15 +16395,6 @@ snapshots: graphql@16.14.2: {} - gtoken@5.3.2(encoding@0.1.13): - dependencies: - gaxios: 4.3.3(encoding@0.1.13) - google-p12-pem: 3.1.4 - jws: 4.0.1 - transitivePeerDependencies: - - encoding - - supports-color - gtoken@7.1.0(encoding@0.1.13): dependencies: gaxios: 6.7.1(encoding@0.1.13) @@ -16969,10 +16457,6 @@ snapshots: highlight.js@11.11.1: {} - hoist-non-react-statics@3.3.2: - dependencies: - react-is: 16.13.1 - hono@4.12.27: {} html-encoding-sniffer@2.0.1: @@ -17070,6 +16554,7 @@ snapshots: debug: 4.4.3 transitivePeerDependencies: - supports-color + optional: true https-proxy-agent@5.0.1: dependencies: @@ -17100,8 +16585,6 @@ snapshots: husky@8.0.3: {} - hyphenate-style-name@1.1.0: {} - iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 @@ -17156,10 +16639,6 @@ snapshots: ini@1.3.8: {} - inline-style-prefixer@7.0.1: - dependencies: - css-in-js-utils: 3.1.0 - inquirer@9.3.8(@types/node@18.19.61): dependencies: '@inquirer/external-editor': 1.0.3(@types/node@18.19.61) @@ -17189,8 +16668,6 @@ snapshots: hasown: 2.0.3 side-channel: 1.1.0 - internmap@2.0.3: {} - ioredis@5.10.1: dependencies: '@ioredis/commands': 1.5.1 @@ -18170,8 +17647,6 @@ snapshots: is-unicode-supported: 2.1.0 yoctocolors: 2.1.1 - long@4.0.0: {} - long@5.3.2: {} loose-envify@1.4.0: @@ -18236,8 +17711,6 @@ snapshots: mmdb-lib: 2.1.1 tiny-lru: 11.2.11 - mdn-data@2.0.14: {} - mdn-data@2.0.28: {} mdn-data@2.27.1: {} @@ -18884,19 +18357,6 @@ snapshots: nan@2.22.0: {} - nano-css@5.6.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): - dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 - css-tree: 1.1.3 - csstype: 3.2.3 - fastest-stable-stringify: 2.0.2 - inline-style-prefixer: 7.0.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - rtl-css-js: 1.16.1 - stacktrace-js: 2.0.2 - stylis: 4.3.4 - nanoid@3.3.11: {} nanoid@3.3.15: {} @@ -19305,26 +18765,10 @@ snapshots: pg-int8@1.0.1: {} - pg-minify@1.6.5: {} - - pg-pool@3.13.0(pg@8.13.0): - dependencies: - pg: 8.13.0 - pg-pool@3.13.0(pg@8.20.0): dependencies: pg: 8.20.0 - pg-promise@11.10.1(pg-query-stream@4.7.1(pg@8.20.0)): - dependencies: - assert-options: 0.8.2 - pg: 8.13.0 - pg-minify: 1.6.5 - pg-query-stream: 4.7.1(pg@8.20.0) - spex: 3.4.0 - transitivePeerDependencies: - - pg-native - pg-protocol@1.13.0: {} pg-query-stream@4.7.1(pg@8.20.0): @@ -19340,16 +18784,6 @@ snapshots: postgres-date: 1.0.7 postgres-interval: 1.2.0 - pg@8.13.0: - dependencies: - pg-connection-string: 2.12.0 - pg-pool: 3.13.0(pg@8.13.0) - pg-protocol: 1.13.0 - pg-types: 2.2.0 - pgpass: 1.0.5 - optionalDependencies: - pg-cloudflare: 1.3.0 - pg@8.20.0: dependencies: pg-connection-string: 2.12.0 @@ -19910,6 +19344,7 @@ snapshots: proto3-json-serializer@2.0.2: dependencies: protobufjs: 7.6.4 + optional: true protobufjs@7.6.4: dependencies: @@ -20129,14 +19564,6 @@ snapshots: optionalDependencies: react-dom: 18.3.1(react@18.3.1) - react-smooth@4.0.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): - dependencies: - fast-equals: 5.4.0 - prop-types: 15.8.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react-textarea-autosize@8.5.4(@types/react@18.3.0)(react@18.3.1): dependencies: '@babel/runtime': 7.29.2 @@ -20146,39 +19573,6 @@ snapshots: transitivePeerDependencies: - '@types/react' - react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): - dependencies: - '@babel/runtime': 7.29.2 - dom-helpers: 5.2.1 - loose-envify: 1.4.0 - prop-types: 15.8.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - react-universal-interface@0.6.2(react@18.3.1)(tslib@2.8.1): - dependencies: - react: 18.3.1 - tslib: 2.8.1 - - react-use@17.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): - dependencies: - '@types/js-cookie': 2.2.7 - '@xobotyi/scrollbar-width': 1.9.5 - copy-to-clipboard: 3.3.3 - fast-deep-equal: 3.1.3 - fast-shallow-equal: 1.0.0 - js-cookie: 3.0.8 - nano-css: 5.6.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-universal-interface: 0.6.2(react@18.3.1)(tslib@2.8.1) - resize-observer-polyfill: 1.5.1 - screenfull: 5.2.0 - set-harmonic-interval: 1.0.1 - throttle-debounce: 3.0.1 - ts-easing: 0.2.0 - tslib: 2.8.1 - react@18.3.1: dependencies: loose-envify: 1.4.0 @@ -20221,23 +19615,6 @@ snapshots: readdirp@4.1.2: {} - recharts-scale@0.4.5: - dependencies: - decimal.js-light: 2.5.1 - - recharts@2.15.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): - dependencies: - clsx: 2.1.1 - eventemitter3: 4.0.7 - lodash: 4.18.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-is: 18.3.1 - react-smooth: 4.0.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - recharts-scale: 0.4.5 - tiny-invariant: 1.3.3 - victory-vendor: 36.9.2 - redent@3.0.0: dependencies: indent-string: 4.0.0 @@ -20338,6 +19715,7 @@ snapshots: transitivePeerDependencies: - encoding - supports-color + optional: true retry@0.12.0: {} @@ -20389,10 +19767,6 @@ snapshots: transitivePeerDependencies: - supports-color - rtl-css-js@1.16.1: - dependencies: - '@babel/runtime': 7.29.2 - run-async@3.0.0: {} run-parallel@1.2.0: @@ -20460,8 +19834,6 @@ snapshots: ajv-formats: 2.1.1(ajv@8.18.0) ajv-keywords: 5.1.0(ajv@8.18.0) - screenfull@5.2.0: {} - scroll-into-view-if-needed@3.1.0: dependencies: compute-scroll-into-view: 3.1.0 @@ -20549,8 +19921,6 @@ snapshots: functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 - set-harmonic-interval@1.0.1: {} - set-proto@1.0.0: dependencies: dunder-proto: 1.0.1 @@ -20720,16 +20090,12 @@ snapshots: buffer-from: 1.1.2 source-map: 0.6.1 - source-map@0.5.6: {} - source-map@0.6.1: {} sparse-bitfield@3.0.3: dependencies: memory-pager: 1.5.0 - spex@3.4.0: {} - split-ca@1.0.1: {} split2@4.2.0: {} @@ -20749,29 +20115,12 @@ snapshots: stable-hash@0.0.3: {} - stack-generator@2.0.10: - dependencies: - stackframe: 1.3.4 - stack-utils@2.0.6: dependencies: escape-string-regexp: 2.0.0 stackback@0.0.2: {} - stackframe@1.3.4: {} - - stacktrace-gps@3.1.2: - dependencies: - source-map: 0.5.6 - stackframe: 1.3.4 - - stacktrace-js@2.0.2: - dependencies: - error-stack-parser: 2.1.4 - stack-generator: 2.0.10 - stacktrace-gps: 3.1.2 - standard-as-callback@2.1.0: {} state-local@1.0.7: {} @@ -20793,13 +20142,13 @@ snapshots: es-errors: 1.3.0 internal-slot: 1.1.0 - stopwatch-node@1.1.0: {} - stream-events@1.0.5: dependencies: stubs: 3.0.0 + optional: true - stream-shift@1.0.3: {} + stream-shift@1.0.3: + optional: true streamx@2.25.0: dependencies: @@ -20924,7 +20273,8 @@ snapshots: stubborn-utils@1.0.2: {} - stubs@3.0.0: {} + stubs@3.0.0: + optional: true styled-jsx@5.1.6(@babel/core@7.29.7)(react@18.3.1): dependencies: @@ -21082,6 +20432,7 @@ snapshots: transitivePeerDependencies: - encoding - supports-color + optional: true teex@1.0.1: dependencies: @@ -21163,14 +20514,8 @@ snapshots: dependencies: any-promise: 1.3.0 - throttle-debounce@3.0.1: {} - throttle-debounce@5.0.2: {} - timezones-list@3.1.0: {} - - tiny-invariant@1.3.3: {} - tiny-lru@11.2.11: {} tinybench@2.9.0: {} @@ -21203,8 +20548,6 @@ snapshots: dependencies: is-number: 7.0.0 - toggle-selection@1.0.6: {} - toidentifier@1.0.1: {} totalist@3.0.1: {} @@ -21238,8 +20581,6 @@ snapshots: dependencies: typescript: 5.6.3 - ts-easing@0.2.0: {} - ts-interface-checker@0.1.13: {} ts-jest@29.0.5(@babel/core@7.29.7)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.29.7))(jest@29.7.0(@types/node@26.0.0)(ts-node@10.9.2(@swc/core@1.15.2)(@types/node@26.0.0)(typescript@5.6.3)))(typescript@5.6.3): @@ -21500,10 +20841,6 @@ snapshots: dependencies: react: 18.3.1 - use-debounce@10.1.1(react@18.3.1): - dependencies: - react: 18.3.1 - use-isomorphic-layout-effect@1.1.2(@types/react@18.3.0)(react@18.3.1): dependencies: react: 18.3.1 @@ -21561,23 +20898,6 @@ snapshots: core-util-is: 1.0.2 extsprintf: 1.3.0 - victory-vendor@36.9.2: - dependencies: - '@types/d3-array': 3.2.1 - '@types/d3-ease': 3.0.2 - '@types/d3-interpolate': 3.0.4 - '@types/d3-scale': 4.0.8 - '@types/d3-shape': 3.1.6 - '@types/d3-time': 3.0.3 - '@types/d3-timer': 3.0.2 - d3-array: 3.2.4 - d3-ease: 3.0.1 - d3-interpolate: 3.0.1 - d3-scale: 4.0.2 - d3-shape: 3.2.0 - d3-time: 3.1.0 - d3-timer: 3.0.1 - vite@6.4.3(@types/node@18.19.61)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.21.0)(yaml@2.8.3): dependencies: esbuild: 0.28.1 diff --git a/services/rotor/src/lib/udf-chain.ts b/services/rotor/src/lib/udf-chain.ts index f3fe6fb39..a9ed12e28 100644 --- a/services/rotor/src/lib/udf-chain.ts +++ b/services/rotor/src/lib/udf-chain.ts @@ -18,6 +18,8 @@ export type ChainFunction = { export type BuildContextFn = (functionId: string, functionType: string, logs: TLog[]) => FullContext; +// ponytail: duplicates juava's deepCopy on purpose — this module is bundled into the +// permission-less Deno worker and must not import juava (see header comment) export function deepCopy(o: T): T { if (typeof o !== "object") return o; if (!o) return o; diff --git a/webapps/console/components/AuditLog/AuditLog.tsx b/webapps/console/components/AuditLog/AuditLog.tsx index cfa1707bc..8a92eedc8 100644 --- a/webapps/console/components/AuditLog/AuditLog.tsx +++ b/webapps/console/components/AuditLog/AuditLog.tsx @@ -5,7 +5,7 @@ import utc from "dayjs/plugin/utc"; import relativeTime from "dayjs/plugin/relativeTime"; import { rpc } from "juava"; import { useQuery } from "@tanstack/react-query"; -import { useDebounce } from "use-debounce"; +import { useDebouncedValue } from "../../lib/ui"; import Link from "next/link"; import { useRouter } from "next/router"; import { AuditLogDiff } from "../AuditLogDiff/AuditLogDiff"; @@ -251,7 +251,7 @@ export const AuditLog: React.FC = ({ workspaceId, workspaceSlug, // search results change. const [wsFilter, setWsFilter] = useState<{ value: string; label: string } | undefined>(undefined); const [wsSearch, setWsSearch] = useState(""); - const [debouncedWsSearch] = useDebounce(wsSearch, 300); + const debouncedWsSearch = useDebouncedValue(wsSearch, 300); // ── URL ⇄ filter sync ────────────────────────────────────────────────── // Persist every filter in the query string so a filtered view is shareable diff --git a/webapps/console/components/ConfigObjectEditor/ConfigEditor.tsx b/webapps/console/components/ConfigObjectEditor/ConfigEditor.tsx index bc226f2f4..e68e9dfda 100644 --- a/webapps/console/components/ConfigObjectEditor/ConfigEditor.tsx +++ b/webapps/console/components/ConfigObjectEditor/ConfigEditor.tsx @@ -4,7 +4,7 @@ import { FaCaretDown, FaCaretRight, FaClone, FaPlus } from "react-icons/fa"; import { ZodType } from "zod"; import { ConfigApiDeleteOptions, getConfigApi } from "../../lib/useApi"; import { useRouter } from "next/router"; -import { asFunction, FunctionLike, getErrorMessage, getLog, requireDefined } from "juava"; +import { asFunction, FunctionLike, getErrorMessage, getLog, randomId, requireDefined } from "juava"; import zodToJsonSchema from "zod-to-json-schema"; @@ -52,7 +52,6 @@ import { EditorBase } from "./EditorBase"; import { EditorField } from "./EditorField"; import { EditorButtons } from "./EditorButtons"; import { ButtonGroup, ButtonProps } from "../ButtonGroup/ButtonGroup"; -import cuid from "cuid"; import { ObjectTitle } from "../ObjectTitle/ObjectTitle"; import omitBy from "lodash/omitBy"; import { @@ -662,7 +661,7 @@ const SingleObjectEditor: React.FC = props => { return ; } const preObject = otherProps.object || { - id: cuid(), + id: randomId(), workspaceId: workspace.id, type: type, ...newObject(meta), @@ -888,7 +887,7 @@ const SingleObjectEditorLoader: React.FC new Promise((r, c) => import("react-json-view").then(result => r(result.default), c))); +const ReactJson = dynamic(() => import("react-json-view"), { ssr: false }); export const JSONView = (props: { data: any; rawData?: string }) => { const [raw, setRaw] = useState(false); diff --git a/webapps/console/components/SyncEditorPage/SyncEditorPage.tsx b/webapps/console/components/SyncEditorPage/SyncEditorPage.tsx index dbe497604..509c0c573 100644 --- a/webapps/console/components/SyncEditorPage/SyncEditorPage.tsx +++ b/webapps/console/components/SyncEditorPage/SyncEditorPage.tsx @@ -19,7 +19,6 @@ import { SimpleErrorCard } from "../GlobalError/GlobalError"; import { LabelEllipsis } from "../LabelEllipsis/LabelEllipsis"; import { createDisplayName } from "../../lib/zod"; import xor from "lodash/xor"; -import timezones from "timezones-list"; import { useBilling } from "../Billing/BillingProvider"; import { WLink } from "../Workspace/WLink"; import { useStoreReload } from "../../lib/store"; @@ -36,6 +35,14 @@ import { initStream } from "../../lib/sources"; const log = getLog("SyncEditorPage"); +// ponytail: replaces the timezones-list dep; Intl is native and always current +const timezones = Intl.supportedValuesOf("timeZone").map(tz => { + const offset = new Intl.DateTimeFormat("en-US", { timeZone: tz, timeZoneName: "longOffset" }) + .formatToParts(new Date()) + .find(p => p.type === "timeZoneName")!.value; + return { value: tz, label: `${tz} (${offset})` }; +}); + const scheduleOptions = [ { label: "Disabled", @@ -747,10 +754,7 @@ function SyncEditor({ showSearch={true} popupMatchSelectWidth={false} className="w-80" - options={[ - { value: "Etc/UTC", label: "UTC" }, - ...timezones.map(tz => ({ value: tz.tzCode, label: tz.label })), - ]} + options={[{ value: "Etc/UTC", label: "UTC" }, ...timezones]} value={syncOptions.timezone || "Etc/UTC"} onSelect={tz => { updateOptions({ timezone: tz }); diff --git a/webapps/console/lib/ui.tsx b/webapps/console/lib/ui.tsx index e05f4fb21..6b3ddb045 100644 --- a/webapps/console/lib/ui.tsx +++ b/webapps/console/lib/ui.tsx @@ -1,11 +1,10 @@ -import { PropsWithChildren, ReactNode, useCallback, useEffect } from "react"; +import { PropsWithChildren, ReactNode, useCallback, useEffect, useState } from "react"; import { notification } from "antd"; import { NextRouter, useRouter } from "next/router"; import { ErrorDetails } from "../components/GlobalError/GlobalError"; import { getAntdModal } from "./modal"; import { Input } from "antd"; -import * as _useTitle from "react-use/lib/useTitle"; import { NotificationPlacement } from "antd/es/notification/interface"; export type KeyboardKey = "Escape" | "Enter"; @@ -29,7 +28,20 @@ export function useKeyboard(key: KeyboardKey, handler) { }, [onKeyPress]); } -export const useTitle = _useTitle.default; +export function useTitle(title: string) { + useEffect(() => { + document.title = title; + }, [title]); +} + +export function useDebouncedValue(value: T, ms: number): T { + const [debounced, setDebounced] = useState(value); + useEffect(() => { + const timer = setTimeout(() => setDebounced(value), ms); + return () => clearTimeout(timer); + }, [value, ms]); + return debounced; +} export function copyTextToClipboard(text) { if (navigator.clipboard?.writeText) { diff --git a/webapps/console/package.json b/webapps/console/package.json index a259d65c9..f4e22904b 100644 --- a/webapps/console/package.json +++ b/webapps/console/package.json @@ -44,7 +44,6 @@ "@jitsu/jitsu-react": "workspace:*", "@jitsu/js": "workspace:*", "@jitsu/protocols": "workspace:*", - "@loadable/component": "^5.15.3", "@modelcontextprotocol/sdk": "^1.29.0", "@monaco-editor/react": "^4.6.0", "@nangohq/frontend": "^0.21.11", @@ -58,18 +57,15 @@ "@scalar/nextjs-api-reference": "^0.10.14", "@tanstack/react-query": "^4.36.1", "@types/cookie": "^1.0.0", - "@types/pg-promise": "^5.4.3", "agentkeepalive": "^4.6.0", "ajv": "8.18.0", "chart.js": "^4.4.1", "classnames": "^2.3.1", "cookie": "1.0.1", "cron-parser": "^5.5.0", - "cuid": "^2.1.8", "dayjs": "^1.11.10", "firebase": "^11.4.0", "firebase-admin": "^13.2.0", - "google-ads-api": "^17.1.0-rest-beta", "googleapis": "^126.0.1", "highlight.js": "^11.11.1", "ioredis": "^5.9.2", @@ -88,7 +84,6 @@ "node-cache": "^5.1.2", "node-sql-parser": "^5.3.13", "nodemailer": "^9.0.1", - "object-hash": "^3.0.0", "openapi3-ts": "^4.5.0", "pg": "^8.18.0", "pg-cursor": "^2.17.0", @@ -97,13 +92,8 @@ "react-dom": "catalog:", "react-icons": "^4.10.1", "react-json-view": "^1.19.1", - "react-use": "^17.4.0", - "recharts": "^2.10.4", "stable-hash": "0.0.3", - "stopwatch-node": "^1.1.0", - "timezones-list": "^3.0.2", "tslib": "catalog:", - "use-debounce": "^10.0.4", "zod": "^3.23.8", "zod-to-json-schema": "^3.23.2" }, diff --git a/webapps/console/pages/[workspaceId]/settings/domains.tsx b/webapps/console/pages/[workspaceId]/settings/domains.tsx index c943e8dce..fb031d4d9 100644 --- a/webapps/console/pages/[workspaceId]/settings/domains.tsx +++ b/webapps/console/pages/[workspaceId]/settings/domains.tsx @@ -7,7 +7,7 @@ import { UpgradeDialog } from "../../../components/Billing/UpgradeDialog"; import { DomainsEditor } from "../../../components/DomainsEditor/DomainsEditor"; import { useConfigApi } from "../../../lib/useApi"; import { WorkspaceDomain } from "../../../lib/schema"; -import cuid from "cuid"; +import { randomId } from "juava"; import { useConfigObjectList, useConfigObjectMutation } from "../../../lib/store"; const WorkspaceDomainsComponent: React.FC = () => { @@ -31,7 +31,7 @@ const WorkspaceDomainsComponent: React.FC = () => { const toAdd = newDomains.filter(d => !domains.includes(d)); const toDelete = domainsRaw.filter(d => !newDomains.includes(d.name)); for (const domain of toAdd) { - await onSaveMutation.mutateAsync({ id: cuid(), type: "domain", workspaceId: workspace.id, name: domain }); + await onSaveMutation.mutateAsync({ id: randomId(), type: "domain", workspaceId: workspace.id, name: domain }); } for (const domain of toDelete) { await onDeleteMutation.mutateAsync(domain); diff --git a/webapps/console/pages/[workspaceId]/syncs/tasks.tsx b/webapps/console/pages/[workspaceId]/syncs/tasks.tsx index 20e22ceed..57eb0513d 100644 --- a/webapps/console/pages/[workspaceId]/syncs/tasks.tsx +++ b/webapps/console/pages/[workspaceId]/syncs/tasks.tsx @@ -32,7 +32,7 @@ import { displayTaskRunError, formatDate, SyncTitle } from "./index"; import { ButtonGroup, ButtonProps } from "../../../components/ButtonGroup/ButtonGroup"; import { rpc } from "juava"; import { feedbackError, feedbackSuccess, useKeyboard } from "../../../lib/ui"; -import hash from "object-hash"; +import { default as hash } from "stable-hash"; import { useConfigObjectLinks, useConfigObjectList } from "../../../lib/store"; import { Spinner } from "../../../components/GlobalLoader/GlobalLoader"; import { MdOutlineCancel } from "react-icons/md"; diff --git a/webapps/console/pages/api/admin/export/[name]/index.ts b/webapps/console/pages/api/admin/export/[name]/index.ts index d40f07eef..29ebb7cd4 100644 --- a/webapps/console/pages/api/admin/export/[name]/index.ts +++ b/webapps/console/pages/api/admin/export/[name]/index.ts @@ -6,8 +6,10 @@ import { getCoreDestinationTypeNonStrict } from "../../../../../lib/schema/desti import { getEeConnection, isEEAvailable, serviceTokenHeaders } from "../../../../../lib/server/ee"; import omit from "lodash/omit"; import { NextApiRequest } from "next"; -import hash from "object-hash"; import { default as stableHash } from "stable-hash"; + +// ponytail: replaces object-hash; hash values change once on deploy, downstream only uses them as cache keys +const hash = (o: any) => juavaHash("md5", stableHash(o)); import { WorkspaceDbModel, FunctionsServerDbModel } from "../../../../../prisma/schema"; import { ProfileBuilder } from "@jitsu/destination-functions"; import { getServerEnv } from "../../../../../lib/server/serverEnv"; diff --git a/webapps/console/pages/workspaces.tsx b/webapps/console/pages/workspaces.tsx index 4d9fe6b68..ecd96dff6 100644 --- a/webapps/console/pages/workspaces.tsx +++ b/webapps/console/pages/workspaces.tsx @@ -8,13 +8,12 @@ import { EmbeddedErrorMessage } from "../components/GlobalError/GlobalError"; import { getLog } from "juava"; import Link from "next/link"; import React, { useState, useMemo, useRef, useEffect } from "react"; -import { feedbackError, feedbackSuccess } from "../lib/ui"; +import { feedbackError, feedbackSuccess, useDebouncedValue } from "../lib/ui"; import { JitsuButton } from "../components/JitsuButton/JitsuButton"; import { Input, Tag, Button, Skeleton } from "antd"; import { useQueryStringState } from "../lib/useQueryStringState"; import { branding } from "../lib/branding"; import { useInfiniteQuery, useQuery, useQueryClient } from "@tanstack/react-query"; -import { useDebounce } from "use-debounce"; import { useUserSessionControls } from "../lib/context"; const log = getLog("worspaces"); @@ -89,7 +88,7 @@ const WorkspacesList = () => { defaultValue: "", skipHistory: true, }); - const [debouncedSearch] = useDebounce(searchQuery, 500); + const debouncedSearch = useDebouncedValue(searchQuery, 500); const searchInputRef = useRef(null); const loadMoreRef = useRef(null);