From 82a2a87b33dcfeaedbff8c120c6bb17dd8df1b24 Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Fri, 10 Oct 2025 22:00:48 +0530 Subject: [PATCH 01/25] Add initial Language Server Protocol (LSP) integration --- package-lock.json | 68 +++++- package.json | 6 +- src/cm/lsp/clientManager.js | 367 +++++++++++++++++++++++++++++ src/cm/lsp/diagnostics.js | 138 +++++++++++ src/cm/lsp/formatter.js | 52 +++++ src/cm/lsp/index.js | 9 + src/cm/lsp/serverLauncher.js | 304 ++++++++++++++++++++++++ src/cm/lsp/serverRegistry.js | 438 +++++++++++++++++++++++++++++++++++ src/cm/lsp/transport.js | 151 ++++++++++++ src/cm/lsp/workspace.js | 118 ++++++++++ src/lib/acode.js | 21 ++ src/lib/editorManager.js | 281 +++++++++++++++++++++- src/lib/settings.js | 3 + src/settings/lspSettings.js | 59 +++++ src/settings/mainSettings.js | 9 + webpack.config.js | 8 +- 16 files changed, 2022 insertions(+), 10 deletions(-) create mode 100644 src/cm/lsp/clientManager.js create mode 100644 src/cm/lsp/diagnostics.js create mode 100644 src/cm/lsp/formatter.js create mode 100644 src/cm/lsp/index.js create mode 100644 src/cm/lsp/serverLauncher.js create mode 100644 src/cm/lsp/serverRegistry.js create mode 100644 src/cm/lsp/transport.js create mode 100644 src/cm/lsp/workspace.js create mode 100644 src/settings/lspSettings.js diff --git a/package-lock.json b/package-lock.json index 3c6d0c684..fa43d1e55 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,6 +29,8 @@ "@codemirror/language": "^6.11.3", "@codemirror/language-data": "^6.5.1", "@codemirror/legacy-modes": "^6.5.1", + "@codemirror/lint": "^6.9.0", + "@codemirror/lsp-client": "^6.1.2", "@codemirror/search": "^6.5.11", "@codemirror/state": "^6.5.2", "@codemirror/theme-one-dark": "^6.1.3", @@ -81,6 +83,7 @@ "@types/url-parse": "^1.4.11", "autoprefixer": "^10.4.21", "babel-loader": "^10.0.0", + "com.foxdebug.acode.rk.exec.proot": "file:src/plugins/proot", "com.foxdebug.acode.rk.exec.terminal": "file:src/plugins/terminal", "cordova-android": "^14.0.1", "cordova-clipboard": "^1.3.0", @@ -2235,9 +2238,9 @@ } }, "node_modules/@codemirror/lint": { - "version": "6.8.5", - "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.8.5.tgz", - "integrity": "sha512-s3n3KisH7dx3vsoeGMxsbRAgKe4O1vbrnKBClm99PU0fWxmxsx5rR2PfqQgIt+2MMJBHbiJ5rfIdLYfB9NNvsA==", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.9.0.tgz", + "integrity": "sha512-wZxW+9XDytH3SKvS8cQzMyQCaaazH8XL1EMHleHe00wVzsv7NBQKVW2yzEHrRhmM7ZOhVdItPbvlRBvMp9ej7A==", "license": "MIT", "dependencies": { "@codemirror/state": "^6.0.0", @@ -2245,6 +2248,22 @@ "crelt": "^1.0.5" } }, + "node_modules/@codemirror/lsp-client": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@codemirror/lsp-client/-/lsp-client-6.1.2.tgz", + "integrity": "sha512-ZmrIGhXJq7QXKy9er2enVZ9aSjDx9N9x/AByTsLYpoM01VBeo4MN9JvwjyiG7m36TFUHkHO/qY/hN8AvDjU7UQ==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.18.6", + "@codemirror/language": "^6.11.0", + "@codemirror/lint": "^6.8.5", + "@codemirror/state": "^6.5.2", + "@codemirror/view": "^6.37.0", + "@lezer/highlight": "^1.2.1", + "marked": "^15.0.12", + "vscode-languageserver-protocol": "^3.17.5" + } + }, "node_modules/@codemirror/search": { "version": "6.5.11", "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.11.tgz", @@ -5006,6 +5025,10 @@ "dev": true, "license": "MIT" }, + "node_modules/com.foxdebug.acode.rk.exec.proot": { + "resolved": "src/plugins/proot", + "link": true + }, "node_modules/com.foxdebug.acode.rk.exec.terminal": { "resolved": "src/plugins/terminal", "link": true @@ -8238,6 +8261,18 @@ "integrity": "sha512-TxFAc76Jnhb2OUu+n3yz9RMu4CwGfaT788br6HhEDlvWfdeJcLUsxk1Hgw2yJio0OXsxv7pyIPmvECY7bMbluA==", "license": "ISC" }, + "node_modules/marked": { + "version": "15.0.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", + "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/md5-file": { "version": "5.0.0", "license": "MIT", @@ -11339,6 +11374,31 @@ "version": "1.0.2", "license": "MIT" }, + "node_modules/vscode-jsonrpc": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", + "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", + "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", + "license": "MIT", + "dependencies": { + "vscode-jsonrpc": "8.2.0", + "vscode-languageserver-types": "3.17.5" + } + }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", + "license": "MIT" + }, "node_modules/w3c-keyname": { "version": "2.2.8", "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", @@ -11908,7 +11968,7 @@ "src/plugins/proot": { "name": "com.foxdebug.acode.rk.exec.proot", "version": "1.0.0", - "extraneous": true, + "dev": true, "license": "MIT" }, "src/plugins/sdcard": { diff --git a/package.json b/package.json index f44e2fbd3..f2a10edf6 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,8 @@ "cordova-plugin-browser": {}, "cordova-plugin-sftp": {}, "cordova-plugin-system": {}, - "com.foxdebug.acode.rk.exec.terminal": {} + "com.foxdebug.acode.rk.exec.terminal": {}, + "com.foxdebug.acode.rk.exec.proot": {} }, "platforms": [ "android" @@ -62,6 +63,7 @@ "@types/url-parse": "^1.4.11", "autoprefixer": "^10.4.21", "babel-loader": "^10.0.0", + "com.foxdebug.acode.rk.exec.proot": "file:src/plugins/proot", "com.foxdebug.acode.rk.exec.terminal": "file:src/plugins/terminal", "cordova-android": "^14.0.1", "cordova-clipboard": "^1.3.0", @@ -112,6 +114,8 @@ "@codemirror/language": "^6.11.3", "@codemirror/language-data": "^6.5.1", "@codemirror/legacy-modes": "^6.5.1", + "@codemirror/lint": "^6.9.0", + "@codemirror/lsp-client": "^6.1.2", "@codemirror/search": "^6.5.11", "@codemirror/state": "^6.5.2", "@codemirror/theme-one-dark": "^6.1.3", diff --git a/src/cm/lsp/clientManager.js b/src/cm/lsp/clientManager.js new file mode 100644 index 000000000..9472e9cff --- /dev/null +++ b/src/cm/lsp/clientManager.js @@ -0,0 +1,367 @@ +import { + LSPClient, + LSPPlugin, + languageServerExtensions, +} from "@codemirror/lsp-client"; +import { MapMode } from "@codemirror/state"; +import { ensureServerRunning } from "./serverLauncher"; +import serverRegistry from "./serverRegistry"; +import { createTransport } from "./transport"; +import AcodeWorkspace from "./workspace"; + +function asArray(value) { + if (!value) return []; + return Array.isArray(value) ? value : [value]; +} + +function pluginKey(serverId, rootUri) { + return `${serverId}::${rootUri || "__global__"}`; +} + +function safeString(value) { + return value != null ? String(value) : ""; +} + +export class LspClientManager { + constructor(options = {}) { + this.options = { ...options }; + this.#clients = new Map(); + } + + #clients; + + setOptions(next) { + this.options = { ...this.options, ...next }; + } + + getActiveClients() { + return Array.from(this.#clients.values()); + } + + async getExtensionsForFile(metadata) { + const { uri, languageId, languageName, view, file, rootUri } = metadata; + + const effectiveLang = safeString(languageId || languageName).toLowerCase(); + if (!effectiveLang) return []; + + const servers = serverRegistry.getServersForLanguage(effectiveLang); + if (!servers.length) return []; + + const lspExtensions = []; + + for (const server of servers) { + let targetLanguageId = effectiveLang; + if (server.resolveLanguageId) { + try { + const resolved = server.resolveLanguageId({ + languageId: effectiveLang, + languageName, + uri, + file, + }); + if (resolved) targetLanguageId = safeString(resolved); + } catch (error) { + console.warn( + `LSP server ${server.id} failed to resolve language id for ${uri}`, + error, + ); + } + } + + try { + const clientState = await this.#ensureClient(server, { + uri, + file, + view, + languageId: targetLanguageId, + rootUri, + }); + const plugin = clientState.client.plugin(uri, targetLanguageId); + clientState.attach(uri, view); + lspExtensions.push(plugin); + } catch (error) { + if (error?.code === "LSP_SERVER_UNAVAILABLE") { + console.info( + `Skipping LSP client for ${server.id}: ${error.message}`, + ); + continue; + } + console.error( + `Failed to initialize LSP client for ${server.id}`, + error, + ); + } + } + + return lspExtensions; + } + + async formatDocument(metadata, options = {}) { + const { uri, languageId, languageName, view, file } = metadata; + const effectiveLang = safeString(languageId || languageName).toLowerCase(); + if (!effectiveLang || !view) return false; + const servers = serverRegistry.getServersForLanguage(effectiveLang); + if (!servers.length) return false; + + for (const server of servers) { + try { + const context = { + uri, + languageId: effectiveLang, + languageName, + view, + file, + rootUri: metadata.rootUri, + }; + const state = await this.#ensureClient(server, context); + const capabilities = state.client.serverCapabilities; + if (!capabilities?.documentFormattingProvider) continue; + const plugin = LSPPlugin.get(view); + if (!plugin) continue; + plugin.client.sync(); + const edits = await state.client.request("textDocument/formatting", { + textDocument: { uri }, + options, + }); + if (!edits || !edits.length) continue; + const applied = applyTextEdits(plugin, view, edits); + if (applied) { + plugin.client.sync(); + return true; + } + } catch (error) { + console.error(`LSP formatting failed for ${server.id}`, error); + } + } + return false; + } + + detach(uri, view) { + for (const state of this.#clients.values()) { + state.detach(uri, view); + } + } + + async dispose() { + const disposeOps = []; + for (const [key, state] of this.#clients.entries()) { + disposeOps.push(state.dispose?.()); + this.#clients.delete(key); + } + await Promise.allSettled(disposeOps); + } + + async #ensureClient(server, context) { + const rootUri = await this.#resolveRootUri(server, context); + const key = pluginKey(server.id, rootUri); + if (this.#clients.has(key)) { + return this.#clients.get(key); + } + + const workspaceOptions = { + displayFile: this.options.displayFile, + }; + + const clientConfig = { ...(server.clientConfig || {}) }; + + const extraExtensions = asArray(this.options.clientExtensions); + const serverExtensions = asArray(clientConfig.extensions); + const mergedExtensions = [ + ...languageServerExtensions(), + ...extraExtensions, + ...serverExtensions, + ]; + clientConfig.extensions = mergedExtensions; + + const existingHandlers = clientConfig.notificationHandlers || {}; + clientConfig.notificationHandlers = { + ...existingHandlers, + "window/logMessage": (_client, params) => { + if (!params?.message) return false; + const { type, message } = params; + let level = "info"; + switch (type) { + case 1: + level = "error"; + break; + case 2: + level = "warn"; + break; + case 4: + level = "log"; + break; + default: + level = "info"; + } + (console[level] || console.info)(`[LSP:${server.id}] ${message}`); + return true; + }, + "window/showMessage": (_client, params) => { + if (!params?.message) return false; + console.info(`[LSP:${server.id}] ${params.message}`); + return true; + }, + }; + + if (!clientConfig.workspace) { + clientConfig.workspace = (client) => + new AcodeWorkspace(client, workspaceOptions); + } + + if (rootUri && !clientConfig.rootUri) { + clientConfig.rootUri = rootUri; + } + + if (server.startupTimeout && !clientConfig.timeout) { + clientConfig.timeout = server.startupTimeout; + } + + let transportHandle; + let client; + + try { + await ensureServerRunning(server); + transportHandle = createTransport(server, { + ...context, + rootUri, + }); + await transportHandle.ready; + client = new LSPClient(clientConfig); + client.connect(transportHandle.transport); + await client.initializing; + if (!client.__acodeLoggedInfo) { + const info = client.serverInfo; + if (info) { + console.info(`[LSP:${server.id}] server info`, info); + } + if (rootUri) { + console.info(`[LSP:${server.id}] root`, rootUri); + } + client.__acodeLoggedInfo = true; + } + } catch (error) { + transportHandle?.dispose?.(); + throw error; + } + + const state = this.#createClientState({ + key, + server, + client, + transportHandle, + rootUri, + }); + + this.#clients.set(key, state); + return state; + } + + #createClientState({ key, server, client, transportHandle, rootUri }) { + const fileRefs = new Map(); + + const attach = (uri, view) => { + const existing = fileRefs.get(uri) || new Set(); + existing.add(view); + fileRefs.set(uri, existing); + const suffix = rootUri ? ` (root ${rootUri})` : ""; + console.info(`[LSP:${server.id}] attached to ${uri}${suffix}`); + }; + + const detach = (uri, view) => { + const existing = fileRefs.get(uri); + if (!existing) return; + if (view) existing.delete(view); + if (!view || !existing.size) { + fileRefs.delete(uri); + try { + client.workspace?.closeFile?.(uri, view); + } catch (error) { + console.warn(`Failed to close LSP file ${uri}`, error); + } + } + + if (!fileRefs.size) { + this.options.onClientIdle?.({ server, client, rootUri }); + } + }; + + const dispose = async () => { + try { + client.disconnect(); + } catch (error) { + console.warn(`Error disconnecting LSP client ${server.id}`, error); + } + try { + await transportHandle.dispose?.(); + } catch (error) { + console.warn(`Error disposing LSP transport ${server.id}`, error); + } + this.#clients.delete(key); + }; + + return { + server, + client, + transport: transportHandle, + rootUri, + attach, + detach, + dispose, + }; + } + + async #resolveRootUri(server, context) { + if (context?.rootUri) return context.rootUri; + + if (typeof server.rootUri === "function") { + try { + const value = await server.rootUri(context?.uri, context); + if (value) return safeString(value); + } catch (error) { + console.warn(`Server root resolver failed for ${server.id}`, error); + } + } + + if (typeof this.options.resolveRoot === "function") { + try { + const value = await this.options.resolveRoot(context); + if (value) return safeString(value); + } catch (error) { + console.warn("Global LSP root resolver failed", error); + } + } + + return null; + } +} + +function applyTextEdits(plugin, view, edits) { + const changes = []; + for (const edit of edits) { + if (!edit?.range) continue; + let fromBase; + let toBase; + try { + fromBase = plugin.fromPosition(edit.range.start, plugin.syncedDoc); + toBase = plugin.fromPosition(edit.range.end, plugin.syncedDoc); + } catch (_) { + continue; + } + const from = plugin.unsyncedChanges.mapPos(fromBase, 1, MapMode.TrackDel); + const to = plugin.unsyncedChanges.mapPos(toBase, -1, MapMode.TrackDel); + if (from == null || to == null) continue; + const insert = + typeof edit.newText === "string" + ? edit.newText.replace(/\r\n/g, "\n") + : ""; + changes.push({ from, to, insert }); + } + if (!changes.length) return false; + changes.sort((a, b) => a.from - b.from || a.to - b.to); + view.dispatch({ changes }); + return true; +} + +const defaultManager = new LspClientManager(); + +export default defaultManager; diff --git a/src/cm/lsp/diagnostics.js b/src/cm/lsp/diagnostics.js new file mode 100644 index 000000000..eb9e834f7 --- /dev/null +++ b/src/cm/lsp/diagnostics.js @@ -0,0 +1,138 @@ +import { forceLinting, linter, lintGutter } from "@codemirror/lint"; +import { LSPPlugin } from "@codemirror/lsp-client"; +import { MapMode, StateEffect, StateField } from "@codemirror/state"; + +const setPublishedDiagnostics = StateEffect.define(); + +const lspPublishedDiagnostics = StateField.define({ + create() { + return []; + }, + update(value, tr) { + for (const effect of tr.effects) { + if (effect.is(setPublishedDiagnostics)) { + value = effect.value; + } + } + return value; + }, +}); + +const severities = ["hint", "error", "warning", "info", "hint"]; + +function storeLspDiagnostics(plugin, diagnostics) { + const items = []; + const { syncedDoc } = plugin; + + for (const diagnostic of diagnostics) { + let from; + let to; + try { + const mappedFrom = plugin.fromPosition( + diagnostic.range.start, + plugin.syncedDoc, + ); + const mappedTo = plugin.fromPosition( + diagnostic.range.end, + plugin.syncedDoc, + ); + from = plugin.unsyncedChanges.mapPos(mappedFrom); + to = plugin.unsyncedChanges.mapPos(mappedTo); + } catch (_) { + continue; + } + if (to > syncedDoc.length) continue; + + const severity = severities[diagnostic.severity ?? 0] || "info"; + const source = diagnostic.code + ? `${diagnostic.source ? `${diagnostic.source}-` : ""}${diagnostic.code}` + : undefined; + + items.push({ + from, + to, + severity, + message: diagnostic.message, + source, + }); + } + + return setPublishedDiagnostics.of(items); +} + +function mapDiagnostics(plugin, state) { + plugin.client.sync(); + const stored = state.field(lspPublishedDiagnostics); + const changes = plugin.unsyncedChanges; + const mapped = []; + + for (const diagnostic of stored) { + const from = changes.mapPos(diagnostic.from, 1, MapMode.TrackDel); + const to = changes.mapPos(diagnostic.to, -1, MapMode.TrackDel); + if (from != null && to != null) { + mapped.push({ ...diagnostic, from, to }); + } + } + + return mapped; +} + +function lspLinterSource(view) { + const plugin = LSPPlugin.get(view); + if (!plugin) return []; + return mapDiagnostics(plugin, view.state); +} + +export function lspDiagnosticsExtension() { + return { + clientCapabilities: { + textDocument: { + publishDiagnostics: { + relatedInformation: true, + codeDescriptionSupport: true, + dataSupport: true, + versionSupport: true, + }, + }, + }, + notificationHandlers: { + "textDocument/publishDiagnostics": (client, params) => { + const file = client.workspace.getFile(params.uri); + if ( + !file || + (params.version != null && params.version !== file.version) + ) { + return false; + } + const view = file.getView(); + if (!view) return false; + const plugin = LSPPlugin.get(view); + if (!plugin) return false; + + view.dispatch({ + effects: storeLspDiagnostics(plugin, params.diagnostics), + }); + forceLinting(view); + return true; + }, + }, + editorExtension: [ + lspPublishedDiagnostics, + lintGutter(), + linter(lspLinterSource, { + needsRefresh(update) { + return update.transactions.some((tr) => + tr.effects.some((effect) => effect.is(setPublishedDiagnostics)), + ); + }, + autoPanel: true, + }), + ], + }; +} + +export default lspDiagnosticsExtension; + +export function clearDiagnosticsEffect() { + return setPublishedDiagnostics.of([]); +} diff --git a/src/cm/lsp/formatter.js b/src/cm/lsp/formatter.js new file mode 100644 index 000000000..e71ba9c3f --- /dev/null +++ b/src/cm/lsp/formatter.js @@ -0,0 +1,52 @@ +import toast from "components/toast"; +import lspClientManager from "./clientManager"; +import serverRegistry from "./serverRegistry"; + +function getActiveMetadata(manager, file) { + if (!manager?.getLspMetadata || !file) return null; + const metadata = manager.getLspMetadata(file); + if (!metadata) return null; + metadata.view = manager.editor; + return metadata; +} + +export function registerLspFormatter(acode) { + const languages = new Set(); + serverRegistry.listServers().forEach((server) => { + (server.languages || []).forEach((lang) => { + if (lang) languages.add(String(lang)); + }); + }); + const extensions = languages.size ? Array.from(languages) : ["*"]; + + acode.registerFormatter( + "lsp", + extensions, + async () => { + const manager = window.editorManager; + const file = manager?.activeFile; + const metadata = getActiveMetadata(manager, file); + if (!metadata) { + toast("LSP formatter unavailable"); + return false; + } + const languageId = metadata.languageId; + if (!languageId) { + toast("Unknown language for LSP formatting"); + return false; + } + const servers = serverRegistry.getServersForLanguage(languageId); + if (!servers.length) { + toast("No LSP formatter available"); + return false; + } + metadata.languageName = metadata.languageName || languageId; + const success = await lspClientManager.formatDocument(metadata); + if (!success) { + toast("LSP formatter failed"); + } + return success; + }, + "Language Server", + ); +} diff --git a/src/cm/lsp/index.js b/src/cm/lsp/index.js new file mode 100644 index 000000000..90225a191 --- /dev/null +++ b/src/cm/lsp/index.js @@ -0,0 +1,9 @@ +export { default as clientManager, LspClientManager } from "./clientManager"; +export { + ensureServerRunning, + resetManagedServers, + stopManagedServer, +} from "./serverLauncher"; +export { default as serverRegistry } from "./serverRegistry"; +export { createTransport } from "./transport"; +export { default as AcodeWorkspace } from "./workspace"; diff --git a/src/cm/lsp/serverLauncher.js b/src/cm/lsp/serverLauncher.js new file mode 100644 index 000000000..f7fcfcbad --- /dev/null +++ b/src/cm/lsp/serverLauncher.js @@ -0,0 +1,304 @@ +import toast from "components/toast"; +import confirm from "dialogs/confirm"; +import loader from "dialogs/loader"; + +const managedServers = new Map(); +const checkedCommands = new Map(); +const announcedServers = new Set(); + +const STATUS_PRESENT = "present"; +const STATUS_DECLINED = "declined"; +const STATUS_FAILED = "failed"; + +const AXS_BINARY = "$PREFIX/new_axs"; + +function getExecutor() { + const executor = globalThis.Executor; + if (!executor) { + throw new Error("Executor plugin is not available"); + } + return executor; +} + +function joinCommand(command, args = []) { + if (!Array.isArray(args)) return command; + return [command, ...args].join(" "); +} + +function wrapShellCommand(command) { + const script = command.trim(); + const escaped = script.replace(/"/g, '\\"'); + return `sh -lc "set -e; ${escaped}"`; +} + +async function runCommand(command) { + const wrapped = wrapShellCommand(command); + return getExecutor().execute(wrapped, true); +} + +function quoteArg(value) { + const str = String(value ?? ""); + if (!str.length) return "''"; + if (/^[A-Za-z0-9_@%+=:,./-]+$/.test(str)) return str; + return `'${str.replace(/'/g, "'\\''")}'`; +} + +function buildAxsBridgeCommand(bridge) { + if (!bridge || bridge.kind !== "axs") return null; + const port = Number(bridge.port); + if (!Number.isInteger(port) || port <= 0 || port > 65535) { + throw new Error( + `Bridge requires a valid TCP port (received ${bridge.port})`, + ); + } + const binary = bridge.command + ? String(bridge.command) + : (() => { + throw new Error("Bridge requires a command to execute"); + })(); + const args = Array.isArray(bridge.args) + ? bridge.args.map((arg) => String(arg)) + : []; + + const parts = [AXS_BINARY, "--port", String(port), "lsp", quoteArg(binary)]; + if (args.length) { + parts.push("--"); + args.forEach((arg) => parts.push(quoteArg(arg))); + } + return parts.join(" "); +} + +function resolveStartCommand(server) { + const launcher = server.launcher || {}; + if (launcher.startCommand) { + return Array.isArray(launcher.startCommand) + ? launcher.startCommand.join(" ") + : String(launcher.startCommand); + } + if (launcher.command) { + return joinCommand(launcher.command, launcher.args); + } + if (launcher.bridge) { + return buildAxsBridgeCommand(launcher.bridge); + } + return null; +} + +async function ensureInstalled(server) { + const launcher = server.launcher; + if (!launcher?.checkCommand) return true; + + const cacheKey = `${server.id}:${launcher.checkCommand}`; + if (checkedCommands.has(cacheKey)) { + return checkedCommands.get(cacheKey) === STATUS_PRESENT; + } + + try { + await runCommand(launcher.checkCommand); + checkedCommands.set(cacheKey, STATUS_PRESENT); + return true; + } catch (error) { + if (!launcher.install) { + checkedCommands.set(cacheKey, STATUS_FAILED); + console.warn( + `LSP server ${server.id} is missing check command result and has no installer.`, + error, + ); + throw error; + } + + const install = launcher.install; + const shouldInstall = await confirm( + server.label, + install.prompt || strings?.confirm || "Install language server?", + ); + + if (!shouldInstall) { + checkedCommands.set(cacheKey, STATUS_DECLINED); + return false; + } + + let loadingDialog; + try { + loadingDialog = loader.create( + server.label, + `Installing ${server.label}...`, + ); + loadingDialog.show(); + await runCommand(install.command); + toast(`${server.label} installed`); + checkedCommands.set(cacheKey, STATUS_PRESENT); + return true; + } catch (installError) { + console.error(`Failed to install ${server.id}`, installError); + toast(strings?.error || "Error"); + checkedCommands.set(cacheKey, STATUS_FAILED); + throw installError; + } finally { + loadingDialog?.destroy?.(); + } + } +} + +async function startInteractiveServer(command, serverId) { + const executor = getExecutor(); + const uuid = await executor.start( + command, + (type, data) => { + if (type === "stderr") { + if (/proot warning/i.test(data)) return; + console.warn(`[${serverId}] ${data}`); + } else if (type === "stdout" && data && data.trim()) { + console.info(`[${serverId}] ${data}`); + } + }, + true, + ); + managedServers.set(serverId, { + uuid, + command, + startedAt: Date.now(), + }); + return uuid; +} + +function sleep(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +async function waitForWebSocket( + url, + { attempts = 20, delay = 200, probeTimeout = 2000 } = {}, +) { + let lastError = null; + for (let i = 0; i < attempts; i++) { + try { + await new Promise((resolve, reject) => { + let socket; + let timer; + try { + socket = new WebSocket(url); + } catch (error) { + reject(error); + return; + } + + const cleanup = (cb) => { + if (timer) clearTimeout(timer); + if (socket) { + socket.onopen = socket.onerror = null; + try { + socket.close(); + } catch (_) {} + } + cb && cb(); + }; + + socket.onopen = () => cleanup(resolve); + socket.onerror = (event) => + cleanup(() => + reject( + event instanceof Error ? event : new Error("websocket error"), + ), + ); + timer = setTimeout( + () => cleanup(() => reject(new Error("timeout"))), + probeTimeout, + ); + }); + return; + } catch (error) { + lastError = error; + await sleep(delay); + } + } + const reason = lastError + ? lastError.message || lastError.type || String(lastError) + : "unknown"; + throw new Error(`WebSocket ${url} did not become ready (${reason})`); +} + +export async function ensureServerRunning(server) { + const launcher = server.launcher; + if (!launcher) return; + + const installed = await ensureInstalled(server); + if (!installed) { + const unavailable = new Error( + `Language server ${server.id} is not available.`, + ); + unavailable.code = "LSP_SERVER_UNAVAILABLE"; + throw unavailable; + } + + const key = server.id; + if (managedServers.has(key)) { + const existing = managedServers.get(key); + return existing?.uuid || null; + } + + const command = await resolveStartCommand(server); + if (!command) { + return null; + } + + try { + const uuid = await startInteractiveServer(command, key); + if ( + server.transport?.url && + (server.transport.kind === "websocket" || + server.transport.kind === "stdio") + ) { + await waitForWebSocket(server.transport.url); + } + if (!announcedServers.has(key)) { + toast( + strings?.lsp_connected?.replace("{{label}}", server.label) || + `${server.label} connected`, + ); + announcedServers.add(key); + } + return uuid; + } catch (error) { + console.error(`Failed to start language server ${server.id}`, error); + toast( + `${server.label} failed to connect${error?.message ? `: ${error.message}` : ""}`, + ); + const entry = managedServers.get(key); + if (entry) { + getExecutor() + .stop(entry.uuid) + .catch((err) => { + console.warn( + `Failed to stop language server shell ${server.id}`, + err, + ); + }); + managedServers.delete(key); + } + const unavailable = new Error( + `Language server ${server.id} failed to start (${error?.message || error})`, + ); + unavailable.code = "LSP_SERVER_UNAVAILABLE"; + throw unavailable; + } +} + +export function stopManagedServer(serverId) { + const entry = managedServers.get(serverId); + if (!entry) return; + getExecutor() + .stop(entry.uuid) + .catch((error) => { + console.warn(`Failed to stop language server ${serverId}`, error); + }); + managedServers.delete(serverId); + announcedServers.delete(serverId); +} + +export function resetManagedServers() { + for (const id of Array.from(managedServers.keys())) { + stopManagedServer(id); + } + managedServers.clear(); +} diff --git a/src/cm/lsp/serverRegistry.js b/src/cm/lsp/serverRegistry.js new file mode 100644 index 000000000..c66ee05b8 --- /dev/null +++ b/src/cm/lsp/serverRegistry.js @@ -0,0 +1,438 @@ +/** + * @typedef {Object} LspTransportDescriptor + * @property {"stdio"|"websocket"|"external"} kind + * @property {string} [command] + * @property {string[]} [args] + * @property {Record} [options] + * @property {string} [url] + */ + +/** + * @typedef {Object} LspServerDefinition + * @property {string} id + * @property {string} label + * @property {boolean} [enabled] + * @property {string[]} languages + * @property {LspTransportDescriptor} transport + * @property {Record} [initializationOptions] + * @property {Record} [clientConfig] + * @property {number} [startupTimeout] + * @property {Record} [capabilityOverrides] + * @property {(uri: string, context: any) => string | null} [rootUri] + * @property {(metadata: any) => string | null} [resolveLanguageId] + */ + +const registry = new Map(); +const listeners = new Set(); + +function toKey(id) { + return String(id || "") + .trim() + .toLowerCase(); +} + +function clone(value) { + if (!value || typeof value !== "object") return undefined; + try { + return JSON.parse(JSON.stringify(value)); + } catch (_) { + return value; + } +} + +function sanitizeLanguages(languages = []) { + if (!Array.isArray(languages)) return []; + return languages + .map((lang) => + String(lang || "") + .trim() + .toLowerCase(), + ) + .filter(Boolean); +} + +function parsePort(value) { + const num = Number(value); + if (!Number.isFinite(num)) return null; + const int = Math.floor(num); + if (int !== num || int <= 0 || int > 65535) return null; + return int; +} + +function sanitizeBridge(serverId, bridge) { + if (!bridge || typeof bridge !== "object") return undefined; + const kind = bridge.kind || "axs"; + if (kind !== "axs") { + throw new Error( + `LSP server ${serverId} declares unsupported bridge kind ${kind}`, + ); + } + const port = parsePort(bridge.port); + if (!port) { + throw new Error(`LSP server ${serverId} bridge requires a valid port`); + } + const command = bridge.command ? String(bridge.command) : null; + if (!command) { + throw new Error(`LSP server ${serverId} bridge must supply a command`); + } + const args = Array.isArray(bridge.args) + ? bridge.args.map((arg) => String(arg)) + : undefined; + return { + kind, + port, + command, + args, + }; +} + +function sanitizeDefinition(definition) { + if (!definition || typeof definition !== "object") { + throw new TypeError("LSP server definition must be an object"); + } + + const id = toKey(definition.id); + if (!id) throw new Error("LSP server definition requires a non-empty id"); + + const transport = definition.transport || {}; + const kind = transport.kind || "stdio"; + + if (!transport || typeof transport !== "object") { + throw new Error(`LSP server ${id} is missing a transport descriptor`); + } + + if ( + !("languages" in definition) || + !sanitizeLanguages(definition.languages).length + ) { + throw new Error(`LSP server ${id} must declare supported languages`); + } + + if (kind === "stdio" && !transport.command) { + throw new Error(`LSP server ${id} (stdio) requires a command`); + } + + if (kind === "websocket" && !transport.url) { + throw new Error(`LSP server ${id} (websocket) requires a url`); + } + + const transportOptions = + transport.options && typeof transport.options === "object" + ? { ...transport.options } + : {}; + + const sanitized = { + id, + label: definition.label || id, + enabled: definition.enabled !== false, + languages: sanitizeLanguages(definition.languages), + transport: { + kind, + command: transport.command, + args: Array.isArray(transport.args) + ? transport.args.map((arg) => String(arg)) + : undefined, + options: transportOptions, + url: transport.url, + protocols: undefined, + }, + initializationOptions: clone(definition.initializationOptions), + clientConfig: clone(definition.clientConfig), + startupTimeout: + typeof definition.startupTimeout === "number" + ? definition.startupTimeout + : undefined, + capabilityOverrides: clone(definition.capabilityOverrides), + rootUri: + typeof definition.rootUri === "function" ? definition.rootUri : null, + resolveLanguageId: + typeof definition.resolveLanguageId === "function" + ? definition.resolveLanguageId + : null, + launcher: + definition.launcher && typeof definition.launcher === "object" + ? { + command: definition.launcher.command, + args: Array.isArray(definition.launcher.args) + ? definition.launcher.args.map((arg) => String(arg)) + : undefined, + startCommand: Array.isArray(definition.launcher.startCommand) + ? definition.launcher.startCommand.map((arg) => String(arg)) + : definition.launcher.startCommand, + checkCommand: definition.launcher.checkCommand, + install: + definition.launcher.install && + typeof definition.launcher.install === "object" + ? { + command: definition.launcher.install.command, + prompt: definition.launcher.install.prompt, + } + : undefined, + bridge: sanitizeBridge(id, definition.launcher.bridge), + } + : undefined, + }; + + if (!Object.keys(transportOptions).length) { + sanitized.transport.options = undefined; + } + + return sanitized; +} + +function notify(event, payload) { + listeners.forEach((fn) => { + try { + fn(event, payload); + } catch (error) { + console.error("LSP server registry listener failed", error); + } + }); +} + +export function registerServer(definition, { replace = false } = {}) { + const normalized = sanitizeDefinition(definition); + const exists = registry.has(normalized.id); + if (exists && !replace) return registry.get(normalized.id); + + registry.set(normalized.id, normalized); + notify("register", normalized); + return normalized; +} + +export function unregisterServer(id) { + const key = toKey(id); + if (!key || !registry.has(key)) return false; + const existing = registry.get(key); + registry.delete(key); + notify("unregister", existing); + return true; +} + +export function updateServer(id, updater) { + const key = toKey(id); + if (!key || !registry.has(key)) return null; + const current = registry.get(key); + const next = updater({ ...current }); + if (!next) return current; + const normalized = sanitizeDefinition({ + ...current, + ...next, + id: current.id, + }); + registry.set(key, normalized); + notify("update", normalized); + return normalized; +} + +export function getServer(id) { + return registry.get(toKey(id)) || null; +} + +export function listServers() { + return Array.from(registry.values()); +} + +export function getServersForLanguage( + languageId, + { includeDisabled = false } = {}, +) { + const langKey = toKey(languageId); + if (!langKey) return []; + + return listServers().filter((server) => { + if (!includeDisabled && !server.enabled) return false; + return server.languages.includes(langKey); + }); +} + +export function onRegistryChange(listener) { + if (typeof listener !== "function") return () => {}; + listeners.add(listener); + return () => listeners.delete(listener); +} + +function registerBuiltinServers() { + const defaults = [ + { + id: "typescript", + label: "TypeScript / JavaScript", + languages: [ + "javascript", + "javascriptreact", + "typescript", + "typescriptreact", + "tsx", + "jsx", + ], + transport: { + kind: "websocket", + url: "ws://127.0.0.1:2090", + }, + launcher: { + bridge: { + kind: "axs", + port: 2090, + command: "typescript-language-server", + args: ["--stdio"], + }, + checkCommand: + 'if [ -x "$PREFIX/new_axs" ]; then which typescript-language-server; else exit 1; fi', + install: { + command: + "apk add --no-cache nodejs npm && npm install -g typescript-language-server typescript", + prompt: "Install TypeScript language server dependencies?", + }, + }, + enabled: false, + }, + { + id: "python", + label: "Python (pylsp)", + languages: ["python"], + transport: { + kind: "websocket", + url: "ws://127.0.0.1:2087", + }, + launcher: { + command: "pylsp", + args: ["--ws", "--host", "127.0.0.1", "--port", "2087"], + checkCommand: "which pylsp", + install: { + command: + "apk update && apk upgrade && apk add python3 py3-pip && PIP_BREAK_SYSTEM_PACKAGES=1 pip install 'python-lsp-server[websockets,all]'", + prompt: "python-lsp-server is not installed. Install it now?", + }, + }, + initializationOptions: { + pylsp: { + plugins: { + pyflakes: { enabled: true }, + pycodestyle: { enabled: true }, + mccabe: { enabled: true }, + }, + }, + }, + enabled: false, + }, + { + id: "html", + label: "HTML", + languages: ["html", "vue", "svelte"], + transport: { + kind: "websocket", + url: "ws://127.0.0.1:2091", + }, + launcher: { + bridge: { + kind: "axs", + port: 2091, + command: "vscode-html-language-server", + args: ["--stdio"], + }, + checkCommand: + 'if [ -x "$PREFIX/new_axs" ]; then which vscode-html-language-server; else exit 1; fi', + install: { + command: + "apk add --no-cache nodejs npm && npm install -g vscode-langservers-extracted", + prompt: "Install HTML language server dependencies?", + }, + }, + enabled: false, + }, + { + id: "css", + label: "CSS", + languages: ["css", "scss", "less"], + transport: { + kind: "websocket", + url: "ws://127.0.0.1:2092", + }, + launcher: { + bridge: { + kind: "axs", + port: 2092, + command: "vscode-css-language-server", + args: ["--stdio"], + }, + checkCommand: + 'if [ -x "$PREFIX/new_axs" ]; then which vscode-css-language-server; else exit 1; fi', + install: { + command: + "apk add --no-cache nodejs npm && npm install -g vscode-langservers-extracted", + prompt: "Install CSS language server dependencies?", + }, + }, + enabled: false, + }, + { + id: "json", + label: "JSON", + languages: ["json", "jsonc"], + transport: { + kind: "websocket", + url: "ws://127.0.0.1:2093", + }, + launcher: { + bridge: { + kind: "axs", + port: 2093, + command: "vscode-json-language-server", + args: ["--stdio"], + }, + checkCommand: + 'if [ -x "$PREFIX/new_axs" ]; then which vscode-json-language-server; else exit 1; fi', + install: { + command: + "apk add --no-cache nodejs npm && npm install -g vscode-langservers-extracted", + prompt: "Install JSON language server dependencies?", + }, + }, + enabled: false, + }, + { + id: "rust-analyzer", + label: "Rust", + languages: ["rust"], + transport: { + kind: "websocket", + url: "ws://127.0.0.1:2094", + }, + launcher: { + bridge: { + kind: "axs", + port: 2094, + command: "rust-analyzer", + args: ["--stdio"], + }, + checkCommand: + 'if [ -x "$PREFIX/new_axs" ]; then which rust-analyzer; else exit 1; fi', + install: { + command: "apk add --no-cache rust-analyzer", + prompt: "Install rust-analyzer language server?", + }, + }, + enabled: false, + }, + ]; + + defaults.forEach((def) => { + try { + registerServer(def, { replace: false }); + } catch (error) { + console.error("Failed to register builtin LSP server", def.id, error); + } + }); +} + +registerBuiltinServers(); + +export default { + registerServer, + unregisterServer, + updateServer, + getServer, + getServersForLanguage, + listServers, + onRegistryChange, +}; diff --git a/src/cm/lsp/transport.js b/src/cm/lsp/transport.js new file mode 100644 index 000000000..bc6e0c2c7 --- /dev/null +++ b/src/cm/lsp/transport.js @@ -0,0 +1,151 @@ +/* + Language servers that expose stdio are proxied through a lightweight + WebSocket bridge so the CodeMirror client can continue to speak WebSocket. +*/ + +/** + * @typedef {Object} TransportHandle + * @property {{ send(message: string): void, subscribe(handler: (value: string) => void): void, unsubscribe(handler: (value: string) => void): void }} transport + * @property {() => Promise | void} dispose + * @property {Promise} ready + */ + +function createWebSocketTransport(server, context) { + const { url, options = {} } = server.transport; + if (!url) { + throw new Error(`WebSocket transport for ${server.id} is missing a url`); + } + + let socket; + try { + // pylsp's websocket endpoint does not require subprotocol negotiation. + // Avoid passing protocols to keep the handshake simple. + socket = new WebSocket(url); + } catch (error) { + throw new Error( + `Failed to construct WebSocket for ${server.id} (${url}): ${error?.message || error}`, + ); + } + const listeners = new Set(); + const binaryMode = !!options.binary; + if (binaryMode) { + socket.binaryType = "arraybuffer"; + } + + const ready = new Promise((resolve, reject) => { + const timeout = setTimeout(() => { + socket.onopen = socket.onerror = null; + try { + socket.close(); + } catch (_) {} + reject(new Error(`Timed out opening WebSocket for ${server.id}`)); + }, 5000); + socket.onopen = () => { + clearTimeout(timeout); + socket.onopen = socket.onerror = null; + resolve(); + }; + socket.onerror = (event) => { + clearTimeout(timeout); + socket.onopen = socket.onerror = null; + const reason = event?.message || event?.type || "connection error"; + reject(new Error(`WebSocket error for ${server.id}: ${reason}`)); + }; + }); + + socket.onmessage = async (event) => { + let data; + if (typeof event.data === "string") { + data = event.data; + } else if (event.data instanceof Blob) { + data = await event.data.text(); + } else if (event.data instanceof ArrayBuffer) { + data = new TextDecoder().decode(event.data); + } else { + console.warn( + "Unknown WebSocket message type", + typeof event.data, + event.data, + ); + data = String(event.data); + } + // Debugging aid while stabilising websocket transport + if (context?.debugWebSocket) { + console.debug(`[LSP:${server.id}] <=`, data); + } + listeners.forEach((listener) => { + try { + listener(data); + } catch (error) { + console.error("LSP transport listener failed", error); + } + }); + }; + + const encoder = binaryMode ? new TextEncoder() : null; + const transport = { + send(message) { + if (socket.readyState !== WebSocket.OPEN) { + throw new Error("WebSocket transport is not open"); + } + if (binaryMode) { + socket.send(encoder.encode(message)); + } else { + socket.send(message); + } + }, + subscribe(handler) { + listeners.add(handler); + }, + unsubscribe(handler) { + listeners.delete(handler); + }, + }; + + const dispose = () => { + listeners.clear(); + if ( + socket.readyState === WebSocket.CLOSED || + socket.readyState === WebSocket.CLOSING + ) { + return; + } + socket.close(1000, "Client disposed"); + }; + + return { transport, dispose, ready }; +} + +function createStdioTransport(server, context) { + if (!server.transport?.url) { + throw new Error( + `STDIO transport for ${server.id} is missing a websocket bridge url`, + ); + } + if (!server.transport?.options?.binary) { + console.info( + `LSP server ${server.id} is using stdio bridge without binary mode. Falling back to text frames.`, + ); + } + return createWebSocketTransport(server, context); +} + +export function createTransport(server, context = {}) { + switch (server.transport.kind) { + case "websocket": + return createWebSocketTransport(server, context); + case "stdio": + return createStdioTransport(server, context); + case "external": + if (typeof server.transport.create === "function") { + return server.transport.create(server, context); + } + throw new Error( + `LSP server ${server.id} declares an external transport without a create() factory`, + ); + default: + throw new Error(`Unsupported transport kind: ${server.transport.kind}`); + } +} + +export default { createTransport }; diff --git a/src/cm/lsp/workspace.js b/src/cm/lsp/workspace.js new file mode 100644 index 000000000..b09969d53 --- /dev/null +++ b/src/cm/lsp/workspace.js @@ -0,0 +1,118 @@ +import { LSPPlugin, Workspace } from "@codemirror/lsp-client"; + +class AcodeWorkspaceFile { + constructor(uri, languageId, version, doc, view) { + this.uri = uri; + this.languageId = languageId; + this.version = version; + this.doc = doc; + this.views = new Set(); + if (view) this.views.add(view); + } + + getView(preferred) { + if (preferred && this.views.has(preferred)) return preferred; + const iterator = this.views.values(); + const next = iterator.next(); + return next.done ? null : next.value; + } +} + +export default class AcodeWorkspace extends Workspace { + constructor(client, options = {}) { + super(client); + this.files = []; + this.#fileMap = new Map(); + this.#versions = Object.create(null); + this.options = options; + } + + #fileMap; + #versions; + + #getOrCreateFile(uri, languageId, view) { + let file = this.#fileMap.get(uri); + if (!file) { + file = new AcodeWorkspaceFile( + uri, + languageId, + this.#nextFileVersion(uri), + view.state?.doc, + view, + ); + this.#fileMap.set(uri, file); + this.files.push(file); + this.client.didOpen(file); + } + file.views.add(view); + return file; + } + + #getFileEntry(uri) { + return this.#fileMap.get(uri) || null; + } + + #removeFileEntry(file) { + this.#fileMap.delete(file.uri); + this.files = this.files.filter((candidate) => candidate !== file); + } + + #nextFileVersion(uri) { + const current = this.#versions[uri] ?? -1; + const next = current + 1; + this.#versions[uri] = next; + return next; + } + + syncFiles() { + const updates = []; + for (const file of this.files) { + const view = file.getView(); + if (!view) continue; + const plugin = LSPPlugin.get(view); + if (!plugin) continue; + const { unsyncedChanges } = plugin; + if (unsyncedChanges.empty) continue; + + updates.push({ file, prevDoc: file.doc, changes: unsyncedChanges }); + file.doc = view.state.doc; + file.version = this.#nextFileVersion(file.uri); + plugin.clear(); + } + return updates; + } + + openFile(uri, languageId, view) { + if (!view) return; + this.#getOrCreateFile(uri, languageId, view); + } + + closeFile(uri, view) { + const file = this.#getFileEntry(uri); + if (!file) return; + + if (view && file.views.has(view)) { + file.views.delete(view); + } + + if (!file.views.size) { + this.client.didClose(uri); + this.#removeFileEntry(file); + } + } + + getFile(uri) { + return this.#getFileEntry(uri); + } + + async displayFile(uri) { + if (typeof this.options.displayFile === "function") { + try { + return await this.options.displayFile(uri); + } catch (error) { + console.error("Failed to display file via workspace", error); + } + } + return null; + } +} diff --git a/src/lib/acode.js b/src/lib/acode.js index ee0cdbba1..1c19d661f 100644 --- a/src/lib/acode.js +++ b/src/lib/acode.js @@ -8,6 +8,9 @@ import { removeExternalCommand, executeCommand as runCommand, } from "cm/commandRegistry"; +import lspClientManager from "cm/lsp/clientManager"; +import { registerLspFormatter } from "cm/lsp/formatter"; +import serverRegistry from "cm/lsp/serverRegistry"; import { addMode, getModeForPath, removeMode } from "cm/modelist"; import cmThemeRegistry from "cm/themes"; import Contextmenu from "components/contextmenu"; @@ -94,6 +97,21 @@ export default class Acode { remove: sidebarApps.remove, }; + const lspModule = { + registerServer: (definition, options) => + serverRegistry.registerServer(definition, options), + unregisterServer: (id) => serverRegistry.unregisterServer(id), + updateServer: (id, updater) => serverRegistry.updateServer(id, updater), + getServer: (id) => serverRegistry.getServer(id), + listServers: () => serverRegistry.listServers(), + getServersForLanguage: (languageId, options) => + serverRegistry.getServersForLanguage(languageId, options), + clientManager: { + setOptions: (options) => lspClientManager.setOptions(options), + getActiveClients: () => lspClientManager.getActiveClients(), + }, + }; + const aceModes = { addMode, removeMode, @@ -157,6 +175,7 @@ export default class Acode { this.define("themes", themesModule); this.define("editorLanguages", editorLanguages); this.define("editorThemes", editorThemesModule); + this.define("lsp", lspModule); this.define("settings", appSettings); this.define("sideButton", SideButton); this.define("EditorFile", EditorFile); @@ -179,6 +198,8 @@ export default class Acode { this.define("createKeyboardEvent", KeyboardEvent); this.define("toInternalUrl", helpers.toInternalUri); this.define("commands", this.#createCommandApi()); + + registerLspFormatter(this); } /** diff --git a/src/lib/editorManager.js b/src/lib/editorManager.js index 84928a89f..66027ddd0 100644 --- a/src/lib/editorManager.js +++ b/src/lib/editorManager.js @@ -33,6 +33,10 @@ import { wrapWithAbbreviation, } from "@emmetio/codemirror6-plugin"; import createBaseExtensions from "cm/baseExtensions"; +import lspClientManager from "cm/lsp/clientManager"; +import lspDiagnosticsExtension from "cm/lsp/diagnostics"; +import { stopManagedServer } from "cm/lsp/serverLauncher"; +import serverRegistry from "cm/lsp/serverRegistry"; // CodeMirror mode management import { getModeForPath, @@ -57,8 +61,11 @@ import ScrollBar from "components/scrollbar"; import SideButton, { sideButtonContainer } from "components/sideButton"; import keyboardHandler, { keydownState } from "handlers/keyboard"; import actions from "handlers/quickTools"; +import Url from "utils/Url"; // TODO: Update EditorFile for CodeMirror compatibility import EditorFile from "./editorFile"; +import openFile from "./openFile"; +import { addedFolder } from "./openFolder"; import appSettings from "./settings"; import { getSystemConfiguration, @@ -154,6 +161,11 @@ async function EditorManager($header, $body) { const readOnlyCompartment = new Compartment(); // Compartment for language mode (allows async loading/reconfigure) const languageCompartment = new Compartment(); + // Compartment for LSP extensions so we can swap per file + const lspCompartment = new Compartment(); + let lspRequestToken = 0; + let lastLspUri = null; + const UNTITLED_URI_PREFIX = "untitled://acode/"; function getEditorFontFamily() { const font = appSettings?.value?.editorFont || "Roboto Mono"; @@ -177,6 +189,20 @@ async function EditorManager($header, $body) { function makeLineNumberExtension() { const { linenumbers = true, relativeLineNumbers = false } = appSettings?.value || {}; + const baseTheme = EditorView.theme({ + ".cm-gutters": { + padding: "0 4px 0 0", + borderRight: "none", + backgroundColor: "transparent", + }, + ".cm-lineNumbers .cm-gutterElement": { + padding: "0 6px 0 2px", + }, + ".cm-foldGutter .cm-gutterElement": { + padding: "0 2px", + margin: 0, + }, + }); if (!linenumbers) return EditorView.theme({ ".cm-gutter": { @@ -187,7 +213,7 @@ async function EditorManager($header, $body) { }, }); if (!relativeLineNumbers) - return [lineNumbers(), highlightActiveLineGutter()]; + return [lineNumbers(), highlightActiveLineGutter(), baseTheme]; return [ lineNumbers({ formatNumber: (lineNo, state) => { @@ -201,6 +227,7 @@ async function EditorManager($header, $body) { }, }), highlightActiveLineGutter(), + baseTheme, ]; } @@ -367,6 +394,68 @@ async function EditorManager($header, $body) { } } + function buildLspMetadata(file) { + if (!file || file.type !== "editor") return null; + const uri = getFileLspUri(file); + if (!uri) return null; + const languageId = getFileLanguageId(file); + return { + uri, + languageId, + languageName: file.currentMode || file.mode || languageId, + view: editor, + file, + rootUri: resolveRootUriForContext({ uri, file }), + }; + } + + async function configureLspForFile(file) { + const metadata = buildLspMetadata(file); + const token = ++lspRequestToken; + if (!metadata) { + detachActiveLsp(); + editor.dispatch({ effects: lspCompartment.reconfigure([]) }); + return; + } + if (metadata.uri !== lastLspUri) { + detachActiveLsp(); + } + try { + const extensions = + (await lspClientManager.getExtensionsForFile(metadata)) || []; + if (token !== lspRequestToken) return; + if (!extensions.length) { + lastLspUri = null; + editor.dispatch({ effects: lspCompartment.reconfigure([]) }); + return; + } + lastLspUri = metadata.uri; + editor.dispatch({ + effects: lspCompartment.reconfigure(extensions), + }); + } catch (error) { + if (token !== lspRequestToken) return; + console.error("Failed to configure LSP", error); + lastLspUri = null; + editor.dispatch({ effects: lspCompartment.reconfigure([]) }); + } + } + + function detachLspForFile(file) { + if (!file || file.type !== "editor") return; + const uri = getFileLspUri(file); + if (!uri) return; + try { + lspClientManager.detach(uri); + } catch (error) { + console.warn(`Failed to detach LSP client for ${uri}`, error); + } + if (uri === lastLspUri && manager.activeFile?.id === file.id) { + lastLspUri = null; + editor.dispatch({ effects: lspCompartment.reconfigure([]) }); + } + } + // Plugin already wires CSS completions; attach extras for related syntaxes. const emmetCompletionSyntaxes = new Set([ EmmetKnownSyntax.scss, @@ -387,6 +476,141 @@ async function EditorManager($header, $body) { } } + function getFileLspUri(file) { + if (!file) return null; + if (file.uri) return file.uri; + return `${UNTITLED_URI_PREFIX}${file.id}`; + } + + function getFileLanguageId(file) { + if (!file) return "plaintext"; + const mode = file.currentMode || file.mode; + if (mode) return String(mode).toLowerCase(); + try { + const guess = getModeForPath(file.filename || file.name || ""); + if (guess?.name) return String(guess.name).toLowerCase(); + } catch (_) {} + return "plaintext"; + } + + function resolveRootUriForContext(context = {}) { + const uri = context.uri || context.file?.uri; + if (!uri) return null; + for (const folder of addedFolder) { + try { + const base = folder?.url; + if (!base) continue; + if (uri.startsWith(base)) return base; + } catch (_) {} + } + if (uri.includes("::")) { + return uri.split("::")[0]; + } + try { + return Url.dirname(uri); + } catch (_) { + return null; + } + } + + function detachActiveLsp() { + if (!lastLspUri) return; + try { + lspClientManager.detach(lastLspUri, editor); + } catch (error) { + console.warn(`Failed to detach LSP session for ${lastLspUri}`, error); + } + lastLspUri = null; + } + + function applyLspSettings() { + const { lsp } = appSettings.value || {}; + if (!lsp) return; + const overrides = lsp.servers || {}; + for (const [id, config] of Object.entries(overrides)) { + if (!config || typeof config !== "object") continue; + const key = String(id || "") + .trim() + .toLowerCase(); + if (!key) continue; + const existing = serverRegistry.getServer(key); + if (existing) { + serverRegistry.updateServer(key, (current) => { + const next = { ...current }; + if (Array.isArray(config.languages) && config.languages.length) { + next.languages = config.languages.map((lang) => + String(lang).toLowerCase(), + ); + } + if (config.transport && typeof config.transport === "object") { + next.transport = { ...current.transport, ...config.transport }; + delete next.transport.protocols; + } + if (config.clientConfig && typeof config.clientConfig === "object") { + next.clientConfig = { + ...current.clientConfig, + ...config.clientConfig, + }; + } + if ( + config.initializationOptions && + typeof config.initializationOptions === "object" + ) { + next.initializationOptions = { + ...current.initializationOptions, + ...config.initializationOptions, + }; + } + if (config.launcher && typeof config.launcher === "object") { + next.launcher = { ...current.launcher, ...config.launcher }; + } + if (Object.prototype.hasOwnProperty.call(config, "enabled")) { + next.enabled = !!config.enabled; + } + return next; + }); + if (config.enabled === false) { + stopManagedServer(key); + } + } else if ( + Array.isArray(config.languages) && + config.languages.length && + config.transport && + typeof config.transport === "object" + ) { + try { + serverRegistry.registerServer({ + id: key, + label: config.label || key, + languages: config.languages, + transport: config.transport, + clientConfig: config.clientConfig, + initializationOptions: config.initializationOptions, + launcher: config.launcher, + enabled: config.enabled !== false, + }); + serverRegistry.updateServer(key, (current) => { + if (current.transport?.protocols) { + const updated = { ...current }; + updated.transport = { ...current.transport }; + delete updated.transport.protocols; + return updated; + } + return current; + }); + if (config.enabled === false) { + stopManagedServer(key); + } + } catch (error) { + console.warn( + `Failed to register LSP server override for ${key}`, + error, + ); + } + } + } + } + // Create minimal CodeMirror editor const editorState = EditorState.create({ doc: "", @@ -737,6 +961,7 @@ async function EditorManager($header, $body) { // Keep file.session in sync and handle caching/autosave exts.push(getDocSyncListener()); + exts.push(lspCompartment.of([])); // Preserve previous state for restoring selection/folds after swap const prevState = file.session || null; @@ -777,6 +1002,8 @@ async function EditorManager($header, $body) { ) { setScrollPosition(editor, file.lastScrollTop, file.lastScrollLeft); } + + void configureLspForFile(file); } function getEmmetSyntaxForFile(file) { @@ -843,6 +1070,7 @@ async function EditorManager($header, $body) { getEditorWidth, header: $header, container: $container, + getLspMetadata: buildLspMetadata, get isScrolling() { return isScrolling; }, @@ -883,6 +1111,34 @@ async function EditorManager($header, $body) { }, }; + lspClientManager.setOptions({ + resolveRoot: resolveRootUriForContext, + onClientIdle: ({ server }) => { + if (server?.id) stopManagedServer(server.id); + }, + displayFile: async (targetUri) => { + if (!targetUri) return null; + const existing = manager.getFile(targetUri, "uri"); + if (existing?.type === "editor") { + existing.makeActive(); + return editor; + } + try { + await openFile(targetUri, { render: true }); + const opened = manager.getFile(targetUri, "uri"); + if (opened?.type === "editor") { + opened.makeActive(); + return editor; + } + } catch (error) { + console.error("Failed to open file for LSP navigation", error); + } + return null; + }, + clientExtensions: [lspDiagnosticsExtension()], + }); + applyLspSettings(); + // TODO: Implement mode/language support for CodeMirror // editor.setSession(ace.createEditSession("", "ace/mode/text")); $body.append($container); @@ -951,6 +1207,18 @@ async function EditorManager($header, $body) { updateEditorStyleFromSettings(); }); + appSettings.on("update:lsp", async function () { + applyLspSettings(); + const active = manager.activeFile; + if (active?.type === "editor") { + void configureLspForFile(active); + } else { + detachActiveLsp(); + editor.dispatch({ effects: lspCompartment.reconfigure([]) }); + await lspClientManager.dispose(); + } + }); + appSettings.on("update:openFileListPos", function (value) { initFileTabContainer(); $vScrollbar.resize(); @@ -1086,6 +1354,17 @@ async function EditorManager($header, $body) { } }); + manager.on(["remove-file"], (file) => { + detachLspForFile(file); + }); + + manager.on(["rename-file"], (file) => { + if (file?.type !== "editor") return; + if (manager.activeFile?.id === file.id) { + void configureLspForFile(file); + } + }); + // Attach doc-sync listener to the current editor instance try { editor.dispatch({ diff --git a/src/lib/settings.js b/src/lib/settings.js index dc9110466..6e02464e7 100644 --- a/src/lib/settings.js +++ b/src/lib/settings.js @@ -179,6 +179,9 @@ class Settings { showAnnotations: false, rainbowBrackets: true, pluginsDisabled: {}, // pluginId: true/false + lsp: { + servers: {}, + }, }; this.value = structuredClone(this.#defaultSettings); } diff --git a/src/settings/lspSettings.js b/src/settings/lspSettings.js new file mode 100644 index 000000000..071ecd0d7 --- /dev/null +++ b/src/settings/lspSettings.js @@ -0,0 +1,59 @@ +import serverRegistry from "cm/lsp/serverRegistry"; +import settingsPage from "components/settingsPage"; +import appSettings from "lib/settings"; + +function getServerOverride(id) { + return appSettings.value?.lsp?.servers?.[id] || {}; +} + +export default function lspSettings() { + const title = strings?.lsp_settings || "Language Servers"; + const servers = serverRegistry.listServers(); + + const items = []; + + for (const server of servers) { + const override = getServerOverride(server.id); + const serverEnabled = override.enabled ?? server.enabled; + const infoParts = []; + if (Array.isArray(server.languages) && server.languages.length) { + infoParts.push(server.languages.join(", ")); + } + items.push({ + key: `server:${server.id}`, + text: server.label, + checkbox: serverEnabled, + info: infoParts.join(" ยท ") || undefined, + }); + } + + return settingsPage(title, items, callback); + + async function callback(key, value) { + if (key.startsWith("server:")) { + const id = key.split(":")[1]; + const override = { + ...(appSettings.value.lsp?.servers?.[id] || {}), + enabled: !!value, + }; + await updateConfig({ servers: { [id]: override } }); + } + } + + async function updateConfig(partial) { + const current = JSON.parse(JSON.stringify(appSettings.value.lsp || {})); + if (partial.servers) { + current.servers = { + ...(current.servers || {}), + ...partial.servers, + }; + } + + await appSettings.update( + { + lsp: current, + }, + false, + ); + } +} diff --git a/src/settings/mainSettings.js b/src/settings/mainSettings.js index 3df4c3dfc..247969444 100644 --- a/src/settings/mainSettings.js +++ b/src/settings/mainSettings.js @@ -17,6 +17,7 @@ import backupRestore from "./backupRestore"; import editorSettings from "./editorSettings"; import filesSettings from "./filesSettings"; import formatterSettings from "./formatterSettings"; +import lspSettings from "./lspSettings"; import previewSettings from "./previewSettings"; import scrollSettings from "./scrollSettings"; import searchSettings from "./searchSettings"; @@ -93,6 +94,12 @@ export default function mainSettings() { icon: "licons terminal", index: 5, }, + { + key: "lsp-settings", + text: strings?.lsp_settings || "Language servers", + icon: "psychology", + index: 7, + }, { key: "editSettings", text: `${strings["edit"]} settings.json`, @@ -125,6 +132,7 @@ export default function mainSettings() { case "editor-settings": case "preview-settings": case "terminal-settings": + case "lsp-settings": appSettings.uiSettings[key].show(); break; @@ -199,4 +207,5 @@ export default function mainSettings() { appSettings.uiSettings["search-settings"] = searchSettings(); appSettings.uiSettings["preview-settings"] = previewSettings(); appSettings.uiSettings["terminal-settings"] = terminalSettings(); + appSettings.uiSettings["lsp-settings"] = lspSettings(); } diff --git a/webpack.config.js b/webpack.config.js index f936408eb..8dafa50bb 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -37,9 +37,9 @@ module.exports = (env, options) => { ]; // if (mode === 'production') { - rules.push({ - test: /\.m?js$/, - exclude: /node_modules\/(@codemirror|codemirror)/, // Exclude CodeMirror files from html-tag-js loader + rules.push({ + test: /\.m?js$/, + exclude: /node_modules\/(@codemirror|codemirror|marked)/, // Exclude CodeMirror and marked files from html-tag-js loader use: [ 'html-tag-js/jsx/tag-loader.js', { @@ -99,4 +99,4 @@ module.exports = (env, options) => { }; return [main]; -}; \ No newline at end of file +}; From 22b9d173227c866f63caaeca4b559cbfe5effca4 Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Sun, 12 Oct 2025 20:20:26 +0530 Subject: [PATCH 02/25] fix --- src/cm/lsp/serverLauncher.js | 2 +- src/cm/lsp/serverRegistry.js | 46 +++++++----------------------------- 2 files changed, 10 insertions(+), 38 deletions(-) diff --git a/src/cm/lsp/serverLauncher.js b/src/cm/lsp/serverLauncher.js index f7fcfcbad..ae18067ec 100644 --- a/src/cm/lsp/serverLauncher.js +++ b/src/cm/lsp/serverLauncher.js @@ -10,7 +10,7 @@ const STATUS_PRESENT = "present"; const STATUS_DECLINED = "declined"; const STATUS_FAILED = "failed"; -const AXS_BINARY = "$PREFIX/new_axs"; +const AXS_BINARY = "$PREFIX/axs"; function getExecutor() { const executor = globalThis.Executor; diff --git a/src/cm/lsp/serverRegistry.js b/src/cm/lsp/serverRegistry.js index c66ee05b8..2d1f88650 100644 --- a/src/cm/lsp/serverRegistry.js +++ b/src/cm/lsp/serverRegistry.js @@ -276,8 +276,7 @@ function registerBuiltinServers() { command: "typescript-language-server", args: ["--stdio"], }, - checkCommand: - 'if [ -x "$PREFIX/new_axs" ]; then which typescript-language-server; else exit 1; fi', + checkCommand: "which typescript-language-server", install: { command: "apk add --no-cache nodejs npm && npm install -g typescript-language-server typescript", @@ -330,8 +329,7 @@ function registerBuiltinServers() { command: "vscode-html-language-server", args: ["--stdio"], }, - checkCommand: - 'if [ -x "$PREFIX/new_axs" ]; then which vscode-html-language-server; else exit 1; fi', + checkCommand: "which vscode-html-language-server", install: { command: "apk add --no-cache nodejs npm && npm install -g vscode-langservers-extracted", @@ -355,8 +353,7 @@ function registerBuiltinServers() { command: "vscode-css-language-server", args: ["--stdio"], }, - checkCommand: - 'if [ -x "$PREFIX/new_axs" ]; then which vscode-css-language-server; else exit 1; fi', + checkCommand: "which vscode-css-language-server", install: { command: "apk add --no-cache nodejs npm && npm install -g vscode-langservers-extracted", @@ -372,44 +369,19 @@ function registerBuiltinServers() { transport: { kind: "websocket", url: "ws://127.0.0.1:2093", - }, - launcher: { - bridge: { - kind: "axs", - port: 2093, - command: "vscode-json-language-server", - args: ["--stdio"], - }, - checkCommand: - 'if [ -x "$PREFIX/new_axs" ]; then which vscode-json-language-server; else exit 1; fi', - install: { - command: - "apk add --no-cache nodejs npm && npm install -g vscode-langservers-extracted", - prompt: "Install JSON language server dependencies?", - }, - }, - enabled: false, - }, - { - id: "rust-analyzer", - label: "Rust", - languages: ["rust"], - transport: { - kind: "websocket", - url: "ws://127.0.0.1:2094", }, launcher: { bridge: { kind: "axs", - port: 2094, - command: "rust-analyzer", + port: 2093, + command: "vscode-json-language-server", args: ["--stdio"], }, - checkCommand: - 'if [ -x "$PREFIX/new_axs" ]; then which rust-analyzer; else exit 1; fi', + checkCommand: "which vscode-json-language-server", install: { - command: "apk add --no-cache rust-analyzer", - prompt: "Install rust-analyzer language server?", + command: + "apk add --no-cache nodejs npm && npm install -g vscode-langservers-extracted", + prompt: "Install JSON language server dependencies?", }, }, enabled: false, From 6a70dd0263ec1790c9b0f08145ca7af38afeb466 Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Sun, 12 Oct 2025 21:50:14 +0530 Subject: [PATCH 03/25] fix: gutter area --- src/cm/baseExtensions.js | 4 +++- src/lib/editorManager.js | 35 ++++++++++------------------------- 2 files changed, 13 insertions(+), 26 deletions(-) diff --git a/src/cm/baseExtensions.js b/src/cm/baseExtensions.js index 61b5dbfb3..dc5c11bcc 100644 --- a/src/cm/baseExtensions.js +++ b/src/cm/baseExtensions.js @@ -14,6 +14,7 @@ import { drawSelection, dropCursor, highlightActiveLine, + highlightActiveLineGutter, highlightSpecialChars, keymap, rectangularSelection, @@ -25,8 +26,10 @@ import { */ export default function createBaseExtensions() { return [ + highlightActiveLineGutter(), highlightSpecialChars(), history(), + foldGutter(), drawSelection(), dropCursor(), EditorState.allowMultipleSelections.of(true), @@ -38,7 +41,6 @@ export default function createBaseExtensions() { crosshairCursor(), highlightActiveLine(), highlightSelectionMatches(), - foldGutter(), keymap.of([...defaultKeymap, ...historyKeymap]), ]; } diff --git a/src/lib/editorManager.js b/src/lib/editorManager.js index 66027ddd0..f88f7f2ba 100644 --- a/src/lib/editorManager.js +++ b/src/lib/editorManager.js @@ -189,20 +189,6 @@ async function EditorManager($header, $body) { function makeLineNumberExtension() { const { linenumbers = true, relativeLineNumbers = false } = appSettings?.value || {}; - const baseTheme = EditorView.theme({ - ".cm-gutters": { - padding: "0 4px 0 0", - borderRight: "none", - backgroundColor: "transparent", - }, - ".cm-lineNumbers .cm-gutterElement": { - padding: "0 6px 0 2px", - }, - ".cm-foldGutter .cm-gutterElement": { - padding: "0 2px", - margin: 0, - }, - }); if (!linenumbers) return EditorView.theme({ ".cm-gutter": { @@ -213,8 +199,8 @@ async function EditorManager($header, $body) { }, }); if (!relativeLineNumbers) - return [lineNumbers(), highlightActiveLineGutter(), baseTheme]; - return [ + return Prec.highest([lineNumbers(), highlightActiveLineGutter()]); + return Prec.highest([ lineNumbers({ formatNumber: (lineNo, state) => { try { @@ -227,8 +213,7 @@ async function EditorManager($header, $body) { }, }), highlightActiveLineGutter(), - baseTheme, - ]; + ]); } function makeIndentExtensions() { @@ -243,6 +228,13 @@ async function EditorManager($header, $body) { // Centralised CodeMirror options registry for organized configuration // Each spec declares related settings keys, its compartment(s), and a builder returning extension(s) const cmOptionSpecs = [ + { + keys: ["linenumbers", "relativeLineNumbers"], + compartments: [lineNumberCompartment], + build() { + return makeLineNumberExtension(); + }, + }, { keys: ["rainbowBrackets"], compartments: [rainbowCompartment], @@ -274,13 +266,6 @@ async function EditorManager($header, $body) { return [indentExt, tabSizeExt]; }, }, - { - keys: ["linenumbers", "relativeLineNumbers"], - compartments: [lineNumberCompartment], - build() { - return makeLineNumberExtension(); - }, - }, { keys: ["rtlText"], compartments: [rtlCompartment], From c3b66626abd4ba0e52e56cf147dbd7f10040929f Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Mon, 13 Oct 2025 08:55:49 +0530 Subject: [PATCH 04/25] Add clangd server to LSP registry --- src/cm/lsp/serverRegistry.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/cm/lsp/serverRegistry.js b/src/cm/lsp/serverRegistry.js index 2d1f88650..bd154f7bf 100644 --- a/src/cm/lsp/serverRegistry.js +++ b/src/cm/lsp/serverRegistry.js @@ -314,6 +314,28 @@ function registerBuiltinServers() { }, enabled: false, }, + { + id: "clangd", + label: "C / C++ (clangd)", + languages: ["c", "cpp"], + transport: { + kind: "websocket", + url: "ws://127.0.0.1:2094", + }, + launcher: { + bridge: { + kind: "axs", + port: 2094, + command: "clangd", + }, + checkCommand: "which clangd", + install: { + command: "apk add --no-cache clang-extra-tools", + prompt: "clangd is not installed. Install it now?", + }, + }, + enabled: false, + }, { id: "html", label: "HTML", From 507aa77ac8fbb68caf7bdccef36b073de2b4a469 Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Mon, 13 Oct 2025 09:07:27 +0530 Subject: [PATCH 05/25] Remove custom install prompts from server registry --- src/cm/lsp/serverLauncher.js | 11 +++++++++-- src/cm/lsp/serverRegistry.js | 7 ------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/cm/lsp/serverLauncher.js b/src/cm/lsp/serverLauncher.js index ae18067ec..37b8050d7 100644 --- a/src/cm/lsp/serverLauncher.js +++ b/src/cm/lsp/serverLauncher.js @@ -108,9 +108,16 @@ async function ensureInstalled(server) { } const install = launcher.install; + const displayLabel = ( + server.label || + server.id || + "Language server" + ).trim(); + const promptMessage = + strings?.confirm || `Install ${displayLabel} language server?`; const shouldInstall = await confirm( - server.label, - install.prompt || strings?.confirm || "Install language server?", + server.label || displayLabel, + promptMessage, ); if (!shouldInstall) { diff --git a/src/cm/lsp/serverRegistry.js b/src/cm/lsp/serverRegistry.js index bd154f7bf..cc628c2a7 100644 --- a/src/cm/lsp/serverRegistry.js +++ b/src/cm/lsp/serverRegistry.js @@ -165,7 +165,6 @@ function sanitizeDefinition(definition) { typeof definition.launcher.install === "object" ? { command: definition.launcher.install.command, - prompt: definition.launcher.install.prompt, } : undefined, bridge: sanitizeBridge(id, definition.launcher.bridge), @@ -280,7 +279,6 @@ function registerBuiltinServers() { install: { command: "apk add --no-cache nodejs npm && npm install -g typescript-language-server typescript", - prompt: "Install TypeScript language server dependencies?", }, }, enabled: false, @@ -300,7 +298,6 @@ function registerBuiltinServers() { install: { command: "apk update && apk upgrade && apk add python3 py3-pip && PIP_BREAK_SYSTEM_PACKAGES=1 pip install 'python-lsp-server[websockets,all]'", - prompt: "python-lsp-server is not installed. Install it now?", }, }, initializationOptions: { @@ -331,7 +328,6 @@ function registerBuiltinServers() { checkCommand: "which clangd", install: { command: "apk add --no-cache clang-extra-tools", - prompt: "clangd is not installed. Install it now?", }, }, enabled: false, @@ -355,7 +351,6 @@ function registerBuiltinServers() { install: { command: "apk add --no-cache nodejs npm && npm install -g vscode-langservers-extracted", - prompt: "Install HTML language server dependencies?", }, }, enabled: false, @@ -379,7 +374,6 @@ function registerBuiltinServers() { install: { command: "apk add --no-cache nodejs npm && npm install -g vscode-langservers-extracted", - prompt: "Install CSS language server dependencies?", }, }, enabled: false, @@ -403,7 +397,6 @@ function registerBuiltinServers() { install: { command: "apk add --no-cache nodejs npm && npm install -g vscode-langservers-extracted", - prompt: "Install JSON language server dependencies?", }, }, enabled: false, From abfed3d21fa359cfdeebca405ee8f14b34b383f9 Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Mon, 13 Oct 2025 21:26:49 +0530 Subject: [PATCH 06/25] Filter builtin extensions with custom diagnostics --- src/cm/lsp/clientManager.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/cm/lsp/clientManager.js b/src/cm/lsp/clientManager.js index 9472e9cff..77ce11480 100644 --- a/src/cm/lsp/clientManager.js +++ b/src/cm/lsp/clientManager.js @@ -166,8 +166,19 @@ export class LspClientManager { const extraExtensions = asArray(this.options.clientExtensions); const serverExtensions = asArray(clientConfig.extensions); + const builtinExtensions = languageServerExtensions(); + const wantsCustomDiagnostics = [ + ...extraExtensions, + ...serverExtensions, + ].some( + (ext) => !!ext?.clientCapabilities?.textDocument?.publishDiagnostics, + ); const mergedExtensions = [ - ...languageServerExtensions(), + ...(wantsCustomDiagnostics + ? builtinExtensions.filter( + (ext) => !ext?.clientCapabilities?.textDocument?.publishDiagnostics, + ) + : builtinExtensions), ...extraExtensions, ...serverExtensions, ]; From a8947df44fa2a1b9b4809f2868d1baa8ad70d77b Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Tue, 14 Oct 2025 19:17:59 +0530 Subject: [PATCH 07/25] Improve LSP formatter options and extension handling --- src/cm/lsp/clientManager.js | 45 +++++++++++++++++++++++++++++++++++-- src/cm/lsp/formatter.js | 43 ++++++++++++++++++++++++++++++++++- 2 files changed, 85 insertions(+), 3 deletions(-) diff --git a/src/cm/lsp/clientManager.js b/src/cm/lsp/clientManager.js index 77ce11480..f028f49d0 100644 --- a/src/cm/lsp/clientManager.js +++ b/src/cm/lsp/clientManager.js @@ -1,3 +1,4 @@ +import { getIndentUnit, indentUnit } from "@codemirror/language"; import { LSPClient, LSPPlugin, @@ -116,14 +117,18 @@ export class LspClientManager { const state = await this.#ensureClient(server, context); const capabilities = state.client.serverCapabilities; if (!capabilities?.documentFormattingProvider) continue; + state.attach(uri, view); const plugin = LSPPlugin.get(view); if (!plugin) continue; plugin.client.sync(); const edits = await state.client.request("textDocument/formatting", { textDocument: { uri }, - options, + options: buildFormattingOptions(view, options), }); - if (!edits || !edits.length) continue; + if (!edits || !edits.length) { + plugin.client.sync(); + return true; + } const applied = applyTextEdits(plugin, view, edits); if (applied) { plugin.client.sync(); @@ -373,6 +378,42 @@ function applyTextEdits(plugin, view, edits) { return true; } +function buildFormattingOptions(view, overrides = {}) { + const state = view?.state; + if (!state) return { ...overrides }; + + const unitValue = state.facet(indentUnit); + const unit = + typeof unitValue === "string" && unitValue.length + ? unitValue + : String(unitValue || "\t"); + let tabSize = getIndentUnit(state); + if ( + typeof tabSize !== "number" || + !Number.isFinite(tabSize) || + tabSize <= 0 + ) { + tabSize = resolveIndentWidth(unit); + } + const insertSpaces = !unit.includes("\t"); + + return { + tabSize, + insertSpaces, + ...overrides, + }; +} + +function resolveIndentWidth(unit) { + if (typeof unit !== "string" || !unit.length) return 4; + let width = 0; + for (const ch of unit) { + if (ch === "\t") return 4; + width += 1; + } + return width || 4; +} + const defaultManager = new LspClientManager(); export default defaultManager; diff --git a/src/cm/lsp/formatter.js b/src/cm/lsp/formatter.js index e71ba9c3f..3cbb7d972 100644 --- a/src/cm/lsp/formatter.js +++ b/src/cm/lsp/formatter.js @@ -1,3 +1,4 @@ +import { getModes } from "cm/modelist"; import toast from "components/toast"; import lspClientManager from "./clientManager"; import serverRegistry from "./serverRegistry"; @@ -17,7 +18,9 @@ export function registerLspFormatter(acode) { if (lang) languages.add(String(lang)); }); }); - const extensions = languages.size ? Array.from(languages) : ["*"]; + const extensions = languages.size + ? collectFormatterExtensions(languages) + : ["*"]; acode.registerFormatter( "lsp", @@ -50,3 +53,41 @@ export function registerLspFormatter(acode) { "Language Server", ); } + +function collectFormatterExtensions(languages) { + const extensions = new Set(); + const modeMap = new Map(); + + try { + getModes().forEach((mode) => { + const key = String(mode?.name || "") + .trim() + .toLowerCase(); + if (key) modeMap.set(key, mode); + }); + } catch (_) {} + + languages.forEach((language) => { + const key = String(language || "") + .trim() + .toLowerCase(); + if (!key) return; + extensions.add(key); + const mode = modeMap.get(key); + if (!mode?.extensions) return; + String(mode.extensions) + .split("|") + .forEach((part) => { + const ext = part.trim(); + if (ext && !ext.startsWith("^")) { + extensions.add(ext); + } + }); + }); + + if (!extensions.size) { + return ["*"]; + } + + return Array.from(extensions); +} From 1efcc4c6baef85130cd04290a25f9d158abb66d7 Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Tue, 14 Oct 2025 19:18:35 +0530 Subject: [PATCH 08/25] fix: Emmet syntax resolution --- src/lib/editorManager.js | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/lib/editorManager.js b/src/lib/editorManager.js index f88f7f2ba..d5e29f856 100644 --- a/src/lib/editorManager.js +++ b/src/lib/editorManager.js @@ -336,18 +336,21 @@ async function EditorManager($header, $body) { } function createEmmetExtensionSet({ - syntax = EmmetKnownSyntax.html, + syntax, tracker = {}, config: emmetOverrides = {}, } = {}) { + const resolvedSyntax = + syntax === undefined ? EmmetKnownSyntax.html : syntax; + if (!resolvedSyntax) return []; const trackerExtension = abbreviationTracker({ - syntax, + syntax: resolvedSyntax, ...tracker, }); const { autocompleteTab = ["markup", "stylesheet"], ...restOverrides } = emmetOverrides || {}; const emmetConfigExtension = emmetConfig.of({ - syntax, + syntax: resolvedSyntax, autocompleteTab, ...restOverrides, }); @@ -1022,10 +1025,14 @@ async function EditorManager($header, $body) { if (ext === "slim" || mode.includes("slim")) return EmmetKnownSyntax.slim; if (ext === "vue" || mode.includes("vue")) return EmmetKnownSyntax.vue; if (ext === "php" || mode.includes("php")) return EmmetKnownSyntax.html; - if (ext === "html" || ext === "xhtml" || mode.includes("html")) + if ( + ext === "htm" || + ext === "html" || + ext === "xhtml" || + mode.includes("html") + ) return EmmetKnownSyntax.html; - // Defaults to html per Emmet docs - return EmmetKnownSyntax.html; + return null; } const $vScrollbar = ScrollBar({ From 2494110cac540cd2c5058d3d63bed24b3c8832c5 Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Thu, 16 Oct 2025 11:22:11 +0530 Subject: [PATCH 09/25] feat: Add CodeMirror tooltip styles --- src/main.scss | 3 +- src/styles/codemirror.scss | 111 +++++++++++++++++++++++++++++++++++++ 2 files changed, 113 insertions(+), 1 deletion(-) create mode 100644 src/styles/codemirror.scss diff --git a/src/main.scss b/src/main.scss index f1f7b8cd5..b281dc1f7 100644 --- a/src/main.scss +++ b/src/main.scss @@ -4,6 +4,7 @@ @use "./styles/keyframes.scss"; @use "./styles/fileInfo.scss"; @use "./styles/markdown.scss"; +@use "./styles/codemirror.scss"; :root { --scrollbar-width: 4px; @@ -843,4 +844,4 @@ input[type="search"]::-webkit-search-results-decoration { transform: translateX(0); opacity: 1; } -} \ No newline at end of file +} diff --git a/src/styles/codemirror.scss b/src/styles/codemirror.scss new file mode 100644 index 000000000..ac9876aad --- /dev/null +++ b/src/styles/codemirror.scss @@ -0,0 +1,111 @@ +.cm-tooltip { + box-sizing: border-box; + max-width: min(32rem, calc(100vw - 1.25rem)); + width: max-content; + padding: 0.4rem 0.45rem; + border-radius: 0; + overscroll-behavior: contain; + overflow-y: auto; + max-height: min(70vh, 22rem); + + .cm-tooltip-section + .cm-tooltip-section { + margin-top: 0.5rem; + } +} + +.cm-tooltip.cm-tooltip-hover { + font-size: 0.9rem; + line-height: 1.45; + word-break: break-word; + max-height: min(65vh, 20rem); +} + +.cm-tooltip.cm-tooltip-autocomplete { + display: flex; + flex-wrap: nowrap; + align-items: stretch; + gap: 0.4rem; + width: auto; + min-width: min(15rem, calc(100vw - 1.75rem)); + max-width: min(32rem, calc(100vw - 1.25rem)); + max-height: min(60vh, 20rem); + padding: 0.25rem; + overflow: visible; +} + +.cm-tooltip.cm-tooltip-autocomplete > ul { + flex: 1 1 auto; + max-height: inherit; + overflow: auto; + padding: 0.25rem; + margin: 0; + scrollbar-gutter: stable; +} + +.cm-tooltip.cm-tooltip-autocomplete > ul > li { + display: flex; + align-items: center; + gap: 0.12rem; + padding: 0.3rem 0.36rem; + border-radius: 0.2rem; +} + +.cm-tooltip.cm-tooltip-autocomplete .cm-completionIcon { + flex: 0 0 auto; + min-width: 1rem; + text-align: center; + line-height: 1; +} + +.cm-tooltip.cm-tooltip-autocomplete .cm-completionLabel { + flex: 1 1 auto; + font-size: 0.95em; + line-height: 1.4; + overflow-wrap: anywhere; +} + +.cm-tooltip.cm-tooltip-autocomplete .cm-completionMatchedText { + font-weight: 600; +} + +.cm-tooltip.cm-tooltip-autocomplete .cm-completionDetail { + margin-left: auto; + font-size: 0.85em; +} + +.cm-tooltip.cm-tooltip-autocomplete .cm-completionInfo { + flex: 1 1 45%; + min-width: min(12rem, calc(100vw - 3rem)); + max-width: min(18rem, calc(100vw - 2.5rem)); + max-height: inherit; + padding: 0.3rem 0.35rem; + font-size: 0.85rem; + line-height: 1.35; + overflow: auto; +} + +@media (max-width: 480px) { + .cm-tooltip { + font-size: 0.9rem; + max-width: calc(100vw - 1.25rem); + max-height: min(70vh, 20rem); + } + + .cm-tooltip.cm-tooltip-autocomplete { + flex-direction: column; + min-width: min(13.5rem, calc(100vw - 1.5rem)); + max-width: calc(100vw - 1.35rem); + max-height: min(65vh, 18rem); + } + + .cm-tooltip.cm-tooltip-autocomplete > ul > li { + padding: 0.32rem 0.4rem; + } + + .cm-tooltip.cm-tooltip-autocomplete .cm-completionInfo { + min-width: auto; + max-width: 100%; + max-height: 12rem; + padding: 0.35rem 0.4rem 0.2rem; + } +} From ffcf7e5efb38c6814e96283083e6c0e5ec41eb43 Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Thu, 16 Oct 2025 11:25:11 +0530 Subject: [PATCH 10/25] fix --- src/cm/baseExtensions.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cm/baseExtensions.js b/src/cm/baseExtensions.js index dc5c11bcc..a64f6f34c 100644 --- a/src/cm/baseExtensions.js +++ b/src/cm/baseExtensions.js @@ -1,4 +1,4 @@ -import { closeBrackets } from "@codemirror/autocomplete"; +import { closeBrackets, completionKeymap } from "@codemirror/autocomplete"; import { defaultKeymap, history, historyKeymap } from "@codemirror/commands"; import { bracketMatching, @@ -41,6 +41,6 @@ export default function createBaseExtensions() { crosshairCursor(), highlightActiveLine(), highlightSelectionMatches(), - keymap.of([...defaultKeymap, ...historyKeymap]), + keymap.of([...completionKeymap, ...defaultKeymap, ...historyKeymap]), ]; } From f0133c36b0f3e287d565a562c3b390b1779890eb Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Thu, 16 Oct 2025 11:26:59 +0530 Subject: [PATCH 11/25] fix --- src/cm/lsp/diagnostics.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/cm/lsp/diagnostics.js b/src/cm/lsp/diagnostics.js index eb9e834f7..3b7f05f54 100644 --- a/src/cm/lsp/diagnostics.js +++ b/src/cm/lsp/diagnostics.js @@ -67,8 +67,14 @@ function mapDiagnostics(plugin, state) { const mapped = []; for (const diagnostic of stored) { - const from = changes.mapPos(diagnostic.from, 1, MapMode.TrackDel); - const to = changes.mapPos(diagnostic.to, -1, MapMode.TrackDel); + let from; + let to; + try { + from = changes.mapPos(diagnostic.from, 1, MapMode.TrackDel); + to = changes.mapPos(diagnostic.to, -1, MapMode.TrackDel); + } catch (_) { + continue; + } if (from != null && to != null) { mapped.push({ ...diagnostic, from, to }); } From 342b504e4f8f96fcfc7a574a3f5165b22adcc9ae Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Sun, 19 Oct 2025 13:00:31 +0530 Subject: [PATCH 12/25] Normalize rootUri handling for LSP clients --- src/cm/lsp/clientManager.js | 163 +++++++++++++++++++++++++++++++++--- 1 file changed, 151 insertions(+), 12 deletions(-) diff --git a/src/cm/lsp/clientManager.js b/src/cm/lsp/clientManager.js index f028f49d0..7d3727e48 100644 --- a/src/cm/lsp/clientManager.js +++ b/src/cm/lsp/clientManager.js @@ -9,6 +9,7 @@ import { ensureServerRunning } from "./serverLauncher"; import serverRegistry from "./serverRegistry"; import { createTransport } from "./transport"; import AcodeWorkspace from "./workspace"; +import Uri from "utils/Uri"; function asArray(value) { if (!value) return []; @@ -157,8 +158,10 @@ export class LspClientManager { } async #ensureClient(server, context) { - const rootUri = await this.#resolveRootUri(server, context); - const key = pluginKey(server.id, rootUri); + const resolvedRoot = await this.#resolveRootUri(server, context); + const { normalizedRootUri, originalRootUri } = + normalizeRootUriForServer(server, resolvedRoot); + const key = pluginKey(server.id, normalizedRootUri); if (this.#clients.has(key)) { return this.#clients.get(key); } @@ -224,8 +227,12 @@ export class LspClientManager { new AcodeWorkspace(client, workspaceOptions); } - if (rootUri && !clientConfig.rootUri) { - clientConfig.rootUri = rootUri; + if (normalizedRootUri && !clientConfig.rootUri) { + clientConfig.rootUri = normalizedRootUri; + } + + if (!normalizedRootUri && clientConfig.rootUri) { + delete clientConfig.rootUri; } if (server.startupTimeout && !clientConfig.timeout) { @@ -239,7 +246,8 @@ export class LspClientManager { await ensureServerRunning(server); transportHandle = createTransport(server, { ...context, - rootUri, + rootUri: normalizedRootUri ?? null, + originalRootUri, }); await transportHandle.ready; client = new LSPClient(clientConfig); @@ -250,8 +258,25 @@ export class LspClientManager { if (info) { console.info(`[LSP:${server.id}] server info`, info); } - if (rootUri) { - console.info(`[LSP:${server.id}] root`, rootUri); + if (normalizedRootUri) { + if ( + originalRootUri && + originalRootUri !== normalizedRootUri + ) { + console.info( + `[LSP:${server.id}] root ${normalizedRootUri} (from ${originalRootUri})`, + ); + } else { + console.info( + `[LSP:${server.id}] root`, + normalizedRootUri, + ); + } + } else if (originalRootUri) { + console.info( + `[LSP:${server.id}] root ignored`, + originalRootUri, + ); } client.__acodeLoggedInfo = true; } @@ -265,21 +290,30 @@ export class LspClientManager { server, client, transportHandle, - rootUri, + normalizedRootUri, + originalRootUri, }); this.#clients.set(key, state); return state; } - #createClientState({ key, server, client, transportHandle, rootUri }) { + #createClientState({ + key, + server, + client, + transportHandle, + normalizedRootUri, + originalRootUri, + }) { const fileRefs = new Map(); + const effectiveRoot = normalizedRootUri ?? originalRootUri ?? null; const attach = (uri, view) => { const existing = fileRefs.get(uri) || new Set(); existing.add(view); fileRefs.set(uri, existing); - const suffix = rootUri ? ` (root ${rootUri})` : ""; + const suffix = effectiveRoot ? ` (root ${effectiveRoot})` : ""; console.info(`[LSP:${server.id}] attached to ${uri}${suffix}`); }; @@ -297,7 +331,11 @@ export class LspClientManager { } if (!fileRefs.size) { - this.options.onClientIdle?.({ server, client, rootUri }); + this.options.onClientIdle?.({ + server, + client, + rootUri: effectiveRoot, + }); } }; @@ -319,7 +357,7 @@ export class LspClientManager { server, client, transport: transportHandle, - rootUri, + rootUri: effectiveRoot, attach, detach, dispose, @@ -417,3 +455,104 @@ function resolveIndentWidth(unit) { const defaultManager = new LspClientManager(); export default defaultManager; + +const FILE_SCHEME_REQUIRED_SERVERS = new Set(["typescript"]); + +function normalizeRootUriForServer(server, rootUri) { + if (!rootUri || typeof rootUri !== "string") { + return { normalizedRootUri: null, originalRootUri: null }; + } + const schemeMatch = /^([a-zA-Z][\w+\-.]*):/.exec(rootUri); + const scheme = schemeMatch ? schemeMatch[1].toLowerCase() : null; + if (scheme === "file") { + return { normalizedRootUri: rootUri, originalRootUri: rootUri }; + } + + if (scheme === "content") { + const fileUri = contentUriToFileUri(rootUri); + if (fileUri) { + return { normalizedRootUri: fileUri, originalRootUri: rootUri }; + } + if (FILE_SCHEME_REQUIRED_SERVERS.has(server.id)) { + return { normalizedRootUri: null, originalRootUri: rootUri }; + } + } + + return { normalizedRootUri: rootUri, originalRootUri: rootUri }; +} + +function contentUriToFileUri(uri) { + try { + const parsed = Uri.parse(uri); + if (!parsed || typeof parsed !== "object") return null; + const { docId, rootUri, isFileUri } = parsed; + if (!docId) return null; + + if (isFileUri && rootUri) { + return rootUri; + } + + const providerMatch = + /^content:\/\/com\.((?![:<>"/\\|?*]).*)\.documents\//.exec(rootUri); + const providerId = providerMatch ? providerMatch[1] : null; + + let normalized = docId.trim(); + if (!normalized) return null; + + switch (providerId) { + case "foxdebug.acode": + normalized = normalized.replace(/:+$/, ""); + if (!normalized) return null; + if (normalized.startsWith("raw:/")) { + normalized = normalized.slice(4); + } else if (normalized.startsWith("raw:")) { + normalized = normalized.slice(4); + } + if (!normalized.startsWith("/")) return null; + return buildFileUri(normalized); + case "android.externalstorage": + normalized = normalized.replace(/:+$/, ""); + if (!normalized) return null; + + if (normalized.startsWith("/")) { + return buildFileUri(normalized); + } + + if (normalized.startsWith("raw:/")) { + return buildFileUri(normalized.slice(4)); + } + + if (normalized.startsWith("raw:")) { + return buildFileUri(normalized.slice(4)); + } + + const separator = normalized.indexOf(":"); + if (separator === -1) return null; + + const root = normalized.slice(0, separator); + const remainder = normalized.slice(separator + 1); + if (!remainder) return null; + + switch (root) { + case "primary": + return buildFileUri(`/storage/emulated/0/${remainder}`); + default: + if (/^[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}$/.test(root)) { + return buildFileUri(`/storage/${root}/${remainder}`); + } + } + return null; + default: + return null; + } + } catch (_) { + return null; + } +} + +function buildFileUri(pathname) { + if (!pathname) return null; + const normalized = pathname.startsWith("/") ? pathname : `/${pathname}`; + const encoded = encodeURI(normalized).replace(/#/g, "%23"); + return `file://${encoded}`; +} From 603089abd6682b33a2221fe6842ea1ee53c82809 Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Sun, 19 Oct 2025 14:01:23 +0530 Subject: [PATCH 13/25] fix: install lsp server message --- src/cm/lsp/serverLauncher.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/cm/lsp/serverLauncher.js b/src/cm/lsp/serverLauncher.js index 37b8050d7..63fd21772 100644 --- a/src/cm/lsp/serverLauncher.js +++ b/src/cm/lsp/serverLauncher.js @@ -113,8 +113,7 @@ async function ensureInstalled(server) { server.id || "Language server" ).trim(); - const promptMessage = - strings?.confirm || `Install ${displayLabel} language server?`; + const promptMessage = `Install ${displayLabel} language server?`; const shouldInstall = await confirm( server.label || displayLabel, promptMessage, From 0319ed51be20e58501b5bfff1559eaf659774862 Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Sun, 19 Oct 2025 14:17:01 +0530 Subject: [PATCH 14/25] chore(codemirror): migrate problems page of acode --- src/cm/lsp/clientManager.js | 23 ++---- src/cm/lsp/diagnostics.js | 37 +++++++++ src/lib/editorManager.js | 87 +++++++++++++++++--- src/pages/problems/problems.js | 143 ++++++++++++++++++++++++++++----- 4 files changed, 241 insertions(+), 49 deletions(-) diff --git a/src/cm/lsp/clientManager.js b/src/cm/lsp/clientManager.js index 7d3727e48..e04a6cea4 100644 --- a/src/cm/lsp/clientManager.js +++ b/src/cm/lsp/clientManager.js @@ -5,11 +5,11 @@ import { languageServerExtensions, } from "@codemirror/lsp-client"; import { MapMode } from "@codemirror/state"; +import Uri from "utils/Uri"; import { ensureServerRunning } from "./serverLauncher"; import serverRegistry from "./serverRegistry"; import { createTransport } from "./transport"; import AcodeWorkspace from "./workspace"; -import Uri from "utils/Uri"; function asArray(value) { if (!value) return []; @@ -159,8 +159,10 @@ export class LspClientManager { async #ensureClient(server, context) { const resolvedRoot = await this.#resolveRootUri(server, context); - const { normalizedRootUri, originalRootUri } = - normalizeRootUriForServer(server, resolvedRoot); + const { normalizedRootUri, originalRootUri } = normalizeRootUriForServer( + server, + resolvedRoot, + ); const key = pluginKey(server.id, normalizedRootUri); if (this.#clients.has(key)) { return this.#clients.get(key); @@ -259,24 +261,15 @@ export class LspClientManager { console.info(`[LSP:${server.id}] server info`, info); } if (normalizedRootUri) { - if ( - originalRootUri && - originalRootUri !== normalizedRootUri - ) { + if (originalRootUri && originalRootUri !== normalizedRootUri) { console.info( `[LSP:${server.id}] root ${normalizedRootUri} (from ${originalRootUri})`, ); } else { - console.info( - `[LSP:${server.id}] root`, - normalizedRootUri, - ); + console.info(`[LSP:${server.id}] root`, normalizedRootUri); } } else if (originalRootUri) { - console.info( - `[LSP:${server.id}] root ignored`, - originalRootUri, - ); + console.info(`[LSP:${server.id}] root ignored`, originalRootUri); } client.__acodeLoggedInfo = true; } diff --git a/src/cm/lsp/diagnostics.js b/src/cm/lsp/diagnostics.js index 3b7f05f54..a917fd5c6 100644 --- a/src/cm/lsp/diagnostics.js +++ b/src/cm/lsp/diagnostics.js @@ -4,6 +4,31 @@ import { MapMode, StateEffect, StateField } from "@codemirror/state"; const setPublishedDiagnostics = StateEffect.define(); +export const LSP_DIAGNOSTICS_EVENT = "acode:lsp-diagnostics-updated"; + +function emitDiagnosticsUpdated() { + if ( + typeof document === "undefined" || + typeof document.dispatchEvent !== "function" + ) { + return; + } + + let event; + try { + event = new CustomEvent(LSP_DIAGNOSTICS_EVENT); + } catch (_) { + try { + event = document.createEvent("CustomEvent"); + event.initCustomEvent(LSP_DIAGNOSTICS_EVENT, false, false, undefined); + } catch (_) { + return; + } + } + + document.dispatchEvent(event); +} + const lspPublishedDiagnostics = StateField.define({ create() { return []; @@ -119,6 +144,7 @@ export function lspDiagnosticsExtension() { effects: storeLspDiagnostics(plugin, params.diagnostics), }); forceLinting(view); + emitDiagnosticsUpdated(); return true; }, }, @@ -142,3 +168,14 @@ export default lspDiagnosticsExtension; export function clearDiagnosticsEffect() { return setPublishedDiagnostics.of([]); } + +export function getLspDiagnostics(state) { + if (!state || typeof state.field !== "function") return []; + try { + const stored = state.field(lspPublishedDiagnostics, false); + if (!stored || !Array.isArray(stored)) return []; + return stored.map((diagnostic) => ({ ...diagnostic })); + } catch (_) { + return []; + } +} diff --git a/src/lib/editorManager.js b/src/lib/editorManager.js index d5e29f856..b0542b23b 100644 --- a/src/lib/editorManager.js +++ b/src/lib/editorManager.js @@ -34,7 +34,10 @@ import { } from "@emmetio/codemirror6-plugin"; import createBaseExtensions from "cm/baseExtensions"; import lspClientManager from "cm/lsp/clientManager"; -import lspDiagnosticsExtension from "cm/lsp/diagnostics"; +import lspDiagnosticsExtension, { + getLspDiagnostics, + LSP_DIAGNOSTICS_EVENT, +} from "cm/lsp/diagnostics"; import { stopManagedServer } from "cm/lsp/serverLauncher"; import serverRegistry from "cm/lsp/serverRegistry"; // CodeMirror mode management @@ -1103,6 +1106,29 @@ async function EditorManager($header, $body) { }, }; + if (typeof document !== "undefined") { + const globalTarget = + typeof globalThis !== "undefined" ? globalThis : document; + const diagnosticsListenerKey = "__acodeDiagnosticsListener"; + const existing = globalTarget?.[diagnosticsListenerKey]; + if (typeof existing === "function") { + document.removeEventListener(LSP_DIAGNOSTICS_EVENT, existing); + } + const listener = () => { + const active = manager.activeFile; + if (active?.type === "editor") { + try { + active.session = editor.state; + } catch (_) {} + } + toggleProblemButton(); + }; + document.addEventListener(LSP_DIAGNOSTICS_EVENT, listener); + if (globalTarget) { + globalTarget[diagnosticsListenerKey] = listener; + } + } + lspClientManager.setOptions({ resolveRoot: resolveRootUriForContext, onClientIdle: ({ server }) => { @@ -1268,6 +1294,7 @@ async function EditorManager($header, $body) { appSettings.on("update:showSideButtons", function () { updateMargin(); updateSideButtonContainer(); + toggleProblemButton(); }); appSettings.on("update:showAnnotations", function () { @@ -1311,6 +1338,7 @@ async function EditorManager($header, $body) { events.emit("file-content-changed", file); manager.onupdate("file-changed"); manager.emit("update", "file-changed"); + toggleProblemButton(); const { autosave } = appSettings.value; if (file.uri && changed && autosave) { @@ -1348,6 +1376,7 @@ async function EditorManager($header, $body) { manager.on(["remove-file"], (file) => { detachLspForFile(file); + toggleProblemButton(); }); manager.on(["rename-file"], (file) => { @@ -1375,6 +1404,7 @@ async function EditorManager($header, $body) { manager.files.push(file); manager.openFileList.append(file.tab); $header.text = file.name; + toggleProblemButton(); } /** @@ -1512,6 +1542,7 @@ async function EditorManager($header, $body) { updateMargin(true); updateSideButtonContainer(); + toggleProblemButton(); // TODO: Implement scroll margin for CodeMirror // editor.renderer.setScrollMargin( // scrollMarginTop, @@ -1738,18 +1769,48 @@ async function EditorManager($header, $body) { /** * Toggles the visibility of the problem button based on the presence of annotations in the files. */ - // TODO: Implement problem button toggle for CodeMirror + function fileHasProblems(file) { + const state = getDiagnosticStateForFile(file); + if (!state) return false; + + const session = file.session; + if (session && typeof session.getAnnotations === "function") { + try { + const annotations = session.getAnnotations() || []; + if (annotations.length) return true; + } catch (_) {} + } + + if (typeof state.field !== "function") return false; + try { + const diagnostics = getLspDiagnostics(state); + return diagnostics.length > 0; + } catch (_) {} + + return false; + } + function toggleProblemButton() { - // const fileWithProblems = manager.files.find((file) => { - // if (file.type !== "editor") return false; - // const annotations = file?.session?.getAnnotations(); - // return !!annotations.length; - // }); - // if (fileWithProblems) { - // problemButton.show(); - // } else { - // problemButton.hide(); - // } + const { showSideButtons } = appSettings.value; + if (!showSideButtons) { + problemButton.hide(); + return; + } + + const hasProblems = manager.files.some((file) => fileHasProblems(file)); + if (hasProblems) { + problemButton.show(); + } else { + problemButton.hide(); + } + } + + function getDiagnosticStateForFile(file) { + if (!file || file.type !== "editor") return null; + if (manager.activeFile?.id === file.id && editor?.state) { + return editor.state; + } + return file.session || null; } /** @@ -1863,6 +1924,8 @@ async function EditorManager($header, $body) { $header.text = file.filename; manager.onupdate("switch-file"); events.emit("switch-file", file); + + toggleProblemButton(); } /** diff --git a/src/pages/problems/problems.js b/src/pages/problems/problems.js index b3d9d5a3c..e79e6289d 100644 --- a/src/pages/problems/problems.js +++ b/src/pages/problems/problems.js @@ -1,4 +1,5 @@ import "./style.scss"; +import { getLspDiagnostics } from "cm/lsp/diagnostics"; import Page from "components/page"; import actionStack from "lib/actionStack"; import EditorFile from "lib/editorFile"; @@ -12,29 +13,17 @@ export default function Problems() { files.forEach((file) => { if (file.type !== "editor") return; - /**@type {[]} */ - const annotations = file.session?.getAnnotations(); + const annotations = collectAnnotations(file); if (!annotations.length) return; + const title = `${file.name} (${annotations.length})`; $content.append(
- {`${file.name} (${annotations.length})`} + {title}
{annotations.map((annotation) => { - let icon = "info"; - - switch (annotation.type) { - case "error": - icon = "cancel"; - break; - - case "warning": - icon = "warningreport_problem"; - break; - - default: - break; - } + const { type, text, row, column } = annotation; + const icon = getIconForType(type); return (
- - {annotation.text} + + {text} - {annotation.row + 1}:{annotation.column + 1} + {row + 1}:{column + 1}
); @@ -78,15 +67,19 @@ export default function Problems() { * @param {MouseEvent} e */ function clickHandler(e) { - const $target = e.target; + const $target = e.target.closest("[data-action='goto']"); + if (!$target) return; const { action } = $target.dataset; if (action === "goto") { const { fileId } = $target.dataset; const annotation = $target.annotation; + if (!annotation) return; + const row = normalizeIndex(annotation.row); + const column = normalizeIndex(annotation.column); editorManager.switchFile(fileId); - editorManager.editor.gotoLine(annotation.row + 1, annotation.column); + editorManager.editor.gotoLine(row + 1, column); $page.hide(); setTimeout(() => { @@ -94,4 +87,110 @@ export default function Problems() { }, 100); } } + + function collectAnnotations(file) { + const annotations = []; + const { session } = file; + const isActiveFile = editorManager.activeFile?.id === file.id; + const state = + isActiveFile && editorManager.editor + ? editorManager.editor.state + : session; + + if (session && typeof session.getAnnotations === "function") { + const aceAnnotations = session.getAnnotations() || []; + for (const item of aceAnnotations) { + if (!item) continue; + const row = normalizeIndex(item.row); + const column = normalizeIndex(item.column); + annotations.push({ + row, + column, + text: item.text || "", + type: normalizeSeverity(item.type), + }); + } + } + + if (state && typeof state.field === "function") { + annotations.push(...readLspAnnotations(state)); + } + + return annotations; + } + + function readLspAnnotations(state) { + const diagnostics = getLspDiagnostics(state); + if (!diagnostics.length) return []; + + const doc = state.doc; + if (!doc || typeof doc.lineAt !== "function") return []; + + return diagnostics + .map((diagnostic) => { + const start = clampPosition(diagnostic.from, doc.length); + let row = 0; + let column = 0; + try { + const line = doc.lineAt(start); + row = Math.max(0, line.number - 1); + column = Math.max(0, start - line.from); + } catch (_) {} + + let message = diagnostic.message || ""; + if (diagnostic.source) { + message = message + ? `${message} (${diagnostic.source})` + : diagnostic.source; + } + + return { + row: normalizeIndex(row), + column: normalizeIndex(column), + text: message, + type: normalizeSeverity(diagnostic.severity), + }; + }) + .filter((annotation) => annotation.text); + } + + function clampPosition(pos, length) { + if (typeof pos !== "number" || Number.isNaN(pos)) return 0; + return Math.max(0, Math.min(pos, Math.max(0, length))); + } + + function normalizeIndex(value) { + if (typeof value === "number" && Number.isFinite(value)) { + return Math.max(0, value); + } + const parsed = Number(value); + if (Number.isFinite(parsed)) { + return Math.max(0, parsed); + } + return 0; + } + + function normalizeSeverity(severity) { + switch (severity) { + case "error": + case "fatal": + return "error"; + case "warn": + case "warning": + return "warning"; + default: + return "info"; + } + } + + function getIconForType(type) { + switch (type) { + case "error": + return "cancel"; + case "warning": + return "warningreport_problem"; + default: + return "info"; + } + } } From 9ef840b95ddeac035b65bd919b831a7e1239f7d7 Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Sun, 19 Oct 2025 15:00:54 +0530 Subject: [PATCH 15/25] feat: add lsp and lint related commands --- src/cm/commandRegistry.js | 173 ++++++++++++++++++++++++++++++++++++++ src/lib/keyBindings.js | 2 +- 2 files changed, 174 insertions(+), 1 deletion(-) diff --git a/src/cm/commandRegistry.js b/src/cm/commandRegistry.js index 96c96c74c..e90e7a6f5 100644 --- a/src/cm/commandRegistry.js +++ b/src/cm/commandRegistry.js @@ -54,6 +54,26 @@ import { undo, } from "@codemirror/commands"; import { indentUnit as indentUnitFacet } from "@codemirror/language"; +import { + closeLintPanel, + nextDiagnostic, + openLintPanel, + previousDiagnostic, +} from "@codemirror/lint"; +import { + LSPPlugin, + closeReferencePanel as lspCloseReferencePanel, + findReferences as lspFindReferences, + formatDocument as lspFormatDocument, + jumpToDeclaration as lspJumpToDeclaration, + jumpToDefinition as lspJumpToDefinition, + jumpToImplementation as lspJumpToImplementation, + jumpToTypeDefinition as lspJumpToTypeDefinition, + nextSignature as lspNextSignature, + prevSignature as lspPrevSignature, + renameSymbol as lspRenameSymbol, + showSignatureHelp as lspShowSignatureHelp, +} from "@codemirror/lsp-client"; import { Compartment, EditorSelection } from "@codemirror/state"; import { keymap } from "@codemirror/view"; import prompt from "dialogs/prompt"; @@ -132,6 +152,8 @@ const CODEMIRROR_COMMAND_MAP = new Map( ); registerCoreCommands(); +registerLspCommands(); +registerLintCommands(); registerCommandsFromKeyBindings(); rebuildKeymap(); @@ -834,6 +856,137 @@ function registerCoreCommands() { }); } +function registerLspCommands() { + addCommand({ + name: "formatDocument", + description: "Format document (Language Server)", + readOnly: false, + requiresView: true, + run: runLspCommand(lspFormatDocument), + }); + addCommand({ + name: "renameSymbol", + description: "Rename symbol (Language Server)", + readOnly: false, + requiresView: true, + run: runLspCommand(lspRenameSymbol), + }); + addCommand({ + name: "showSignatureHelp", + description: "Show signature help", + readOnly: true, + requiresView: true, + run: runLspCommand(lspShowSignatureHelp), + }); + addCommand({ + name: "nextSignature", + description: "Next signature", + readOnly: true, + requiresView: true, + run: runLspCommand(lspNextSignature, { silentOnMissing: true }), + }); + addCommand({ + name: "prevSignature", + description: "Previous signature", + readOnly: true, + requiresView: true, + run: runLspCommand(lspPrevSignature, { silentOnMissing: true }), + }); + addCommand({ + name: "jumpToDefinition", + description: "Go to definition (Language Server)", + readOnly: true, + requiresView: true, + run: runLspCommand(lspJumpToDefinition), + }); + addCommand({ + name: "jumpToDeclaration", + description: "Go to declaration (Language Server)", + readOnly: true, + requiresView: true, + run: runLspCommand(lspJumpToDeclaration), + }); + addCommand({ + name: "jumpToTypeDefinition", + description: "Go to type definition (Language Server)", + readOnly: true, + requiresView: true, + run: runLspCommand(lspJumpToTypeDefinition), + }); + addCommand({ + name: "jumpToImplementation", + description: "Go to implementation (Language Server)", + readOnly: true, + requiresView: true, + run: runLspCommand(lspJumpToImplementation), + }); + addCommand({ + name: "findReferences", + description: "Find references (Language Server)", + readOnly: true, + requiresView: true, + run: runLspCommand(lspFindReferences), + }); + addCommand({ + name: "closeReferencePanel", + description: "Close references panel", + readOnly: true, + requiresView: true, + run(view) { + const resolvedView = resolveView(view); + if (!resolvedView) return false; + return lspCloseReferencePanel(resolvedView); + }, + }); +} + +function registerLintCommands() { + addCommand({ + name: "openLintPanel", + description: "Open lint panel", + readOnly: true, + requiresView: true, + run(view) { + const resolvedView = resolveView(view); + if (!resolvedView) return false; + return openLintPanel(resolvedView); + }, + }); + addCommand({ + name: "closeLintPanel", + description: "Close lint panel", + readOnly: true, + requiresView: true, + run(view) { + const resolvedView = resolveView(view); + if (!resolvedView) return false; + return closeLintPanel(resolvedView); + }, + }); + addCommand({ + name: "nextDiagnostic", + description: "Go to next diagnostic", + readOnly: true, + requiresView: true, + run(view) { + const resolvedView = resolveView(view); + if (!resolvedView) return false; + return nextDiagnostic(resolvedView); + }, + }); + addCommand({ + name: "previousDiagnostic", + description: "Go to previous diagnostic", + readOnly: true, + requiresView: true, + run(view) { + const resolvedView = resolveView(view); + if (!resolvedView) return false; + return previousDiagnostic(resolvedView); + }, + }); +} + function registerCommandsFromKeyBindings() { Object.entries(keyBindings).forEach(([name, binding]) => { if (commandMap.has(name)) return; @@ -894,6 +1047,26 @@ function resolveView(view) { return view || editorManager?.editor || null; } +function notifyLspUnavailable() { + toast?.("Language server not available"); +} + +function runLspCommand(commandFn, options = {}) { + return (view) => { + const resolvedView = resolveView(view); + if (!resolvedView) return false; + const plugin = LSPPlugin.get(resolvedView); + if (!plugin) { + if (!options?.silentOnMissing) { + notifyLspUnavailable(); + } + return false; + } + const result = commandFn(resolvedView); + return result !== false; + }; +} + function humanizeCommandName(name) { return name .replace(/([a-z0-9])([A-Z])/g, "$1 $2") diff --git a/src/lib/keyBindings.js b/src/lib/keyBindings.js index c9c02f325..0d2b8b94d 100644 --- a/src/lib/keyBindings.js +++ b/src/lib/keyBindings.js @@ -202,7 +202,7 @@ const APP_BINDING_CONFIG = [ { name: "problems", description: "Show problems", - key: "Ctrl-Shift-K", + key: null, readOnly: true, editorOnly: true, }, From 51542cd999f95ba75b675f5169f7ac7a4ddbce6d Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Sun, 26 Oct 2025 09:43:09 +0530 Subject: [PATCH 16/25] Simplify base URI extraction in EditorManager --- src/lib/editorManager.js | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/lib/editorManager.js b/src/lib/editorManager.js index b0542b23b..4d6e319e5 100644 --- a/src/lib/editorManager.js +++ b/src/lib/editorManager.js @@ -64,7 +64,6 @@ import ScrollBar from "components/scrollbar"; import SideButton, { sideButtonContainer } from "components/sideButton"; import keyboardHandler, { keydownState } from "handlers/keyboard"; import actions from "handlers/quickTools"; -import Url from "utils/Url"; // TODO: Update EditorFile for CodeMirror compatibility import EditorFile from "./editorFile"; import openFile from "./openFile"; @@ -494,14 +493,7 @@ async function EditorManager($header, $body) { if (uri.startsWith(base)) return base; } catch (_) {} } - if (uri.includes("::")) { - return uri.split("::")[0]; - } - try { - return Url.dirname(uri); - } catch (_) { - return null; - } + return uri; } function detachActiveLsp() { From efe25669dee7401ecc60244732d3a5d57e5ec732 Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Mon, 3 Nov 2025 11:29:16 +0530 Subject: [PATCH 17/25] Implement cursor visibility and auto-scroll in editor --- src/lib/editorManager.js | 105 +++++++++++++++++++++++++++------------ 1 file changed, 73 insertions(+), 32 deletions(-) diff --git a/src/lib/editorManager.js b/src/lib/editorManager.js index 4d6e319e5..1d632cc0f 100644 --- a/src/lib/editorManager.js +++ b/src/lib/editorManager.js @@ -14,7 +14,12 @@ import { import { indentUnit } from "@codemirror/language"; import { search } from "@codemirror/search"; -import { Compartment, EditorState, Prec, StateEffect } from "@codemirror/state"; +import { + Compartment, + EditorState, + Prec, + StateEffect, +} from "@codemirror/state"; import { oneDark } from "@codemirror/theme-one-dark"; import { EditorView, @@ -139,6 +144,23 @@ async function EditorManager($header, $body) { ".cm-scroller": { height: "100%", overflow: "auto" }, }); + const pointerCursorVisibilityExtension = EditorView.updateListener.of( + (update) => { + if (!update.selectionSet) return; + const pointerTriggered = update.transactions.some((tr) => + tr.isUserEvent("pointer") || + tr.isUserEvent("select.pointer") || + tr.isUserEvent("touch") || + tr.isUserEvent("select.touch"), + ); + if (!pointerTriggered) return; + if (isCursorVisible()) return; + requestAnimationFrame(() => { + if (!isCursorVisible()) scrollCursorIntoView({ behavior: "instant" }); + }); + }, + ); + // Compartment to swap editor theme dynamically const themeCompartment = new Compartment(); // Compartments to control indentation, tab width, and font styling dynamically @@ -605,6 +627,7 @@ async function EditorManager($header, $body) { // Default theme themeCompartment.of(oneDark), fixedHeightTheme, + pointerCursorVisibilityExtension, search(), // Ensure read-only can be toggled later via compartment readOnlyCompartment.of(EditorState.readOnly.of(false)), @@ -889,6 +912,7 @@ async function EditorManager($header, $body) { // keep compartment in the state to allow dynamic theme changes later themeCompartment.of(oneDark), fixedHeightTheme, + pointerCursorVisibilityExtension, search(), // Keep dynamic compartments across state swaps ...getBaseExtensionsFromOptions(), @@ -1433,15 +1457,12 @@ async function EditorManager($header, $body) { scroller?.addEventListener("scroll", handleEditorScroll, { passive: true }); handleEditorScroll(); - // TODO: Implement focus event for CodeMirror - // editor.on("focus", async () => { - // const { activeFile } = manager; - // activeFile.focused = true; - // keyboardHandler.on("keyboardShow", scrollCursorIntoView); - // if (isScrolling) return; - // $hScrollbar.hide(); - // $vScrollbar.hide(); - // }); + keyboardHandler.on("keyboardShowStart", () => { + requestAnimationFrame(() => { + scrollCursorIntoView({ behavior: "instant" }); + }); + }); + keyboardHandler.on("keyboardShow", scrollCursorIntoView); // TODO: Implement blur event for CodeMirror // editor.on("blur", async () => { @@ -1547,34 +1568,54 @@ async function EditorManager($header, $body) { /** * Scrolls the cursor into view if it is not currently visible. */ - // TODO: Implement cursor scrolling for CodeMirror - function scrollCursorIntoView() { - // keyboardHandler.off("keyboardShow", scrollCursorIntoView); - // if (isCursorVisible()) return; - // const { teardropSize } = appSettings.value; - // editor.renderer.scrollCursorIntoView(); - // editor.renderer.scrollBy(0, teardropSize + 10); - // editor._emit("scroll-intoview"); + function scrollCursorIntoView(options = {}) { + const view = editor; + const scroller = view?.scrollDOM; + if (!view || !scroller) return; + + const { behavior = "smooth" } = options; + const { head } = view.state.selection.main; + const caret = view.coordsAtPos(head); + if (!caret) return; + + const scrollerRect = scroller.getBoundingClientRect(); + const relativeTop = caret.top - scrollerRect.top + scroller.scrollTop; + const relativeBottom = + caret.bottom - scrollerRect.top + scroller.scrollTop; + const topMargin = 16; + const bottomMargin = + (appSettings.value?.teardropSize || 24) + 12; + + const scrollTop = scroller.scrollTop; + const visibleTop = scrollTop + topMargin; + const visibleBottom = scrollTop + scroller.clientHeight - bottomMargin; + + if (relativeTop < visibleTop) { + const nextTop = Math.max(relativeTop - topMargin, 0); + scroller.scrollTo({ top: nextTop, behavior }); + } else if (relativeBottom > visibleBottom) { + const delta = relativeBottom - visibleBottom; + scroller.scrollTo({ top: scrollTop + delta, behavior }); + } } /** - * Checks if the cursor is visible within the Ace editor. + * Checks if the cursor is visible within the CodeMirror viewport. * @returns {boolean} - True if the cursor is visible, false otherwise. */ - // TODO: Implement cursor visibility check for CodeMirror function isCursorVisible() { - // const { editor, container } = manager; - // const { teardropSize } = appSettings.value; - // const cursorPos = editor.getCursorPosition(); - // const contentTop = container.getBoundingClientRect().top; - // const contentBottom = contentTop + container.clientHeight; - // const cursorTop = editor.renderer.textToScreenCoordinates( - // cursorPos.row, - // cursorPos.column, - // ).pageY; - // const cursorBottom = cursorTop + teardropSize + 10; - // return cursorTop >= contentTop && cursorBottom <= contentBottom; - return true; // Placeholder + const view = editor; + const scroller = view?.scrollDOM; + if (!view || !scroller) return true; + + const { head } = view.state.selection.main; + const caret = view.coordsAtPos(head); + if (!caret) return true; + + const scrollerRect = scroller.getBoundingClientRect(); + return ( + caret.top >= scrollerRect.top && caret.bottom <= scrollerRect.bottom + ); } /** From 7c83617b0ffb7534c4073b4a5bfcc5a9f648a833 Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Fri, 7 Nov 2025 19:45:54 +0530 Subject: [PATCH 18/25] chore: update lsp client lib --- package-lock.json | 110 ++++++++++++++++++++++++++-------------------- package.json | 20 ++++----- 2 files changed, 72 insertions(+), 58 deletions(-) diff --git a/package-lock.json b/package-lock.json index fa43d1e55..a5dc3a3a9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,16 +9,16 @@ "version": "1.11.6", "license": "MIT", "dependencies": { - "@codemirror/autocomplete": "^6.18.6", - "@codemirror/commands": "^6.8.1", + "@codemirror/autocomplete": "^6.19.1", + "@codemirror/commands": "^6.10.0", "@codemirror/lang-cpp": "^6.0.3", "@codemirror/lang-css": "^6.3.1", "@codemirror/lang-go": "^6.0.1", - "@codemirror/lang-html": "^6.4.9", + "@codemirror/lang-html": "^6.4.11", "@codemirror/lang-java": "^6.0.2", "@codemirror/lang-javascript": "^6.2.4", "@codemirror/lang-json": "^6.0.2", - "@codemirror/lang-markdown": "^6.3.4", + "@codemirror/lang-markdown": "^6.5.0", "@codemirror/lang-php": "^6.0.2", "@codemirror/lang-python": "^6.2.1", "@codemirror/lang-rust": "^6.0.2", @@ -27,17 +27,17 @@ "@codemirror/lang-xml": "^6.1.0", "@codemirror/lang-yaml": "^6.1.2", "@codemirror/language": "^6.11.3", - "@codemirror/language-data": "^6.5.1", - "@codemirror/legacy-modes": "^6.5.1", - "@codemirror/lint": "^6.9.0", - "@codemirror/lsp-client": "^6.1.2", + "@codemirror/language-data": "^6.5.2", + "@codemirror/legacy-modes": "^6.5.2", + "@codemirror/lint": "^6.9.2", + "@codemirror/lsp-client": "^6.2.0", "@codemirror/search": "^6.5.11", "@codemirror/state": "^6.5.2", "@codemirror/theme-one-dark": "^6.1.3", - "@codemirror/view": "^6.38.1", + "@codemirror/view": "^6.38.6", "@deadlyjack/ajax": "^1.2.6", "@emmetio/codemirror6-plugin": "^0.4.0", - "@lezer/highlight": "^1.2.1", + "@lezer/highlight": "^1.2.3", "@ungap/custom-elements": "^1.3.0", "@xterm/addon-attach": "^0.11.0", "@xterm/addon-fit": "^0.10.0", @@ -1897,9 +1897,9 @@ "license": "Apache-2.0" }, "node_modules/@codemirror/autocomplete": { - "version": "6.18.6", - "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.18.6.tgz", - "integrity": "sha512-PHHBXFomUs5DF+9tCOM/UoW6XQ4R44lLNNhRaW9PKPTU0D7lIjRg3ElxaJnTwsl/oHiR93WSXDBrekhoUGCPtg==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.19.1.tgz", + "integrity": "sha512-q6NenYkEy2fn9+JyjIxMWcNjzTL/IhwqfzOut1/G3PrIFkrbl4AL7Wkse5tLrQUUyqGoAKU5+Pi5jnnXxH5HGw==", "license": "MIT", "dependencies": { "@codemirror/language": "^6.0.0", @@ -1909,9 +1909,9 @@ } }, "node_modules/@codemirror/commands": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.8.1.tgz", - "integrity": "sha512-KlGVYufHMQzxbdQONiLyGQDUW0itrLZwq3CcY7xpv9ZLRHqzkBSoteocBHtMCoY7/Ci4xhzSrToIeLg7FxHuaw==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.10.0.tgz", + "integrity": "sha512-2xUIc5mHXQzT16JnyOFkh8PvfeXuIut3pslWGfsGOhxP/lpgRm9HOl/mpzLErgt5mXDovqA0d11P21gofRLb9w==", "license": "MIT", "dependencies": { "@codemirror/language": "^6.0.0", @@ -1971,9 +1971,9 @@ } }, "node_modules/@codemirror/lang-html": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/@codemirror/lang-html/-/lang-html-6.4.9.tgz", - "integrity": "sha512-aQv37pIMSlueybId/2PVSP6NPnmurFDVmZwzc7jszd2KAF8qd4VBbvNYPXWQq90WIARjsdVkPbw29pszmHws3Q==", + "version": "6.4.11", + "resolved": "https://registry.npmjs.org/@codemirror/lang-html/-/lang-html-6.4.11.tgz", + "integrity": "sha512-9NsXp7Nwp891pQchI7gPdTwBuSuT3K65NGTHWHNJ55HjYcHLllr0rbIZNdOzas9ztc1EUVBlHou85FFZS4BNnw==", "license": "MIT", "dependencies": { "@codemirror/autocomplete": "^6.0.0", @@ -1984,7 +1984,7 @@ "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/css": "^1.1.0", - "@lezer/html": "^1.3.0" + "@lezer/html": "^1.3.12" } }, "node_modules/@codemirror/lang-java": { @@ -2012,6 +2012,19 @@ "@lezer/javascript": "^1.0.0" } }, + "node_modules/@codemirror/lang-jinja": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@codemirror/lang-jinja/-/lang-jinja-6.0.0.tgz", + "integrity": "sha512-47MFmRcR8UAxd8DReVgj7WJN1WSAMT7OJnewwugZM4XiHWkOjgJQqvEM1NpMj9ALMPyxmlziEI1opH9IaEvmaw==", + "license": "MIT", + "dependencies": { + "@codemirror/lang-html": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.2.0", + "@lezer/lr": "^1.4.0" + } + }, "node_modules/@codemirror/lang-json": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/@codemirror/lang-json/-/lang-json-6.0.2.tgz", @@ -2052,9 +2065,9 @@ } }, "node_modules/@codemirror/lang-markdown": { - "version": "6.3.4", - "resolved": "https://registry.npmjs.org/@codemirror/lang-markdown/-/lang-markdown-6.3.4.tgz", - "integrity": "sha512-fBm0BO03azXnTAsxhONDYHi/qWSI+uSEIpzKM7h/bkIc9fHnFp9y7KTMXKON0teNT97pFhc1a9DQTtWBYEZ7ug==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@codemirror/lang-markdown/-/lang-markdown-6.5.0.tgz", + "integrity": "sha512-0K40bZ35jpHya6FriukbgaleaqzBLZfOh7HuzqbMxBXkbYMJDxfF39c23xOgxFezR+3G+tR2/Mup+Xk865OMvw==", "license": "MIT", "dependencies": { "@codemirror/autocomplete": "^6.7.1", @@ -2199,9 +2212,9 @@ } }, "node_modules/@codemirror/language-data": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@codemirror/language-data/-/language-data-6.5.1.tgz", - "integrity": "sha512-0sWxeUSNlBr6OmkqybUTImADFUP0M3P0IiSde4nc24bz/6jIYzqYSgkOSLS+CBIoW1vU8Q9KUWXscBXeoMVC9w==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@codemirror/language-data/-/language-data-6.5.2.tgz", + "integrity": "sha512-CPkWBKrNS8stYbEU5kwBwTf3JB1kghlbh4FSAwzGW2TEscdeHHH4FGysREW86Mqnj3Qn09s0/6Ea/TutmoTobg==", "license": "MIT", "dependencies": { "@codemirror/lang-angular": "^0.1.0", @@ -2211,6 +2224,7 @@ "@codemirror/lang-html": "^6.0.0", "@codemirror/lang-java": "^6.0.0", "@codemirror/lang-javascript": "^6.0.0", + "@codemirror/lang-jinja": "^6.0.0", "@codemirror/lang-json": "^6.0.0", "@codemirror/lang-less": "^6.0.0", "@codemirror/lang-liquid": "^6.0.0", @@ -2229,18 +2243,18 @@ } }, "node_modules/@codemirror/legacy-modes": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@codemirror/legacy-modes/-/legacy-modes-6.5.1.tgz", - "integrity": "sha512-DJYQQ00N1/KdESpZV7jg9hafof/iBNp9h7TYo1SLMk86TWl9uDsVdho2dzd81K+v4retmK6mdC7WpuOQDytQqw==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@codemirror/legacy-modes/-/legacy-modes-6.5.2.tgz", + "integrity": "sha512-/jJbwSTazlQEDOQw2FJ8LEEKVS72pU0lx6oM54kGpL8t/NJ2Jda3CZ4pcltiKTdqYSRk3ug1B3pil1gsjA6+8Q==", "license": "MIT", "dependencies": { "@codemirror/language": "^6.0.0" } }, "node_modules/@codemirror/lint": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.9.0.tgz", - "integrity": "sha512-wZxW+9XDytH3SKvS8cQzMyQCaaazH8XL1EMHleHe00wVzsv7NBQKVW2yzEHrRhmM7ZOhVdItPbvlRBvMp9ej7A==", + "version": "6.9.2", + "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.9.2.tgz", + "integrity": "sha512-sv3DylBiIyi+xKwRCJAAsBZZZWo82shJ/RTMymLabAdtbkV5cSKwWDeCgtUq3v8flTaXS2y1kKkICuRYtUswyQ==", "license": "MIT", "dependencies": { "@codemirror/state": "^6.0.0", @@ -2249,9 +2263,9 @@ } }, "node_modules/@codemirror/lsp-client": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/@codemirror/lsp-client/-/lsp-client-6.1.2.tgz", - "integrity": "sha512-ZmrIGhXJq7QXKy9er2enVZ9aSjDx9N9x/AByTsLYpoM01VBeo4MN9JvwjyiG7m36TFUHkHO/qY/hN8AvDjU7UQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@codemirror/lsp-client/-/lsp-client-6.2.0.tgz", + "integrity": "sha512-RHUgJCiuthJpIqXefsr1fKNWarC0tBLQ7anh2UynVRYhXHXt0OwP/pIGcMUOMCVVuKB/tmy//2Yp7WbLKorksA==", "license": "MIT", "dependencies": { "@codemirror/autocomplete": "^6.18.6", @@ -2297,9 +2311,9 @@ } }, "node_modules/@codemirror/view": { - "version": "6.38.1", - "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.38.1.tgz", - "integrity": "sha512-RmTOkE7hRU3OVREqFVITWHz6ocgBjv08GoePscAakgVQfciA3SGCEk7mb9IzwW61cKKmlTpHXG6DUE5Ubx+MGQ==", + "version": "6.38.6", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.38.6.tgz", + "integrity": "sha512-qiS0z1bKs5WOvHIAC0Cybmv4AJSkAXgX5aD6Mqd2epSLlVJsQl8NG23jCVouIgkh4All/mrbdsf2UOLFnJw0tw==", "license": "MIT", "dependencies": { "@codemirror/state": "^6.5.0", @@ -2550,9 +2564,9 @@ } }, "node_modules/@lezer/common": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.3.tgz", - "integrity": "sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.3.0.tgz", + "integrity": "sha512-L9X8uHCYU310o99L3/MpJKYxPzXPOS7S0NmBaM7UO/x2Kb2WbmMLSkfvdr1KxRIFYOpbY0Jhn7CfLSUDzL8arQ==", "license": "MIT" }, "node_modules/@lezer/cpp": { @@ -2589,18 +2603,18 @@ } }, "node_modules/@lezer/highlight": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.1.tgz", - "integrity": "sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.3.tgz", + "integrity": "sha512-qXdH7UqTvGfdVBINrgKhDsVTJTxactNNxLk7+UMwZhU13lMHaOBlJe9Vqp907ya56Y3+ed2tlqzys7jDkTmW0g==", "license": "MIT", "dependencies": { - "@lezer/common": "^1.0.0" + "@lezer/common": "^1.3.0" } }, "node_modules/@lezer/html": { - "version": "1.3.10", - "resolved": "https://registry.npmjs.org/@lezer/html/-/html-1.3.10.tgz", - "integrity": "sha512-dqpT8nISx/p9Do3AchvYGV3qYc4/rKr3IBZxlHmpIKam56P47RSHkSF5f13Vu9hebS1jM0HmtJIwLbWz1VIY6w==", + "version": "1.3.12", + "resolved": "https://registry.npmjs.org/@lezer/html/-/html-1.3.12.tgz", + "integrity": "sha512-RJ7eRWdaJe3bsiiLLHjCFT1JMk8m1YP9kaUbvu2rMLEoOnke9mcTVDyfOslsln0LtujdWespjJ39w6zo+RsQYw==", "license": "MIT", "dependencies": { "@lezer/common": "^1.2.0", diff --git a/package.json b/package.json index f2a10edf6..cba738d31 100644 --- a/package.json +++ b/package.json @@ -94,16 +94,16 @@ "webpack-cli": "^6.0.1" }, "dependencies": { - "@codemirror/autocomplete": "^6.18.6", - "@codemirror/commands": "^6.8.1", + "@codemirror/autocomplete": "^6.19.1", + "@codemirror/commands": "^6.10.0", "@codemirror/lang-cpp": "^6.0.3", "@codemirror/lang-css": "^6.3.1", "@codemirror/lang-go": "^6.0.1", - "@codemirror/lang-html": "^6.4.9", + "@codemirror/lang-html": "^6.4.11", "@codemirror/lang-java": "^6.0.2", "@codemirror/lang-javascript": "^6.2.4", "@codemirror/lang-json": "^6.0.2", - "@codemirror/lang-markdown": "^6.3.4", + "@codemirror/lang-markdown": "^6.5.0", "@codemirror/lang-php": "^6.0.2", "@codemirror/lang-python": "^6.2.1", "@codemirror/lang-rust": "^6.0.2", @@ -112,17 +112,17 @@ "@codemirror/lang-xml": "^6.1.0", "@codemirror/lang-yaml": "^6.1.2", "@codemirror/language": "^6.11.3", - "@codemirror/language-data": "^6.5.1", - "@codemirror/legacy-modes": "^6.5.1", - "@codemirror/lint": "^6.9.0", - "@codemirror/lsp-client": "^6.1.2", + "@codemirror/language-data": "^6.5.2", + "@codemirror/legacy-modes": "^6.5.2", + "@codemirror/lint": "^6.9.2", + "@codemirror/lsp-client": "^6.2.0", "@codemirror/search": "^6.5.11", "@codemirror/state": "^6.5.2", "@codemirror/theme-one-dark": "^6.1.3", - "@codemirror/view": "^6.38.1", + "@codemirror/view": "^6.38.6", "@deadlyjack/ajax": "^1.2.6", "@emmetio/codemirror6-plugin": "^0.4.0", - "@lezer/highlight": "^1.2.1", + "@lezer/highlight": "^1.2.3", "@ungap/custom-elements": "^1.3.0", "@xterm/addon-attach": "^0.11.0", "@xterm/addon-fit": "^0.10.0", From f6e1728b5e889e9278126e30fd4984e227ccaeb7 Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Sun, 23 Nov 2025 12:37:10 +0530 Subject: [PATCH 19/25] update --- package-lock.json | 26 +++++++++++++------------- package.json | 6 +++--- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 31afe5fc2..4ecb5ff87 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "1.11.6", "license": "MIT", "dependencies": { - "@codemirror/autocomplete": "^6.19.1", + "@codemirror/autocomplete": "^6.20.0", "@codemirror/commands": "^6.10.0", "@codemirror/lang-cpp": "^6.0.3", "@codemirror/lang-css": "^6.3.1", @@ -30,11 +30,11 @@ "@codemirror/language-data": "^6.5.2", "@codemirror/legacy-modes": "^6.5.2", "@codemirror/lint": "^6.9.2", - "@codemirror/lsp-client": "^6.2.0", + "@codemirror/lsp-client": "^6.2.1", "@codemirror/search": "^6.5.11", "@codemirror/state": "^6.5.2", "@codemirror/theme-one-dark": "^6.1.3", - "@codemirror/view": "^6.38.6", + "@codemirror/view": "^6.38.8", "@deadlyjack/ajax": "^1.2.6", "@emmetio/codemirror6-plugin": "^0.4.0", "@lezer/highlight": "^1.2.3", @@ -1897,9 +1897,9 @@ "license": "Apache-2.0" }, "node_modules/@codemirror/autocomplete": { - "version": "6.19.1", - "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.19.1.tgz", - "integrity": "sha512-q6NenYkEy2fn9+JyjIxMWcNjzTL/IhwqfzOut1/G3PrIFkrbl4AL7Wkse5tLrQUUyqGoAKU5+Pi5jnnXxH5HGw==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.20.0.tgz", + "integrity": "sha512-bOwvTOIJcG5FVo5gUUupiwYh8MioPLQ4UcqbcRf7UQ98X90tCa9E1kZ3Z7tqwpZxYyOvh1YTYbmZE9RTfTp5hg==", "license": "MIT", "dependencies": { "@codemirror/language": "^6.0.0", @@ -2263,12 +2263,12 @@ } }, "node_modules/@codemirror/lsp-client": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@codemirror/lsp-client/-/lsp-client-6.2.0.tgz", - "integrity": "sha512-RHUgJCiuthJpIqXefsr1fKNWarC0tBLQ7anh2UynVRYhXHXt0OwP/pIGcMUOMCVVuKB/tmy//2Yp7WbLKorksA==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@codemirror/lsp-client/-/lsp-client-6.2.1.tgz", + "integrity": "sha512-fjEkEc+H0kG60thaybj5+UpSnt49yAaTzOLSYZC2wlhwNAtDsWO2uZnE2AXiRGQxBVDQBvVj01MsX3F/0Vivjg==", "license": "MIT", "dependencies": { - "@codemirror/autocomplete": "^6.18.6", + "@codemirror/autocomplete": "^6.20.0", "@codemirror/language": "^6.11.0", "@codemirror/lint": "^6.8.5", "@codemirror/state": "^6.5.2", @@ -2311,9 +2311,9 @@ } }, "node_modules/@codemirror/view": { - "version": "6.38.6", - "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.38.6.tgz", - "integrity": "sha512-qiS0z1bKs5WOvHIAC0Cybmv4AJSkAXgX5aD6Mqd2epSLlVJsQl8NG23jCVouIgkh4All/mrbdsf2UOLFnJw0tw==", + "version": "6.38.8", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.38.8.tgz", + "integrity": "sha512-XcE9fcnkHCbWkjeKyi0lllwXmBLtyYb5dt89dJyx23I9+LSh5vZDIuk7OLG4VM1lgrXZQcY6cxyZyk5WVPRv/A==", "license": "MIT", "dependencies": { "@codemirror/state": "^6.5.0", diff --git a/package.json b/package.json index cba738d31..956826ab9 100644 --- a/package.json +++ b/package.json @@ -94,7 +94,7 @@ "webpack-cli": "^6.0.1" }, "dependencies": { - "@codemirror/autocomplete": "^6.19.1", + "@codemirror/autocomplete": "^6.20.0", "@codemirror/commands": "^6.10.0", "@codemirror/lang-cpp": "^6.0.3", "@codemirror/lang-css": "^6.3.1", @@ -115,11 +115,11 @@ "@codemirror/language-data": "^6.5.2", "@codemirror/legacy-modes": "^6.5.2", "@codemirror/lint": "^6.9.2", - "@codemirror/lsp-client": "^6.2.0", + "@codemirror/lsp-client": "^6.2.1", "@codemirror/search": "^6.5.11", "@codemirror/state": "^6.5.2", "@codemirror/theme-one-dark": "^6.1.3", - "@codemirror/view": "^6.38.6", + "@codemirror/view": "^6.38.8", "@deadlyjack/ajax": "^1.2.6", "@emmetio/codemirror6-plugin": "^0.4.0", "@lezer/highlight": "^1.2.3", From b28da61aa25e7209c7e7b29cb12fab55de32c8cf Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Thu, 27 Nov 2025 23:47:59 +0530 Subject: [PATCH 20/25] feat: add vtsls and eslint lsp --- src/cm/lsp/clientManager.js | 64 ++++++++++++++++++++++--- src/cm/lsp/serverRegistry.js | 92 ++++++++++++++++++++++++++++++++++++ 2 files changed, 149 insertions(+), 7 deletions(-) diff --git a/src/cm/lsp/clientManager.js b/src/cm/lsp/clientManager.js index e04a6cea4..3d5e75b11 100644 --- a/src/cm/lsp/clientManager.js +++ b/src/cm/lsp/clientManager.js @@ -2,9 +2,17 @@ import { getIndentUnit, indentUnit } from "@codemirror/language"; import { LSPClient, LSPPlugin, - languageServerExtensions, + findReferencesKeymap, + formatKeymap, + hoverTooltips, + jumpToDefinitionKeymap, + renameKeymap, + serverCompletion, + serverDiagnostics, + signatureHelp, } from "@codemirror/lsp-client"; import { MapMode } from "@codemirror/state"; +import { keymap } from "@codemirror/view"; import Uri from "utils/Uri"; import { ensureServerRunning } from "./serverLauncher"; import serverRegistry from "./serverRegistry"; @@ -24,6 +32,35 @@ function safeString(value) { return value != null ? String(value) : ""; } +const defaultKeymaps = keymap.of([ + ...formatKeymap, + ...renameKeymap, + ...jumpToDefinitionKeymap, + ...findReferencesKeymap, +]); + +function buildBuiltinExtensions({ + includeHover = true, + includeCompletion = true, + includeSignature = true, + includeKeymaps = true, + includeDiagnostics = true, +} = {}) { + const extensions = []; + let diagnosticsExtension = null; + + if (includeCompletion) extensions.push(serverCompletion()); + if (includeHover) extensions.push(hoverTooltips()); + if (includeKeymaps) extensions.push(defaultKeymaps); + if (includeSignature) extensions.push(signatureHelp()); + if (includeDiagnostics) { + diagnosticsExtension = serverDiagnostics(); + extensions.push(diagnosticsExtension); + } + + return { extensions, diagnosticsExtension }; +} + export class LspClientManager { constructor(options = {}) { this.options = { ...options }; @@ -173,22 +210,35 @@ export class LspClientManager { }; const clientConfig = { ...(server.clientConfig || {}) }; + const builtinConfig = clientConfig.builtinExtensions || {}; + const useDefaultExtensions = clientConfig.useDefaultExtensions !== false; + const { extensions: defaultExtensions, diagnosticsExtension } = + useDefaultExtensions + ? buildBuiltinExtensions({ + includeHover: builtinConfig.hover !== false, + includeCompletion: builtinConfig.completion !== false, + includeSignature: builtinConfig.signature !== false, + includeKeymaps: builtinConfig.keymaps !== false, + includeDiagnostics: builtinConfig.diagnostics !== false, + }) + : { extensions: [], diagnosticsExtension: null }; const extraExtensions = asArray(this.options.clientExtensions); const serverExtensions = asArray(clientConfig.extensions); - const builtinExtensions = languageServerExtensions(); const wantsCustomDiagnostics = [ ...extraExtensions, ...serverExtensions, ].some( (ext) => !!ext?.clientCapabilities?.textDocument?.publishDiagnostics, ); + + const filteredBuiltins = + wantsCustomDiagnostics && diagnosticsExtension + ? defaultExtensions.filter((ext) => ext !== diagnosticsExtension) + : defaultExtensions; + const mergedExtensions = [ - ...(wantsCustomDiagnostics - ? builtinExtensions.filter( - (ext) => !ext?.clientCapabilities?.textDocument?.publishDiagnostics, - ) - : builtinExtensions), + ...filteredBuiltins, ...extraExtensions, ...serverExtensions, ]; diff --git a/src/cm/lsp/serverRegistry.js b/src/cm/lsp/serverRegistry.js index cc628c2a7..d2f5b74dd 100644 --- a/src/cm/lsp/serverRegistry.js +++ b/src/cm/lsp/serverRegistry.js @@ -179,6 +179,24 @@ function sanitizeDefinition(definition) { return sanitized; } +function resolveJsTsLanguageId(languageId, languageName) { + const lang = toKey(languageId || languageName); + switch (lang) { + case "tsx": + case "typescriptreact": + return "typescriptreact"; + case "jsx": + case "javascriptreact": + return "javascriptreact"; + case "ts": + return "typescript"; + case "js": + return "javascript"; + default: + return lang || null; + } +} + function notify(event, payload) { listeners.forEach((fn) => { try { @@ -282,6 +300,40 @@ function registerBuiltinServers() { }, }, enabled: false, + resolveLanguageId: ({ languageId, languageName }) => + resolveJsTsLanguageId(languageId, languageName), + }, + { + id: "vtsls", + label: "TypeScript / JavaScript (vtsls)", + languages: [ + "javascript", + "javascriptreact", + "typescript", + "typescriptreact", + "tsx", + "jsx", + ], + transport: { + kind: "websocket", + url: "ws://127.0.0.1:2095", + }, + launcher: { + bridge: { + kind: "axs", + port: 2095, + command: "vtsls", + args: ["--stdio"], + }, + checkCommand: "which vtsls", + install: { + command: + "apk add --no-cache nodejs npm && npm install -g @vtsls/language-server", + }, + }, + enabled: false, + resolveLanguageId: ({ languageId, languageName }) => + resolveJsTsLanguageId(languageId, languageName), }, { id: "python", @@ -311,6 +363,46 @@ function registerBuiltinServers() { }, enabled: false, }, + { + id: "eslint", + label: "ESLint", + languages: [ + "javascript", + "javascriptreact", + "typescript", + "typescriptreact", + "tsx", + "jsx", + ], + transport: { + kind: "websocket", + url: "ws://127.0.0.1:2096", + }, + launcher: { + bridge: { + kind: "axs", + port: 2096, + command: "vscode-eslint-language-server", + args: ["--stdio"], + }, + checkCommand: "which vscode-eslint-language-server", + install: { + command: + "apk add --no-cache nodejs npm && npm install -g vscode-langservers-extracted", + }, + }, + enabled: false, + clientConfig: { + builtinExtensions: { + hover: false, + completion: false, + signature: false, + keymaps: false, + }, + }, + resolveLanguageId: ({ languageId, languageName }) => + resolveJsTsLanguageId(languageId, languageName), + }, { id: "clangd", label: "C / C++ (clangd)", From 024cee1b19222b9a6d09b6aadd2181472cdfb576 Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Fri, 28 Nov 2025 00:02:25 +0530 Subject: [PATCH 21/25] fix: font family on different widget --- src/lib/editorManager.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/lib/editorManager.js b/src/lib/editorManager.js index f9f52d274..59c8343c2 100644 --- a/src/lib/editorManager.js +++ b/src/lib/editorManager.js @@ -199,10 +199,12 @@ async function EditorManager($header, $body) { function makeFontTheme() { const fontSize = appSettings?.value?.fontSize || "12px"; const lineHeight = appSettings?.value?.lineHeight || 1.6; + const fontFamily = getEditorFontFamily(); return EditorView.theme({ "&": { fontSize, lineHeight: String(lineHeight) }, - ".cm-content": { fontFamily: getEditorFontFamily() }, - ".cm-tooltip": { fontFamily: getEditorFontFamily() }, + ".cm-content": { fontFamily }, + ".cm-gutter": { fontFamily }, + ".cm-tooltip, .cm-tooltip *": { fontFamily }, }); } From 47976c73ae53987df51b7077a4b4047af4fd636f Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Fri, 28 Nov 2025 00:02:42 +0530 Subject: [PATCH 22/25] fix --- src/cm/lsp/clientManager.js | 4 ++-- src/lib/editorManager.js | 28 ++++++++++------------------ 2 files changed, 12 insertions(+), 20 deletions(-) diff --git a/src/cm/lsp/clientManager.js b/src/cm/lsp/clientManager.js index 3d5e75b11..4e9242ff2 100644 --- a/src/cm/lsp/clientManager.js +++ b/src/cm/lsp/clientManager.js @@ -1,11 +1,11 @@ import { getIndentUnit, indentUnit } from "@codemirror/language"; import { - LSPClient, - LSPPlugin, findReferencesKeymap, formatKeymap, hoverTooltips, jumpToDefinitionKeymap, + LSPClient, + LSPPlugin, renameKeymap, serverCompletion, serverDiagnostics, diff --git a/src/lib/editorManager.js b/src/lib/editorManager.js index 59c8343c2..836931075 100644 --- a/src/lib/editorManager.js +++ b/src/lib/editorManager.js @@ -14,12 +14,7 @@ import { import { indentUnit } from "@codemirror/language"; import { search } from "@codemirror/search"; -import { - Compartment, - EditorState, - Prec, - StateEffect, -} from "@codemirror/state"; +import { Compartment, EditorState, Prec, StateEffect } from "@codemirror/state"; import { oneDark } from "@codemirror/theme-one-dark"; import { EditorView, @@ -147,11 +142,12 @@ async function EditorManager($header, $body) { const pointerCursorVisibilityExtension = EditorView.updateListener.of( (update) => { if (!update.selectionSet) return; - const pointerTriggered = update.transactions.some((tr) => - tr.isUserEvent("pointer") || - tr.isUserEvent("select.pointer") || - tr.isUserEvent("touch") || - tr.isUserEvent("select.touch"), + const pointerTriggered = update.transactions.some( + (tr) => + tr.isUserEvent("pointer") || + tr.isUserEvent("select.pointer") || + tr.isUserEvent("touch") || + tr.isUserEvent("select.touch"), ); if (!pointerTriggered) return; if (isCursorVisible()) return; @@ -1582,11 +1578,9 @@ async function EditorManager($header, $body) { const scrollerRect = scroller.getBoundingClientRect(); const relativeTop = caret.top - scrollerRect.top + scroller.scrollTop; - const relativeBottom = - caret.bottom - scrollerRect.top + scroller.scrollTop; + const relativeBottom = caret.bottom - scrollerRect.top + scroller.scrollTop; const topMargin = 16; - const bottomMargin = - (appSettings.value?.teardropSize || 24) + 12; + const bottomMargin = (appSettings.value?.teardropSize || 24) + 12; const scrollTop = scroller.scrollTop; const visibleTop = scrollTop + topMargin; @@ -1615,9 +1609,7 @@ async function EditorManager($header, $body) { if (!caret) return true; const scrollerRect = scroller.getBoundingClientRect(); - return ( - caret.top >= scrollerRect.top && caret.bottom <= scrollerRect.bottom - ); + return caret.top >= scrollerRect.top && caret.bottom <= scrollerRect.bottom; } /** From 5bdf88b9309b5c6e886aba48d988ad20786de552 Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Fri, 28 Nov 2025 00:39:09 +0530 Subject: [PATCH 23/25] feat: add lintgutter setting to toggle lsp diag on gutter --- src/cm/lsp/clientManager.js | 5 +++++ src/cm/lsp/diagnostics.js | 39 ++++++++++++++++++++++------------ src/lib/editorManager.js | 20 +++++++++++++++-- src/lib/settings.js | 1 + src/settings/editorSettings.js | 5 +++++ 5 files changed, 55 insertions(+), 15 deletions(-) diff --git a/src/cm/lsp/clientManager.js b/src/cm/lsp/clientManager.js index 4e9242ff2..f09a11e3b 100644 --- a/src/cm/lsp/clientManager.js +++ b/src/cm/lsp/clientManager.js @@ -87,6 +87,7 @@ export class LspClientManager { if (!servers.length) return []; const lspExtensions = []; + const diagnosticsUiExtension = this.options.diagnosticsUiExtension; for (const server of servers) { let targetLanguageId = effectiveLang; @@ -132,6 +133,10 @@ export class LspClientManager { } } + if (diagnosticsUiExtension && lspExtensions.length) { + lspExtensions.push(...asArray(diagnosticsUiExtension)); + } + return lspExtensions; } diff --git a/src/cm/lsp/diagnostics.js b/src/cm/lsp/diagnostics.js index a917fd5c6..ec2ca1f4f 100644 --- a/src/cm/lsp/diagnostics.js +++ b/src/cm/lsp/diagnostics.js @@ -114,7 +114,7 @@ function lspLinterSource(view) { return mapDiagnostics(plugin, view.state); } -export function lspDiagnosticsExtension() { +export function lspDiagnosticsClientExtension() { return { clientCapabilities: { textDocument: { @@ -148,18 +148,31 @@ export function lspDiagnosticsExtension() { return true; }, }, - editorExtension: [ - lspPublishedDiagnostics, - lintGutter(), - linter(lspLinterSource, { - needsRefresh(update) { - return update.transactions.some((tr) => - tr.effects.some((effect) => effect.is(setPublishedDiagnostics)), - ); - }, - autoPanel: true, - }), - ], + }; +} + +export function lspDiagnosticsUiExtension(includeGutter = true) { + const extensions = [ + lspPublishedDiagnostics, + linter(lspLinterSource, { + needsRefresh(update) { + return update.transactions.some((tr) => + tr.effects.some((effect) => effect.is(setPublishedDiagnostics)), + ); + }, + autoPanel: true, + }), + ]; + if (includeGutter) { + extensions.splice(1, 0, lintGutter()); + } + return extensions; +} + +export function lspDiagnosticsExtension(includeGutter = true) { + return { + ...lspDiagnosticsClientExtension(), + editorExtension: lspDiagnosticsUiExtension(includeGutter), }; } diff --git a/src/lib/editorManager.js b/src/lib/editorManager.js index 836931075..3fe8e7079 100644 --- a/src/lib/editorManager.js +++ b/src/lib/editorManager.js @@ -34,9 +34,11 @@ import { } from "@emmetio/codemirror6-plugin"; import createBaseExtensions from "cm/baseExtensions"; import lspClientManager from "cm/lsp/clientManager"; -import lspDiagnosticsExtension, { +import { getLspDiagnostics, LSP_DIAGNOSTICS_EVENT, + lspDiagnosticsClientExtension, + lspDiagnosticsUiExtension, } from "cm/lsp/diagnostics"; import { stopManagedServer } from "cm/lsp/serverLauncher"; import serverRegistry from "cm/lsp/serverRegistry"; @@ -183,6 +185,9 @@ async function EditorManager($header, $body) { const languageCompartment = new Compartment(); // Compartment for LSP extensions so we can swap per file const lspCompartment = new Compartment(); + const diagnosticsClientExt = lspDiagnosticsClientExtension(); + const buildDiagnosticsUiExt = () => + lspDiagnosticsUiExtension(appSettings?.value?.lintGutter !== false); let lspRequestToken = 0; let lastLspUri = null; const UNTITLED_URI_PREFIX = "untitled://acode/"; @@ -1167,7 +1172,8 @@ async function EditorManager($header, $body) { } return null; }, - clientExtensions: [lspDiagnosticsExtension()], + clientExtensions: [diagnosticsClientExt], + diagnosticsUiExtension: buildDiagnosticsUiExt(), }); applyLspSettings(); @@ -1284,6 +1290,16 @@ async function EditorManager($header, $body) { updateEditorLineNumbersFromSettings(); }); + appSettings.on("update:lintGutter", function (value) { + lspClientManager.setOptions({ + diagnosticsUiExtension: lspDiagnosticsUiExtension(value !== false), + }); + const active = manager.activeFile; + if (active?.type === "editor") { + void configureLspForFile(active); + } + }); + // appSettings.on("update:elasticTabstops", function (_value) { // // Not applicable in CodeMirror (Ace-era). No-op for now. // }); diff --git a/src/lib/settings.js b/src/lib/settings.js index 7af57b559..cd201b2e5 100644 --- a/src/lib/settings.js +++ b/src/lib/settings.js @@ -177,6 +177,7 @@ class Settings { showRetryToast: false, showSideButtons: true, showAnnotations: false, + lintGutter: true, rainbowBrackets: true, pluginsDisabled: {}, // pluginId: true/false lsp: { diff --git a/src/settings/editorSettings.js b/src/settings/editorSettings.js index 3110f1bc8..c336ba102 100644 --- a/src/settings/editorSettings.js +++ b/src/settings/editorSettings.js @@ -55,6 +55,11 @@ export default function editorSettings() { text: strings["show line numbers"], checkbox: values.linenumbers, }, + { + key: "lintGutter", + text: strings["lint gutter"] || "Show lint gutter", + checkbox: values.lintGutter ?? true, + }, { key: "lineHeight", text: strings["line height"], From 10a7c2624ae42bc1ae44d696c6c30aca5a81f58c Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Fri, 28 Nov 2025 00:45:04 +0530 Subject: [PATCH 24/25] fix: keep default codemirror lint plugin to be hidden --- src/cm/lsp/diagnostics.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cm/lsp/diagnostics.js b/src/cm/lsp/diagnostics.js index ec2ca1f4f..0076eb931 100644 --- a/src/cm/lsp/diagnostics.js +++ b/src/cm/lsp/diagnostics.js @@ -160,7 +160,8 @@ export function lspDiagnosticsUiExtension(includeGutter = true) { tr.effects.some((effect) => effect.is(setPublishedDiagnostics)), ); }, - autoPanel: true, + // keep panel closed by default + autoPanel: false, }), ]; if (includeGutter) { From 02d08b0f73026db95347bc02fa8b0330e0f1d9f8 Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Fri, 5 Dec 2025 18:56:30 +0530 Subject: [PATCH 25/25] update --- package-lock.json | 5137 ++++++++++++--------------------------------- package.json | 44 +- 2 files changed, 1358 insertions(+), 3823 deletions(-) diff --git a/package-lock.json b/package-lock.json index 437560aab..17fdd73cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -49,23 +49,23 @@ "@xterm/xterm": "^5.5.0", "autosize": "^6.0.1", "codemirror": "^6.0.2", - "cordova": "12.0.0", - "core-js": "^3.45.0", + "cordova": "13.0.0", + "core-js": "^3.47.0", "crypto-js": "^4.2.0", - "dompurify": "^3.2.6", + "dompurify": "^3.3.0", "escape-string-regexp": "^5.0.0", "esprima": "^4.0.1", - "filesize": "^11.0.2", - "html-tag-js": "^2.4.15", - "js-base64": "^3.7.7", + "filesize": "^11.0.13", + "html-tag-js": "^2.4.16", + "js-base64": "^3.7.8", "jszip": "^3.10.1", "markdown-it": "^14.1.0", "markdown-it-anchor": "^9.2.0", "markdown-it-footnote": "^4.0.0", "markdown-it-github-alerts": "^1.0.0", "markdown-it-task-lists": "^2.1.1", - "mime-types": "^3.0.1", - "minimatch": "^10.0.3", + "mime-types": "^3.0.2", + "minimatch": "^10.1.1", "moment": "^2.30.1", "mustache": "^4.2.0", "url-parse": "^1.5.10", @@ -73,15 +73,15 @@ "yargs": "^18.0.0" }, "devDependencies": { - "@babel/core": "^7.28.0", - "@babel/plugin-transform-runtime": "^7.28.0", - "@babel/preset-env": "^7.28.0", - "@babel/runtime": "^7.28.2", - "@babel/runtime-corejs3": "^7.28.2", + "@babel/core": "^7.28.5", + "@babel/plugin-transform-runtime": "^7.28.5", + "@babel/preset-env": "^7.28.5", + "@babel/runtime": "^7.28.4", + "@babel/runtime-corejs3": "^7.28.4", "@biomejs/biome": "2.1.4", "@types/ace": "^0.0.52", "@types/url-parse": "^1.4.11", - "autoprefixer": "^10.4.21", + "autoprefixer": "^10.4.22", "babel-loader": "^10.0.0", "com.foxdebug.acode.rk.exec.proot": "file:src/plugins/proot", "com.foxdebug.acode.rk.exec.terminal": "file:src/plugins/terminal", @@ -90,8 +90,8 @@ "cordova-plugin-advanced-http": "^3.3.1", "cordova-plugin-browser": "file:src/plugins/browser", "cordova-plugin-buildinfo": "file:src/plugins/cordova-plugin-buildinfo", - "cordova-plugin-device": "^2.0.3", - "cordova-plugin-file": "^8.0.1", + "cordova-plugin-device": "^2.1.0", + "cordova-plugin-file": "^8.1.3", "cordova-plugin-ftp": "file:src/plugins/ftp", "cordova-plugin-iap": "file:src/plugins/iap", "cordova-plugin-sdcard": "file:src/plugins/sdcard", @@ -100,32 +100,20 @@ "cordova-plugin-system": "file:src/plugins/system", "cordova-plugin-websocket": "file:src/plugins/websocket", "css-loader": "^7.1.2", - "mini-css-extract-plugin": "^2.9.3", + "mini-css-extract-plugin": "^2.9.4", "path-browserify": "^1.0.1", - "postcss-loader": "^8.1.1", - "prettier": "^3.6.2", - "prettier-plugin-java": "^2.7.4", + "postcss-loader": "^8.2.0", + "prettier": "^3.7.4", + "prettier-plugin-java": "^2.7.7", "raw-loader": "^4.0.2", - "sass": "^1.90.0", - "sass-loader": "^16.0.5", + "sass": "^1.94.2", + "sass-loader": "^16.0.6", "style-loader": "^4.0.0", "terminal": "^0.1.4", - "webpack": "^5.101.0", + "webpack": "^5.103.0", "webpack-cli": "^6.0.1" } }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/code-frame": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", @@ -142,9 +130,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", - "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", + "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", "dev": true, "license": "MIT", "engines": { @@ -152,22 +140,22 @@ } }, "node_modules/@babel/core": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz", - "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", + "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", "dependencies": { - "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.0", + "@babel/generator": "^7.28.5", "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.27.3", - "@babel/helpers": "^7.27.6", - "@babel/parser": "^7.28.0", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.5", "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.0", - "@babel/types": "^7.28.0", + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -183,14 +171,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", - "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.0", - "@babel/types": "^7.28.0", + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -199,17 +187,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", - "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, "node_modules/@babel/helper-annotate-as-pure": { "version": "7.27.3", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", @@ -241,18 +218,18 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz", - "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz", + "integrity": "sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/traverse": "^7.27.1", + "@babel/traverse": "^7.28.5", "semver": "^6.3.1" }, "engines": { @@ -308,14 +285,14 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", - "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -336,15 +313,15 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", - "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.3" + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -437,9 +414,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "dev": true, "license": "MIT", "engines": { @@ -472,27 +449,27 @@ } }, "node_modules/@babel/helpers": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.2.tgz", - "integrity": "sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.27.2", - "@babel/types": "^7.28.2" + "@babel/types": "^7.28.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", - "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.28.0" + "@babel/types": "^7.28.5" }, "bin": { "parser": "bin/babel-parser.js" @@ -502,14 +479,14 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz", - "integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz", + "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/traverse": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -569,14 +546,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz", - "integrity": "sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz", + "integrity": "sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -712,9 +689,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.0.tgz", - "integrity": "sha512-gKKnwjpdx5sER/wl0WN0efUBFzF/56YZO0RJrSYP4CljXnP31ByY7fol89AzomdlLNzI36AvOTmYHsnZTCkq8Q==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.5.tgz", + "integrity": "sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==", "dev": true, "license": "MIT", "dependencies": { @@ -745,13 +722,13 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz", - "integrity": "sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz", + "integrity": "sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.28.3", "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { @@ -762,9 +739,9 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.0.tgz", - "integrity": "sha512-IjM1IoJNw72AZFlj33Cu8X0q2XK/6AaVC3jQu+cgQ5lThWD5ajnuUAml80dqRmOhmPkTH8uAwnpMu9Rvj0LTRA==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz", + "integrity": "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==", "dev": true, "license": "MIT", "dependencies": { @@ -773,7 +750,7 @@ "@babel/helper-globals": "^7.28.0", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1", - "@babel/traverse": "^7.28.0" + "@babel/traverse": "^7.28.4" }, "engines": { "node": ">=6.9.0" @@ -800,14 +777,14 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz", - "integrity": "sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", + "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.28.0" + "@babel/traverse": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -900,9 +877,9 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz", - "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.5.tgz", + "integrity": "sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw==", "dev": true, "license": "MIT", "dependencies": { @@ -999,9 +976,9 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz", - "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.5.tgz", + "integrity": "sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==", "dev": true, "license": "MIT", "dependencies": { @@ -1065,16 +1042,16 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz", - "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz", + "integrity": "sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-module-transforms": "^7.28.3", "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -1166,9 +1143,9 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.0.tgz", - "integrity": "sha512-9VNGikXxzu5eCiQjdE4IZn8sb9q7Xsk5EXLDBKUYg1e/Tve8/05+KJEtcxGxAgCY5t/BpKQM+JEL/yT4tvgiUA==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz", + "integrity": "sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==", "dev": true, "license": "MIT", "dependencies": { @@ -1176,7 +1153,7 @@ "@babel/helper-plugin-utils": "^7.27.1", "@babel/plugin-transform-destructuring": "^7.28.0", "@babel/plugin-transform-parameters": "^7.27.7", - "@babel/traverse": "^7.28.0" + "@babel/traverse": "^7.28.4" }, "engines": { "node": ">=6.9.0" @@ -1219,9 +1196,9 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", - "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.5.tgz", + "integrity": "sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1303,9 +1280,9 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.28.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.1.tgz", - "integrity": "sha512-P0QiV/taaa3kXpLY+sXla5zec4E+4t4Aqc9ggHlfZ7a2cp8/x/Gv08jfwEtn9gnnYIMvHx6aoOZ8XJL8eU71Dg==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz", + "integrity": "sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==", "dev": true, "license": "MIT", "dependencies": { @@ -1352,9 +1329,9 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.0.tgz", - "integrity": "sha512-dGopk9nZrtCs2+nfIem25UuHyt5moSJamArzIoh9/vezUQPmYDOzjaHDCkAzuGJibCIkPup8rMT2+wYB6S73cA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.5.tgz", + "integrity": "sha512-20NUVgOrinudkIBzQ2bNxP08YpKprUkRTiRSd2/Z5GOdPImJGkoN4Z7IQe1T5AdyKI1i5L6RBmluqdSzvaq9/w==", "dev": true, "license": "MIT", "dependencies": { @@ -1521,21 +1498,21 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.0.tgz", - "integrity": "sha512-VmaxeGOwuDqzLl5JUkIRM1X2Qu2uKGxHEQWh+cvvbl7JuJRgKGJSfsEF/bUaxFhJl/XAyxBe7q7qSuTbKFuCyg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.5.tgz", + "integrity": "sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.28.0", + "@babel/compat-data": "^7.28.5", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.3", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-import-assertions": "^7.27.1", "@babel/plugin-syntax-import-attributes": "^7.27.1", @@ -1544,42 +1521,42 @@ "@babel/plugin-transform-async-generator-functions": "^7.28.0", "@babel/plugin-transform-async-to-generator": "^7.27.1", "@babel/plugin-transform-block-scoped-functions": "^7.27.1", - "@babel/plugin-transform-block-scoping": "^7.28.0", + "@babel/plugin-transform-block-scoping": "^7.28.5", "@babel/plugin-transform-class-properties": "^7.27.1", - "@babel/plugin-transform-class-static-block": "^7.27.1", - "@babel/plugin-transform-classes": "^7.28.0", + "@babel/plugin-transform-class-static-block": "^7.28.3", + "@babel/plugin-transform-classes": "^7.28.4", "@babel/plugin-transform-computed-properties": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-destructuring": "^7.28.5", "@babel/plugin-transform-dotall-regex": "^7.27.1", "@babel/plugin-transform-duplicate-keys": "^7.27.1", "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", "@babel/plugin-transform-dynamic-import": "^7.27.1", "@babel/plugin-transform-explicit-resource-management": "^7.28.0", - "@babel/plugin-transform-exponentiation-operator": "^7.27.1", + "@babel/plugin-transform-exponentiation-operator": "^7.28.5", "@babel/plugin-transform-export-namespace-from": "^7.27.1", "@babel/plugin-transform-for-of": "^7.27.1", "@babel/plugin-transform-function-name": "^7.27.1", "@babel/plugin-transform-json-strings": "^7.27.1", "@babel/plugin-transform-literals": "^7.27.1", - "@babel/plugin-transform-logical-assignment-operators": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.28.5", "@babel/plugin-transform-member-expression-literals": "^7.27.1", "@babel/plugin-transform-modules-amd": "^7.27.1", "@babel/plugin-transform-modules-commonjs": "^7.27.1", - "@babel/plugin-transform-modules-systemjs": "^7.27.1", + "@babel/plugin-transform-modules-systemjs": "^7.28.5", "@babel/plugin-transform-modules-umd": "^7.27.1", "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", "@babel/plugin-transform-new-target": "^7.27.1", "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", "@babel/plugin-transform-numeric-separator": "^7.27.1", - "@babel/plugin-transform-object-rest-spread": "^7.28.0", + "@babel/plugin-transform-object-rest-spread": "^7.28.4", "@babel/plugin-transform-object-super": "^7.27.1", "@babel/plugin-transform-optional-catch-binding": "^7.27.1", - "@babel/plugin-transform-optional-chaining": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.28.5", "@babel/plugin-transform-parameters": "^7.27.7", "@babel/plugin-transform-private-methods": "^7.27.1", "@babel/plugin-transform-private-property-in-object": "^7.27.1", "@babel/plugin-transform-property-literals": "^7.27.1", - "@babel/plugin-transform-regenerator": "^7.28.0", + "@babel/plugin-transform-regenerator": "^7.28.4", "@babel/plugin-transform-regexp-modifiers": "^7.27.1", "@babel/plugin-transform-reserved-words": "^7.27.1", "@babel/plugin-transform-shorthand-properties": "^7.27.1", @@ -1619,9 +1596,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.2.tgz", - "integrity": "sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", "dev": true, "license": "MIT", "engines": { @@ -1629,9 +1606,9 @@ } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.28.2.tgz", - "integrity": "sha512-FVFaVs2/dZgD3Y9ZD+AKNKjyGKzwu0C54laAXWUXgLcVXcCX6YZ6GhK2cp7FogSN2OA0Fu+QT8dP3FUdo9ShSQ==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.28.4.tgz", + "integrity": "sha512-h7iEYiW4HebClDEhtvFObtPmIvrd1SSfpI9EhOeKk4CtIK/ngBWFpuhCzhdmRKtg71ylcue+9I6dv54XYO1epQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1657,18 +1634,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", - "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.0", + "@babel/generator": "^7.28.5", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.0", + "@babel/parser": "^7.28.5", "@babel/template": "^7.27.2", - "@babel/types": "^7.28.0", + "@babel/types": "^7.28.5", "debug": "^4.3.1" }, "engines": { @@ -1676,14 +1653,14 @@ } }, "node_modules/@babel/types": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", - "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -2408,117 +2385,50 @@ "node": "20 || >=22" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", "license": "ISC", "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "minipass": "^7.0.4" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=18.0.0" } }, "node_modules/@isaacs/string-locale-compare": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", + "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", "license": "ISC" }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=6.0.0" + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -2534,17 +2444,6 @@ "@jridgewell/trace-mapping": "^0.3.25" } }, - "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", - "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", @@ -2784,89 +2683,92 @@ "node": ">= 8" } }, + "node_modules/@npmcli/agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-4.0.0.tgz", + "integrity": "sha512-kAQTcEN9E8ERLVg5AsGwLNoFb+oEG6engbqAU2P43gD4JEIkNGMHdVQ096FsOAAYpZPB0RSt0zgInKIAS1l5QA==", + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^11.2.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, "node_modules/@npmcli/arborist": { - "version": "6.2.9", + "version": "9.1.8", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-9.1.8.tgz", + "integrity": "sha512-TYAzq0oaXQU+uLfXFbR2wYx62qHIOSg/TYhGWJSphJDypyjdNXC7B/+k29ElC2vWlWfX4OJnhmSY5DTwSFiNpg==", "license": "ISC", "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/fs": "^3.1.0", - "@npmcli/installed-package-contents": "^2.0.2", - "@npmcli/map-workspaces": "^3.0.2", - "@npmcli/metavuln-calculator": "^5.0.0", - "@npmcli/name-from-folder": "^2.0.0", - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^3.0.0", - "@npmcli/query": "^3.0.0", - "@npmcli/run-script": "^6.0.0", - "bin-links": "^4.0.1", - "cacache": "^17.0.4", + "@npmcli/fs": "^5.0.0", + "@npmcli/installed-package-contents": "^4.0.0", + "@npmcli/map-workspaces": "^5.0.0", + "@npmcli/metavuln-calculator": "^9.0.2", + "@npmcli/name-from-folder": "^4.0.0", + "@npmcli/node-gyp": "^5.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/query": "^5.0.0", + "@npmcli/redact": "^4.0.0", + "@npmcli/run-script": "^10.0.0", + "bin-links": "^6.0.0", + "cacache": "^20.0.1", "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^6.1.1", - "json-parse-even-better-errors": "^3.0.0", + "hosted-git-info": "^9.0.0", "json-stringify-nice": "^1.1.4", - "minimatch": "^9.0.0", - "nopt": "^7.0.0", - "npm-install-checks": "^6.0.0", - "npm-package-arg": "^10.1.0", - "npm-pick-manifest": "^8.0.1", - "npm-registry-fetch": "^14.0.3", - "npmlog": "^7.0.1", - "pacote": "^15.0.8", - "parse-conflict-json": "^3.0.0", - "proc-log": "^3.0.0", + "lru-cache": "^11.2.1", + "minimatch": "^10.0.3", + "nopt": "^9.0.0", + "npm-install-checks": "^8.0.0", + "npm-package-arg": "^13.0.0", + "npm-pick-manifest": "^11.0.1", + "npm-registry-fetch": "^19.0.0", + "pacote": "^21.0.2", + "parse-conflict-json": "^5.0.1", + "proc-log": "^6.0.0", + "proggy": "^4.0.0", "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.2", - "read-package-json-fast": "^3.0.2", + "promise-call-limit": "^3.0.1", "semver": "^7.3.7", - "ssri": "^10.0.1", + "ssri": "^13.0.0", "treeverse": "^3.0.0", - "walk-up-path": "^3.0.1" + "walk-up-path": "^4.0.0" }, "bin": { "arborist": "bin/index.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/arborist/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@npmcli/arborist/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/arborist/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "20 || >=22" } }, "node_modules/@npmcli/arborist/node_modules/semver": { - "version": "7.5.4", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -2874,36 +2776,23 @@ "node": ">=10" } }, - "node_modules/@npmcli/arborist/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/@npmcli/fs": { - "version": "3.1.0", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-5.0.0.tgz", + "integrity": "sha512-7OsC1gNORBEawOa5+j2pXN9vsicaIOH5cPXxoR6fJOmH6/EXpJB2CajXOu1fPRFun2m1lktEFX11+P89hqO/og==", "license": "ISC", "dependencies": { "semver": "^7.3.5" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/fs/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@npmcli/fs/node_modules/semver": { - "version": "7.5.4", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -2911,172 +2800,148 @@ "node": ">=10" } }, - "node_modules/@npmcli/fs/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/@npmcli/git": { - "version": "4.1.0", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-7.0.1.tgz", + "integrity": "sha512-+XTFxK2jJF/EJJ5SoAzXk3qwIDfvFc5/g+bD274LZ7uY7LE8sTfG6Z8rOanPl2ZEvZWqNvmEdtXC25cE54VcoA==", "license": "ISC", "dependencies": { - "@npmcli/promise-spawn": "^6.0.0", - "lru-cache": "^7.4.4", - "npm-pick-manifest": "^8.0.0", - "proc-log": "^3.0.0", - "promise-inflight": "^1.0.1", + "@npmcli/promise-spawn": "^9.0.0", + "ini": "^6.0.0", + "lru-cache": "^11.2.1", + "npm-pick-manifest": "^11.0.1", + "proc-log": "^6.0.0", "promise-retry": "^2.0.1", "semver": "^7.3.5", - "which": "^3.0.0" + "which": "^6.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "7.18.3", + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "license": "ISC", "engines": { - "node": ">=12" + "node": ">=16" } }, - "node_modules/@npmcli/git/node_modules/semver": { - "version": "7.5.4", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=10" + "node": "20 || >=22" } }, - "node_modules/@npmcli/git/node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", + "node_modules/@npmcli/git/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" + "bin": { + "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/@npmcli/git/node_modules/which": { - "version": "3.0.1", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.0.tgz", + "integrity": "sha512-f+gEpIKMR9faW/JgAgPK1D7mekkFoqbmiwvNzuhsHetni20QSgzg9Vhn0g2JSJkkfehQnqdUAx7/e15qS1lPxg==", "license": "ISC", "dependencies": { - "isexe": "^2.0.0" + "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@npmcli/git/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/@npmcli/installed-package-contents": { - "version": "2.0.2", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-4.0.0.tgz", + "integrity": "sha512-yNyAdkBxB72gtZ4GrwXCM0ZUedo9nIbOMKfGjt6Cu6DXf0p8y1PViZAKDC8q8kv/fufx0WTjRBdSlyrvnP7hmA==", "license": "ISC", "dependencies": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" + "npm-bundled": "^5.0.0", + "npm-normalize-package-bin": "^5.0.0" }, "bin": { - "installed-package-contents": "lib/index.js" + "installed-package-contents": "bin/index.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@npmcli/map-workspaces": { - "version": "3.0.4", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-5.0.3.tgz", + "integrity": "sha512-o2grssXo1e774E5OtEwwrgoszYRh0lqkJH+Pb9r78UcqdGJRDRfhpM8DvZPjzNLLNYeD/rNbjOKM3Ss5UABROw==", "license": "ISC", "dependencies": { - "@npmcli/name-from-folder": "^2.0.0", - "glob": "^10.2.2", - "minimatch": "^9.0.0", - "read-package-json-fast": "^3.0.0" + "@npmcli/name-from-folder": "^4.0.0", + "@npmcli/package-json": "^7.0.0", + "glob": "^13.0.0", + "minimatch": "^10.0.3" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@npmcli/map-workspaces/node_modules/glob": { - "version": "10.2.7", - "license": "ISC", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", + "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", + "license": "BlueOak-1.0.0", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "path-scurry": "^2.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/@npmcli/metavuln-calculator": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-9.0.3.tgz", + "integrity": "sha512-94GLSYhLXF2t2LAC7pDwLaM4uCARzxShyAQKsirmlNcpidH89VA4/+K1LbJmRMgz5gy65E/QBBWQdUvGLe2Frg==", "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "cacache": "^20.0.0", + "json-parse-even-better-errors": "^5.0.0", + "pacote": "^21.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/metavuln-calculator": { - "version": "5.0.1", - "license": "ISC", - "dependencies": { - "cacache": "^17.0.0", - "json-parse-even-better-errors": "^3.0.0", - "pacote": "^15.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@npmcli/metavuln-calculator/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-5.0.0.tgz", + "integrity": "sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ==", "license": "MIT", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/metavuln-calculator/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@npmcli/metavuln-calculator/node_modules/semver": { - "version": "7.5.4", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -3084,139 +2949,189 @@ "node": ">=10" } }, - "node_modules/@npmcli/metavuln-calculator/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/@npmcli/name-from-folder": { - "version": "2.0.0", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-4.0.0.tgz", + "integrity": "sha512-qfrhVlOSqmKM8i6rkNdZzABj8MKEITGFAY+4teqBziksCQAOLutiAxM1wY2BKEd8KjUSpWmWCYxvXr0y4VTlPg==", "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@npmcli/node-gyp": { - "version": "3.0.0", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-5.0.0.tgz", + "integrity": "sha512-uuG5HZFXLfyFKqg8QypsmgLQW7smiRjVc45bqD/ofZZcR/uxEjgQU8qDPv0s9TEeMUiAAU/GC5bR6++UdTirIQ==", "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@npmcli/package-json": { - "version": "3.1.1", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-7.0.4.tgz", + "integrity": "sha512-0wInJG3j/K40OJt/33ax47WfWMzZTm6OQxB9cDhTt5huCP2a9g2GnlsxmfN+PulItNPIpPrZ+kfwwUil7eHcZQ==", "license": "ISC", "dependencies": { - "@npmcli/git": "^4.1.0", - "glob": "^10.2.2", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^5.0.0", - "npm-normalize-package-bin": "^3.0.1", - "proc-log": "^3.0.0" + "@npmcli/git": "^7.0.0", + "glob": "^13.0.0", + "hosted-git-info": "^9.0.0", + "json-parse-even-better-errors": "^5.0.0", + "proc-log": "^6.0.0", + "semver": "^7.5.3", + "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@npmcli/package-json/node_modules/glob": { - "version": "10.2.7", - "license": "ISC", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", + "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", + "license": "BlueOak-1.0.0", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "path-scurry": "^2.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@npmcli/package-json/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-5.0.0.tgz", + "integrity": "sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ==", "license": "MIT", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@npmcli/package-json/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/@npmcli/package-json/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=10" } }, "node_modules/@npmcli/promise-spawn": { - "version": "6.0.2", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-9.0.1.tgz", + "integrity": "sha512-OLUaoqBuyxeTqUvjA3FZFiXUfYC1alp3Sa99gW3EUDz3tZ3CbXDdcZ7qWKBzicrJleIgucoWamWH1saAmH/l2Q==", "license": "ISC", "dependencies": { - "which": "^3.0.0" + "which": "^6.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "license": "ISC", + "engines": { + "node": ">=16" } }, "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "3.0.1", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.0.tgz", + "integrity": "sha512-f+gEpIKMR9faW/JgAgPK1D7mekkFoqbmiwvNzuhsHetni20QSgzg9Vhn0g2JSJkkfehQnqdUAx7/e15qS1lPxg==", "license": "ISC", "dependencies": { - "isexe": "^2.0.0" + "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@npmcli/query": { - "version": "3.0.0", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/query/-/query-5.0.0.tgz", + "integrity": "sha512-8TZWfTQOsODpLqo9SVhVjHovmKXNpevHU0gO9e+y4V4fRIOneiXy0u0sMP9LmS71XivrEWfZWg50ReH4WRT4aQ==", "license": "ISC", "dependencies": { - "postcss-selector-parser": "^6.0.10" + "postcss-selector-parser": "^7.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/query/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@npmcli/redact": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-4.0.0.tgz", + "integrity": "sha512-gOBg5YHMfZy+TfHArfVogwgfBeQnKbbGo3pSUyK/gSI0AVu+pEiDVcKlQb0D8Mg1LNRZILZ6XG8I5dJ4KuAd9Q==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@npmcli/run-script": { - "version": "6.0.2", + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.3.tgz", + "integrity": "sha512-ER2N6itRkzWbbtVmZ9WKaWxVlKlOeBFF1/7xx+KA5J1xKa4JjUwBdb6tDpk0v1qA+d+VDwHI9qmLcXSWcmi+Rw==", "license": "ISC", "dependencies": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/promise-spawn": "^6.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^3.0.0", - "which": "^3.0.0" + "@npmcli/node-gyp": "^5.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "node-gyp": "^12.1.0", + "proc-log": "^6.0.0", + "which": "^6.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "license": "ISC", + "engines": { + "node": ">=16" } }, "node_modules/@npmcli/run-script/node_modules/which": { - "version": "3.0.1", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.0.tgz", + "integrity": "sha512-f+gEpIKMR9faW/JgAgPK1D7mekkFoqbmiwvNzuhsHetni20QSgzg9Vhn0g2JSJkkfehQnqdUAx7/e15qS1lPxg==", "license": "ISC", "dependencies": { - "isexe": "^2.0.0" + "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@parcel/watcher": { @@ -3529,60 +3444,113 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "license": "MIT", - "optional": true, + "node_modules/@sigstore/bundle": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-4.0.0.tgz", + "integrity": "sha512-NwCl5Y0V6Di0NexvkTqdoVfmjTaQwoLM236r89KEojGmq/jMls8S+zb7yOwAPdXvbwfKDlP+lmXgAL4vKSQT+A==", + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.5.0" + }, "engines": { - "node": ">=14" + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/core": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-3.0.0.tgz", + "integrity": "sha512-NgbJ+aW9gQl/25+GIEGYcCyi8M+ng2/5X04BMuIgoDfgvp18vDcoNHOQjQsG9418HGNYRxG3vfEXaR1ayD37gg==", + "license": "Apache-2.0", + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@sigstore/protobuf-specs": { - "version": "0.1.0", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.5.0.tgz", + "integrity": "sha512-MM8XIwUjN2bwvCg1QvrMtbBmpcSHrkhFSCu1D11NyPvDQ25HEc4oG5/OcQfd/Tlf/OxmKWERDj0zGE23jQaMwA==", "license": "Apache-2.0", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-4.0.1.tgz", + "integrity": "sha512-KFNGy01gx9Y3IBPG/CergxR9RZpN43N+lt3EozEfeoyqm8vEiLxwRl3ZO5sPx3Obv1ix/p7FWOlPc2Jgwfp9PA==", + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.0.0", + "@sigstore/protobuf-specs": "^0.5.0", + "make-fetch-happen": "^15.0.2", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/sign/node_modules/proc-log": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", + "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==", + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@sigstore/tuf": { - "version": "1.0.0", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-4.0.0.tgz", + "integrity": "sha512-0QFuWDHOQmz7t66gfpfNO6aEjoFrdhkJaej/AOqb4kqWZVbPWFZifXZzkxyQBB1OwTbkhdT3LNpMFxwkTvf+2w==", "license": "Apache-2.0", "dependencies": { - "@sigstore/protobuf-specs": "^0.1.0", - "make-fetch-happen": "^11.0.1", - "tuf-js": "^1.1.3" + "@sigstore/protobuf-specs": "^0.5.0", + "tuf-js": "^4.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/verify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-3.0.0.tgz", + "integrity": "sha512-moXtHH33AobOhTZF8xcX1MpOFqdvfCk7v6+teJL8zymBiDXwEsQH6XG9HGx2VIxnJZNm4cNSzflTLDnQLmIdmw==", + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.0.0", + "@sigstore/protobuf-specs": "^0.5.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@sphinxxxx/color-conversion": { "version": "2.2.2", "license": "ISC" }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, "node_modules/@tufjs/canonical-json": { - "version": "1.0.0", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", "license": "MIT", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/@tufjs/models": { - "version": "1.0.4", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-4.0.0.tgz", + "integrity": "sha512-h5x5ga/hh82COe+GoD4+gKUeV4T3iaYOxqLt41GRKApinPI7DMidhCmNVTjKfhCWFJIGXaFJee07XczdT4jdZQ==", "license": "MIT", "dependencies": { - "@tufjs/canonical-json": "1.0.0", - "minimatch": "^9.0.0" + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.5" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@tufjs/models/node_modules/minimatch": { @@ -3995,40 +3963,12 @@ "license": "Apache-2.0" }, "node_modules/abbrev": { - "version": "1.1.1", - "license": "ISC" - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-4.0.0.tgz", + "integrity": "sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==", + "license": "ISC", "engines": { - "node": ">= 0.6" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/acorn": { @@ -4058,40 +3998,17 @@ } }, "node_modules/agent-base": { - "version": "6.0.2", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agentkeepalive": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "depd": "^2.0.0", - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">= 14" } }, "node_modules/ajv": { "version": "8.12.0", + "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -4106,6 +4023,7 @@ }, "node_modules/ajv-formats": { "version": "2.1.1", + "dev": true, "license": "MIT", "dependencies": { "ajv": "^8.0.0" @@ -4157,166 +4075,69 @@ "version": "0.3.1", "license": "MIT" }, - "node_modules/ansi-escapes": { - "version": "3.2.0", + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", + "node_modules/assert-plus": { + "version": "1.0.0", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.8" } }, - "node_modules/ansi-styles": { - "version": "3.2.1", + "node_modules/autoprefixer": { + "version": "10.4.22", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.22.tgz", + "integrity": "sha512-ARe0v/t9gO28Bznv6GgqARmVqcWOV3mfgUPn9becPHMiD3o9BwlRgaeccZnwTpZ7Zwqrm+c1sUSsMxIzQzc8Xg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "browserslist": "^4.27.0", + "caniuse-lite": "^1.0.30001754", + "fraction.js": "^5.3.4", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" }, "engines": { - "node": ">=4" - } - }, - "node_modules/aproba": { - "version": "2.0.0", - "license": "ISC" - }, - "node_modules/are-we-there-yet": { - "version": "4.0.0", - "license": "ISC", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^4.1.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/are-we-there-yet/node_modules/readable-stream": { - "version": "4.4.0", - "license": "MIT", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/array-find-index": { - "version": "1.0.2", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/array-union": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/asn1": { - "version": "0.2.6", - "license": "MIT", - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/async": { - "version": "2.6.4", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "license": "MIT" - }, - "node_modules/atomically": { - "version": "1.7.0", - "license": "MIT", - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.21", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", - "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "browserslist": "^4.24.4", - "caniuse-lite": "^1.0.30001702", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.1.1", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, "node_modules/autosize": { "version": "6.0.1", "license": "MIT" }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "license": "Apache-2.0", - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.12.0", - "license": "MIT" - }, "node_modules/babel-loader": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-10.0.0.tgz", @@ -4463,11 +4284,14 @@ ], "license": "MIT" }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "license": "BSD-3-Clause", - "dependencies": { - "tweetnacl": "^0.14.3" + "node_modules/baseline-browser-mapping": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.2.tgz", + "integrity": "sha512-PxSsosKQjI38iXkmb3d0Y32efqyA0uW4s41u4IVBsLlWLhCiYNpH/AfNOVWRqCQBlD8TFJTz6OUWNd4DFJCnmw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" } }, "node_modules/big-integer": { @@ -4486,20 +4310,25 @@ } }, "node_modules/bin-links": { - "version": "4.0.1", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-6.0.0.tgz", + "integrity": "sha512-X4CiKlcV2GjnCMwnKAfbVWpHa++65th9TuzAEYtZoATiOE2DQKhSp4CJlyLoTqdhBKlXjpXjCTYPNNFS33Fi6w==", "license": "ISC", "dependencies": { - "cmd-shim": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "read-cmd-shim": "^4.0.0", - "write-file-atomic": "^5.0.0" + "cmd-shim": "^8.0.0", + "npm-normalize-package-bin": "^5.0.0", + "proc-log": "^6.0.0", + "read-cmd-shim": "^6.0.0", + "write-file-atomic": "^7.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/bin-links/node_modules/signal-exit": { - "version": "4.0.2", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "license": "ISC", "engines": { "node": ">=14" @@ -4509,63 +4338,18 @@ } }, "node_modules/bin-links/node_modules/write-file-atomic": { - "version": "5.0.1", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-7.0.0.tgz", + "integrity": "sha512-YnlPC6JqnZl6aO4uRc+dx5PHguiR9S6WeoLtpxNT9wIG+BDya7ZNE1q7KOjVgaA73hKhKLpVPgJ5QA9THQ5BRg==", "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^4.0.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, "node_modules/bplist-parser": { "version": "0.3.2", "license": "MIT", @@ -4597,9 +4381,9 @@ } }, "node_modules/browserslist": { - "version": "4.25.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.2.tgz", - "integrity": "sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "dev": true, "funding": [ { @@ -4617,10 +4401,11 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001733", - "electron-to-chromium": "^1.5.199", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.3" + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" @@ -4629,28 +4414,6 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/buffer": { - "version": "6.0.3", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -4658,128 +4421,52 @@ "dev": true, "license": "MIT" }, - "node_modules/builtins": { - "version": "5.0.1", - "license": "MIT", - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/builtins/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/builtins/node_modules/semver": { - "version": "7.5.4", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/builtins/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/cacache": { - "version": "17.1.3", + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-20.0.3.tgz", + "integrity": "sha512-3pUp4e8hv07k1QlijZu6Kn7c9+ZpWWk4j3F8N3xPuCExULobqJydKYOTj1FTq58srkJsXvO7LbGAH4C0ZU3WGw==", "license": "ISC", "dependencies": { - "@npmcli/fs": "^3.1.0", + "@npmcli/fs": "^5.0.0", "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-collect": "^1.0.2", + "glob": "^13.0.0", + "lru-cache": "^11.1.0", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" + "p-map": "^7.0.2", + "ssri": "^13.0.0", + "unique-filename": "^5.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/cacache/node_modules/glob": { - "version": "10.2.7", - "license": "ISC", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", + "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", + "license": "BlueOak-1.0.0", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "path-scurry": "^2.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/cacache/node_modules/lru-cache": { - "version": "7.18.3", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "license": "BlueOak-1.0.0", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "20 || >=22" } }, "node_modules/callsites": { @@ -4790,9 +4477,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001733", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001733.tgz", - "integrity": "sha512-e4QKw/O2Kavj2VQTKZWrwzkt3IxOmIlU6ajRb6LP64LHpBo1J67k2Hi4Vu/TgJWsNtynurfS0uK3MaUTCPfu5Q==", + "version": "1.0.30001759", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001759.tgz", + "integrity": "sha512-Pzfx9fOKoKvevQf8oCXoyNRQ5QyxJj+3O0Rqx2V5oxT61KGx8+n6hV/IUyJeifUci2clnmmKVpvtiqRzgiWjSw==", "dev": true, "funding": [ { @@ -4810,33 +4497,6 @@ ], "license": "CC-BY-4.0" }, - "node_modules/caseless": { - "version": "0.12.0", - "license": "Apache-2.0" - }, - "node_modules/chalk": { - "version": "2.4.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk/node_modules/escape-string-regexp": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "license": "MIT" - }, "node_modules/chevrotain": { "version": "11.0.3", "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-11.0.3.tgz", @@ -4866,10 +4526,12 @@ } }, "node_modules/chownr": { - "version": "2.0.0", - "license": "ISC", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/chrome-trace-event": { @@ -4880,13 +4542,6 @@ "node": ">=6.0" } }, - "node_modules/clean-stack": { - "version": "2.2.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/cli": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", @@ -4901,25 +4556,11 @@ "node": ">=0.2.5" } }, - "node_modules/cli-cursor": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-width": { - "version": "2.2.1", - "license": "ISC" - }, - "node_modules/cliui": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", - "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", - "license": "ISC", + "node_modules/cliui": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "license": "ISC", "dependencies": { "string-width": "^7.2.0", "strip-ansi": "^7.1.0", @@ -4995,10 +4636,12 @@ } }, "node_modules/cmd-shim": { - "version": "6.0.1", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-8.0.0.tgz", + "integrity": "sha512-Jk/BK6NCapZ58BKUxlSI+ouKRbjH1NLZCgJkYoab+vEHUY3f6OzpNBN9u7HFSv9J6TRDGs4PLOHezoKGaFRSCA==", "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/codemirror": { @@ -5016,24 +4659,6 @@ "@codemirror/view": "^6.0.0" } }, - "node_modules/color-convert": { - "version": "1.9.3", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "license": "MIT" - }, - "node_modules/color-support": { - "version": "1.1.3", - "license": "ISC", - "bin": { - "color-support": "bin.js" - } - }, "node_modules/colorette": { "version": "2.0.19", "dev": true, @@ -5047,154 +4672,17 @@ "resolved": "src/plugins/terminal", "link": true }, - "node_modules/combined-stream": { - "version": "1.0.8", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/common-ancestor-path": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", "license": "ISC" }, - "node_modules/compressible": { - "version": "2.0.18", - "license": "MIT", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", - "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "compressible": "~2.0.18", - "debug": "2.6.9", - "negotiator": "~0.6.4", - "on-headers": "~1.1.0", - "safe-buffer": "5.2.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/compression/node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/concat-map": { "version": "0.0.1", + "dev": true, "license": "MIT" }, - "node_modules/conf": { - "version": "10.2.0", - "license": "MIT", - "dependencies": { - "ajv": "^8.6.3", - "ajv-formats": "^2.1.1", - "atomically": "^1.7.0", - "debounce-fn": "^4.0.0", - "dot-prop": "^6.0.1", - "env-paths": "^2.2.1", - "json-schema-typed": "^7.0.3", - "onetime": "^5.1.2", - "pkg-up": "^3.1.0", - "semver": "^7.3.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conf/node_modules/dot-prop": { - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conf/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conf/node_modules/semver": { - "version": "7.5.4", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conf/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/configstore": { "version": "5.0.1", "license": "BSD-2-Clause", @@ -5232,86 +4720,33 @@ "date-now": "^0.1.4" } }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "license": "ISC" - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-disposition/node_modules/safe-buffer": { - "version": "5.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, - "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "license": "MIT" - }, "node_modules/cordova": { - "version": "12.0.0", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/cordova/-/cordova-13.0.0.tgz", + "integrity": "sha512-QAIMwmYLL0jHo4vauWSnRd2fr9l+wajG+F5aUkrC6e4ZQGSTv0wAiRmpqQUkIc1ZdELisKDQws/BjHz5nP/sLw==", "license": "Apache-2.0", "dependencies": { "configstore": "^5.0.1", - "cordova-common": "^5.0.0", - "cordova-create": "^5.0.0", - "cordova-lib": "^12.0.0", + "cordova-common": "^6.0.0", + "cordova-create": "^6.0.0", + "cordova-lib": "^13.0.0", "editor": "^1.0.0", "execa": "^5.1.1", - "fs-extra": "^11.1.1", - "insight": "^0.11.1", - "loud-rejection": "^2.2.0", - "nopt": "^7.1.0", - "semver": "^7.5.0", - "systeminformation": "^5.17.12" + "nopt": "^9.0.0", + "semver": "^7.7.3", + "systeminformation": "^5.27.11" }, "bin": { "cordova": "bin/cordova" }, "engines": { - "node": ">=16.13.0" + "node": ">=20.17.0 || >=22.9.0" } }, "node_modules/cordova-android": { @@ -5419,7 +4854,9 @@ } }, "node_modules/cordova-app-hello-world": { - "version": "6.0.0", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cordova-app-hello-world/-/cordova-app-hello-world-7.0.0.tgz", + "integrity": "sha512-uDTncFkI73ko+wEf6IEO9bw8lQRMQGnfdi5pPMei4P8+plChNcRW5fxjKlhM/8ZrT8OAWiHsQRrP4pIAn3HQ4g==", "license": "Apache-2.0" }, "node_modules/cordova-clipboard": { @@ -5431,6 +4868,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-5.0.1.tgz", "integrity": "sha512-OA2NQ6wvhNz4GytPYwTdlA9xfG7Yf7ufkj4u97m3rUfoL/AECwwj0GVT2CYpk/0Fk6HyuHA3QYCxfDPYsKzI1A==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@netflix/nerror": "^1.1.3", @@ -5451,78 +4889,105 @@ } }, "node_modules/cordova-create": { - "version": "5.0.0", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cordova-create/-/cordova-create-6.0.0.tgz", + "integrity": "sha512-LD41sLn2GsmAlj3576R3xlUM3BP0rt0CYd5LdbzU82WBI3ApMrrhM6xcHDYJfe1nfSL89O/nb/u/h7+7DhPQeA==", "license": "Apache-2.0", "dependencies": { - "cordova-app-hello-world": "^6.0.0", - "cordova-common": "^5.0.0", - "cordova-fetch": "^4.0.0", - "fs-extra": "^11.1.1", + "cordova-app-hello-world": "^7.0.0", + "cordova-common": "^6.0.0", + "cordova-fetch": "^5.0.0", "globby": "^11.1.0", - "import-fresh": "^3.3.0", + "import-fresh": "^3.3.1", "isobject": "^4.0.0", - "npm-package-arg": "^10.1.0", + "npm-package-arg": "^13.0.0", "path-is-inside": "^1.0.2", - "tmp": "^0.2.1", + "tmp": "^0.2.5", "valid-identifier": "0.0.2" }, "engines": { - "node": ">=16.13.0" + "node": ">=20.17.0 || >=22.9.0" + } + }, + "node_modules/cordova-create/node_modules/cordova-common": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-6.0.0.tgz", + "integrity": "sha512-16WPC1DuxVdshV3RoQUXqhcJVdhxWGwiFysA4TkYuboqoev6mgt0JuIJFxmQbzR/DuyuONaVe0L0O0Hf1C08Mg==", + "license": "Apache-2.0", + "dependencies": { + "@netflix/nerror": "^1.1.3", + "ansi": "^0.3.1", + "bplist-parser": "^0.3.2", + "elementtree": "^0.1.7", + "endent": "^2.1.0", + "fast-glob": "^3.3.3", + "plist": "^3.1.0" + }, + "engines": { + "node": ">=20.9.0" } }, "node_modules/cordova-create/node_modules/isobject": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", + "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/cordova-fetch": { - "version": "4.0.0", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cordova-fetch/-/cordova-fetch-5.0.0.tgz", + "integrity": "sha512-fsYnVfx32AOrFO6tw4EkzSig7WjNhze35dKIzdw20zTQetDKEfWA79PpCaoiSeahGi6O2MdnOFabLhEa8se6jg==", "license": "Apache-2.0", "dependencies": { - "@npmcli/arborist": "^6.2.5", - "cordova-common": "^5.0.0", + "@npmcli/arborist": "^9.1.3", + "cordova-common": "^6.0.0", "execa": "^5.1.1", - "fs-extra": "^11.1.1", - "npm-package-arg": "^10.1.0", - "pacote": "^15.1.1", - "pify": "^5.0.0", - "resolve": "^1.22.1", - "semver": "^7.3.8", - "which": "^3.0.0" + "npm-package-arg": "^13.0.0", + "pacote": "^21.0.0", + "resolve": "^1.22.10", + "semver": "^7.7.2", + "which": "^5.0.0" }, "engines": { - "node": ">=16.13.0", + "node": ">=20.9.0", "npm": ">=8.1.0" } }, - "node_modules/cordova-fetch/node_modules/lru-cache": { + "node_modules/cordova-fetch/node_modules/cordova-common": { "version": "6.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-6.0.0.tgz", + "integrity": "sha512-16WPC1DuxVdshV3RoQUXqhcJVdhxWGwiFysA4TkYuboqoev6mgt0JuIJFxmQbzR/DuyuONaVe0L0O0Hf1C08Mg==", + "license": "Apache-2.0", "dependencies": { - "yallist": "^4.0.0" + "@netflix/nerror": "^1.1.3", + "ansi": "^0.3.1", + "bplist-parser": "^0.3.2", + "elementtree": "^0.1.7", + "endent": "^2.1.0", + "fast-glob": "^3.3.3", + "plist": "^3.1.0" }, "engines": { - "node": ">=10" + "node": ">=20.9.0" } }, - "node_modules/cordova-fetch/node_modules/pify": { - "version": "5.0.0", - "license": "MIT", + "node_modules/cordova-fetch/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "license": "ISC", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=16" } }, "node_modules/cordova-fetch/node_modules/semver": { - "version": "7.5.4", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -5531,73 +4996,63 @@ } }, "node_modules/cordova-fetch/node_modules/which": { - "version": "3.0.1", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", "license": "ISC", "dependencies": { - "isexe": "^2.0.0" + "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/cordova-fetch/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/cordova-lib": { - "version": "12.0.1", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/cordova-lib/-/cordova-lib-13.0.0.tgz", + "integrity": "sha512-y8WQ+J6JtiU9C72ujvI3p+ScFJkg0VJwNfaUCqk9nPAssw2C6HltHk+ik/WrLUn6uDmwAM6gmfGUIMU2iVrNxA==", "license": "Apache-2.0", "dependencies": { - "cordova-common": "^5.0.0", - "cordova-fetch": "^4.0.0", - "cordova-serve": "^4.0.1", - "dep-graph": "^1.1.0", + "cordova-common": "^6.0.0", + "cordova-fetch": "^5.0.0", "detect-indent": "^6.1.0", "detect-newline": "^3.1.0", - "elementtree": "^0.1.7", "execa": "^5.1.1", - "fs-extra": "^11.1.0", "globby": "^11.1.0", - "init-package-json": "^5.0.0", - "md5-file": "^5.0.0", - "pify": "^5.0.0", - "semver": "^7.5.0", + "semver": "^7.7.2", "stringify-package": "^1.0.1", - "write-file-atomic": "^5.0.0" + "write-file-atomic": "^7.0.0" }, "engines": { - "node": ">=16.13.0" + "node": ">=20.17.0 || >=22.9.0" } }, - "node_modules/cordova-lib/node_modules/lru-cache": { + "node_modules/cordova-lib/node_modules/cordova-common": { "version": "6.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-6.0.0.tgz", + "integrity": "sha512-16WPC1DuxVdshV3RoQUXqhcJVdhxWGwiFysA4TkYuboqoev6mgt0JuIJFxmQbzR/DuyuONaVe0L0O0Hf1C08Mg==", + "license": "Apache-2.0", "dependencies": { - "yallist": "^4.0.0" + "@netflix/nerror": "^1.1.3", + "ansi": "^0.3.1", + "bplist-parser": "^0.3.2", + "elementtree": "^0.1.7", + "endent": "^2.1.0", + "fast-glob": "^3.3.3", + "plist": "^3.1.0" }, "engines": { - "node": ">=10" - } - }, - "node_modules/cordova-lib/node_modules/pify": { - "version": "5.0.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=20.9.0" } }, "node_modules/cordova-lib/node_modules/semver": { - "version": "7.5.4", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -5606,7 +5061,9 @@ } }, "node_modules/cordova-lib/node_modules/signal-exit": { - "version": "4.0.2", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "license": "ISC", "engines": { "node": ">=14" @@ -5616,20 +5073,18 @@ } }, "node_modules/cordova-lib/node_modules/write-file-atomic": { - "version": "5.0.1", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-7.0.0.tgz", + "integrity": "sha512-YnlPC6JqnZl6aO4uRc+dx5PHguiR9S6WeoLtpxNT9wIG+BDya7ZNE1q7KOjVgaA73hKhKLpVPgJ5QA9THQ5BRg==", "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^4.0.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/cordova-lib/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/cordova-plugin-advanced-http": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/cordova-plugin-advanced-http/-/cordova-plugin-advanced-http-3.3.1.tgz", @@ -5665,10 +5120,11 @@ } }, "node_modules/cordova-plugin-file": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cordova-plugin-file/-/cordova-plugin-file-8.0.1.tgz", - "integrity": "sha512-LgFLNQN58xguoJkNc8eGBmg/Vuaah9lY3Nye27OAfWCKalXPRjExIg5r8L3qlfiJxzmzupjrF0M4KdU2Lovm3Q==", + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/cordova-plugin-file/-/cordova-plugin-file-8.1.3.tgz", + "integrity": "sha512-KlnP3CapNIsKncoWV5lYcIFYDPl0aZ1J3AH3QESlQX1Cb6Ct0p6GrAUvINyrFsjPbWHj8i0b6la6udVsghbATg==", "dev": true, + "license": "Apache-2.0", "engines": { "cordovaDependencies": { "5.0.0": { @@ -5714,92 +5170,29 @@ "resolved": "src/plugins/websocket", "link": true }, - "node_modules/cordova-serve": { - "version": "4.0.1", - "license": "Apache-2.0", - "dependencies": { - "chalk": "^3.0.0", - "compression": "^1.7.4", - "express": "^4.17.1", - "open": "^7.0.3", - "which": "^2.0.2" - }, - "engines": { - "node": ">= 10", - "npm": ">= 5.6.0" - } - }, - "node_modules/cordova-serve/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cordova-serve/node_modules/chalk": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cordova-serve/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/cordova-serve/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/cordova-serve/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cordova-serve/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cordova/node_modules/lru-cache": { + "node_modules/cordova/node_modules/cordova-common": { "version": "6.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-6.0.0.tgz", + "integrity": "sha512-16WPC1DuxVdshV3RoQUXqhcJVdhxWGwiFysA4TkYuboqoev6mgt0JuIJFxmQbzR/DuyuONaVe0L0O0Hf1C08Mg==", + "license": "Apache-2.0", "dependencies": { - "yallist": "^4.0.0" + "@netflix/nerror": "^1.1.3", + "ansi": "^0.3.1", + "bplist-parser": "^0.3.2", + "elementtree": "^0.1.7", + "endent": "^2.1.0", + "fast-glob": "^3.3.3", + "plist": "^3.1.0" }, "engines": { - "node": ">=10" + "node": ">=20.9.0" } }, "node_modules/cordova/node_modules/semver": { - "version": "7.5.4", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -5807,14 +5200,10 @@ "node": ">=10" } }, - "node_modules/cordova/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/core-js": { - "version": "3.45.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.45.0.tgz", - "integrity": "sha512-c2KZL9lP4DjkN3hk/an4pWn5b5ZefhRJnAc42n6LJ19kSnbeRbdQZE5dSeE2LBol1OwJD3X1BQvFTAsa8ReeDA==", + "version": "3.47.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.47.0.tgz", + "integrity": "sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==", "hasInstallScript": true, "license": "MIT", "funding": { @@ -5985,52 +5374,12 @@ "node": ">=4" } }, - "node_modules/currently-unhandled": { - "version": "0.4.1", - "license": "MIT", - "dependencies": { - "array-find-index": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/dashdash": { - "version": "1.14.1", - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", "integrity": "sha512-AsElvov3LoNB7tf5k37H2jYSB+ZZPMT5sG2QjJCcdlV5chIv6htBUBUui2IKRjgtKAKtCBN7Zbwa+MtwLjSeNw==", "dev": true }, - "node_modules/debounce-fn": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "mimic-fn": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/debounce-fn/node_modules/mimic-fn": { - "version": "3.1.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/debug": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", @@ -6052,60 +5401,10 @@ "version": "0.7.0", "license": "MIT" }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/dep-graph": { - "version": "1.1.0", - "dependencies": { - "underscore": "1.2.1" - } - }, - "node_modules/dep-graph/node_modules/underscore": { - "version": "1.2.1" - }, - "node_modules/depd": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, "node_modules/detect-indent": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "license": "MIT", "engines": { "node": ">=8" @@ -6127,6 +5426,8 @@ }, "node_modules/detect-newline": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "license": "MIT", "engines": { "node": ">=8" @@ -6134,6 +5435,8 @@ }, "node_modules/dir-glob": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "license": "MIT", "dependencies": { "path-type": "^4.0.0" @@ -6193,9 +5496,9 @@ } }, "node_modules/dompurify": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.6.tgz", - "integrity": "sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.3.0.tgz", + "integrity": "sha512-r+f6MYR1gGN1eJv0TVQbhA7if/U7P87cdPl3HN5rikqaBSBxLiCb/b9O+2eG0cxz0ghyU+mU1QkbsOwERMYlWQ==", "license": "(MPL-2.0 OR Apache-2.0)", "optionalDependencies": { "@types/trusted-types": "^2.0.7" @@ -6221,31 +5524,14 @@ "node": ">=8" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "license": "MIT" - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "license": "MIT", - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, "node_modules/editor": { "version": "1.0.0", "license": "MIT" }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, "node_modules/electron-to-chromium": { - "version": "1.5.199", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.199.tgz", - "integrity": "sha512-3gl0S7zQd88kCAZRO/DnxtBKuhMO4h0EaQIN3YgZfV6+pW+5+bf2AdQeHNESCoaQqo/gjGVYEf2YM4O5HJQqpQ==", + "version": "1.5.266", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.266.tgz", + "integrity": "sha512-kgWEglXvkEfMH7rxP5OSZZwnaDWT7J9EoZCujhnpLbfi0bbNtRkgdX2E3gt0Uer11c61qCYktB3hwkAS325sJg==", "dev": true, "license": "ISC" }, @@ -6275,10 +5561,6 @@ "@emmetio/css-abbreviation": "^2.1.8" } }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "license": "MIT" - }, "node_modules/emojis-list": { "version": "3.0.0", "dev": true, @@ -6287,29 +5569,16 @@ "node": ">= 4" } }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/encoding": { "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "license": "MIT", "optional": true, "dependencies": { "iconv-lite": "^0.6.2" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, "node_modules/endent": { "version": "2.1.0", "license": "MIT", @@ -6366,6 +5635,8 @@ }, "node_modules/err-code": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", "license": "MIT" }, "node_modules/error-ex": { @@ -6377,25 +5648,6 @@ "is-arrayish": "^0.2.1" } }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/es-module-lexer": { "version": "1.2.1", "dev": true, @@ -6410,11 +5662,6 @@ "node": ">=6" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, "node_modules/escape-string-regexp": { "version": "5.0.0", "license": "MIT", @@ -6483,23 +5730,9 @@ "node": ">=0.10.0" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/events": { "version": "3.3.0", + "dev": true, "license": "MIT", "engines": { "node": ">=0.8.x" @@ -6536,119 +5769,11 @@ } }, "node_modules/exponential-backoff": { - "version": "3.1.1", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", "license": "Apache-2.0" }, - "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/express/node_modules/safe-buffer": { - "version": "5.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/extend": { - "version": "3.0.2", - "license": "MIT" - }, - "node_modules/external-editor": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/external-editor/node_modules/iconv-lite": { - "version": "0.4.24", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/external-editor/node_modules/tmp": { - "version": "0.0.33", - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/extsprintf": { "version": "1.4.1", "engines": [ @@ -6658,6 +5783,7 @@ }, "node_modules/fast-deep-equal": { "version": "3.1.3", + "dev": true, "license": "MIT" }, "node_modules/fast-glob": { @@ -6682,6 +5808,7 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", + "dev": true, "license": "MIT" }, "node_modules/fastest-levenshtein": { @@ -6699,30 +5826,13 @@ "reusify": "^1.0.4" } }, - "node_modules/figures": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/filesize": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-11.0.2.tgz", - "integrity": "sha512-s/iAeeWLk5BschUIpmdrF8RA8lhFZ/xDZgKw1Tan72oGws1/dFGB06nYEiyyssWUfjKNQTNRlrwMVjO9/hvXDw==", + "version": "11.0.13", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-11.0.13.tgz", + "integrity": "sha512-mYJ/qXKvREuO0uH8LTQJ6v7GsUvVOguqxg2VTwQUkyTPXXRRWPdjuUPVqdBrJQhvci48OHlNGRnux+Slr2Rnvw==", "license": "BSD-3-Clause", "engines": { - "node": ">= 10.4.0" + "node": ">= 10.8.0" } }, "node_modules/fill-range": { @@ -6736,36 +5846,6 @@ "node": ">=8" } }, - "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, "node_modules/find-up": { "version": "4.1.0", "dev": true, @@ -6788,108 +5868,27 @@ "flat": "cli.js" } }, - "node_modules/foreground-child": { - "version": "3.1.1", - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.0.2", - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "license": "Apache-2.0", - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.3.3", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/form-data/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" }, "funding": { - "type": "patreon", + "type": "github", "url": "https://github.com/sponsors/rawify" } }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, "node_modules/fs-minipass": { - "version": "3.0.2", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "license": "ISC", "dependencies": { - "minipass": "^5.0.0" + "minipass": "^7.0.3" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -6897,6 +5896,7 @@ }, "node_modules/fs.realpath": { "version": "1.0.0", + "dev": true, "license": "ISC" }, "node_modules/function-bind": { @@ -6907,33 +5907,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gauge": { - "version": "5.0.1", - "license": "ISC", - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^4.0.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/gauge/node_modules/signal-exit": { - "version": "4.0.2", - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "dev": true, @@ -6961,24 +5934,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/get-stream": { "version": "6.0.1", "license": "MIT", @@ -6989,15 +5944,9 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/getpass": { - "version": "0.1.7", - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0" - } - }, "node_modules/glob": { "version": "7.2.3", + "dev": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -7035,6 +5984,7 @@ "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -7043,6 +5993,7 @@ }, "node_modules/glob/node_modules/minimatch": { "version": "3.1.2", + "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -7053,6 +6004,8 @@ }, "node_modules/globby": { "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "license": "MIT", "dependencies": { "array-union": "^2.1.0", @@ -7069,110 +6022,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globby/node_modules/slash": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "license": "ISC" }, - "node_modules/har-schema": { - "version": "2.0.0", - "license": "ISC", - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "license": "MIT", - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/har-validator/node_modules/ajv": { - "version": "6.12.6", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/har-validator/node_modules/json-schema-traverse": { - "version": "0.4.1", - "license": "MIT" - }, - "node_modules/has-flag": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "license": "ISC" - }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -7185,26 +6040,30 @@ } }, "node_modules/hosted-git-info": { - "version": "6.1.1", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.2.tgz", + "integrity": "sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==", "license": "ISC", "dependencies": { - "lru-cache": "^7.5.1" + "lru-cache": "^11.1.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "7.18.3", - "license": "ISC", + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=12" + "node": "20 || >=22" } }, "node_modules/html-tag-js": { - "version": "2.4.15", - "resolved": "https://registry.npmjs.org/html-tag-js/-/html-tag-js-2.4.15.tgz", - "integrity": "sha512-ll1CsDRYPQiUYv8DPUUnDy6k9CTwc7jMObXr7BYV6iuLm7ZUZ4ZSo5CjaU7qh1qL7S4TGaGT+JKqYXksa8dWrg==", + "version": "2.4.16", + "resolved": "https://registry.npmjs.org/html-tag-js/-/html-tag-js-2.4.16.tgz", + "integrity": "sha512-emVNouMF3t2yXpnnjgxCgkMY2W1ZrVC47qsHIJpPKgaH94Nqv355T7E1ZRkV6mWa3vLImHklH7vEcSURDhfq/A==", "license": "MIT" }, "node_modules/htmlparser2": { @@ -7256,58 +6115,35 @@ "license": "MIT" }, "node_modules/http-cache-semantics": { - "version": "4.1.1", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", "license": "BSD-2-Clause" }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/http-proxy-agent": { - "version": "5.0.0", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "license": "MIT", "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/http-signature": { - "version": "1.2.0", - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" + "node": ">= 14" } }, "node_modules/https-proxy-agent": { - "version": "5.0.1", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "license": "MIT", "dependencies": { - "agent-base": "6", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/human-signals": { @@ -7317,15 +6153,10 @@ "node": ">=10.17.0" } }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "license": "MIT", - "dependencies": { - "ms": "^2.0.0" - } - }, "node_modules/iconv-lite": { "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "license": "MIT", "optional": true, "dependencies": { @@ -7341,59 +6172,30 @@ "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } }, "node_modules/ignore": { - "version": "5.2.4", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/ignore-walk": { - "version": "6.0.3", - "license": "ISC", - "dependencies": { - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/ignore-walk/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-8.0.0.tgz", + "integrity": "sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A==", "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "minimatch": "^10.0.3" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/immediate": { @@ -7408,7 +6210,9 @@ "license": "MIT" }, "node_modules/import-fresh": { - "version": "3.3.0", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "license": "MIT", "dependencies": { "parent-module": "^1.0.0", @@ -7446,15 +6250,9 @@ "node": ">=0.8.19" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/inflight": { "version": "1.0.6", + "dev": true, "license": "ISC", "dependencies": { "once": "^1.3.0", @@ -7465,197 +6263,13 @@ "version": "2.0.4", "license": "ISC" }, - "node_modules/init-package-json": { - "version": "5.0.0", - "license": "ISC", - "dependencies": { - "npm-package-arg": "^10.0.0", - "promzard": "^1.0.0", - "read": "^2.0.0", - "read-package-json": "^6.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/init-package-json/node_modules/lru-cache": { + "node_modules/ini": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-6.0.0.tgz", + "integrity": "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==", "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/init-package-json/node_modules/semver": { - "version": "7.5.4", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/init-package-json/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, - "node_modules/inquirer": { - "version": "6.5.2", - "license": "MIT", - "dependencies": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/inquirer/node_modules/ansi-regex": { - "version": "4.1.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/inquirer/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/string-width": { - "version": "2.1.1", - "license": "MIT", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/string-width/node_modules/ansi-regex": { - "version": "3.0.1", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/string-width/node_modules/strip-ansi": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/strip-ansi": { - "version": "5.2.0", - "license": "MIT", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/insight": { - "version": "0.11.1", - "license": "BSD-2-Clause", - "dependencies": { - "async": "^2.6.2", - "chalk": "^4.1.1", - "conf": "^10.0.1", - "inquirer": "^6.3.1", - "lodash.debounce": "^4.0.8", - "os-name": "^4.0.1", - "request": "^2.88.0", - "tough-cookie": "^4.0.0", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/insight/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/insight/node_modules/chalk": { - "version": "4.1.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/insight/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/insight/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/insight/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/insight/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/interpret": { @@ -7666,16 +6280,13 @@ "node": ">=10.13.0" } }, - "node_modules/ip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz", - "integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", + "node_modules/ip-address": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", "license": "MIT", "engines": { - "node": ">= 0.10" + "node": ">= 12" } }, "node_modules/is-arrayish": { @@ -7699,19 +6310,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "license": "MIT", @@ -7719,13 +6317,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/is-glob": { "version": "4.0.3", "license": "MIT", @@ -7736,10 +6327,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-lambda": { - "version": "1.0.1", - "license": "MIT" - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -7792,16 +6379,6 @@ "version": "1.0.0", "license": "MIT" }, - "node_modules/is-wsl": { - "version": "2.2.0", - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/isarray": { "version": "1.0.0", "license": "MIT" @@ -7820,26 +6397,6 @@ "node": ">=0.10.0" } }, - "node_modules/isstream": { - "version": "0.1.2", - "license": "MIT" - }, - "node_modules/jackspeak": { - "version": "2.2.1", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, "node_modules/java-parser": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/java-parser/-/java-parser-3.0.1.tgz", @@ -7894,18 +6451,20 @@ } }, "node_modules/jiti": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", - "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", "dev": true, + "license": "MIT", "bin": { - "jiti": "bin/jiti.js" + "jiti": "lib/jiti-cli.mjs" } }, "node_modules/js-base64": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz", - "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==" + "version": "3.7.8", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.8.tgz", + "integrity": "sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==", + "license": "BSD-3-Clause" }, "node_modules/js-tokens": { "version": "4.0.0", @@ -7927,10 +6486,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsbn": { - "version": "0.1.1", - "license": "MIT" - }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", @@ -7992,29 +6547,20 @@ "dev": true, "license": "MIT" }, - "node_modules/json-schema": { - "version": "0.4.0", - "license": "(AFL-2.1 OR BSD-3-Clause)" - }, "node_modules/json-schema-traverse": { "version": "1.0.0", + "dev": true, "license": "MIT" }, - "node_modules/json-schema-typed": { - "version": "7.0.3", - "license": "BSD-2-Clause" - }, "node_modules/json-stringify-nice": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", + "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", "license": "ISC", "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "license": "ISC" - }, "node_modules/json5": { "version": "2.2.3", "dev": true, @@ -8026,43 +6572,15 @@ "node": ">=6" } }, - "node_modules/jsonfile": { - "version": "6.1.0", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, "node_modules/jsonparse": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "engines": [ "node >= 0.2.0" ], "license": "MIT" }, - "node_modules/jsprim": { - "version": "1.4.2", - "license": "MIT", - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/jsprim/node_modules/extsprintf": { - "version": "1.3.0", - "engines": [ - "node >=0.6.0" - ], - "license": "MIT" - }, "node_modules/jszip": { "version": "3.10.1", "license": "(MIT OR GPL-3.0-or-later)", @@ -8075,10 +6593,14 @@ }, "node_modules/just-diff": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz", + "integrity": "sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==", "license": "MIT" }, "node_modules/just-diff-apply": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz", + "integrity": "sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==", "license": "MIT" }, "node_modules/kind-of": { @@ -8113,11 +6635,17 @@ } }, "node_modules/loader-runner": { - "version": "4.3.0", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", + "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", "dev": true, "license": "MIT", "engines": { "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/loader-utils": { @@ -8157,22 +6685,13 @@ }, "node_modules/lodash.debounce": { "version": "4.0.8", + "dev": true, "license": "MIT" }, "node_modules/lodash.zip": { "version": "4.2.0", - "license": "MIT" - }, - "node_modules/loud-rejection": { - "version": "2.2.0", - "license": "MIT", - "dependencies": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } + "dev": true, + "license": "MIT" }, "node_modules/lru-cache": { "version": "5.1.1", @@ -8184,45 +6703,26 @@ "yallist": "^3.0.2" } }, - "node_modules/macos-release": { - "version": "2.5.1", - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/make-fetch-happen": { - "version": "11.1.1", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-15.0.3.tgz", + "integrity": "sha512-iyyEpDty1mwW3dGlYXAJqC/azFn5PPvgKVwXayOGBSmKLxhKZ9fg4qIan2ePpp1vJIwfFiO34LAPZgq9SZW9Aw==", "license": "ISC", "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", + "@npmcli/agent": "^4.0.0", + "cacache": "^20.0.1", "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^5.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", + "negotiator": "^1.0.0", + "proc-log": "^6.0.0", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" + "ssri": "^13.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/lru-cache": { - "version": "7.18.3", - "license": "ISC", - "engines": { - "node": ">=12" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/markdown-it": { @@ -8288,37 +6788,11 @@ "node": ">= 18" } }, - "node_modules/md5-file": { - "version": "5.0.0", - "license": "MIT", - "bin": { - "md5-file": "cli.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/mdurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==" }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/merge-stream": { "version": "2.0.0", "license": "MIT" @@ -8330,13 +6804,6 @@ "node": ">= 8" } }, - "node_modules/methods": { - "version": "1.1.2", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -8350,34 +6817,28 @@ "node": ">=8.6" } }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/mime-db": { "version": "1.52.0", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "license": "MIT", "dependencies": { "mime-db": "^1.54.0" }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/mime-types/node_modules/mime-db": { @@ -8397,9 +6858,9 @@ } }, "node_modules/mini-css-extract-plugin": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.3.tgz", - "integrity": "sha512-tRA0+PsS4kLVijnN1w9jUu5lkxBwUk9E8SbgEB5dBJqchE6pVYdawROG6uQtpmAri7tdCK9i7b1bULeVWqS6Ag==", + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.4.tgz", + "integrity": "sha512-ZWYT7ln73Hptxqxk2DxPU9MmapXRhxkJD6tkSR04dnQxm8BGu2hzgKLugK5yySD97u/8yy7Ma7E76k9ZdvtjkQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8418,10 +6879,10 @@ } }, "node_modules/minimatch": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", - "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", - "license": "ISC", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/brace-expansion": "^5.0.0" }, @@ -8433,46 +6894,38 @@ } }, "node_modules/minipass": { - "version": "5.0.0", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "license": "ISC", "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/minipass-collect": { - "version": "1.0.2", - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-collect/node_modules/minipass": { - "version": "3.3.6", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "minipass": "^7.0.3" }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/minipass-collect/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/minipass-fetch": { - "version": "3.0.3", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-5.0.0.tgz", + "integrity": "sha512-fiCdUALipqgPWrOVTz9fw0XhcazULXOSU6ie40DDbX1F49p1dBrSRBuswndTx1x3vEb/g0FT7vC4c4C2u/mh3A==", "license": "MIT", "dependencies": { - "minipass": "^5.0.0", + "minipass": "^7.0.3", "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" + "minizlib": "^3.0.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" }, "optionalDependencies": { "encoding": "^0.1.13" @@ -8480,6 +6933,8 @@ }, "node_modules/minipass-flush": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "license": "ISC", "dependencies": { "minipass": "^3.0.0" @@ -8490,6 +6945,8 @@ }, "node_modules/minipass-flush/node_modules/minipass": { "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -8500,32 +6957,14 @@ }, "node_modules/minipass-flush/node_modules/yallist": { "version": "4.0.0", - "license": "ISC" - }, - "node_modules/minipass-json-stream": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/minipass-json-stream/node_modules/minipass": { - "version": "3.3.6", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-json-stream/node_modules/yallist": { - "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "license": "ISC" }, "node_modules/minipass-pipeline": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "license": "ISC", "dependencies": { "minipass": "^3.0.0" @@ -8536,6 +6975,8 @@ }, "node_modules/minipass-pipeline/node_modules/minipass": { "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -8546,10 +6987,14 @@ }, "node_modules/minipass-pipeline/node_modules/yallist": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "license": "ISC" }, "node_modules/minipass-sized": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", "license": "ISC", "dependencies": { "minipass": "^3.0.0" @@ -8560,6 +7005,8 @@ }, "node_modules/minipass-sized/node_modules/minipass": { "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -8570,41 +7017,20 @@ }, "node_modules/minipass-sized/node_modules/yallist": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "license": "ISC" }, "node_modules/minizlib": { - "version": "2.1.2", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", "license": "MIT", "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" + "minipass": "^7.1.2" }, "engines": { - "node": ">=10" + "node": ">= 18" } }, "node_modules/moment": { @@ -8629,10 +7055,6 @@ "mustache": "bin/mustache" } }, - "node_modules/mute-stream": { - "version": "0.0.7", - "license": "ISC" - }, "node_modules/nanoid": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", @@ -8652,7 +7074,9 @@ } }, "node_modules/negotiator": { - "version": "0.6.3", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -8672,190 +7096,87 @@ "optional": true }, "node_modules/node-gyp": { - "version": "9.4.0", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-12.1.0.tgz", + "integrity": "sha512-W+RYA8jBnhSr2vrTtlPYPc1K+CSjGpVDRZxcqJcERZ8ND3A1ThWPHRwctTx3qC3oW99jt726jhdz3Y6ky87J4g==", "license": "MIT", "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", - "glob": "^7.1.4", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^11.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", + "make-fetch-happen": "^15.0.0", + "nopt": "^9.0.0", + "proc-log": "^6.0.0", "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" + "tar": "^7.5.2", + "tinyglobby": "^0.2.12", + "which": "^6.0.0" }, "bin": { "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": "^12.13 || ^14.13 || >=16" - } - }, - "node_modules/node-gyp/node_modules/are-we-there-yet": { - "version": "3.0.1", - "license": "ISC", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/node-gyp/node_modules/gauge": { - "version": "4.0.4", + "node_modules/node-gyp/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "license": "ISC", - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=16" } }, - "node_modules/node-gyp/node_modules/lru-cache": { - "version": "6.0.0", + "node_modules/node-gyp/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" + "bin": { + "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, - "node_modules/node-gyp/node_modules/nopt": { + "node_modules/node-gyp/node_modules/which": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.0.tgz", + "integrity": "sha512-f+gEpIKMR9faW/JgAgPK1D7mekkFoqbmiwvNzuhsHetni20QSgzg9Vhn0g2JSJkkfehQnqdUAx7/e15qS1lPxg==", "license": "ISC", "dependencies": { - "abbrev": "^1.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/node-gyp/node_modules/npmlog": { - "version": "6.0.2", - "license": "ISC", - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/node-gyp/node_modules/readable-stream": { - "version": "3.6.2", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/node-gyp/node_modules/semver": { - "version": "7.5.4", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" + "isexe": "^3.1.1" }, "bin": { - "semver": "bin/semver.js" + "node-which": "bin/which.js" }, "engines": { - "node": ">=10" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/node-gyp/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", "dev": true, "license": "MIT" }, "node_modules/nopt": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", - "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-9.0.0.tgz", + "integrity": "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==", "license": "ISC", "dependencies": { - "abbrev": "^2.0.0" + "abbrev": "^4.0.0" }, "bin": { "nopt": "bin/nopt.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/nopt/node_modules/abbrev": { - "version": "2.0.0", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/normalize-package-data": { - "version": "5.0.0", - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^6.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/normalize-package-data/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "7.5.4", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/normalize-package-data/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/normalize-range": { "version": "0.1.2", "dev": true, @@ -8865,41 +7186,34 @@ } }, "node_modules/npm-bundled": { - "version": "3.0.0", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-5.0.0.tgz", + "integrity": "sha512-JLSpbzh6UUXIEoqPsYBvVNVmyrjVZ1fzEFbqxKkTJQkWBO3xFzFT+KDnSKQWwOQNbuWRwt5LSD6HOTLGIWzfrw==", "license": "ISC", "dependencies": { - "npm-normalize-package-bin": "^3.0.0" + "npm-normalize-package-bin": "^5.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm-install-checks": { - "version": "6.1.1", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-8.0.0.tgz", + "integrity": "sha512-ScAUdMpyzkbpxoNekQ3tNRdFI8SJ86wgKZSQZdUxT+bj0wVFpsEMWnkXP0twVe1gJyNF5apBWDJhhIbgrIViRA==", "license": "BSD-2-Clause", "dependencies": { "semver": "^7.1.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-install-checks/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm-install-checks/node_modules/semver": { - "version": "7.5.4", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -8907,46 +7221,35 @@ "node": ">=10" } }, - "node_modules/npm-install-checks/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-package-arg": { - "version": "10.1.0", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-5.0.0.tgz", + "integrity": "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag==", "license": "ISC", - "dependencies": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm-package-arg/node_modules/lru-cache": { - "version": "6.0.0", + "node_modules/npm-package-arg": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-13.0.2.tgz", + "integrity": "sha512-IciCE3SY3uE84Ld8WZU23gAPPV9rIYod4F+rc+vJ7h7cwAJt9Vk6TVsK60ry7Uj3SRS3bqRRIGuTp9YVlk6WNA==", "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "hosted-git-info": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^7.0.0" }, "engines": { - "node": ">=10" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm-package-arg/node_modules/semver": { - "version": "7.5.4", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -8954,49 +7257,39 @@ "node": ">=10" } }, - "node_modules/npm-package-arg/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/npm-packlist": { - "version": "7.0.4", + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.3.tgz", + "integrity": "sha512-zPukTwJMOu5X5uvm0fztwS5Zxyvmk38H/LfidkOMt3gbZVCyro2cD/ETzwzVPcWZA3JOyPznfUN/nkyFiyUbxg==", "license": "ISC", "dependencies": { - "ignore-walk": "^6.0.0" + "ignore-walk": "^8.0.0", + "proc-log": "^6.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm-pick-manifest": { - "version": "8.0.1", + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-11.0.3.tgz", + "integrity": "sha512-buzyCfeoGY/PxKqmBqn1IUJrZnUi1VVJTdSSRPGI60tJdUhUoSQFhs0zycJokDdOznQentgrpf8LayEHyyYlqQ==", "license": "ISC", "dependencies": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^10.0.0", + "npm-install-checks": "^8.0.0", + "npm-normalize-package-bin": "^5.0.0", + "npm-package-arg": "^13.0.0", "semver": "^7.3.5" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-pick-manifest/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm-pick-manifest/node_modules/semver": { - "version": "7.5.4", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -9004,24 +7297,23 @@ "node": ">=10" } }, - "node_modules/npm-pick-manifest/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/npm-registry-fetch": { - "version": "14.0.5", + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-19.1.1.tgz", + "integrity": "sha512-TakBap6OM1w0H73VZVDf44iFXsOS3h+L4wVMXmbWOQroZgFhMch0juN6XSzBNlD965yIKvWg2dfu7NSiaYLxtw==", "license": "ISC", "dependencies": { - "make-fetch-happen": "^11.0.0", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^10.0.0", - "proc-log": "^3.0.0" + "@npmcli/redact": "^4.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^15.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^5.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^13.0.0", + "proc-log": "^6.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm-run-path": { @@ -9034,63 +7326,13 @@ "node": ">=8" } }, - "node_modules/npmlog": { - "version": "7.0.1", - "license": "ISC", - "dependencies": { - "are-we-there-yet": "^4.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^5.0.0", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "license": "Apache-2.0", - "engines": { - "node": "*" - } - }, - "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/objectorarray": { "version": "1.0.5", "license": "ISC" }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", - "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/once": { "version": "1.4.0", + "dev": true, "license": "ISC", "dependencies": { "wrappy": "1" @@ -9109,43 +7351,9 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/open": { - "version": "7.4.2", - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/os-name": { - "version": "4.0.1", - "license": "MIT", - "dependencies": { - "macos-release": "^2.5.0", - "windows-release": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/p-finally": { "version": "1.0.0", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -9153,6 +7361,7 @@ }, "node_modules/p-limit": { "version": "2.3.0", + "dev": true, "license": "MIT", "dependencies": { "p-try": "^2.0.0" @@ -9176,13 +7385,12 @@ } }, "node_modules/p-map": { - "version": "4.0.0", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", + "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -9190,39 +7398,41 @@ }, "node_modules/p-try": { "version": "2.2.0", + "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/pacote": { - "version": "15.2.0", + "version": "21.0.4", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.0.4.tgz", + "integrity": "sha512-RplP/pDW0NNNDh3pnaoIWYPvNenS7UqMbXyvMqJczosiFWTeGGwJC2NQBLqKf4rGLFfwCOnntw1aEp9Jiqm1MA==", "license": "ISC", "dependencies": { - "@npmcli/git": "^4.0.0", - "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/promise-spawn": "^6.0.1", - "@npmcli/run-script": "^6.0.0", - "cacache": "^17.0.0", + "@npmcli/git": "^7.0.0", + "@npmcli/installed-package-contents": "^4.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "@npmcli/run-script": "^10.0.0", + "cacache": "^20.0.0", "fs-minipass": "^3.0.0", - "minipass": "^5.0.0", - "npm-package-arg": "^10.0.0", - "npm-packlist": "^7.0.0", - "npm-pick-manifest": "^8.0.0", - "npm-registry-fetch": "^14.0.0", - "proc-log": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^13.0.0", + "npm-packlist": "^10.0.1", + "npm-pick-manifest": "^11.0.1", + "npm-registry-fetch": "^19.0.0", + "proc-log": "^6.0.0", "promise-retry": "^2.0.1", - "read-package-json": "^6.0.0", - "read-package-json-fast": "^3.0.0", - "sigstore": "^1.3.0", - "ssri": "^10.0.0", - "tar": "^6.1.11" + "sigstore": "^4.0.0", + "ssri": "^13.0.0", + "tar": "^7.4.3" }, "bin": { - "pacote": "lib/bin.js" + "pacote": "bin/index.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/pako": { @@ -9240,22 +7450,26 @@ } }, "node_modules/parse-conflict-json": { - "version": "3.0.1", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-5.0.1.tgz", + "integrity": "sha512-ZHEmNKMq1wyJXNwLxyHnluPfRAFSIliBvbK/UiOceROt4Xh9Pz0fq49NytIaeaCUf5VR86hwQ/34FCcNU5/LKQ==", "license": "ISC", "dependencies": { - "json-parse-even-better-errors": "^3.0.0", + "json-parse-even-better-errors": "^5.0.0", "just-diff": "^6.0.0", "just-diff-apply": "^5.2.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/parse-conflict-json/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-5.0.0.tgz", + "integrity": "sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ==", "license": "MIT", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/parse-json": { @@ -9276,14 +7490,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/path-browserify": { "version": "1.0.1", "dev": true, @@ -9299,6 +7505,7 @@ }, "node_modules/path-is-absolute": { "version": "1.0.1", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -9306,6 +7513,8 @@ }, "node_modules/path-is-inside": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", "license": "(WTFPL OR MIT)" }, "node_modules/path-key": { @@ -9320,42 +7529,39 @@ "license": "MIT" }, "node_modules/path-scurry": { - "version": "1.9.2", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^9.1.1", - "minipass": "^5.0.0 || ^6.0.2" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "9.1.2", - "license": "ISC", + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "license": "BlueOak-1.0.0", "engines": { - "node": "14 || >=16.14" + "node": "20 || >=22" } }, - "node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" - }, "node_modules/path-type": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/performance-now": { - "version": "2.1.0", - "license": "MIT" - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -9375,6 +7581,7 @@ }, "node_modules/pify": { "version": "4.0.1", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -9391,54 +7598,6 @@ "node": ">=8" } }, - "node_modules/pkg-up": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/plist": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", @@ -9482,14 +7641,15 @@ } }, "node_modules/postcss-loader": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.1.1.tgz", - "integrity": "sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.2.0.tgz", + "integrity": "sha512-tHX+RkpsXVcc7st4dSdDGliI+r4aAQDuv+v3vFYHixb6YgjreG5AG4SEB0kDK8u2s6htqEEpKlkhSBUTvWKYnA==", "dev": true, + "license": "MIT", "dependencies": { "cosmiconfig": "^9.0.0", - "jiti": "^1.20.0", - "semver": "^7.5.4" + "jiti": "^2.5.1", + "semver": "^7.6.2" }, "engines": { "node": ">= 18.12.0" @@ -9512,24 +7672,12 @@ } } }, - "node_modules/postcss-loader/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/postcss-loader/node_modules/semver": { - "version": "7.5.4", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -9537,11 +7685,6 @@ "node": ">=10" } }, - "node_modules/postcss-loader/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/postcss-modules-extract-imports": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", @@ -9605,6 +7748,7 @@ }, "node_modules/postcss-selector-parser": { "version": "6.0.11", + "dev": true, "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -9620,9 +7764,9 @@ "license": "MIT" }, "node_modules/prettier": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", - "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.4.tgz", + "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", "dev": true, "license": "MIT", "bin": { @@ -9636,9 +7780,9 @@ } }, "node_modules/prettier-plugin-java": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/prettier-plugin-java/-/prettier-plugin-java-2.7.4.tgz", - "integrity": "sha512-RiRNkumIW9vaDpxirgIPI+oLSRmuCmoVZuTax9i3cWzWnxd+uKyAfDe4efS+ce00owAeh0a1DI5eFaH1xYWNPg==", + "version": "2.7.7", + "resolved": "https://registry.npmjs.org/prettier-plugin-java/-/prettier-plugin-java-2.7.7.tgz", + "integrity": "sha512-K3N2lrdKzx2FAi67E0UOTLKybX6iitAxYGuiv/emY8v6TzzGzoaKjmhaAyDKIH5iakFqdN+xUwWoauXnE2JZPA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -9649,43 +7793,49 @@ } }, "node_modules/proc-log": { - "version": "3.0.0", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/process": { - "version": "0.11.10", - "license": "MIT", - "engines": { - "node": ">= 0.6.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/process-nextick-args": { "version": "2.0.1", "license": "MIT" }, + "node_modules/proggy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/proggy/-/proggy-4.0.0.tgz", + "integrity": "sha512-MbA4R+WQT76ZBm/5JUpV9yqcJt92175+Y0Bodg3HgiXzrmKu7Ggq+bpn6y6wHH+gN9NcyKn3yg1+d47VaKwNAQ==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, "node_modules/promise-all-reject-late": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", + "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", "license": "ISC", "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/promise-call-limit": { - "version": "1.0.2", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-3.0.2.tgz", + "integrity": "sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw==", "license": "ISC", "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "license": "ISC" - }, "node_modules/promise-retry": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "license": "MIT", "dependencies": { "err-code": "^2.0.2", @@ -9695,16 +7845,6 @@ "node": ">=10" } }, - "node_modules/promzard": { - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "read": "^2.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/properties-parser": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/properties-parser/-/properties-parser-0.6.0.tgz", @@ -9715,31 +7855,9 @@ "node": ">= 0.3.1" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/psl": { - "version": "1.9.0", - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { "version": "2.3.0", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -9755,26 +7873,13 @@ }, "node_modules/q": { "version": "1.5.1", + "dev": true, "license": "MIT", "engines": { "node": ">=0.6.0", "teleport": ">=0.2.0" } }, - "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/querystringify": { "version": "2.2.0", "license": "MIT" @@ -9807,39 +7912,6 @@ "safe-buffer": "^5.1.0" } }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/raw-loader": { "version": "4.0.2", "dev": true, @@ -9904,18 +7976,9 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/read": { - "version": "2.1.0", - "license": "ISC", - "dependencies": { - "mute-stream": "~1.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/read-chunk": { "version": "3.2.0", + "dev": true, "license": "MIT", "dependencies": { "pify": "^4.0.1", @@ -9926,90 +7989,12 @@ } }, "node_modules/read-cmd-shim": { - "version": "4.0.0", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json": { - "version": "6.0.4", - "license": "ISC", - "dependencies": { - "glob": "^10.2.2", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^5.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json-fast": { - "version": "3.0.2", - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json/node_modules/glob": { - "version": "10.2.7", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/read-package-json/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/read/node_modules/mute-stream": { - "version": "1.0.0", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-6.0.0.tgz", + "integrity": "sha512-1zM5HuOfagXCBWMN83fuFI/x+T/UhZ7k+KIzhrHXcQoeX5+7gmaDYjELQHmmzIodumBHeByBJT4QYS7ufAgs7A==", "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/readable-stream": { @@ -10107,74 +8092,9 @@ "node": ">=6" } }, - "node_modules/request": { - "version": "2.88.2", - "license": "Apache-2.0", - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.3", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/request/node_modules/tough-cookie": { - "version": "2.5.0", - "license": "BSD-3-Clause", - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", - "license": "MIT", - "bin": { - "uuid": "bin/uuid" - } - }, "node_modules/require-from-string": { "version": "2.0.2", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -10230,36 +8150,10 @@ "node": ">=4" } }, - "node_modules/restore-cursor": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/restore-cursor/node_modules/mimic-fn": { - "version": "1.2.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/retry": { "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "license": "MIT", "engines": { "node": ">= 4" @@ -10273,26 +8167,6 @@ "node": ">=0.10.0" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-async": { - "version": "2.4.1", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "funding": [ @@ -10314,28 +8188,21 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/rxjs": { - "version": "6.6.7", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, "node_modules/safe-buffer": { "version": "5.1.2", "license": "MIT" }, "node_modules/safer-buffer": { "version": "2.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT", + "optional": true }, "node_modules/sass": { - "version": "1.90.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.90.0.tgz", - "integrity": "sha512-9GUyuksjw70uNpb1MTYWsH9MQHOHY6kwfnkafC24+7aOMZn9+rVMBxRbLvw756mrBFbIsFg6Xw9IkR2Fnn3k+Q==", + "version": "1.94.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.94.2.tgz", + "integrity": "sha512-N+7WK20/wOr7CzA2snJcUSSNTCzeCGUTFY3OgeQP3mZ1aj9NMQ0mSTXwlrnd89j33zzQJGqIN52GIOmYrfq46A==", "dev": true, "license": "MIT", "dependencies": { @@ -10354,9 +8221,9 @@ } }, "node_modules/sass-loader": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.5.tgz", - "integrity": "sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==", + "version": "16.0.6", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.6.tgz", + "integrity": "sha512-sglGzId5gmlfxNs4gK2U3h7HlVRfx278YK6Ono5lwzuvi1jxig80YiuHkaDBVsYIKFhx8wN7XSCI0M2IDS/3qA==", "dev": true, "license": "MIT", "dependencies": { @@ -10429,9 +8296,9 @@ "license": "ISC" }, "node_modules/schema-utils": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", - "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", "dev": true, "license": "MIT", "dependencies": { @@ -10455,50 +8322,6 @@ "semver": "bin/semver.js" } }, - "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/serialize-javascript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", @@ -10509,49 +8332,10 @@ "randombytes": "^2.1.0" } }, - "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "license": "ISC" - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/setimmediate": { "version": "1.0.5", "license": "MIT" }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", @@ -10582,45 +8366,40 @@ "node": ">=8" } }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/signal-exit": { "version": "3.0.7", "license": "ISC" }, "node_modules/sigstore": { - "version": "1.6.0", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-4.0.0.tgz", + "integrity": "sha512-Gw/FgHtrLM9WP8P5lLcSGh9OQcrTruWCELAiS48ik1QbL0cH+dfjomiRTUE9zzz+D1N6rOLkwXUvVmXZAsNE0Q==", "license": "Apache-2.0", "dependencies": { - "@sigstore/protobuf-specs": "^0.1.0", - "@sigstore/tuf": "^1.0.0", - "make-fetch-happen": "^11.0.1", - "tuf-js": "^1.1.3" - }, - "bin": { - "sigstore": "bin/sigstore.js" + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.0.0", + "@sigstore/protobuf-specs": "^0.5.0", + "@sigstore/sign": "^4.0.0", + "@sigstore/tuf": "^4.0.0", + "@sigstore/verify": "^3.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" } }, "node_modules/smart-buffer": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "license": "MIT", "engines": { "node": ">= 6.0.0", @@ -10628,27 +8407,31 @@ } }, "node_modules/socks": { - "version": "2.7.1", + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", "license": "MIT", "dependencies": { - "ip": "^2.0.0", + "ip-address": "^10.0.1", "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 10.13.0", + "node": ">= 10.0.0", "npm": ">= 3.0.0" } }, "node_modules/socks-proxy-agent": { - "version": "7.0.0", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", "license": "MIT", "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" }, "engines": { - "node": ">= 10" + "node": ">= 14" } }, "node_modules/source-map": { @@ -10682,6 +8465,8 @@ }, "node_modules/spdx-correct": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", @@ -10689,11 +8474,15 @@ } }, "node_modules/spdx-exceptions": { - "version": "2.3.0", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", @@ -10701,7 +8490,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.13", + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", + "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", "license": "CC0-1.0" }, "node_modules/sprintf": { @@ -10715,45 +8506,16 @@ "node": ">=0.2.4" } }, - "node_modules/sshpk": { - "version": "1.17.0", - "license": "MIT", - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ssri": { - "version": "10.0.4", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.0.tgz", + "integrity": "sha512-yizwGBpbCn4YomB2lzhZqrHLJoqFGXihNbib3ozhqF/cIp5ue+xSmOQrjNasEE62hFxsCcg/V/z23t4n8jMEng==", "license": "ISC", "dependencies": { - "minipass": "^5.0.0" + "minipass": "^7.0.3" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/string_decoder": { @@ -10773,58 +8535,16 @@ "node": ">=0.6.19" } }, - "node_modules/string-width": { - "version": "4.2.3", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/stringify-package": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.1.tgz", + "integrity": "sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==", + "deprecated": "This module is not used anymore, and has been replaced by @npmcli/package-json", "license": "ISC" }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/strip-bom": { "version": "4.0.0", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -10873,16 +8593,6 @@ "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==", "license": "MIT" }, - "node_modules/supports-color": { - "version": "5.5.0", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "license": "MIT", @@ -10894,9 +8604,10 @@ } }, "node_modules/systeminformation": { - "version": "5.23.14", - "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.23.14.tgz", - "integrity": "sha512-mUHEuDQJJOpphvjcIrTY0iwLnoNo/qotr6SuN7v0ANOO0L3j89mfCrEuIVheS/9S9KGRt4Osqxh9GoF7BX49UA==", + "version": "5.27.11", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.27.11.tgz", + "integrity": "sha512-K3Lto/2m3K2twmKHdgx5B+0in9qhXK4YnoT9rIlgwN/4v7OV5c8IjbeAUkuky/6VzCQC7iKCAqi8rZathCdjHg==", + "license": "MIT", "os": [ "darwin", "linux", @@ -10919,53 +8630,44 @@ } }, "node_modules/tapable": { - "version": "2.2.1", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", "dev": true, "license": "MIT", "engines": { "node": ">=6" - } - }, - "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "license": "ISC", + "node_modules/tar": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.2.tgz", + "integrity": "sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==", + "license": "BlueOak-1.0.0", "dependencies": { - "minipass": "^3.0.0" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" }, "engines": { - "node": ">= 8" + "node": ">=18" } }, - "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/terminal": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/terminal/-/terminal-0.1.4.tgz", @@ -11039,118 +8741,92 @@ "dev": true, "license": "MIT" }, - "node_modules/through": { - "version": "2.3.8", - "license": "MIT" - }, - "node_modules/tmp": { - "version": "0.2.1", + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "license": "MIT", "dependencies": { - "rimraf": "^3.0.0" + "fdir": "^6.5.0", + "picomatch": "^4.0.3" }, "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" + "node": ">=12.0.0" }, - "engines": { - "node": ">=8.0" + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", "engines": { - "node": ">=0.6" - } - }, - "node_modules/tough-cookie": { - "version": "4.1.3", - "license": "BSD-3-Clause", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" + "node": ">=12.0.0" }, - "engines": { - "node": ">=6" + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/treeverse": { - "version": "3.0.0", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/tslib": { - "version": "1.14.1", - "license": "0BSD" - }, - "node_modules/tuf-js": { - "version": "1.1.7", + "node_modules/tmp": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", "license": "MIT", - "dependencies": { - "@tufjs/models": "1.0.4", - "debug": "^4.3.4", - "make-fetch-happen": "^11.1.1" - }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=14.14" } }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "license": "Apache-2.0", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dependencies": { - "safe-buffer": "^5.0.1" + "is-number": "^7.0.0" }, "engines": { - "node": "*" + "node": ">=8.0" } }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "license": "Unlicense" - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, + "node_modules/treeverse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz", + "integrity": "sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==", + "license": "ISC", "engines": { - "node": ">= 0.6" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/type-is/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/tuf-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-4.0.0.tgz", + "integrity": "sha512-Lq7ieeGvXDXwpoSmOSgLWVdsGGV9J4a77oDTAPe/Ltrqnnm/ETaRlBAQTH5JatEh8KXuE6sddf9qAv1Q2282Hg==", "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "@tufjs/models": "4.0.0", + "debug": "^4.4.1", + "make-fetch-happen": "^15.0.0" }, "engines": { - "node": ">= 0.6" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/typedarray-to-buffer": { @@ -11217,23 +8893,27 @@ } }, "node_modules/unique-filename": { - "version": "3.0.0", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-5.0.0.tgz", + "integrity": "sha512-2RaJTAvAb4owyjllTfXzFClJ7WsGxlykkPvCr9pA//LD9goVq+m4PPAeBgNodGZ7nSrntT/auWpJ6Y5IFXcfjg==", "license": "ISC", "dependencies": { - "unique-slug": "^4.0.0" + "unique-slug": "^6.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/unique-slug": { - "version": "4.0.0", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-6.0.0.tgz", + "integrity": "sha512-4Lup7Ezn8W3d52/xBhZBVdx323ckxa7DEvd9kPQHppTkLoJXw6ltrBCyj5pnrxj0qKDxYMJ56CoxNuFCscdTiw==", "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/unique-string": { @@ -11246,21 +8926,6 @@ "node": ">=8" } }, - "node_modules/universalify": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/untildify": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", @@ -11272,9 +8937,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.2.tgz", + "integrity": "sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA==", "dev": true, "funding": [ { @@ -11304,6 +8969,7 @@ }, "node_modules/uri-js": { "version": "4.4.1", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" @@ -11321,26 +8987,16 @@ "version": "1.0.2", "license": "MIT" }, - "node_modules/utils-merge": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/valid-identifier": { "version": "0.0.2", + "resolved": "https://registry.npmjs.org/valid-identifier/-/valid-identifier-0.0.2.tgz", + "integrity": "sha512-zaSmOW6ykXwrkX0YTuFUSoALNEKGaQHpxBJQLb3TXspRNDpBwbfrIQCZqAQ0LKBlKuyn2YOq7NNd6415hvZ33g==", "license": "Apache-2.0" }, "node_modules/validate-npm-package-license": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", @@ -11348,13 +9004,12 @@ } }, "node_modules/validate-npm-package-name": { - "version": "5.0.0", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-7.0.0.tgz", + "integrity": "sha512-bwVk/OK+Qu108aJcMAEiU4yavHUI7aN20TgZNBj9MR2iU1zPUl1Z1Otr7771ExfYTPTvfN8ZJ1pbr5Iklgt4xg==", "license": "ISC", - "dependencies": { - "builtins": "^5.0.0" - }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/vanilla-picker": { @@ -11366,29 +9021,6 @@ "@sphinxxxx/color-conversion": "^2.2.2" } }, - "node_modules/vary": { - "version": "1.1.2", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "engines": [ - "node >=0.6.0" - ], - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/verror/node_modules/core-util-is": { - "version": "1.0.2", - "license": "MIT" - }, "node_modules/vscode-jsonrpc": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", @@ -11421,13 +9053,18 @@ "license": "MIT" }, "node_modules/walk-up-path": { - "version": "3.0.1", - "license": "ISC" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-4.0.0.tgz", + "integrity": "sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==", + "license": "ISC", + "engines": { + "node": "20 || >=22" + } }, "node_modules/watchpack": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", - "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", + "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", "dev": true, "license": "MIT", "dependencies": { @@ -11439,9 +9076,9 @@ } }, "node_modules/webpack": { - "version": "5.101.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.101.0.tgz", - "integrity": "sha512-B4t+nJqytPeuZlHuIKTbalhljIFXeNRqrUGAQgTGlfOl2lXXKXw+yZu6bicycP+PUlM44CxBjCFD6aciKFT3LQ==", + "version": "5.103.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.103.0.tgz", + "integrity": "sha512-HU1JOuV1OavsZ+mfigY0j8d1TgQgbZ6M+J75zDkpEAwYeXjWSqrGJtgnPblJjd/mAyTNQ7ygw0MiKOn6etz8yw==", "dev": true, "license": "MIT", "dependencies": { @@ -11453,22 +9090,22 @@ "@webassemblyjs/wasm-parser": "^1.14.1", "acorn": "^8.15.0", "acorn-import-phases": "^1.0.3", - "browserslist": "^4.24.0", + "browserslist": "^4.26.3", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.2", + "enhanced-resolve": "^5.17.3", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", + "loader-runner": "^4.3.1", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^4.3.2", - "tapable": "^2.1.1", + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", "terser-webpack-plugin": "^5.3.11", - "watchpack": "^2.4.1", + "watchpack": "^2.4.4", "webpack-sources": "^3.3.3" }, "bin": { @@ -11591,13 +9228,6 @@ "node": ">= 8" } }, - "node_modules/wide-align": { - "version": "1.1.5", - "license": "ISC", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "node_modules/wildcard": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", @@ -11605,62 +9235,9 @@ "dev": true, "license": "MIT" }, - "node_modules/windows-release": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "execa": "^4.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/windows-release/node_modules/execa": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/windows-release/node_modules/get-stream": { - "version": "5.2.0", - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/windows-release/node_modules/human-signals": { - "version": "1.1.1", - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, "node_modules/with-open-file": { "version": "0.1.7", + "dev": true, "license": "MIT", "dependencies": { "p-finally": "^1.0.0", @@ -11688,49 +9265,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, "node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", @@ -11795,6 +9329,7 @@ }, "node_modules/wrappy": { "version": "1.0.2", + "dev": true, "license": "ISC" }, "node_modules/write-file-atomic": { diff --git a/package.json b/package.json index 33fb6075b..529a387c9 100644 --- a/package.json +++ b/package.json @@ -53,15 +53,15 @@ }, "homepage": "https://github.com/deadlyjack/acode#readme", "devDependencies": { - "@babel/core": "^7.28.0", - "@babel/plugin-transform-runtime": "^7.28.0", - "@babel/preset-env": "^7.28.0", - "@babel/runtime": "^7.28.2", - "@babel/runtime-corejs3": "^7.28.2", + "@babel/core": "^7.28.5", + "@babel/plugin-transform-runtime": "^7.28.5", + "@babel/preset-env": "^7.28.5", + "@babel/runtime": "^7.28.4", + "@babel/runtime-corejs3": "^7.28.4", "@biomejs/biome": "2.1.4", "@types/ace": "^0.0.52", "@types/url-parse": "^1.4.11", - "autoprefixer": "^10.4.21", + "autoprefixer": "^10.4.22", "babel-loader": "^10.0.0", "com.foxdebug.acode.rk.exec.proot": "file:src/plugins/proot", "com.foxdebug.acode.rk.exec.terminal": "file:src/plugins/terminal", @@ -70,8 +70,8 @@ "cordova-plugin-advanced-http": "^3.3.1", "cordova-plugin-browser": "file:src/plugins/browser", "cordova-plugin-buildinfo": "file:src/plugins/cordova-plugin-buildinfo", - "cordova-plugin-device": "^2.0.3", - "cordova-plugin-file": "^8.0.1", + "cordova-plugin-device": "^2.1.0", + "cordova-plugin-file": "^8.1.3", "cordova-plugin-ftp": "file:src/plugins/ftp", "cordova-plugin-iap": "file:src/plugins/iap", "cordova-plugin-sdcard": "file:src/plugins/sdcard", @@ -80,17 +80,17 @@ "cordova-plugin-system": "file:src/plugins/system", "cordova-plugin-websocket": "file:src/plugins/websocket", "css-loader": "^7.1.2", - "mini-css-extract-plugin": "^2.9.3", + "mini-css-extract-plugin": "^2.9.4", "path-browserify": "^1.0.1", - "postcss-loader": "^8.1.1", - "prettier": "^3.6.2", - "prettier-plugin-java": "^2.7.4", + "postcss-loader": "^8.2.0", + "prettier": "^3.7.4", + "prettier-plugin-java": "^2.7.7", "raw-loader": "^4.0.2", - "sass": "^1.90.0", - "sass-loader": "^16.0.5", + "sass": "^1.94.2", + "sass-loader": "^16.0.6", "style-loader": "^4.0.0", "terminal": "^0.1.4", - "webpack": "^5.101.0", + "webpack": "^5.103.0", "webpack-cli": "^6.0.1" }, "dependencies": { @@ -135,22 +135,22 @@ "autosize": "^6.0.1", "codemirror": "^6.0.2", "cordova": "13.0.0", - "core-js": "^3.45.0", + "core-js": "^3.47.0", "crypto-js": "^4.2.0", - "dompurify": "^3.2.6", + "dompurify": "^3.3.0", "escape-string-regexp": "^5.0.0", "esprima": "^4.0.1", - "filesize": "^11.0.2", - "html-tag-js": "^2.4.15", - "js-base64": "^3.7.7", + "filesize": "^11.0.13", + "html-tag-js": "^2.4.16", + "js-base64": "^3.7.8", "jszip": "^3.10.1", "markdown-it": "^14.1.0", "markdown-it-anchor": "^9.2.0", "markdown-it-footnote": "^4.0.0", "markdown-it-github-alerts": "^1.0.0", "markdown-it-task-lists": "^2.1.1", - "mime-types": "^3.0.1", - "minimatch": "^10.0.3", + "mime-types": "^3.0.2", + "minimatch": "^10.1.1", "moment": "^2.30.1", "mustache": "^4.2.0", "url-parse": "^1.5.10",