From 5893a9ff7bc32e6cec9a047642dddd46b437d691 Mon Sep 17 00:00:00 2001 From: Amr Ayman <48989143+ulite-Amr@users.noreply.github.com> Date: Sat, 22 Aug 2026 02:34:10 +0000 Subject: [PATCH 01/38] fix: fall back to internal storage when external storage is unavailable (#2781) * fix: fall back to internal storage when external storage is unavailable The app used to pick the external data directory unconditionally and then create the plugins directory without guarding against failures. On devices where the external filesystem cannot be created (e.g. Android/data dir is not creatable), the unhandled rejection aborted startup, leaving users stuck on the splash screen with a misleading "Update Android System WebView or Chrome" message. - Probe external storage with fs.stat() and fall back to internal storage - Wrap plugins directory creation in try/catch and fall back to internal - Request storage permissions only on SDK < 33, guarded by hasPermission - Guard editorManager.hasUnsavedFiles() access in exitAppMessage - Show an honest "storage is unavailable" startup message for storage errors * fix: detect storage errors via FileError instanceof instead of numeric code range --- src/lib/acode.js | 2 +- src/main.js | 66 +++++++++++++++++++++++++++++++++++++++++++----- www/index.html | 25 +++++++++++++++--- 3 files changed, 82 insertions(+), 11 deletions(-) diff --git a/src/lib/acode.js b/src/lib/acode.js index 6d9310d245..d5a0f2de62 100644 --- a/src/lib/acode.js +++ b/src/lib/acode.js @@ -718,7 +718,7 @@ class Acode { } get exitAppMessage() { - const numFiles = editorManager.hasUnsavedFiles(); + const numFiles = editorManager?.hasUnsavedFiles?.() ?? 0; if (numFiles) { return strings["unsaved files close app"]; } diff --git a/src/main.js b/src/main.js index 0717578039..ebc2871227 100644 --- a/src/main.js +++ b/src/main.js @@ -100,6 +100,20 @@ document.addEventListener("deviceready", onDeviceReady); document.addEventListener("backbutton", backButtonHandler); document.addEventListener("menubutton", menuButtonHandler); +async function ensurePermission(permission) { + try { + const granted = await helpers.promisify(system.hasPermission, permission); + if (!granted) { + await helpers.promisify(system.requestPermission, permission); + } + } catch (error) { + logger.log( + "error", + `Failed to request permission ${permission}: ${error.message || error}`, + ); + } +} + async function onDeviceReady() { await initEncodings(); // important to load encodings before anything else @@ -112,14 +126,37 @@ async function onDeviceReady() { dataDirectory, } = cordova.file; + async function resolveStorageDir(preferred, fallback) { + if (!preferred) return fallback; + const fs = fsOperation(preferred); + if (!fs) return fallback; + try { + await fs.stat(); + return preferred; + } catch (error) { + logger.log( + "warn", + `Storage dir unavailable (${preferred}), falling back to ${fallback}: ${error.message || error}`, + ); + return fallback; + } + } + window.app = document.body; window.root = tag.get("#root"); window.addedFolder = addedFolder; window.editorManager = null; window.toast = toast; window.ASSETS_DIRECTORY = Url.join(cordova.file.applicationDirectory, "www"); - window.DATA_STORAGE = externalDataDirectory || dataDirectory; - window.CACHE_STORAGE = externalCacheDirectory || cacheDirectory; + window.DATA_STORAGE = await resolveStorageDir( + externalDataDirectory, + dataDirectory, + ); + window.CACHE_STORAGE = await resolveStorageDir( + externalCacheDirectory, + cacheDirectory, + ); + window.PLUGIN_DIR = Url.join(DATA_STORAGE, "plugins"); window.KEYBINDING_FILE = Url.join(DATA_STORAGE, ".key-bindings.json"); window.log = logger.log.bind(logger); @@ -212,9 +249,11 @@ async function onDeviceReady() { await adRewards.init(); ensureAceCompatApi(); - system.requestPermission("android.permission.READ_EXTERNAL_STORAGE"); - system.requestPermission("android.permission.WRITE_EXTERNAL_STORAGE"); - system.requestPermission("android.permission.POST_NOTIFICATIONS"); + if (Number.isInteger(window.ANDROID_SDK_INT) && window.ANDROID_SDK_INT < 33) { + await ensurePermission("android.permission.READ_EXTERNAL_STORAGE"); + await ensurePermission("android.permission.WRITE_EXTERNAL_STORAGE"); + } + await ensurePermission("android.permission.POST_NOTIFICATIONS"); const { versionCode } = BuildInfo; @@ -227,7 +266,22 @@ async function onDeviceReady() { } if (!(await fsOperation(PLUGIN_DIR).exists())) { - await fsOperation(DATA_STORAGE).createDirectory("plugins"); + try { + await fsOperation(DATA_STORAGE).createDirectory("plugins"); + } catch (error) { + logger.log( + "error", + `Failed to create plugins directory, falling back to internal storage: ${error.message || error}`, + ); + window.DATA_STORAGE = dataDirectory; + window.CACHE_STORAGE = cacheDirectory; + window.PLUGIN_DIR = Url.join(window.DATA_STORAGE, "plugins"); + window.KEYBINDING_FILE = Url.join( + window.DATA_STORAGE, + ".key-bindings.json", + ); + await fsOperation(window.DATA_STORAGE).createDirectory("plugins"); + } } localStorage.versionCode = versionCode; diff --git a/www/index.html b/www/index.html index 07f170909f..78fbbfd2b2 100644 --- a/www/index.html +++ b/www/index.html @@ -141,12 +141,26 @@ ); } + function isStorageError(reason) { + if (!reason) return false; + return ( + reason.name === "FileError" || + reason.name === "NotFoundError" || + reason.name === "SecurityError" || + (typeof window.FileError !== "undefined" && + reason instanceof window.FileError) + ); + } + function handleStartupError(event) { if (!isStartupLoading()) return; var message = event && event.message ? event.message : "Startup error"; setStartupMessage( - "Acode failed to start. Update Android System WebView or Chrome. " + - message + isStorageError(event && event.error) + ? "Acode failed to start: storage is unavailable. Try restarting your device, or clearing the app data. " + + message + : "Acode failed to start. Update Android System WebView or Chrome. " + + message ); } @@ -156,8 +170,11 @@ var message = reason && reason.message ? reason.message : "Startup promise failed"; setStartupMessage( - "Acode failed to start. Update Android System WebView or Chrome. " + - message + isStorageError(reason) + ? "Acode failed to start: storage is unavailable. Try restarting your device, or clearing the app data. " + + message + : "Acode failed to start. Update Android System WebView or Chrome. " + + message ); } From d1a62491430ee73d10f77b3a8ad0c822d66742e6 Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Sat, 22 Aug 2026 02:49:37 +0000 Subject: [PATCH 02/38] fix(theme): prevent freeze when switching to system theme (#2790) --- src/theme/list.js | 14 +++++++++++--- src/theme/preInstalled.js | 5 +++-- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/theme/list.js b/src/theme/list.js index fca3f9c2cd..890ea6cd94 100644 --- a/src/theme/list.js +++ b/src/theme/list.js @@ -87,6 +87,11 @@ export async function apply(id, init) { if (!DOES_SUPPORT_THEME) { id = "default"; } + if (id.toLowerCase() === "system") { + // Refresh the mutable System theme before reading its preferred editor + // theme. Do not re-enter apply() while appTheme is being updated below. + updateSystemTheme(isDeviceDarkTheme(), false); + } themeApplied = true; const theme = get(id); @@ -164,10 +169,10 @@ export function update(theme) { }); } -function syncSystemTheme(event) { +function syncSystemTheme(event, applyTheme = true) { if (settings.value.appTheme.toLowerCase() !== "system") return; const isDark = event ? event.matches : darkModeMediaQuery.matches; - updateSystemTheme(isDark); + updateSystemTheme(isDark, applyTheme); } function startSystemThemeWatcher() { @@ -197,7 +202,10 @@ function stopSystemThemeWatcher() { export function updateSystemThemeWatcher(theme) { if (String(theme).toLowerCase() === "system") { startSystemThemeWatcher(); - syncSystemTheme(); + // Starting the watcher happens from the appTheme update listener. Applying + // the theme here would update appTheme again before the first settings + // update is saved, causing unbounded synchronous recursion. + syncSystemTheme(undefined, false); return; } stopSystemThemeWatcher(); diff --git a/src/theme/preInstalled.js b/src/theme/preInstalled.js index 8eb266e962..76120a1b16 100644 --- a/src/theme/preInstalled.js +++ b/src/theme/preInstalled.js @@ -243,8 +243,9 @@ export function getSystemEditorTheme(darkTheme) { /** * Update the system theme based on the user's preference. * @param {boolean} darkTheme Whether the user prefers a dark theme. + * @param {boolean} applyTheme Whether to apply the refreshed theme immediately. */ -export function updateSystemTheme(darkTheme) { +export function updateSystemTheme(darkTheme, applyTheme = true) { if (darkTheme) { system.type = "dark"; system.primaryColor = "rgb(35, 39, 42)"; @@ -278,7 +279,7 @@ export function updateSystemTheme(darkTheme) { system.preferredEditorTheme = getSystemEditorTheme(darkTheme); - if (appSettings?.value?.appTheme === "system") { + if (applyTheme && appSettings?.value?.appTheme === "system") { apply(system.id); appSettings.update({ editorTheme: system.preferredEditorTheme }, false); } From f90fc1d9d35b9096f0d4279410d7fa3d7cbf3835 Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Sat, 22 Aug 2026 03:41:23 +0000 Subject: [PATCH 03/38] fix(sftp): cancel stalled connections and prevent delayed errors (#2791) * fix(sftp): cancel stalled connections and prevent delayed errors * fix race cases --- src/dialogs/loader.js | 34 ++- src/fileSystem/sftp.js | 17 ++ src/lib/remoteStorage.js | 16 +- src/pages/fileBrowser/fileBrowser.js | 3 +- src/plugins/sftp/index.d.ts | 4 + .../sftp/src/com/foxdebug/sftp/Sftp.java | 259 +++++++++++++++--- src/plugins/sftp/www/sftp.js | 6 + 7 files changed, 282 insertions(+), 57 deletions(-) diff --git a/src/dialogs/loader.js b/src/dialogs/loader.js index e7a34cea40..dfb98946fe 100644 --- a/src/dialogs/loader.js +++ b/src/dialogs/loader.js @@ -6,14 +6,15 @@ import restoreTheme from "lib/restoreTheme"; let loaderIsImmortal = false; let onCancelCallback = null; +let cancelButtonTimeout = null; let $currentDialog = null; let $currentMask = null; const titleLoaderId = "__title-loader"; /** * @typedef {object} LoaderOptions - * @property {number} timeout Timeout in milliseconds after which the loader will be shown - * @property {function():void} oncancel Callback function to be called when the loader is shown + * @property {number} timeout Delay before the cancel button is shown, in milliseconds + * @property {function():void} oncancel Callback invoked only when the user cancels */ /** @@ -64,19 +65,21 @@ function create(titleText, message = "", options = {}) { ); - const { timeout, oncancel } = options; - if (typeof oncancel === "function") { - onCancelCallback = oncancel; - } + clearTimeout(cancelButtonTimeout); + cancelButtonTimeout = null; + onCancelCallback = + typeof options.oncancel === "function" ? options.oncancel : null; - if (typeof timeout === "number") { - setTimeout(() => { + if (typeof options.timeout === "number") { + cancelButtonTimeout = setTimeout(() => { + cancelButtonTimeout = null; + if (!$dialog.isConnected) return; $dialog.append(
- +
, ); - }, timeout); + }, options.timeout); } if (!$oldLoader) { @@ -98,6 +101,13 @@ function create(titleText, message = "", options = {}) { }; } +function cancel() { + const callback = onCancelCallback; + onCancelCallback = null; + destroy(); + callback?.(); +} + function createTitleLoader() { const $titleLoader = tag.get(`#${titleLoaderId}`) || ( @@ -116,6 +126,9 @@ function createTitleLoader() { function destroy() { const loaderDiv = tag.get("#__loader"); const mask = tag.get("#__loader-mask"); + clearTimeout(cancelButtonTimeout); + cancelButtonTimeout = null; + onCancelCallback = null; restoreTheme(); if (!loaderDiv && !mask) { @@ -128,7 +141,6 @@ function destroy() { actionStack.unfreeze(); if (loaderDiv?.isConnected) loaderDiv.remove(); if (mask?.isConnected) mask.remove(); - onCancelCallback?.(); }, 300); } diff --git a/src/fileSystem/sftp.js b/src/fileSystem/sftp.js index 41bff24af7..803be8af45 100644 --- a/src/fileSystem/sftp.js +++ b/src/fileSystem/sftp.js @@ -407,6 +407,23 @@ class SftpClient { } } + /** + * Tests a profile once without the normal remote-filesystem retry policy. + * @param {string} requestID Native request ID used for cancellation + */ + testConnection(requestID) { + return new Promise((resolve, reject) => { + sftp.testProfile(this.#profileID, requestID, 10000, resolve, reject); + }); + } + + /** Cancel an in-flight profile test. */ + cancelConnection(requestID) { + return new Promise((resolve) => { + sftp.cancelConnection(requestID, resolve, resolve); + }); + } + async #connectWithRetry() { const attempts = settings.value.retryRemoteFsAfterFail ? this.#MAX_TRY + 1 diff --git a/src/lib/remoteStorage.js b/src/lib/remoteStorage.js index 83c8077b7f..967f5fcb5d 100644 --- a/src/lib/remoteStorage.js +++ b/src/lib/remoteStorage.js @@ -35,7 +35,7 @@ export default { try { loader.create(strings["add ftp"], strings["connecting..."], { timeout: 10000, - callback() { + oncancel() { stopConnection = true; }, }); @@ -176,6 +176,8 @@ export default { existingProfile = null, } = {}) { let stopConnection = false; + let connection; + const connectionRequestID = `add-sftp-${helpers.uuid()}`; if (existingProfile?.profileId) { try { const saved = await getSftpProfileInfo(existingProfile.profileId); @@ -242,17 +244,21 @@ export default { const url = createSftpProfileUrl(profile.profileId); loader.create(strings["add sftp"], strings["connecting..."], { - timeout: 10000, - callback() { + timeout: 0, + oncancel() { stopConnection = true; + connection?.cancelConnection(connectionRequestID); }, }); - const connection = Sftp(null, 22, null, { + connection = Sftp(null, 22, null, { profileID: profile.profileId, }); try { - const [home] = await Promise.all([connection.pwd(), loadAd()]); + const [home] = await Promise.all([ + connection.testConnection(connectionRequestID), + loadAd(), + ]); if (stopConnection) { stopConnection = false; diff --git a/src/pages/fileBrowser/fileBrowser.js b/src/pages/fileBrowser/fileBrowser.js index c7c6ffaf9f..b26758b189 100644 --- a/src/pages/fileBrowser/fileBrowser.js +++ b/src/pages/fileBrowser/fileBrowser.js @@ -1468,8 +1468,7 @@ function FileBrowserInclude(mode, info, doesOpenLast = true) { const timeout = setTimeout(() => { loader.create(name, strings.loading + "...", { timeout: loaderTimeout, - callback() { - loader.destroy(); + oncancel() { navigate("/", "/"); progress[id] = false; }, diff --git a/src/plugins/sftp/index.d.ts b/src/plugins/sftp/index.d.ts index dc75b35360..ca7db1d098 100644 --- a/src/plugins/sftp/index.d.ts +++ b/src/plugins/sftp/index.d.ts @@ -42,6 +42,10 @@ interface Sftp { exec(command: String, onSucess: (res: ExecResult)=>void, onFail: (err: any) => void): void; /** Connects using credentials held by the native profile store. */ connectUsingProfile(profileId: String, onSuccess: () => void, onFail: (err: any) => void): void; + /** Tests a profile once and returns its remote working directory. */ + testProfile(profileId: String, requestId: String, timeout: Number, onSuccess: (home: String) => void, onFail: (err: any) => void): void; + /** Cancels an in-flight profile connection or test. */ + cancelConnection(requestId: String, onSuccess: () => void, onFail: (err: any) => void): void; saveProfile(profileId: String | null, host: String, port: Number, username: String, authType: String, password: String, keyFile: String, passphrase: String, onSuccess: (profileId: String) => void, onFail: (err: any) => void): void; editProfile(profileId: String | null, host: String, port: Number, username: String, authType: String, password: String, keyFile: String, passphrase: String, onSuccess: (profile: SftpProfileInfo & {profileId: string}) => void, onFail: (err: any) => void): void; getProfileInfo(profileId: String, onSuccess: (profile: SftpProfileInfo & {profileId: string}) => void, onFail: (err: any) => void): void; diff --git a/src/plugins/sftp/src/com/foxdebug/sftp/Sftp.java b/src/plugins/sftp/src/com/foxdebug/sftp/Sftp.java index b676c1f059..a72466607d 100644 --- a/src/plugins/sftp/src/com/foxdebug/sftp/Sftp.java +++ b/src/plugins/sftp/src/com/foxdebug/sftp/Sftp.java @@ -53,6 +53,8 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.FutureTask; import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.atomic.AtomicBoolean; import org.apache.cordova.CallbackContext; @@ -72,8 +74,13 @@ public class Sftp extends CordovaPlugin { // A smaller mobile window prevents connection bursts from exhausting the heap. private static final long SFTP_MAX_WINDOW_SIZE = 1024L * 1024L; private static final long SFTP_MIN_WINDOW_SIZE = 128L * 1024L; + private static final long DEFAULT_CONNECT_TIMEOUT_MS = 10000L; + private static final long MIN_CONNECT_TIMEOUT_MS = 1000L; + private static final long MAX_CONNECT_TIMEOUT_MS = 30000L; private static boolean cryptoProviderConfigured; private final Object connectionLock = new Object(); + private final Map connectionAttempts = + new ConcurrentHashMap<>(); private final Map remoteShells = new ConcurrentHashMap<>(); private SshClient ssh; private SftpClient sftp; @@ -82,6 +89,50 @@ public class Sftp extends CordovaPlugin { private String connectionID; private SftpSecurityStore securityStore; + private final class ConnectionAttempt { + + private final CallbackContext callback; + private final AtomicBoolean cancelled = new AtomicBoolean(false); + private final AtomicBoolean completed = new AtomicBoolean(false); + private volatile Future future; + + private ConnectionAttempt(CallbackContext callback) { + this.callback = callback; + } + + private void setFuture(Future future) { + this.future = future; + if (cancelled.get()) future.cancel(true); + } + + private boolean isCancelled() { + return cancelled.get(); + } + + private void cancel() { + cancelled.set(true); + Future current = future; + if (current != null) current.cancel(true); + error(connectionCancelledError()); + } + + private void success() { + if (completed.compareAndSet(false, true)) callback.success(); + } + + private void success(String value) { + if (completed.compareAndSet(false, true)) callback.success(value); + } + + private void error(String message) { + if (completed.compareAndSet(false, true)) callback.error(message); + } + + private void error(JSONObject error) { + if (completed.compareAndSet(false, true)) callback.error(error); + } + } + private final class ConnectionSecurity { private final String hostname; @@ -162,12 +213,17 @@ public boolean verifyHost(String host, SshPublicKey publicKey) } private boolean report(CallbackContext callback) { - JSONObject error = failure; - failure = null; + JSONObject error = takeFailure(); if (error == null) return false; callback.error(error); return true; } + + private JSONObject takeFailure() { + JSONObject error = failure; + failure = null; + return error; + } } private final class RemoteShell { @@ -318,11 +374,16 @@ private void closeConnectionQuietly() { private boolean establishConnection( SshClientBuilder builder, String newConnectionID, - ConnectionSecurity security + ConnectionSecurity security, + ConnectionAttempt attempt ) throws IOException, SshException, PermissionDeniedException { synchronized (connectionLock) { closeConnectionQuietly(); ssh = builder.onConfigure(security::configure).build(); + if (attempt.isCancelled()) { + closeConnectionQuietly(); + return false; + } if (!ssh.isConnected()) { closeConnectionQuietly(); return false; @@ -336,6 +397,11 @@ private boolean establishConnection( throw e; } + if (attempt.isCancelled()) { + closeConnectionQuietly(); + return false; + } + try { sftp.getSubsystemChannel().setCharsetEncoding("UTF-8"); } catch (UnsupportedEncodingException | SshException e) { @@ -371,6 +437,17 @@ private static JSONObject hostKeyFailure( return error; } + private static JSONObject connectionCancelledError() { + JSONObject error = new JSONObject(); + try { + error.put("code", "SFTP_CONNECT_CANCELLED"); + error.put("message", "SFTP connection cancelled"); + error.put("cancelled", true); + error.put("nonRetryable", true); + } catch (JSONException ignored) {} + return error; + } + private boolean confirmUnknownHost( String endpoint, String algorithm, @@ -440,23 +517,40 @@ private void closeRemoteShells() { remoteShells.clear(); } + private void cancelConnectionAttempts() { + for (ConnectionAttempt attempt : connectionAttempts.values()) { + attempt.cancel(); + } + connectionAttempts.clear(); + } + @Override public void onReset() { + cancelConnectionAttempts(); closeRemoteShells(); super.onReset(); } @Override public void onDestroy() { + cancelConnectionAttempts(); closeRemoteShells(); super.onDestroy(); } private SshClientBuilder buildProfileBuilder(JSONObject profile) throws IOException, InvalidPassphraseException, JSONException { + return buildProfileBuilder(profile, DEFAULT_CONNECT_TIMEOUT_MS); + } + + private SshClientBuilder buildProfileBuilder( + JSONObject profile, + long connectTimeout + ) throws IOException, InvalidPassphraseException, JSONException { SshClientBuilder builder = SshClientBuilder.create() .withHostname(profile.getString("hostname")) .withPort(profile.optInt("port", 22)) + .withConnectTimeout(connectTimeout) .withUsername(profile.getString("username")); if ("key".equals(profile.optString("authType"))) { @@ -868,6 +962,8 @@ private static boolean isAllowedAction(String action) { switch (action) { case "exec": case "connectUsingProfile": + case "testProfile": + case "cancelConnection": case "saveProfile": case "editProfile": case "getProfileInfo": @@ -894,47 +990,132 @@ private static boolean isAllowedAction(String action) { } public void connectUsingProfile(JSONArray args, CallbackContext callback) { - cordova - .getThreadPool() - .execute( - new Runnable() { - public void run() { - ConnectionSecurity security = null; - String profileID = args.optString(0); - try { - JSONObject profile = securityStore.getProfile(profileID); - ConnectionSecurity profileSecurity = new ConnectionSecurity( - profile.getString("hostname"), - profile.optInt("port", 22) + startProfileConnection(args, callback, false); + } + + public void testProfile(JSONArray args, CallbackContext callback) { + startProfileConnection(args, callback, true); + } + + public void cancelConnection(JSONArray args, CallbackContext callback) { + ConnectionAttempt attempt = connectionAttempts.get(args.optString(0)); + if (attempt != null) attempt.cancel(); + callback.success(); + } + + private void startProfileConnection( + JSONArray args, + CallbackContext callback, + boolean returnWorkingDirectory + ) { + String suppliedRequestID = args.optString(1); + String requestID = suppliedRequestID.isEmpty() + ? UUID.randomUUID().toString() + : suppliedRequestID; + long requestedTimeout = args.optLong(2, DEFAULT_CONNECT_TIMEOUT_MS); + long connectTimeout = Math.max( + MIN_CONNECT_TIMEOUT_MS, + Math.min(requestedTimeout, MAX_CONNECT_TIMEOUT_MS) + ); + ConnectionAttempt attempt = new ConnectionAttempt(callback); + if (connectionAttempts.putIfAbsent(requestID, attempt) != null) { + callback.error("An SFTP connection with this request ID is already running"); + return; + } + + FutureTask task = new FutureTask( + () -> { + ConnectionSecurity security = null; + String profileID = args.optString(0); + try { + JSONObject profile = securityStore.getProfile(profileID); + ConnectionSecurity profileSecurity = new ConnectionSecurity( + profile.getString("hostname"), + profile.optInt("port", 22) + ); + security = profileSecurity; + SshClientBuilder builder = buildProfileBuilder( + profile, + connectTimeout + ); + boolean connected; + String workingDirectory = null; + if (returnWorkingDirectory) { + synchronized (connectionLock) { + connected = establishConnection( + builder, + profileID, + profileSecurity, + attempt ); - security = profileSecurity; - if ( - establishConnection( - buildProfileBuilder(profile), - profileID, - profileSecurity - ) - ) { - callback.success(); - return; - } - if (security.report(callback)) return; - callback.error("Failed to establish SSH connection"); - } catch (InvalidPassphraseException e) { - callback.error("Invalid passphrase for stored key"); - } catch (Exception e) { - if (security != null && security.report(callback)) return; - callback.error("Failed to connect SFTP profile: " + errMessage(e)); - Log.e(TAG, "Failed to connect SFTP profile", e); - } catch (OutOfMemoryError e) { - synchronized (connectionLock) { - closeConnectionQuietly(); + if (connected && !attempt.isCancelled()) { + SftpClient activeSftp = sftp; + if (activeSftp == null) { + throw new IOException( + "SFTP connection was closed before validation" + ); + } + workingDirectory = activeSftp.pwd(); } - callback.error("Not enough memory to initialize SFTP"); } + } else { + connected = establishConnection( + builder, + profileID, + profileSecurity, + attempt + ); + } + if (connected) { + if (attempt.isCancelled()) return null; + if (returnWorkingDirectory) { + attempt.success(workingDirectory); + } else { + attempt.success(); + } + return null; + } + if (attempt.isCancelled()) return null; + JSONObject securityError = security.takeFailure(); + if (securityError != null) { + attempt.error(securityError); + return null; + } + attempt.error("Failed to establish SSH connection"); + } catch (InvalidPassphraseException e) { + if (!attempt.isCancelled()) { + attempt.error("Invalid passphrase for stored key"); + } + } catch (Exception e) { + if (attempt.isCancelled()) return null; + JSONObject securityError = security == null + ? null + : security.takeFailure(); + if (securityError != null) { + attempt.error(securityError); + return null; + } + attempt.error("Failed to connect SFTP profile: " + errMessage(e)); + Log.e(TAG, "Failed to connect SFTP profile", e); + } catch (OutOfMemoryError e) { + synchronized (connectionLock) { + closeConnectionQuietly(); + } + if (!attempt.isCancelled()) { + attempt.error("Not enough memory to initialize SFTP"); } } - ); + return null; + } + ) { + @Override + protected void done() { + connectionAttempts.remove(requestID, attempt); + } + }; + + attempt.setFuture(task); + cordova.getThreadPool().execute(task); } public void exec(JSONArray args, CallbackContext callback) { diff --git a/src/plugins/sftp/www/sftp.js b/src/plugins/sftp/www/sftp.js index 1fbbb76e31..855cf1cdf6 100644 --- a/src/plugins/sftp/www/sftp.js +++ b/src/plugins/sftp/www/sftp.js @@ -5,6 +5,12 @@ module.exports = { connectUsingProfile: function (profileId, onSuccess, onFail) { cordova.exec(onSuccess, onFail, 'Sftp', 'connectUsingProfile', [profileId]); }, + testProfile: function (profileId, requestId, timeout, onSuccess, onFail) { + cordova.exec(onSuccess, onFail, 'Sftp', 'testProfile', [profileId, requestId, timeout]); + }, + cancelConnection: function (requestId, onSuccess, onFail) { + cordova.exec(onSuccess, onFail, 'Sftp', 'cancelConnection', [requestId]); + }, saveProfile: function (profileId, host, port, username, authType, password, keyFile, passphrase, onSuccess, onFail) { cordova.exec(onSuccess, onFail, 'Sftp', 'saveProfile', [profileId, host, port, username, authType, password, keyFile, passphrase]); }, From 9c3e86911107ebb1520c7aa83e46514d83d08e68 Mon Sep 17 00:00:00 2001 From: Ajit Kumar Date: Mon, 24 Aug 2026 09:51:12 +0000 Subject: [PATCH 04/38] fix: admob issues (#2800) * fix: admob issues * fix: restore Android build commands --------- Co-authored-by: Ajit Kumar --- src/components/settingsPage.scss | 5 + src/lib/adConsentCoordinator.mjs | 10 +- src/lib/bannerVisibilityController.mjs | 99 ++++++++- src/lib/startAd.js | 4 +- .../admob/src/android/cordova/Privacy.kt | 24 ++- src/settings/mainSettings.js | 11 +- src/sidebarApps/extensions/index.js | 21 +- tests/admob/adConsentCoordinator.test.js | 73 ++++++- .../admob/bannerVisibilityController.test.js | 202 +++++++++++++++++- 9 files changed, 420 insertions(+), 29 deletions(-) diff --git a/src/components/settingsPage.scss b/src/components/settingsPage.scss index bfe722e73e..e0e9f34b55 100644 --- a/src/components/settingsPage.scss +++ b/src/components/settingsPage.scss @@ -60,6 +60,11 @@ wc-page.main-settings-page { .main-settings-list>.list-item, .settings-section-card>.list-item { display: flex; + + &[hidden] { + display: none; + } + width: 100%; min-height: 64px; margin: 0; diff --git a/src/lib/adConsentCoordinator.mjs b/src/lib/adConsentCoordinator.mjs index 5a23de1737..4391e22aac 100644 --- a/src/lib/adConsentCoordinator.mjs +++ b/src/lib/adConsentCoordinator.mjs @@ -35,6 +35,7 @@ export class AdConsentCoordinator { #state = EMPTY_PRIVACY_STATE; #consentPromise; #adStartPromise; + #privacyOptionsPromise; #listeners = new Set(); constructor({ privacy, initializeAds, onError = console.error }) { @@ -51,7 +52,14 @@ export class AdConsentCoordinator { return (this.#consentPromise ??= this.#gatherAndStart()); } - async showPrivacyOptions() { + showPrivacyOptions() { + this.#privacyOptionsPromise ??= this.#showPrivacyOptions().finally(() => { + this.#privacyOptionsPromise = undefined; + }); + return this.#privacyOptionsPromise; + } + + async #showPrivacyOptions() { const state = await this.#privacy.showOptions(); this.#setState(state); await this.#startAdsIfAllowed(); diff --git a/src/lib/bannerVisibilityController.mjs b/src/lib/bannerVisibilityController.mjs index c02df5b80b..517e914d02 100644 --- a/src/lib/bannerVisibilityController.mjs +++ b/src/lib/bannerVisibilityController.mjs @@ -10,6 +10,9 @@ export const BANNER_SUPPRESSION_REASON = Object.freeze({ REWARDED_PASS: "rewarded-pass", }); +const DEFAULT_RETRY_DELAY_MS = 500; +const TRANSIENT_LOAD_ERROR_CODES = new Set([0, 2, 3, 9]); + export class BannerVisibilityController { #banner = null; #registeredPages = new WeakSet(); @@ -20,9 +23,13 @@ export class BannerVisibilityController { #suppressions = new Set(); #nativeVisible = false; #scheduledVisible = false; + #desiredVisible = false; #operation = Promise.resolve(); #revision = 0; #onError; + #retryTimer = null; + #retryUsed = false; + #stopBannerListeners = []; constructor({ getActivePage, @@ -35,9 +42,13 @@ export class BannerVisibilityController { } setBanner(banner) { + this.#stopListeningToBanner(); + this.#resetRetry(); + this.#revision++; this.#banner = banner; this.#nativeVisible = false; this.#scheduledVisible = false; + this.#listenToBanner(banner); this.reconcile(); } @@ -83,6 +94,12 @@ export class BannerVisibilityController { activePage !== null && this.#registeredPages.has(activePage); const shouldShow = pageRequestsBanner && !this.#keyboardVisible; + const eligibilityChanged = shouldShow !== this.#desiredVisible; + this.#desiredVisible = shouldShow; + + if (!shouldShow || eligibilityChanged) { + this.#resetRetry(); + } if (this.#banner) { this.#banner.active = pageRequestsBanner; @@ -98,7 +115,12 @@ export class BannerVisibilityController { dispose() { this.#stopObserving?.(); this.#stopObserving = null; + this.#stopListeningToBanner(); + this.#resetRetry(); this.#banner = null; + this.#desiredVisible = false; + this.#nativeVisible = false; + this.#scheduledVisible = false; this.#revision++; } @@ -107,9 +129,16 @@ export class BannerVisibilityController { this.#stopObserving = this.#observePageChanges(() => this.reconcile()); } - #queueNativeVisibility(shouldShow) { + #queueNativeVisibility(shouldShow, isRetry = false) { const banner = this.#banner; - if (!banner || shouldShow === this.#scheduledVisible) return; + if ( + !banner || + shouldShow === this.#scheduledVisible || + (shouldShow && + (this.#retryTimer !== null || (this.#retryUsed && !isRetry))) + ) { + return; + } this.#scheduledVisible = shouldShow; const revision = ++this.#revision; @@ -124,14 +153,80 @@ export class BannerVisibilityController { } else { await banner.hide?.(); } + if (revision !== this.#revision || banner !== this.#banner) return; this.#nativeVisible = shouldShow; } catch (error) { + if (revision !== this.#revision || banner !== this.#banner) return; this.#nativeVisible = !shouldShow; this.#scheduledVisible = !shouldShow; this.#onError(error); + if (shouldShow) this.#scheduleRetry(); } }); } + + #listenToBanner(banner) { + if (typeof banner?.on !== "function") return; + + for (const [eventName, listener] of [ + ["load", () => this.#handleBannerLoad()], + ["loadfail", (event) => this.#handleBannerLoadFailure(event)], + ]) { + const stopListening = banner.on(eventName, listener); + if (typeof stopListening === "function") { + this.#stopBannerListeners.push(stopListening); + } + } + } + + #stopListeningToBanner() { + for (const stopListening of this.#stopBannerListeners.splice(0)) { + stopListening(); + } + } + + #handleBannerLoad() { + this.#resetRetry(); + if (!this.#desiredVisible) return; + + this.#nativeVisible = true; + this.#scheduledVisible = true; + } + + #handleBannerLoadFailure(event) { + this.#nativeVisible = false; + this.#scheduledVisible = false; + this.#onError(event); + + const errorCode = Number(event?.code); + if (TRANSIENT_LOAD_ERROR_CODES.has(errorCode)) { + this.#scheduleRetry(); + } else { + this.#retryUsed = true; + } + } + + #scheduleRetry() { + if (!this.#desiredVisible || this.#retryTimer !== null || this.#retryUsed) { + return; + } + + this.#retryUsed = true; + const banner = this.#banner; + this.#retryTimer = setTimeout(() => { + this.#retryTimer = null; + if (!this.#desiredVisible || banner !== this.#banner) return; + this.#queueNativeVisibility(true, true); + }, DEFAULT_RETRY_DELAY_MS); + } + + #resetRetry() { + if (this.#retryTimer !== null) { + clearTimeout(this.#retryTimer); + this.#retryTimer = null; + } + this.#retryUsed = false; + } } function getActivePage() { diff --git a/src/lib/startAd.js b/src/lib/startAd.js index a9dd6a74d5..757dc69429 100644 --- a/src/lib/startAd.js +++ b/src/lib/startAd.js @@ -63,7 +63,9 @@ export function subscribePrivacyState(listener) { } export async function showPrivacyOptions() { - if (!canUseAdmob()) return getPrivacyState(); + if (!canUseAdmob()) { + throw new Error("AdMob Privacy Choices are unavailable."); + } return getConsentCoordinator().showPrivacyOptions(); } diff --git a/src/plugins/admob/src/android/cordova/Privacy.kt b/src/plugins/admob/src/android/cordova/Privacy.kt index 0d34ccf3c6..b2c2264a53 100644 --- a/src/plugins/admob/src/android/cordova/Privacy.kt +++ b/src/plugins/admob/src/android/cordova/Privacy.kt @@ -80,12 +80,26 @@ internal class Privacy(private val plugin: AdMob) { fun showOptions(ctx: ExecuteContext) { plugin.activity.runOnUiThread { - UserMessagingPlatform.showPrivacyOptionsForm(plugin.activity) { formError -> - if (formError != null) { - ctx.reject("UMP ${formError.errorCode}: ${formError.message}") - } else { - ctx.resolve(currentState().toMap()) + val activity = plugin.activity + val state = currentState() + if (!state.privacyOptionsRequired) { + return@runOnUiThread ctx.resolve(state.toMap()) + } + + if (activity.isFinishing || activity.isDestroyed) { + return@runOnUiThread ctx.reject("Privacy Choices are temporarily unavailable") + } + + try { + UserMessagingPlatform.showPrivacyOptionsForm(activity) { formError -> + if (formError != null) { + ctx.reject("UMP ${formError.errorCode}: ${formError.message}") + } else { + ctx.resolve(currentState().toMap()) + } } + } catch (error: Exception) { + ctx.reject(error.message ?: "Unable to open Privacy Choices") } } } diff --git a/src/settings/mainSettings.js b/src/settings/mainSettings.js index 2946f57c72..7ce6cf196b 100644 --- a/src/settings/mainSettings.js +++ b/src/settings/mainSettings.js @@ -251,10 +251,19 @@ export default function mainSettings() { break; case "privacyChoices": + loader.create( + strings["privacy choices"] || "Privacy Choices", + strings["loading..."] || "Loading...", + ); try { await showPrivacyOptions(); } catch (error) { - helpers.error(error); + console.warn("Unable to open AdMob Privacy Choices:", error); + helpers.error( + "Unable to open Privacy Choices. Check your connection and try again.", + ); + } finally { + loader.destroy(); } break; diff --git a/src/sidebarApps/extensions/index.js b/src/sidebarApps/extensions/index.js index e83360dcf8..72ed4378e7 100644 --- a/src/sidebarApps/extensions/index.js +++ b/src/sidebarApps/extensions/index.js @@ -836,11 +836,14 @@ function ListItem({ }); const { default: installPlugin } = await import("lib/installPlugin"); - await installPlugin( - id, - remotePlugin.name, - purchaseToken ? purchaseToken : undefined, - ); + await Promise.all([ + loadAd(), + installPlugin( + id, + remotePlugin.name, + purchaseToken ? purchaseToken : undefined, + ), + ]); const searchInput = container.querySelector('input[name="search-ext"]'); if (searchInput) { @@ -862,6 +865,7 @@ function ListItem({ if (!$installed.collapsed) { $installed.ontoggle(); } + await helpers.showInterstitialIfReady(); async function getPurchase(sku) { const purchases = await helpers.promisify(iap.getPurchases); @@ -910,14 +914,11 @@ function ListItem({ return $el; } -async function loadAd(el) { +async function loadAd() { if (!helpers.canShowAds()) return; try { if (!(await interstitialAd?.isLoaded())) { - const oldText = el.textContent; - el.textContent = strings["loading..."]; await interstitialAd?.load(); - el.textContent = oldText; } } catch (error) { console.error(error); @@ -929,7 +930,7 @@ async function uninstall(id) { const pluginDir = Url.join(PLUGIN_DIR, id); const state = await InstallState.new(id); await Promise.all([ - loadAd(this), + loadAd(), fsOperation(pluginDir).delete(), state.delete(state.storeUrl), ]); diff --git a/tests/admob/adConsentCoordinator.test.js b/tests/admob/adConsentCoordinator.test.js index cb4fe07c70..ecd5a2f7fc 100644 --- a/tests/admob/adConsentCoordinator.test.js +++ b/tests/admob/adConsentCoordinator.test.js @@ -9,6 +9,7 @@ function createHarness({ gatherState, previousState = EMPTY_PRIVACY_STATE, gatherError, + showOptions, }) { let gatherCalls = 0; let getStateCalls = 0; @@ -25,6 +26,7 @@ function createHarness({ return previousState; }, async showOptions() { + if (showOptions) return showOptions(); return gatherState; }, }; @@ -141,12 +143,12 @@ test("deduplicates consent collection and ad initialization", async () => { assert.equal(harness.initializeCalls, 1); }); -test("updates privacy-option visibility and keeps ads single-started", async () => { +test("hides a stale privacy-option entry and keeps ads single-started", async () => { const harness = createHarness({ gatherState: { - consentStatus: "notRequired", + consentStatus: "obtained", canRequestAds: true, - privacyOptionsRequired: false, + privacyOptionsRequired: true, }, }); const states = []; @@ -154,15 +156,15 @@ test("updates privacy-option visibility and keeps ads single-started", async () await harness.coordinator.start(); harness.privacy.showOptions = async () => ({ - consentStatus: "obtained", + consentStatus: "notRequired", canRequestAds: true, - privacyOptionsRequired: true, + privacyOptionsRequired: false, }); await harness.coordinator.showPrivacyOptions(); unsubscribe(); assert.equal(harness.initializeCalls, 1); - assert.equal(states.at(-1).privacyOptionsRequired, true); + assert.equal(states.at(-1).privacyOptionsRequired, false); }); test("normalizes an invalid native state instead of starting ads", async () => { @@ -177,3 +179,62 @@ test("normalizes an invalid native state instead of starting ads", async () => { assert.deepEqual(await harness.coordinator.start(), EMPTY_PRIVACY_STATE); assert.equal(harness.initializeCalls, 0); }); + +test("deduplicates concurrent privacy-option requests", async () => { + let resolveOptions; + let showOptionsCalls = 0; + const optionsResult = new Promise((resolve) => { + resolveOptions = resolve; + }); + const harness = createHarness({ + gatherState: { + consentStatus: "obtained", + canRequestAds: true, + privacyOptionsRequired: true, + }, + showOptions() { + showOptionsCalls++; + return optionsResult; + }, + }); + await harness.coordinator.start(); + + const firstRequest = harness.coordinator.showPrivacyOptions(); + const secondRequest = harness.coordinator.showPrivacyOptions(); + assert.equal(firstRequest, secondRequest); + resolveOptions({ + consentStatus: "obtained", + canRequestAds: true, + privacyOptionsRequired: false, + }); + + assert.deepEqual(await firstRequest, { + consentStatus: "obtained", + canRequestAds: true, + privacyOptionsRequired: false, + }); + assert.equal(showOptionsCalls, 1); +}); + +test("preserves consent state when privacy options reject", async () => { + const gatherState = { + consentStatus: "obtained", + canRequestAds: true, + privacyOptionsRequired: true, + }; + const optionsError = new Error("native failure"); + const harness = createHarness({ + gatherState, + showOptions: async () => { + throw optionsError; + }, + }); + await harness.coordinator.start(); + + await assert.rejects( + harness.coordinator.showPrivacyOptions(), + (error) => error === optionsError, + ); + assert.deepEqual(harness.coordinator.state, gatherState); + assert.equal(harness.initializeCalls, 1); +}); diff --git a/tests/admob/bannerVisibilityController.test.js b/tests/admob/bannerVisibilityController.test.js index cb9d52c347..1ad63d396c 100644 --- a/tests/admob/bannerVisibilityController.test.js +++ b/tests/admob/bannerVisibilityController.test.js @@ -1,21 +1,34 @@ import assert from "node:assert/strict"; -import { test } from "vitest"; +import { afterEach, test, vi } from "vitest"; import { BANNER_SUPPRESSION_REASON, BannerVisibilityController, } from "../../src/lib/bannerVisibilityController.mjs"; -function createHarness() { +function createHarness({ show, hide } = {}) { let activePage = null; let notifyPageChange = () => {}; const calls = []; + const errors = []; + const listeners = new Map(); const banner = { active: false, async show() { calls.push("show"); + return show?.(); }, async hide() { calls.push("hide"); + return hide?.(); + }, + on(eventName, listener) { + let eventListeners = listeners.get(eventName); + if (!eventListeners) { + eventListeners = new Set(); + listeners.set(eventName, eventListeners); + } + eventListeners.add(listener); + return () => eventListeners.delete(listener); }, }; const controller = new BannerVisibilityController({ @@ -27,7 +40,7 @@ function createHarness() { }; }, onError(error) { - throw error; + errors.push(error); }, }); controller.setBanner(banner); @@ -36,6 +49,10 @@ function createHarness() { banner, calls, controller, + emit(eventName, event = {}) { + for (const listener of listeners.get(eventName) ?? []) listener(event); + }, + errors, changePage(page) { activePage = page; notifyPageChange(); @@ -46,6 +63,19 @@ function createHarness() { }; } +async function createEligibleHarness(options) { + const harness = createHarness(options); + const page = {}; + harness.setActivePage(page); + harness.controller.registerPage(page); + await harness.controller.whenIdle(); + return { harness, page }; +} + +afterEach(() => { + vi.useRealTimers(); +}); + test("shows only for a registered active page and ignores repeated syncs", async () => { const harness = createHarness(); const page = {}; @@ -234,3 +264,169 @@ test("serializes an in-flight show before the latest hide request", async () => assert.equal(banner.active, false); assert.deepEqual(calls, ["show", "hide"]); }); + +test("retries one transient failure after 500ms and caps requests at two", async () => { + vi.useFakeTimers(); + const { harness } = await createEligibleHarness(); + + harness.emit("loadfail", { code: 3 }); + harness.emit("loadfail", { code: 3 }); + await vi.advanceTimersByTimeAsync(499); + assert.deepEqual(harness.calls, ["show"]); + await vi.advanceTimersByTimeAsync(1); + await harness.controller.whenIdle(); + + harness.emit("loadfail", { code: 3 }); + harness.controller.reconcile(); + await vi.advanceTimersByTimeAsync(500); + await harness.controller.whenIdle(); + + assert.deepEqual(harness.calls, ["show", "show"]); + assert.equal(harness.errors.length, 3); +}); + +test("successful load restores the retry allowance", async () => { + vi.useFakeTimers(); + const { harness } = await createEligibleHarness(); + + harness.emit("loadfail", { code: 3 }); + await vi.advanceTimersByTimeAsync(500); + await harness.controller.whenIdle(); + harness.emit("load"); + harness.emit("loadfail", { code: 3 }); + await vi.advanceTimersByTimeAsync(500); + await harness.controller.whenIdle(); + + assert.deepEqual(harness.calls, ["show", "show", "show"]); +}); + +test("cancels a retry on navigation and restores it when the page returns", async () => { + vi.useFakeTimers(); + const { harness, page } = await createEligibleHarness(); + + harness.emit("loadfail", { code: 3 }); + harness.changePage({}); + await harness.controller.whenIdle(); + await vi.advanceTimersByTimeAsync(500); + assert.deepEqual(harness.calls, ["show"]); + + harness.changePage(page); + await harness.controller.whenIdle(); + harness.emit("loadfail", { code: 3 }); + await vi.advanceTimersByTimeAsync(500); + await harness.controller.whenIdle(); + + assert.deepEqual(harness.calls, ["show", "show", "show"]); +}); + +test("does not retry non-transient load failures", async () => { + vi.useFakeTimers(); + const { harness } = await createEligibleHarness(); + + harness.emit("loadfail", { code: 1 }); + harness.controller.reconcile(); + await vi.advanceTimersByTimeAsync(500); + await harness.controller.whenIdle(); + + assert.deepEqual(harness.calls, ["show"]); +}); + +test("retries a rejected native show call", async () => { + vi.useFakeTimers(); + let showCalls = 0; + const { harness } = await createEligibleHarness({ + show() { + showCalls++; + if (showCalls === 1) throw new Error("bridge failure"); + }, + }); + + await vi.advanceTimersByTimeAsync(500); + await harness.controller.whenIdle(); + + assert.deepEqual(harness.calls, ["show", "show"]); + assert.equal(harness.errors.length, 1); +}); + +test("keeps a rejected hide operation eligible for reconciliation", async () => { + let hideCalls = 0; + const { harness } = await createEligibleHarness({ + hide() { + hideCalls++; + if (hideCalls === 1) throw new Error("bridge failure"); + }, + }); + + harness.controller.setKeyboardVisible(true); + await harness.controller.whenIdle(); + harness.controller.reconcile(); + await harness.controller.whenIdle(); + + assert.deepEqual(harness.calls, ["show", "hide", "hide"]); + assert.equal(harness.errors.length, 1); +}); + +test("replacement and disposal cancel retries and detach listeners", async () => { + vi.useFakeTimers(); + const { harness } = await createEligibleHarness(); + harness.emit("loadfail", { code: 3 }); + + const replacementCalls = []; + const replacementListeners = new Map(); + harness.controller.setBanner({ + active: false, + async hide() { + replacementCalls.push("hide"); + }, + on(eventName, listener) { + replacementListeners.set(eventName, listener); + return () => replacementListeners.delete(eventName); + }, + async show() { + replacementCalls.push("show"); + }, + }); + await harness.controller.whenIdle(); + const errorsBeforeStaleEvent = harness.errors.length; + harness.emit("loadfail", { code: 3 }); + replacementListeners.get("loadfail")({ code: 3 }); + harness.controller.dispose(); + replacementListeners.get("loadfail")?.({ code: 3 }); + await vi.advanceTimersByTimeAsync(500); + + assert.deepEqual(replacementCalls, ["show"]); + assert.equal(harness.errors.length, errorsBeforeStaleEvent + 1); +}); + +test("ignores a stale show rejection after replacing the banner", async () => { + let rejectOldShow; + const harness = createHarness({ + show: () => + new Promise((_, reject) => { + rejectOldShow = reject; + }), + }); + const page = {}; + harness.setActivePage(page); + harness.controller.registerPage(page); + await new Promise((resolve) => setImmediate(resolve)); + + const replacementCalls = []; + harness.controller.setBanner({ + active: false, + async hide() { + replacementCalls.push("hide"); + }, + on() { + return () => {}; + }, + async show() { + replacementCalls.push("show"); + }, + }); + rejectOldShow(new Error("stale bridge failure")); + await harness.controller.whenIdle(); + + assert.deepEqual(replacementCalls, ["show"]); + assert.deepEqual(harness.errors, []); +}); From 4ee4fa382b2c2ad89525e8403587d0921fa1fe37 Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Tue, 25 Aug 2026 14:25:08 +0000 Subject: [PATCH 05/38] fix(android): avoid splash surface crash on realme Android 13 (#2805) --- hooks/post-process.js | 74 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/hooks/post-process.js b/hooks/post-process.js index 16f310469e..51bd6b3901 100644 --- a/hooks/post-process.js +++ b/hooks/post-process.js @@ -27,6 +27,7 @@ fs.copyFileSync(gradleFilePath, androidGradleFilePath); copyDirRecursively(localResPath, resPath); enableLegacyJni(); enableStaticContext(); +disableSplashFadeOnRealmeAndroid13(); removeLegacyKeyboardWorkaround(); patchTargetSdkVersion(); @@ -210,6 +211,79 @@ function enableStaticContext() { } } +function disableSplashFadeOnRealmeAndroid13() { + try { + const prefix = execSync('npm prefix').toString().trim(); + const packageName = getPackageName(); + const mainActivityPath = path.join( + prefix, + 'platforms/android/app/src/main/java', + packageName.replace(/\./g, '/'), + 'MainActivity.java' + ); + + if (!fs.existsSync(mainActivityPath)) { + console.warn('[Cordova Hook] ⚠️ MainActivity.java not found at', mainActivityPath); + return; + } + + let content = fs.readFileSync(mainActivityPath, 'utf-8'); + + if ( + content.includes('hasBrokenRealmeSplashTransfer()') && + content.includes('preferences.set("FadeSplashScreen", false);') + ) { + console.log('[Cordova Hook] ✅ realme splash workaround already enabled, skipping'); + return; + } + + if (!content.includes('import android.os.Build;')) { + content = content.replace( + /import android\.os\.Bundle;/, + 'import android.os.Build;\nimport android.os.Bundle;' + ); + } + + content = content.replace( + /\n\s*@Override\n\s*public void onCreate\(Bundle savedInstanceState\)/, + ` + + private static boolean hasBrokenRealmeSplashTransfer() { + return Build.VERSION.SDK_INT == Build.VERSION_CODES.TIRAMISU + && ("realme".equalsIgnoreCase(Build.MANUFACTURER) + || "realme".equalsIgnoreCase(Build.BRAND)); + } + + @Override + protected void loadConfig() { + super.loadConfig(); + + // Some realme Android 13 builds pass a null SurfaceControl while handing the + // splash view to an app-provided exit animation. Avoid only that handoff. + if (hasBrokenRealmeSplashTransfer()) { + preferences.set("FadeSplashScreen", false); + } + } + + @Override + public void onCreate(Bundle savedInstanceState)` + ); + + if (!content.includes('preferences.set("FadeSplashScreen", false);')) { + console.warn('[Cordova Hook] ⚠️ Unable to inject realme splash workaround'); + return; + } + + fs.writeFileSync(mainActivityPath, content, 'utf-8'); + console.log('[Cordova Hook] ✅ Disabled splash fade on realme Android 13'); + } catch (err) { + console.error( + '[Cordova Hook] ❌ Failed to patch realme splash workaround:', + err.message + ); + } +} + function removeLegacyKeyboardWorkaround() { try { const prefix = execSync('npm prefix').toString().trim(); From 8d7148a6d5f8640e78f90290d6f1a5131a22d0ca Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Wed, 26 Aug 2026 06:43:45 +0000 Subject: [PATCH 06/38] fix(session): restore picker documents and skip intent files tab (#2809) * fix(session): restore picker documents and skip intent files tab * feat(file-browser): expose document picker(icon) from nested folders * fix --- src/handlers/intent.js | 23 +-- src/lib/editorFile.js | 3 + src/lib/fileSessionPersistence.js | 13 ++ src/lib/openFile.js | 15 +- src/lib/saveState.js | 2 +- src/pages/fileBrowser/fileBrowser.js | 64 +++++--- src/pages/fileBrowser/index.js | 7 +- src/plugins/sdcard/index.d.ts | 1 + src/plugins/sdcard/src/android/SDcard.java | 36 +++-- tests/unit/sessionPersistence.test.js | 165 +++++++++++++++++++++ 10 files changed, 284 insertions(+), 45 deletions(-) create mode 100644 src/lib/fileSessionPersistence.js create mode 100644 tests/unit/sessionPersistence.test.js diff --git a/src/handlers/intent.js b/src/handlers/intent.js index fc5f5b9cb1..78c0009ab6 100644 --- a/src/handlers/intent.js +++ b/src/handlers/intent.js @@ -17,11 +17,14 @@ const pendingIntents = []; * @param {Intent} intent */ export default async function HandleIntent(intent = {}) { - const type = intent.action.split(".").slice(-1)[0]; + const type = intent.action?.split(".").slice(-1)[0]; if (["SEND", "VIEW", "EDIT"].includes(type)) { /**@type {string} */ - const url = intent.fileUri || intent.data; + const url = + intent.fileUri || + intent.data || + intent.extras?.["android.intent.extra.STREAM"]; if (!url) return; if (url.startsWith("acode://")) { @@ -72,19 +75,19 @@ export default async function HandleIntent(intent = {}) { return; } + const options = { + mode: "single", + render: true, + persistInSession: false, + }; + if (sessionStorage.getItem("isfilesRestored") === "true") { - await openFile(url, { - mode: "single", - render: true, - }); + await openFile(url, options); } else { // Store the intent for later processing when files are restored pendingIntents.push({ url, - options: { - mode: "single", - render: true, - }, + options, }); } } diff --git a/src/lib/editorFile.js b/src/lib/editorFile.js index 2aee9b500f..df7abed821 100644 --- a/src/lib/editorFile.js +++ b/src/lib/editorFile.js @@ -330,6 +330,7 @@ function maybeRecommendLanguageModeExtension(file, modeInfo) { * @property {string} [paneId] target editor pane id * @property {object} [pane] target editor pane * @property {boolean} [isPanePlaceholder] temporary empty tab for an empty pane + * @property {boolean} [persistInSession] restore the tab in a future app session * @property {boolean} [highlightStyles] adopt static CodeMirror highlight CSS into the custom tab shadow root */ @@ -500,6 +501,7 @@ export default class EditorFile { diskMtime = null; hasDiskConflict = false; isPanePlaceholder = false; + persistInSession = true; /** * @@ -513,6 +515,7 @@ export default class EditorFile { this.hideQuickTools = options?.hideQuickTools || false; this.paneId = options?.paneId || options?.pane?.id || null; this.isPanePlaceholder = !!options?.isPanePlaceholder; + this.persistInSession = options?.persistInSession !== false; // if options are passed if (options) { diff --git a/src/lib/fileSessionPersistence.js b/src/lib/fileSessionPersistence.js new file mode 100644 index 0000000000..e14c639402 --- /dev/null +++ b/src/lib/fileSessionPersistence.js @@ -0,0 +1,13 @@ +/** + * Promote an open file to durable session persistence when a later open source + * proves that its URI will remain accessible. Less durable sources, such as + * external intents, must not revoke an existing durable grant. + * + * @param {{persistInSession?: boolean}} file + * @param {boolean | undefined} requestedPersistence + */ +export function promoteSessionPersistence(file, requestedPersistence) { + if (requestedPersistence === true) { + file.persistInSession = true; + } +} diff --git a/src/lib/openFile.js b/src/lib/openFile.js index bbb5e5812f..020c028558 100644 --- a/src/lib/openFile.js +++ b/src/lib/openFile.js @@ -8,6 +8,7 @@ import { reopenWithNewEncoding } from "palettes/changeEncoding"; import { decode, detectEncoding } from "utils/encodings"; import helpers from "utils/helpers"; import EditorFile from "./editorFile"; +import { promoteSessionPersistence } from "./fileSessionPersistence"; import fileTypeHandler from "./fileTypeHandler"; import recents from "./recents"; import appSettings from "./settings"; @@ -22,6 +23,7 @@ import appSettings from "./settings"; * @property {string} mode * @property {string} uri * @property {string} paneId + * @property {boolean} persistInSession */ /** @@ -37,9 +39,19 @@ export default async function openFile(file, options = {}) { /**@type {EditorFile} */ const existingFile = editorManager.getFile(uri, "uri"); - const { cursorPos, render, onsave, text, mode, encoding, paneId } = options; + const { + cursorPos, + render, + onsave, + text, + mode, + encoding, + paneId, + persistInSession, + } = options; if (existingFile) { + promoteSessionPersistence(existingFile, persistInSession); // If file is already opened and new text is provided const incomingDoc = text != null ? Text.of(String(text).split("\n")) : null; @@ -120,6 +132,7 @@ export default async function openFile(file, options = {}) { savedMtime: helpers.getStatMtime(fileInfo), diskMtime: helpers.getStatMtime(fileInfo), paneId, + persistInSession, }); }; diff --git a/src/lib/saveState.js b/src/lib/saveState.js index 784304d475..7e0ea6790b 100644 --- a/src/lib/saveState.js +++ b/src/lib/saveState.js @@ -14,7 +14,7 @@ export default () => { files.forEach((file) => { if (file.type !== "editor") return; if (file.id === config.DEFAULT_FILE_SESSION) return; - if (file.SAFMode === "single") return; + if (file.persistInSession === false) return; // Selection per file: // - Active file uses live EditorView selection diff --git a/src/pages/fileBrowser/fileBrowser.js b/src/pages/fileBrowser/fileBrowser.js index b26758b189..ef9c59ce28 100644 --- a/src/pages/fileBrowser/fileBrowser.js +++ b/src/pages/fileBrowser/fileBrowser.js @@ -60,6 +60,7 @@ function FileBrowserInclude(mode, info, doesOpenLast = true) { const IS_FOLDER_MODE = ["folder", "both"].includes(mode); const IS_FILE_MODE = ["file", "both"].includes(mode); + const SELECT_DOCUMENT_LABEL = "Select document"; const storedState = helpers.parseJSON(localStorage.fileBrowserState) || []; /**@type {Array} */ const state = []; @@ -106,6 +107,16 @@ function FileBrowserInclude(mode, info, doesOpenLast = true) { ); const $search = ; + const $selectDocument = ( + + ); const $lead = ; const $page = Page(strings["file browser"].capitalize(), { lead: $lead, @@ -178,8 +189,9 @@ function FileBrowserInclude(mode, info, doesOpenLast = true) { $content.addEventListener("click", handleClick); $content.addEventListener("contextmenu", handleContextMenu, true); $page.body = $content; + $page.header.append($search); + if (IS_FILE_MODE) $page.header.append($selectDocument); $page.header.append( - $search, $pasteToggler, $selectionModeToggler, $addMenuToggler, @@ -222,6 +234,12 @@ function FileBrowserInclude(mode, info, doesOpenLast = true) { }; $pasteToggler.onclick = pasteCopiedItems; + $selectDocument.onclick = selectDocument; + $selectDocument.onkeydown = (event) => { + if (event.key !== "Enter" && event.key !== " ") return; + event.preventDefault(); + selectDocument(); + }; $fbMenu.onclick = function (e) { $fbMenu.hide(); @@ -653,6 +671,25 @@ function FileBrowserInclude(mode, info, doesOpenLast = true) { $page.hide(); } + function selectDocument() { + checkFiles.check = false; + sdcard.openDocumentFile( + (res) => { + res.url = res.uri; + resolve({ + type: "file", + ...res, + name: res.filename, + mode: "single", + }); + $page.hide(); + }, + (err) => { + helpers.error(err); + }, + ); + } + /** * @param {string} url */ @@ -872,6 +909,7 @@ function FileBrowserInclude(mode, info, doesOpenLast = true) { $addMenuToggler.style.display = "none"; $menuToggler.style.display = "none"; + $selectDocument.style.display = "none"; $selectionMenuToggler.style.display = ""; updatePasteToggler(); @@ -899,6 +937,7 @@ function FileBrowserInclude(mode, info, doesOpenLast = true) { $addMenuToggler.style.display = ""; $menuToggler.style.display = ""; + $selectDocument.style.display = ""; $selectionMenuToggler.style.display = "none"; updatePasteToggler(); @@ -998,7 +1037,7 @@ function FileBrowserInclude(mode, info, doesOpenLast = true) { else if (!$el.hasAttribute("disabled")) file(); break; case "openDoc": - openDoc(); + selectDocument(); break; } @@ -1304,25 +1343,6 @@ function FileBrowserInclude(mode, info, doesOpenLast = true) { localStorage.storageList = JSON.stringify(storageList); reload(); } - - function openDoc() { - checkFiles.check = false; - sdcard.openDocumentFile( - (res) => { - res.url = res.uri; - resolve({ - type: "file", - ...res, - name: res.filename, - mode: "single", - }); - $page.hide(); - }, - (err) => { - helpers.error(err); - }, - ); - } } function handleContextMenu(e) { @@ -1431,7 +1451,7 @@ function FileBrowserInclude(mode, info, doesOpenLast = true) { } if (IS_FILE_MODE) { - util.pushFolder(allStorages, "Select document", null, { + util.pushFolder(allStorages, SELECT_DOCUMENT_LABEL, null, { openDoc: true, notSelectable: true, }); diff --git a/src/pages/fileBrowser/index.js b/src/pages/fileBrowser/index.js index 63becfb329..bd46f597c8 100644 --- a/src/pages/fileBrowser/index.js +++ b/src/pages/fileBrowser/index.js @@ -31,7 +31,7 @@ function FileBrowser(mode, info, doesOpenLast, ...args) { } FileBrowser.openFile = (res) => { - const { url, name, mode } = res; + const { url, name, mode, persistedUriPermission } = res; const createOption = { uri: url, name, @@ -41,8 +41,11 @@ FileBrowser.openFile = (res) => { if (mode) { createOption.mode = mode; } + if (mode === "single") { + createOption.persistInSession = persistedUriPermission !== false; + } - openFile(url, createOption); + return openFile(url, createOption); }; FileBrowser.openFileError = (err) => { diff --git a/src/plugins/sdcard/index.d.ts b/src/plugins/sdcard/index.d.ts index f151eab349..fd6a6b7db8 100644 --- a/src/plugins/sdcard/index.d.ts +++ b/src/plugins/sdcard/index.d.ts @@ -35,6 +35,7 @@ interface DocumentFile { canWrite: boolean; filename: string; length: number; + persistedUriPermission: boolean; type: string; uri: string; } diff --git a/src/plugins/sdcard/src/android/SDcard.java b/src/plugins/sdcard/src/android/SDcard.java index 1b33e7edef..578d33dda3 100644 --- a/src/plugins/sdcard/src/android/SDcard.java +++ b/src/plugins/sdcard/src/android/SDcard.java @@ -266,6 +266,11 @@ public void openDocumentFile(String mimeType, CallbackContext callback) { intent.setAction(Intent.ACTION_OPEN_DOCUMENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType(mimeType); + intent.addFlags( + Intent.FLAG_GRANT_READ_URI_PERMISSION | + Intent.FLAG_GRANT_WRITE_URI_PERMISSION | + Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION + ); activityResultCallback = callback; cordova.startActivityForResult(this, intent, this.OPEN_DOCUMENT); } @@ -409,7 +414,10 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { return; } - takePermission(uri); + boolean persistedUriPermission = takePermission( + uri, + data.getFlags() + ); DocumentFile file = DocumentFile.fromSingleUri(context, uri); JSONObject res = new JSONObject(); @@ -418,6 +426,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { res.put("filename", file.getName()); res.put("canWrite", canWrite(file.getUri())); res.put("uri", uri.toString()); + res.put("persistedUriPermission", persistedUriPermission); activityResultCallback.success(res); } catch (JSONException e) { activityResultCallback.error(e.toString()); @@ -447,7 +456,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { return; } - takePermission(uri); + takePermission(uri, data.getFlags()); DocumentFile file = DocumentFile.fromTreeUri(context, uri); if (file != null && file.canWrite()) { activityResultCallback.success(uri.toString()); @@ -1152,13 +1161,22 @@ private DocumentFile getFile(String filePath) { return documentFile; } - private void takePermission(Uri uri) { - contentResolver = context.getContentResolver(); - contentResolver.takePersistableUriPermission( - uri, - Intent.FLAG_GRANT_WRITE_URI_PERMISSION | - Intent.FLAG_GRANT_READ_URI_PERMISSION - ); + private boolean takePermission(Uri uri, int intentFlags) { + int permissionFlags = + intentFlags & + (Intent.FLAG_GRANT_WRITE_URI_PERMISSION | + Intent.FLAG_GRANT_READ_URI_PERMISSION); + + if (permissionFlags == 0) return false; + + try { + contentResolver = context.getContentResolver(); + contentResolver.takePersistableUriPermission(uri, permissionFlags); + return true; + } catch (SecurityException | IllegalArgumentException error) { + Log.w("SDcard", "Unable to persist URI permission for " + uri, error); + return false; + } } public boolean canWrite(Uri uri) { diff --git a/tests/unit/sessionPersistence.test.js b/tests/unit/sessionPersistence.test.js new file mode 100644 index 0000000000..938cc63a60 --- /dev/null +++ b/tests/unit/sessionPersistence.test.js @@ -0,0 +1,165 @@ +// @vitest-environment happy-dom + +import { beforeEach, describe, expect, it, vi } from "vitest"; + +const runtime = vi.hoisted(() => { + const settings = { + value: { + rememberFiles: true, + rememberFolders: false, + }, + }; + + return { + settings, + openFile: vi.fn(), + }; +}); + +vi.mock("cm/editorUtils", () => ({ + getAllFolds: vi.fn(() => []), + getScrollPosition: vi.fn(() => ({ scrollTop: 0, scrollLeft: 0 })), + getSelection: vi.fn(() => ({ + ranges: [{ from: 0, to: 0 }], + mainIndex: 0, + })), +})); +vi.mock("dialogs/alert", () => ({ default: vi.fn() })); +vi.mock("fileSystem", () => ({ default: vi.fn() })); +vi.mock("lib/auth", () => ({ default: {} })); +vi.mock("lib/config", () => ({ + default: { DEFAULT_FILE_SESSION: "default-session" }, +})); +vi.mock("lib/openFile", () => ({ default: runtime.openFile })); +vi.mock("lib/openFolder", () => ({ + default: vi.fn(), + addedFolder: [], +})); +vi.mock("lib/settings", () => ({ default: runtime.settings })); +vi.mock("lib/startAd", () => ({ + BANNER_SUPPRESSION_REASON: {}, + setBannerSuppressed: vi.fn(), +})); +vi.mock("utils/helpers", () => ({ + default: { error: vi.fn(), errorMessage: vi.fn() }, +})); + +import HandleIntent from "handlers/intent"; +import { promoteSessionPersistence } from "lib/fileSessionPersistence"; +import saveState from "lib/saveState"; +import FileBrowser from "pages/fileBrowser"; + +describe("file session persistence", () => { + beforeEach(() => { + runtime.openFile.mockReset(); + localStorage.clear(); + sessionStorage.clear(); + sessionStorage.setItem("isfilesRestored", "true"); + globalThis.editorManager = { + editor: {}, + files: [], + activeFile: null, + getFile(value, type = "id") { + return this.files.find((file) => file[type] === value); + }, + }; + runtime.openFile.mockImplementation(async (uri, options = {}) => { + const existingFile = globalThis.editorManager.getFile(uri, "uri"); + if (existingFile) { + promoteSessionPersistence(existingFile, options.persistInSession); + globalThis.editorManager.activeFile = existingFile; + return; + } + + const file = createOpenFile(uri, options); + globalThis.editorManager.files.push(file); + globalThis.editorManager.activeFile = file; + }); + }); + + it("persists only a picker document with durable URI access", async () => { + const selectedUri = "content://documents/document/selected"; + const unpersistableUri = "content://documents/document/no-grant"; + const intentUri = "content://external-app/shared/temporary"; + + await FileBrowser.openFile({ + type: "file", + url: selectedUri, + name: "selected.js", + mode: "single", + persistedUriPermission: true, + }); + await FileBrowser.openFile({ + type: "file", + url: unpersistableUri, + name: "no-grant.js", + mode: "single", + persistedUriPermission: false, + }); + await HandleIntent({ + action: "android.intent.action.VIEW", + data: intentUri, + }); + await HandleIntent({ + action: "android.intent.action.VIEW", + data: selectedUri, + }); + + saveState(); + + const restoredUris = JSON.parse(localStorage.files).map( + (file) => file.uri, + ); + expect(restoredUris).toEqual([selectedUri]); + }); + + it("promotes an intent tab when the same document is later selected", async () => { + const uri = "content://documents/document/shared"; + + await HandleIntent({ + action: "android.intent.action.VIEW", + data: uri, + }); + await FileBrowser.openFile({ + type: "file", + url: uri, + name: "shared.js", + mode: "single", + persistedUriPermission: true, + }); + + saveState(); + + expect(JSON.parse(localStorage.files).map((file) => file.uri)).toEqual([ + uri, + ]); + }); +}); + +function createOpenFile(uri, options) { + return { + id: `file-${globalThis.editorManager.files.length + 1}`, + uri, + type: "editor", + filename: options.name || uri.split("/").pop(), + pinned: false, + isUnsaved: false, + docVersion: 0, + savedVersion: 0, + cacheVersion: 0, + savedMtime: 1, + diskMtime: 1, + hasDiskConflict: false, + readOnly: false, + SAFMode: options.mode, + deletedFile: false, + session: { + selection: { ranges: [{ from: 0, to: 0 }], mainIndex: 0 }, + }, + lastScrollTop: 0, + lastScrollLeft: 0, + editable: true, + encoding: "UTF-8", + persistInSession: options.persistInSession, + }; +} From ad016a43d4e26ad6b9e237d26a742e84ba4b20aa Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Wed, 26 Aug 2026 13:22:32 +0000 Subject: [PATCH 07/38] feat(console): isolate execution and improve mobile REPL UX (#2808) * feat(console): isolate execution and improve mobile REPL UX - run console JavaScript in a cancellable Web Worker - protect the app from infinite loops and recursion - preserve history with variable-height virtualization - restore the inline REPL layout - fix mobile keyboard resizing and viewport gaps - add clear and stop controls * fix(console): address execution context and bottom pinning * address the pinning regression * remove stop, run btn --- rspack.config.js | 1 + src/components/virtualList/index.js | 2 + src/components/virtualList/style.scss | 10 + src/components/virtualList/variable.js | 411 +++++++++++++++++ src/lib/console.js | 238 ++++++++-- src/lib/consoleRuntime.js | 186 ++++++++ src/lib/consoleWorker.js | 168 +++++++ src/lib/run.js | 10 +- .../com/foxdebug/browser/BrowserActivity.java | 38 +- src/styles/console.m.scss | 419 ++++++++++-------- src/views/console.hbs | 11 +- tests/unit/consoleExecutionContext.test.js | 52 +++ tests/unit/consoleExecutor.test.js | 134 ++++++ tests/unit/consoleViewport.test.js | 41 ++ tests/unit/variableVirtualList.test.js | 194 ++++++++ webpack.config.js | 1 + 16 files changed, 1676 insertions(+), 240 deletions(-) create mode 100644 src/components/virtualList/variable.js create mode 100644 src/lib/consoleRuntime.js create mode 100644 src/lib/consoleWorker.js create mode 100644 tests/unit/consoleExecutionContext.test.js create mode 100644 tests/unit/consoleExecutor.test.js create mode 100644 tests/unit/consoleViewport.test.js create mode 100644 tests/unit/variableVirtualList.test.js diff --git a/rspack.config.js b/rspack.config.js index a30e31154b..9efbf30197 100644 --- a/rspack.config.js +++ b/rspack.config.js @@ -144,6 +144,7 @@ module.exports = (env, options) => { boot: './src/boot.js', main: './src/main.js', console: './src/lib/console.js', + consoleWorker: './src/lib/consoleWorker.js', searchInFilesWorker: './src/sidebarApps/searchInFiles/worker.js', searchIndexWorker: './src/sidebarApps/searchInFiles/indexWorker.js', htmlLspWorker: './src/cm/lsp/workers/html.worker.ts', diff --git a/src/components/virtualList/index.js b/src/components/virtualList/index.js index bf7b7db4b1..c1ff5bafcf 100644 --- a/src/components/virtualList/index.js +++ b/src/components/virtualList/index.js @@ -1,6 +1,8 @@ import "./style.scss"; import tag from "html-tag-js"; +export { default as VariableVirtualList } from "./variable"; + /** * @typedef {object} VirtualListOptions * @property {number} [itemHeight=30] - Height of each item in pixels diff --git a/src/components/virtualList/style.scss b/src/components/virtualList/style.scss index 9af4e0df05..3ef86ce953 100644 --- a/src/components/virtualList/style.scss +++ b/src/components/virtualList/style.scss @@ -7,3 +7,13 @@ position: relative; min-width: 100%; } + +.variable-virtual-spacer { + width: 100%; + pointer-events: none; +} + +.variable-virtual-items { + position: relative; + min-width: 100%; +} diff --git a/src/components/virtualList/variable.js b/src/components/virtualList/variable.js new file mode 100644 index 0000000000..e2cf193c6d --- /dev/null +++ b/src/components/virtualList/variable.js @@ -0,0 +1,411 @@ +const DEFAULT_ESTIMATED_HEIGHT = 52; +const DEFAULT_OVERSCAN = 360; +const BOTTOM_THRESHOLD = 48; + +/** + * Variable-height virtual list for retained HTMLElement items. + * + * Every item stays in the model, while only the visible window and a small pixel + * overscan are mounted. ResizeObserver keeps changing item heights measured + * without losing the reader's scroll anchor. + */ +export default class VariableVirtualList { + constructor( + container, + { + estimatedHeight = DEFAULT_ESTIMATED_HEIGHT, + overscan = DEFAULT_OVERSCAN, + activeOverscan = overscan * 4, + maxOverscan = overscan * 10, + footer = null, + } = {}, + ) { + this.container = container; + this.estimatedHeight = estimatedHeight; + this.overscan = overscan; + this.activeOverscan = Math.max(overscan, activeOverscan); + this.maxOverscan = Math.max(this.activeOverscan, maxOverscan); + this.dynamicOverscan = overscan; + this.footer = footer; + this.footerHeight = 0; + this.viewportHeight = this.container.clientHeight; + this.items = []; + this.itemByElement = new WeakMap(); + this.offsets = [0]; + this.offsetsDirty = false; + this.renderedRange = { start: 0, end: 0 }; + this.frame = null; + this.stickToBottom = true; + this.lastScrollTop = this.container.scrollTop; + this.lastScrollTime = this.now(); + this.touching = false; + this.releaseTimer = null; + this.destroyed = false; + + this.topSpacer = document.createElement("div"); + this.topSpacer.className = "variable-virtual-spacer"; + this.itemContainer = document.createElement("div"); + this.itemContainer.className = "variable-virtual-items"; + this.bottomSpacer = document.createElement("div"); + this.bottomSpacer.className = "variable-virtual-spacer"; + this.container.append( + this.topSpacer, + this.itemContainer, + this.bottomSpacer, + ); + if (this.footer) this.container.append(this.footer); + + this.onScroll = () => { + this.stickToBottom = this.isNearBottom(); + const now = this.now(); + const elapsed = Math.max(8, now - this.lastScrollTime); + const distance = Math.abs(this.container.scrollTop - this.lastScrollTop); + const projectedDistance = distance * (32 / elapsed); + this.dynamicOverscan = Math.min( + this.maxOverscan, + this.activeOverscan + projectedDistance * 2, + ); + this.lastScrollTop = this.container.scrollTop; + this.lastScrollTime = now; + // Scroll rendering is intentionally synchronous. Android WebView can move + // the compositor several rows before the next animation frame. + this.render(); + this.scheduleOverscanRelease(); + }; + this.onTouchStart = () => { + this.touching = true; + this.clearOverscanRelease(); + this.dynamicOverscan = this.activeOverscan; + // Pre-paint the fling guard before compositor scrolling begins. + this.render(); + }; + this.onTouchEnd = () => { + this.touching = false; + this.scheduleOverscanRelease(); + }; + this.container.addEventListener("scroll", this.onScroll, { passive: true }); + this.container.addEventListener("touchstart", this.onTouchStart, { + passive: true, + }); + this.container.addEventListener("touchend", this.onTouchEnd, { + passive: true, + }); + this.container.addEventListener("touchcancel", this.onTouchEnd, { + passive: true, + }); + + this.resizeObserver = + typeof ResizeObserver === "function" + ? new ResizeObserver((entries) => this.onResize(entries)) + : null; + this.resizeObserver?.observe(this.container); + } + + now() { + return ( + this.container.ownerDocument.defaultView?.performance?.now?.() ?? + Date.now() + ); + } + + scheduleOverscanRelease() { + this.clearOverscanRelease(); + this.releaseTimer = this.container.ownerDocument.defaultView?.setTimeout( + () => { + this.releaseTimer = null; + if (this.destroyed || this.touching) return; + this.dynamicOverscan = this.overscan; + this.render(); + }, + 500, + ); + } + + clearOverscanRelease() { + if (this.releaseTimer === null) return; + this.container.ownerDocument.defaultView?.clearTimeout(this.releaseTimer); + this.releaseTimer = null; + } + + get length() { + return this.items.length; + } + + get mountedCount() { + return this.itemContainer.childElementCount; + } + + append(element) { + const wasNearBottom = this.isNearBottom(); + const item = { + element, + height: this.estimatedHeight, + index: this.items.length, + }; + this.items.push(item); + this.itemByElement.set(element, item); + this.offsetsDirty = true; + if (wasNearBottom || this.items.length === 1) this.stickToBottom = true; + this.scheduleRender(); + } + + clear() { + this.items = []; + this.itemByElement = new WeakMap(); + this.offsets = [0]; + this.offsetsDirty = false; + this.renderedRange = { start: 0, end: 0 }; + this.stickToBottom = true; + this.dynamicOverscan = this.overscan; + this.topSpacer.style.height = "0px"; + this.bottomSpacer.style.height = "0px"; + this.itemContainer.replaceChildren(); + this.container.scrollTop = 0; + this.footerHeight = this.getFooterHeight(); + this.observeResizeTargets(); + } + + invalidate() { + this.scheduleRender(); + } + + scrollToBottom() { + this.stickToBottom = true; + this.scheduleRender(); + } + + scheduleRender() { + if (this.frame !== null || this.destroyed) return; + this.frame = requestAnimationFrame(() => { + this.frame = null; + this.render(); + }); + } + + rebuildOffsets() { + if (!this.offsetsDirty) return; + + const offsets = new Array(this.items.length + 1); + offsets[0] = 0; + for (let index = 0; index < this.items.length; index++) { + offsets[index + 1] = offsets[index] + this.items[index].height; + } + this.offsets = offsets; + this.offsetsDirty = false; + } + + findIndexAt(offset) { + let low = 0; + let high = this.items.length; + while (low < high) { + const middle = Math.floor((low + high + 1) / 2); + if (this.offsets[middle] <= offset) low = middle; + else high = middle - 1; + } + return Math.min(low, Math.max(0, this.items.length - 1)); + } + + getFooterHeight() { + if (!this.footer) return 0; + return Math.ceil( + this.footer.getBoundingClientRect().height || + this.footer.offsetHeight || + 0, + ); + } + + observeResizeTargets() { + if (!this.resizeObserver) return; + this.resizeObserver.disconnect(); + this.resizeObserver.observe(this.container); + for (const element of this.itemContainer.children) { + this.resizeObserver.observe(element); + } + if (this.footer) this.resizeObserver.observe(this.footer); + } + + render() { + if (this.destroyed) return; + this.rebuildOffsets(); + if (!this.items.length) { + this.footerHeight = this.getFooterHeight(); + this.itemContainer.replaceChildren(); + this.topSpacer.style.height = "0px"; + this.bottomSpacer.style.height = "0px"; + this.renderedRange = { start: 0, end: 0 }; + this.observeResizeTargets(); + return; + } + + const viewportHeight = Math.max( + 1, + this.container.clientHeight || window.innerHeight, + ); + this.viewportHeight = viewportHeight; + const totalHeight = this.offsets[this.items.length]; + this.footerHeight = this.getFooterHeight(); + const targetScrollTop = this.stickToBottom + ? Math.max(0, totalHeight + this.footerHeight - viewportHeight) + : this.container.scrollTop; + const start = this.findIndexAt( + Math.max(0, targetScrollTop - this.dynamicOverscan), + ); + const end = Math.min( + this.items.length, + this.findIndexAt( + targetScrollTop + viewportHeight + this.dynamicOverscan, + ) + 1, + ); + + this.updateMountedRange(start, end); + this.observeResizeTargets(); + this.topSpacer.style.height = `${this.offsets[start]}px`; + this.bottomSpacer.style.height = `${Math.max( + 0, + totalHeight - this.offsets[end], + )}px`; + this.renderedRange = { start, end }; + + if (this.stickToBottom) { + this.container.scrollTop = Math.max( + 0, + this.container.scrollHeight - viewportHeight, + ); + } + if (!this.resizeObserver) this.measureMountedItems(); + } + + updateMountedRange(start, end) { + let oldStart = this.renderedRange.start; + let oldEnd = this.renderedRange.end; + const rangesOverlap = oldStart < end && start < oldEnd; + + if (!this.itemContainer.childElementCount || !rangesOverlap) { + const fragment = document.createDocumentFragment(); + for (let index = start; index < end; index++) { + fragment.append(this.items[index].element); + } + this.itemContainer.replaceChildren(fragment); + return; + } + + while (oldStart < start) { + this.itemContainer.firstElementChild?.remove(); + oldStart++; + } + while (oldEnd > end) { + this.itemContainer.lastElementChild?.remove(); + oldEnd--; + } + + if (start < oldStart) { + const leading = document.createDocumentFragment(); + for (let index = start; index < oldStart; index++) { + leading.append(this.items[index].element); + } + this.itemContainer.insertBefore(leading, this.itemContainer.firstChild); + } + if (end > oldEnd) { + const trailing = document.createDocumentFragment(); + for (let index = oldEnd; index < end; index++) { + trailing.append(this.items[index].element); + } + this.itemContainer.append(trailing); + } + } + + measureMountedItems() { + for (const element of this.itemContainer.children) { + const item = this.itemByElement.get(element); + if (item) this.updateHeight(item, element.getBoundingClientRect().height); + } + } + + onResize(entries) { + const wasNearBottom = this.stickToBottom || this.isNearBottom(); + let footerChanged = false; + let viewportChanged = false; + for (const entry of entries) { + if (entry.target === this.container) { + const borderBox = Array.isArray(entry.borderBoxSize) + ? entry.borderBoxSize[0] + : entry.borderBoxSize; + const height = Math.ceil( + borderBox?.blockSize || + entry.contentRect?.height || + this.container.clientHeight, + ); + viewportChanged = Math.abs(height - this.viewportHeight) >= 1; + this.viewportHeight = height; + continue; + } + if (entry.target === this.footer) { + const borderBox = Array.isArray(entry.borderBoxSize) + ? entry.borderBoxSize[0] + : entry.borderBoxSize; + const height = Math.ceil( + borderBox?.blockSize || + entry.contentRect?.height || + this.getFooterHeight(), + ); + footerChanged = Math.abs(height - this.footerHeight) >= 1; + this.footerHeight = height; + continue; + } + const item = this.itemByElement.get(entry.target); + if (!item) continue; + const borderBox = Array.isArray(entry.borderBoxSize) + ? entry.borderBoxSize[0] + : entry.borderBoxSize; + this.updateHeight( + item, + borderBox?.blockSize || + entry.contentRect?.height || + entry.target.offsetHeight, + ); + } + if (wasNearBottom) this.stickToBottom = true; + if (viewportChanged || (wasNearBottom && footerChanged)) { + this.scheduleRender(); + } + } + + updateHeight(item, measuredHeight) { + const height = Math.max(1, Math.ceil(measuredHeight || 0)); + if (Math.abs(height - item.height) < 1) return; + + const delta = height - item.height; + item.height = height; + this.offsetsDirty = true; + if (!this.stickToBottom && item.index < this.renderedRange.start) { + this.container.scrollTop += delta; + } + this.scheduleRender(); + } + + isNearBottom() { + if (!this.items.length) return true; + return ( + this.container.scrollHeight - + this.container.scrollTop - + this.container.clientHeight <= + BOTTOM_THRESHOLD + ); + } + + destroy() { + this.destroyed = true; + if (this.frame !== null) cancelAnimationFrame(this.frame); + this.frame = null; + this.clearOverscanRelease(); + this.resizeObserver?.disconnect(); + this.container.removeEventListener("scroll", this.onScroll); + this.container.removeEventListener("touchstart", this.onTouchStart); + this.container.removeEventListener("touchend", this.onTouchEnd); + this.container.removeEventListener("touchcancel", this.onTouchEnd); + this.topSpacer.remove(); + this.itemContainer.remove(); + this.bottomSpacer.remove(); + this.items = []; + } +} diff --git a/src/lib/console.js b/src/lib/console.js index 3e10948585..8d399ea315 100644 --- a/src/lib/console.js +++ b/src/lib/console.js @@ -1,24 +1,102 @@ import "core-js/stable"; import "html-tag-js/dist/polyfill"; import { parse } from "acorn"; +import { VariableVirtualList } from "components/virtualList"; import css from "styles/console.m.scss"; import loadPolyFill from "utils/polyfill"; +import ConsoleExecutor, { + applyConsoleViewport, + executeConsoleCommand, + resolveConsoleExecutionContext, +} from "./consoleRuntime"; (function () { loadPolyFill.apply(window); let consoleVisible = false; + let isFocused = false; + let isExecuting = false; + let viewportFrame = null; + let viewportObserver = null; + const isStandaloneConsole = sessionStorage.getItem("__mode") === "console"; const originalConsole = console; const $input = tag("textarea", { id: "__c-input", + attr: { + rows: "1", + placeholder: "Run JavaScript…", + "aria-label": "JavaScript console input", + spellcheck: "false", + autocomplete: "off", + autocapitalize: "off", + }, + oninput: resizeInput, + onfocus() { + isFocused = true; + virtualMessages.scrollToBottom(); + }, onblur() { setTimeout(() => { isFocused = false; }, 0); }, }); + const $stopExecution = tag("button", { + className: "__c-action __c-action-danger", + textContent: "Stop", + attr: { + type: "button", + "aria-label": "Stop JavaScript execution", + }, + onclick() { + executor.cancel(); + }, + }); + $stopExecution.hidden = true; + const $executionContext = tag("select", { + className: "__c-context", + attr: { + "aria-label": "JavaScript execution context", + title: "Choose isolated Worker execution or live page access", + }, + children: [ + tag("option", { + textContent: "Worker", + attr: { value: "worker" }, + }), + tag("option", { + textContent: "Page (unsafe)", + attr: { value: "page" }, + }), + ], + onchange() { + if (this.value !== "page") return; + log( + "warn", + {}, + "Page mode can access window and document, but it runs on the preview thread and cannot stop infinite code.", + ); + }, + }); + const $output = tag("c-output", { + attr: { + role: "region", + "aria-label": "JavaScript console", + }, + }); const $inputContainer = tag("c-input", { - child: $input, + children: [ + $input, + tag("c-input-actions", { + children: [ + ...(isStandaloneConsole ? [] : [$executionContext]), + $stopExecution, + ], + }), + ], + }); + const virtualMessages = new VariableVirtualList($output, { + footer: $inputContainer, }); const $toggler = tag("c-toggler", { style: { @@ -46,9 +124,13 @@ import loadPolyFill from "utils/polyfill"; }, }); const $console = tag("c-console", { - child: $inputContainer, + child: $output, + attr: { + role: "dialog", + "aria-label": "JavaScript console", + }, onclick(e) { - const el = e.target; + const el = e.target.closest?.("[action]") || e.target; const action = el.getAttribute("action"); switch (action) { @@ -64,9 +146,22 @@ import loadPolyFill from "utils/polyfill"; } }, }); + if (isStandaloneConsole) { + $console.setAttribute("standalone", ""); + document.documentElement.setAttribute("console-only", ""); + } const counter = {}; const timers = {}; - let isFocused = false; + const executor = new ConsoleExecutor({ + workerUrl: window.__consoleWorkerScript || "build/consoleWorker.js", + onConsole(message) { + if (message.action === "clear") { + window.console.clear(); + return; + } + log(message.level, {}, ...message.args); + }, + }); if (!window.__objs) window.__objs = {}; @@ -77,13 +172,12 @@ import loadPolyFill from "utils/polyfill"; window.addEventListener("error", onError); assignCustomConsole(); - if (sessionStorage.getItem("__mode") === "console") { + if (isStandaloneConsole) { showConsole(); return; } tag.get("html").append($toggler); - $console.setAttribute("title", "Console"); sessionStorage.setItem("__console_available", true); document.addEventListener("showconsole", showConsole); document.addEventListener("hideconsole", hideConsole); @@ -105,10 +199,7 @@ import loadPolyFill from "utils/polyfill"; } }, clear() { - originalConsole.clear(); - if (isFocused) $input.focus(); - $console.textContent = ""; - $console.appendChild($inputContainer); + clearConsole(); }, count(hash = "default") { originalConsole.count(hash); @@ -207,35 +298,104 @@ import loadPolyFill from "utils/polyfill"; function showConsole() { tag.get("html").append($console); $input.addEventListener("keydown", onCodeInput); + if (!isStandaloneConsole) { + bindViewportListeners(); + updateConsoleViewport(); + } + virtualMessages.invalidate(); } function hideConsole() { $console.remove(); $input.removeEventListener("keydown", onCodeInput); + unbindViewportListeners(); + } + + function bindViewportListeners() { + window.addEventListener("resize", updateConsoleViewport); + window.visualViewport?.addEventListener("resize", updateConsoleViewport); + window.visualViewport?.addEventListener("scroll", updateConsoleViewport); + if (typeof ResizeObserver === "function") { + viewportObserver = new ResizeObserver(updateConsoleViewport); + viewportObserver.observe(document.documentElement); + } + } + + function unbindViewportListeners() { + window.removeEventListener("resize", updateConsoleViewport); + window.visualViewport?.removeEventListener("resize", updateConsoleViewport); + window.visualViewport?.removeEventListener("scroll", updateConsoleViewport); + viewportObserver?.disconnect(); + viewportObserver = null; + if (viewportFrame !== null) cancelAnimationFrame(viewportFrame); + viewportFrame = null; + } + + function updateConsoleViewport() { + if (viewportFrame !== null) cancelAnimationFrame(viewportFrame); + viewportFrame = requestAnimationFrame(() => { + viewportFrame = null; + applyConsoleViewport($console); + virtualMessages.invalidate(); + }); } function onCodeInput(e) { - const key = e.key; isFocused = true; - if (key === "Enter") { - const regex = /[\[|{\(\)\}\]]/g; - let code = this.value.trim(); - let isOdd = (code.length - code.replace(regex, "").length) % 2; - - if (!code || isOdd) return; - e.preventDefault(); - e.stopPropagation(); - e.stopImmediatePropagation(); - - log("code", {}, code); - $input.value = ""; - const res = execute(code); - if (res.type === "error") { - log("error", getStack(new Error()), res.value); - } else { - log("log", getStack(new Error()), res.value); - } + if (e.key !== "Enter" || e.shiftKey) return; + + const code = $input.value.trim(); + const brackets = /[\[|{\(\)\}\]]/g; + const isIncomplete = + (code.length - code.replace(brackets, "").length) % 2 !== 0; + if (!code || isIncomplete) return; + + e.preventDefault(); + e.stopPropagation(); + e.stopImmediatePropagation(); + runInputCode(); + } + + async function runInputCode() { + const code = $input.value.trim(); + if (!code) return; + if (isExecuting) { + log("warn", {}, "Another console command is still running."); + return; + } + + log("code", {}, code); + $input.value = ""; + resizeInput(); + setExecutionState(true); + const res = await executeCommand(code); + setExecutionState(false); + + if (res.type === "error") { + log("error", getStack(new Error()), res.value); + } else { + log("log", getStack(new Error()), res.value); } + $input.focus(); + } + + function setExecutionState(running) { + isExecuting = running; + $console.toggleAttribute("running", running); + $stopExecution.hidden = !running || $executionContext.value !== "worker"; + $input.disabled = running; + $executionContext.disabled = running; + } + + function resizeInput() { + $input.style.height = "0px"; + $input.style.height = `${Math.min(120, Math.max(38, $input.scrollHeight))}px`; + } + + function clearConsole() { + originalConsole.clear(); + virtualMessages.clear(); + if (isFocused) $input.focus(); } function getBody(obj, ...keys) { @@ -454,7 +614,7 @@ import loadPolyFill from "utils/polyfill"; let $msg; if (mode === "code") { $msg = tag("c-code"); - $msg.textContent = arg.length > 50 ? arg.substring(0, 50) + "..." : arg; + $msg.textContent = arg; $msg.setAttribute("data-code", arg); $msg.setAttribute("action", "use code"); } else { @@ -486,11 +646,7 @@ import loadPolyFill from "utils/polyfill"; $messages.appendChild($stack); } - $console.insertBefore($messages, $inputContainer); - - while ($console.childElementCount > 100) { - $console.firstElementChild.remove(); - } + virtualMessages.append($messages); } /** @@ -634,6 +790,18 @@ import loadPolyFill from "utils/polyfill"; }; } + function executeCommand(code) { + return executeConsoleCommand({ + context: resolveConsoleExecutionContext( + isStandaloneConsole, + $executionContext.value, + ), + code, + workerExecutor: executor, + pageExecutor: execute, + }); + } + function execute(code) { let res = null; try { diff --git a/src/lib/consoleRuntime.js b/src/lib/consoleRuntime.js new file mode 100644 index 0000000000..383ddd0946 --- /dev/null +++ b/src/lib/consoleRuntime.js @@ -0,0 +1,186 @@ +export const DEFAULT_CONSOLE_TIMEOUT = 30000; + +/** + * Runs console commands in a worker so user code can never block the page UI. + */ +export default class ConsoleExecutor { + constructor({ + workerUrl, + timeout = DEFAULT_CONSOLE_TIMEOUT, + onConsole = () => {}, + WorkerClass = globalThis.Worker, + } = {}) { + this.workerUrl = workerUrl; + this.timeout = timeout; + this.onConsole = onConsole; + this.WorkerClass = WorkerClass; + this.worker = null; + this.pending = null; + this.nextId = 0; + } + + execute(code) { + if (this.pending) { + return Promise.resolve({ + type: "error", + value: new Error("Another console command is still running."), + }); + } + + if (!this.WorkerClass) { + return Promise.resolve({ + type: "error", + value: new Error( + "This WebView does not support isolated console execution.", + ), + }); + } + + let worker; + try { + worker = this.getWorker(); + } catch (error) { + return Promise.resolve({ type: "error", value: error }); + } + const id = ++this.nextId; + + return new Promise((resolve) => { + const timer = setTimeout(() => { + this.finish(id, { + type: "error", + value: new Error( + `Execution stopped after ${this.timeout / 1000} seconds.`, + ), + }); + this.resetWorker(); + }, this.timeout); + + this.pending = { id, resolve, timer }; + try { + worker.postMessage({ id, code }); + } catch (error) { + this.finish(id, { type: "error", value: error }); + this.resetWorker(); + } + }); + } + + getWorker() { + if (this.worker) return this.worker; + + const worker = new this.WorkerClass(this.workerUrl); + worker.onmessage = ({ data }) => this.handleMessage(data); + worker.onerror = (event) => { + const error = new Error(event.message || "Console worker failed."); + this.finish(this.pending?.id, { type: "error", value: error }); + this.resetWorker(); + }; + this.worker = worker; + return worker; + } + + handleMessage(message) { + if (message.type === "console") { + this.onConsole(message); + return; + } + + if (message.type === "result") { + this.finish(message.id, { type: "result", value: message.value }); + return; + } + + if (message.type === "error") { + const error = new Error( + message.error?.message || "Console command failed.", + ); + error.name = message.error?.name || "Error"; + if (message.error?.stack) error.stack = message.error.stack; + this.finish(message.id, { type: "error", value: error }); + } + } + + finish(id, result) { + if (!this.pending || this.pending.id !== id) return; + + const { resolve, timer } = this.pending; + this.pending = null; + clearTimeout(timer); + resolve(result); + } + + resetWorker() { + this.worker?.terminate(); + this.worker = null; + } + + cancel() { + if (!this.pending) return false; + + this.finish(this.pending.id, { + type: "error", + value: new Error("Execution stopped."), + }); + this.resetWorker(); + return true; + } + + destroy() { + if (this.pending) { + this.finish(this.pending.id, { + type: "error", + value: new Error("Console execution was cancelled."), + }); + } + this.resetWorker(); + } +} + +/** + * Returns the actually visible browser rectangle. On mobile this shrinks with + * the software keyboard even when the layout viewport remains full height. + */ +export function getConsoleViewportRect(windowObject = window) { + const viewport = windowObject.visualViewport; + const documentHeight = windowObject.document?.documentElement?.clientHeight; + const visibleHeights = [ + viewport?.height, + windowObject.innerHeight, + documentHeight, + ].filter((height) => Number.isFinite(height) && height > 0); + return { + height: Math.round(Math.min(...visibleHeights)), + width: Math.round(viewport?.width || windowObject.innerWidth), + top: Math.round(viewport?.offsetTop || 0), + left: Math.round(viewport?.offsetLeft || 0), + }; +} + +export function applyConsoleViewport(element, windowObject = window) { + const { height, width, top, left } = getConsoleViewportRect(windowObject); + element.style.setProperty("--console-viewport-height", `${height}px`); + element.style.setProperty("--console-viewport-width", `${width}px`); + element.style.setProperty("--console-viewport-top", `${top}px`); + element.style.setProperty("--console-viewport-left", `${left}px`); +} + +export function resolveConsoleExecutionContext( + isStandaloneConsole, + selectedContext, +) { + return isStandaloneConsole ? "worker" : selectedContext; +} + +/** + * Routes a console command to the isolated worker or the live preview page. + * Page execution is deliberately opt-in because it runs on the preview thread. + */ +export function executeConsoleCommand({ + context, + code, + workerExecutor, + pageExecutor, +}) { + if (context === "page") return Promise.resolve(pageExecutor(code)); + return workerExecutor.execute(code); +} diff --git a/src/lib/consoleWorker.js b/src/lib/consoleWorker.js new file mode 100644 index 0000000000..c5d911fe8c --- /dev/null +++ b/src/lib/consoleWorker.js @@ -0,0 +1,168 @@ +const MAX_MESSAGES_PER_SECOND = 100; +const MESSAGE_WINDOW_MS = 1000; +const MAX_PROPERTIES = 100; +const MAX_DEPTH = 4; +const MAX_SNAPSHOT_VALUES = 500; + +let activeCommandId = 0; +let messageWindowStartedAt = 0; +let emittedInWindow = 0; +let suppressedInWindow = 0; +const counts = new Map(); +const timers = new Map(); + +function snapshot( + value, + depth = 0, + seen = new WeakSet(), + budget = { remaining: MAX_SNAPSHOT_VALUES }, +) { + const type = typeof value; + + if ( + value === null || + ["boolean", "number", "string", "undefined"].includes(type) + ) { + return value; + } + if (type === "bigint") return `${value}n`; + if (type === "symbol") return value.toString(); + if (type === "function") + return `[Function${value.name ? `: ${value.name}` : ""}]`; + if (budget.remaining-- <= 0) return "[Truncated]"; + if (value instanceof Error) return snapshotError(value); + if (value instanceof Date) return value.toISOString(); + if (value instanceof RegExp) return value.toString(); + if (value instanceof Promise) return "Promise { }"; + if (depth >= MAX_DEPTH) return `[${value.constructor?.name || "Object"}]`; + if (seen.has(value)) return "[Circular]"; + + seen.add(value); + if (Array.isArray(value)) { + const result = value + .slice(0, MAX_PROPERTIES) + .map((item) => snapshot(item, depth + 1, seen, budget)); + if (value.length > MAX_PROPERTIES) result.push("…"); + return result; + } + + const result = {}; + let keys; + try { + keys = Reflect.ownKeys(value).slice(0, MAX_PROPERTIES); + } catch (error) { + return `[Uninspectable: ${error.message}]`; + } + + for (const key of keys) { + const outputKey = typeof key === "symbol" ? key.toString() : key; + try { + result[outputKey] = snapshot(value[key], depth + 1, seen, budget); + } catch (error) { + result[outputKey] = `[Thrown: ${error.message}]`; + } + } + if (Reflect.ownKeys(value).length > MAX_PROPERTIES) result["…"] = "…"; + return result; +} + +function snapshotError(error) { + return { + name: error?.name || "Error", + message: error?.message || String(error), + stack: error?.stack || "", + }; +} + +function discardSuppressedMessages() { + suppressedInWindow = 0; +} + +function emitMessage(message) { + const now = performance.now(); + if (now - messageWindowStartedAt >= MESSAGE_WINDOW_MS) { + discardSuppressedMessages(); + messageWindowStartedAt = now; + emittedInWindow = 0; + } + + if (emittedInWindow >= MAX_MESSAGES_PER_SECOND) { + suppressedInWindow++; + return; + } + + emittedInWindow++; + self.postMessage({ type: "console", id: activeCommandId, ...message }); +} + +function emit(level, args) { + emitMessage({ + level, + args: args.map((value) => snapshot(value)), + }); +} + +self.console = { + assert(condition, ...args) { + if (!condition) emit("error", args.length ? args : ["Assertion failed"]); + }, + clear() { + emitMessage({ action: "clear" }); + }, + count(label = "default") { + const value = (counts.get(label) || 0) + 1; + counts.set(label, value); + emit("log", [`${label}: ${value}`]); + }, + countReset(label = "default") { + counts.delete(label); + }, + debug: (...args) => emit("log", args), + dir: (...args) => emit("log", args), + dirxml: (...args) => emit("log", args), + error: (...args) => emit("error", args), + group: (...args) => emit("log", args), + groupCollapsed: (...args) => emit("log", args), + groupEnd() {}, + info: (...args) => emit("info", args), + log: (...args) => emit("log", args), + table: (...args) => emit("table", args), + time(label = "default") { + timers.set(label, performance.now()); + }, + timeEnd(label = "default") { + if (!timers.has(label)) return emit("warn", [`No such label: ${label}`]); + emit("log", [ + `${label}: ${(performance.now() - timers.get(label)).toFixed(2)}ms`, + ]); + timers.delete(label); + }, + timeLog(label = "default") { + if (!timers.has(label)) return emit("warn", [`No such label: ${label}`]); + emit("log", [ + `${label}: ${(performance.now() - timers.get(label)).toFixed(2)}ms`, + ]); + }, + trace(...args) { + emit("trace", [...args, new Error().stack]); + }, + warn: (...args) => emit("warn", args), +}; + +self.onmessage = ({ data: { id, code } }) => { + activeCommandId = id; + messageWindowStartedAt = performance.now(); + emittedInWindow = 0; + suppressedInWindow = 0; + + try { + // Intentional: this local REPL runs the command in its isolated worker. + // codeql[js/code-injection] + const value = (0, eval)(code); + discardSuppressedMessages(); + self.postMessage({ type: "result", id, value: snapshot(value) }); + } catch (error) { + discardSuppressedMessages(); + self.postMessage({ type: "error", id, error: snapshotError(error) }); + } +}; diff --git a/src/lib/run.js b/src/lib/run.js index 7978c4b6a7..a92a085c52 100644 --- a/src/lib/run.js +++ b/src/lib/run.js @@ -72,6 +72,7 @@ async function run( let EXECUTING_SCRIPT = uuid + "_script.js"; const MIMETYPE_HTML = mimeType.lookup("html"); const CONSOLE_SCRIPT = uuid + "_console.js"; + const CONSOLE_WORKER_SCRIPT = uuid + "_console_worker.js"; const MARKDOWN_STYLE = uuid + "_md.css"; const queue = []; @@ -205,6 +206,11 @@ async function run( sendFileContent(url, reqId, "application/javascript"); break; + case CONSOLE_WORKER_SCRIPT: + url = `${ASSETS_DIRECTORY}/build/consoleWorker.js`; + sendFileContent(url, reqId, "application/javascript"); + break; + case EXECUTING_SCRIPT: { const text = getDocText(activeFile?.session?.doc); sendText(text, reqId, "application/javascript"); @@ -228,6 +234,7 @@ async function run( sendText( mustache.render($_console, { CONSOLE_SCRIPT, + CONSOLE_WORKER_SCRIPT, EXECUTING_SCRIPT, }), reqId, @@ -384,7 +391,8 @@ async function run( * @param {string} id */ function sendHTML(text, id) { - const js = ` + const js = ` + + - \ No newline at end of file + diff --git a/tests/unit/consoleExecutionContext.test.js b/tests/unit/consoleExecutionContext.test.js new file mode 100644 index 0000000000..ab92a29872 --- /dev/null +++ b/tests/unit/consoleExecutionContext.test.js @@ -0,0 +1,52 @@ +import { describe, expect, it } from "vitest"; +import { + executeConsoleCommand, + resolveConsoleExecutionContext, +} from "lib/consoleRuntime"; + +describe("console execution context", () => { + it("forces standalone menu consoles to use the worker", () => { + expect(resolveConsoleExecutionContext(true, "page")).toBe("worker"); + expect(resolveConsoleExecutionContext(false, "page")).toBe("page"); + }); + + it("uses isolated worker execution by default", async () => { + const calls = []; + const result = await executeConsoleCommand({ + context: "worker", + code: "document.title", + workerExecutor: { + execute(code) { + calls.push(["worker", code]); + return Promise.resolve({ type: "result", value: "isolated" }); + }, + }, + pageExecutor(code) { + calls.push(["page", code]); + }, + }); + + expect(calls).toEqual([["worker", "document.title"]]); + expect(result.value).toBe("isolated"); + }); + + it("restores live page execution when explicitly selected", async () => { + const calls = []; + const result = await executeConsoleCommand({ + context: "page", + code: 'document.querySelector("main")', + workerExecutor: { + execute(code) { + calls.push(["worker", code]); + }, + }, + pageExecutor(code) { + calls.push(["page", code]); + return { type: "result", value: "live page" }; + }, + }); + + expect(calls).toEqual([["page", 'document.querySelector("main")']]); + expect(result.value).toBe("live page"); + }); +}); diff --git a/tests/unit/consoleExecutor.test.js b/tests/unit/consoleExecutor.test.js new file mode 100644 index 0000000000..7dcd45e645 --- /dev/null +++ b/tests/unit/consoleExecutor.test.js @@ -0,0 +1,134 @@ +import { beforeEach, describe, expect, it, vi } from "vitest"; +import ConsoleExecutor from "lib/consoleRuntime"; + +class FakeWorker { + static instances = []; + + constructor(url) { + this.url = url; + this.terminate = vi.fn(); + this.postMessage = vi.fn(); + FakeWorker.instances.push(this); + } + + respond(data) { + this.onmessage({ data }); + } +} + +describe("ConsoleExecutor", () => { + beforeEach(() => { + FakeWorker.instances = []; + vi.useRealTimers(); + }); + + it("returns a worker result and reuses the isolated context", async () => { + const executor = new ConsoleExecutor({ + workerUrl: "/console-worker.js", + WorkerClass: FakeWorker, + }); + + const firstResult = executor.execute("1 + 1"); + const worker = FakeWorker.instances[0]; + expect(worker.url).toBe("/console-worker.js"); + expect(worker.postMessage).toHaveBeenCalledWith({ id: 1, code: "1 + 1" }); + + worker.respond({ type: "result", id: 1, value: 2 }); + await expect(firstResult).resolves.toEqual({ type: "result", value: 2 }); + + const secondResult = executor.execute("3 + 4"); + expect(FakeWorker.instances).toHaveLength(1); + worker.respond({ type: "result", id: 2, value: 7 }); + await expect(secondResult).resolves.toEqual({ type: "result", value: 7 }); + }); + + it("forwards console messages from the worker", async () => { + const onConsole = vi.fn(); + const executor = new ConsoleExecutor({ + workerUrl: "/console-worker.js", + WorkerClass: FakeWorker, + onConsole, + }); + + const result = executor.execute("console.log('hello')"); + const worker = FakeWorker.instances[0]; + const message = { + type: "console", + id: 1, + level: "log", + args: ["hello"], + }; + worker.respond(message); + worker.respond({ type: "result", id: 1 }); + + expect(onConsole).toHaveBeenCalledWith(message); + await expect(result).resolves.toEqual({ type: "result", value: undefined }); + }); + + it("terminates and replaces a worker when execution times out", async () => { + vi.useFakeTimers(); + const executor = new ConsoleExecutor({ + workerUrl: "/console-worker.js", + WorkerClass: FakeWorker, + timeout: 50, + }); + + const timedOutResult = executor.execute("while (true) {}"); + const blockedWorker = FakeWorker.instances[0]; + await vi.advanceTimersByTimeAsync(50); + + const result = await timedOutResult; + expect(result.type).toBe("error"); + expect(result.value.message).toBe("Execution stopped after 0.05 seconds."); + expect(blockedWorker.terminate).toHaveBeenCalledOnce(); + + const nextResult = executor.execute("42"); + expect(FakeWorker.instances).toHaveLength(2); + FakeWorker.instances[1].respond({ type: "result", id: 2, value: 42 }); + await expect(nextResult).resolves.toEqual({ type: "result", value: 42 }); + }); + + it("allows a running command to be stopped immediately", async () => { + const executor = new ConsoleExecutor({ + workerUrl: "/console-worker.js", + WorkerClass: FakeWorker, + }); + + const stoppedResult = executor.execute("while (true) {}"); + const blockedWorker = FakeWorker.instances[0]; + + expect(executor.cancel()).toBe(true); + await expect(stoppedResult).resolves.toMatchObject({ + type: "error", + value: { message: "Execution stopped." }, + }); + expect(blockedWorker.terminate).toHaveBeenCalledOnce(); + expect(executor.cancel()).toBe(false); + }); + + it("turns worker errors into console errors", async () => { + const executor = new ConsoleExecutor({ + workerUrl: "/console-worker.js", + WorkerClass: FakeWorker, + }); + + const result = executor.execute("missingName"); + FakeWorker.instances[0].respond({ + type: "error", + id: 1, + error: { + name: "ReferenceError", + message: "missingName is not defined", + stack: "worker stack", + }, + }); + + const errorResult = await result; + expect(errorResult.type).toBe("error"); + expect(errorResult.value).toMatchObject({ + name: "ReferenceError", + message: "missingName is not defined", + stack: "worker stack", + }); + }); +}); diff --git a/tests/unit/consoleViewport.test.js b/tests/unit/consoleViewport.test.js new file mode 100644 index 0000000000..218a5bad69 --- /dev/null +++ b/tests/unit/consoleViewport.test.js @@ -0,0 +1,41 @@ +// @vitest-environment happy-dom + +import { describe, expect, it } from "vitest"; +import { + applyConsoleViewport, + getConsoleViewportRect, +} from "lib/consoleRuntime"; + +describe("console visual viewport", () => { + it("uses the visual viewport when the mobile keyboard shrinks the screen", () => { + const windowObject = { + innerHeight: 800, + innerWidth: 400, + visualViewport: { + height: 476.4, + width: 400, + offsetTop: 12.2, + offsetLeft: 0, + }, + }; + + expect(getConsoleViewportRect(windowObject)).toEqual({ + height: 476, + width: 400, + top: 12, + left: 0, + }); + + const element = document.createElement("div"); + applyConsoleViewport(element, windowObject); + expect(element.style.getPropertyValue("--console-viewport-height")).toBe( + "476px", + ); + }); + + it("falls back to the layout viewport", () => { + expect( + getConsoleViewportRect({ innerHeight: 720, innerWidth: 360 }), + ).toEqual({ height: 720, width: 360, top: 0, left: 0 }); + }); +}); diff --git a/tests/unit/variableVirtualList.test.js b/tests/unit/variableVirtualList.test.js new file mode 100644 index 0000000000..ed1e0c70d7 --- /dev/null +++ b/tests/unit/variableVirtualList.test.js @@ -0,0 +1,194 @@ +// @vitest-environment happy-dom + +import { describe, expect, it } from "vitest"; +import VariableVirtualList from "components/virtualList/variable"; + +function createList() { + const container = document.createElement("div"); + Object.defineProperty(container, "clientHeight", { + configurable: true, + value: 200, + }); + document.body.append(container); + return { container, list: new VariableVirtualList(container) }; +} + +describe("VariableVirtualList", () => { + it("retains all items while mounting only the viewport window", () => { + const { container, list } = createList(); + const elements = Array.from({ length: 1000 }, (_, index) => { + const element = document.createElement("div"); + element.textContent = `message-${index}`; + list.append(element); + return element; + }); + + list.render(); + + expect(list.length).toBe(1000); + expect(list.mountedCount).toBeLessThan(40); + expect(elements[999].isConnected).toBe(true); + expect(elements[0].isConnected).toBe(false); + + list.stickToBottom = false; + container.scrollTop = 0; + list.render(); + expect(elements[0].isConnected).toBe(true); + expect(elements[999].isConnected).toBe(false); + + list.destroy(); + container.remove(); + }); + + it("updates variable measurements and clears the retained model", () => { + const { container, list } = createList(); + const element = document.createElement("div"); + list.append(element); + list.render(); + + list.updateHeight(list.items[0], 96); + list.rebuildOffsets(); + expect(list.offsets).toEqual([0, 96]); + + list.clear(); + expect(list.length).toBe(0); + expect(list.mountedCount).toBe(0); + expect(container.scrollTop).toBe(0); + + list.destroy(); + container.remove(); + }); + + it("preserves an inline footer outside the virtualized rows", () => { + const container = document.createElement("div"); + Object.defineProperty(container, "clientHeight", { + configurable: true, + value: 200, + }); + document.body.append(container); + const footer = document.createElement("form"); + footer.textContent = "REPL prompt"; + const list = new VariableVirtualList(container, { footer }); + + list.append(document.createElement("div")); + list.render(); + expect(container.lastElementChild).toBe(footer); + + list.clear(); + expect(container.lastElementChild).toBe(footer); + expect(footer.isConnected).toBe(true); + + list.destroy(); + container.remove(); + }); + + it("includes the footer height when pinning and rendering the bottom", () => { + const container = document.createElement("div"); + Object.defineProperties(container, { + clientHeight: { configurable: true, value: 200 }, + scrollHeight: { configurable: true, value: 5304 }, + }); + document.body.append(container); + const footer = document.createElement("form"); + footer.getBoundingClientRect = () => ({ height: 104 }); + const list = new VariableVirtualList(container, { + footer, + overscan: 0, + }); + for (let index = 0; index < 100; index++) { + list.append(document.createElement("div")); + } + + list.render(); + + expect(list.renderedRange.start).toBe(98); + expect(list.renderedRange.end).toBe(100); + expect(container.scrollTop).toBe(5104); + expect(container.lastElementChild).toBe(footer); + + list.destroy(); + container.remove(); + }); + + it("keeps a pinned footer visible when the viewport height changes", () => { + let viewportHeight = 200; + const container = document.createElement("div"); + Object.defineProperties(container, { + clientHeight: { + configurable: true, + get: () => viewportHeight, + }, + scrollHeight: { configurable: true, value: 5304 }, + }); + document.body.append(container); + const footer = document.createElement("form"); + footer.getBoundingClientRect = () => ({ height: 104 }); + const list = new VariableVirtualList(container, { footer }); + for (let index = 0; index < 100; index++) { + list.append(document.createElement("div")); + } + list.render(); + expect(container.scrollTop).toBe(5104); + + viewportHeight = 100; + list.onResize([ + { + target: container, + contentRect: { height: viewportHeight }, + }, + ]); + list.render(); + + expect(list.stickToBottom).toBe(true); + expect(container.scrollTop).toBe(5204); + + list.destroy(); + container.remove(); + }); + + it("pre-paints a larger guard before touch momentum starts", () => { + const { container, list } = createList(); + for (let index = 0; index < 1000; index++) { + list.append(document.createElement("div")); + } + list.stickToBottom = false; + container.scrollTop = 10000; + list.render(); + const idleCount = list.mountedCount; + + container.dispatchEvent(new Event("touchstart")); + + expect(list.dynamicOverscan).toBe(list.activeOverscan); + expect(list.mountedCount).toBeGreaterThan(idleCount); + + list.destroy(); + container.remove(); + }); + + it("keeps overlapping rows mounted during incremental scrolling", () => { + const { container, list } = createList(); + Object.defineProperty(container, "scrollHeight", { + configurable: true, + value: 10400, + }); + const elements = Array.from({ length: 200 }, () => { + const element = document.createElement("div"); + list.append(element); + return element; + }); + list.stickToBottom = false; + container.scrollTop = 520; + list.render(); + const retained = elements[10]; + expect(retained.isConnected).toBe(true); + + container.scrollTop = 624; + container.dispatchEvent(new Event("scroll")); + + expect(retained.isConnected).toBe(true); + expect(list.dynamicOverscan).toBeGreaterThan(list.overscan); + + list.destroy(); + container.remove(); + }); +}); diff --git a/webpack.config.js b/webpack.config.js index 8767eaa8f6..2fbead728b 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -110,6 +110,7 @@ module.exports = (env, options) => { entry: { main: './src/main.js', console: './src/lib/console.js', + consoleWorker: './src/lib/consoleWorker.js', searchInFilesWorker: './src/sidebarApps/searchInFiles/worker.js', searchIndexWorker: './src/sidebarApps/searchInFiles/indexWorker.js', }, From 99bf969fedf4fa0c3a317e92732dd84c72e7b082 Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Wed, 26 Aug 2026 14:40:34 +0000 Subject: [PATCH 08/38] feat(console): follow active Acode theme (#2814) * feat(console): follow active Acode theme * fix * fix --- src/lib/console.js | 53 +++++++++++++++ src/lib/run.js | 26 ++++++++ src/styles/console.m.scss | 131 +++++++++++++++++++++++++++++--------- src/views/console.hbs | 10 +-- 4 files changed, 186 insertions(+), 34 deletions(-) diff --git a/src/lib/console.js b/src/lib/console.js index 8d399ea315..05ca41fa6a 100644 --- a/src/lib/console.js +++ b/src/lib/console.js @@ -18,7 +18,13 @@ import ConsoleExecutor, { let isExecuting = false; let viewportFrame = null; let viewportObserver = null; + let themeSyncTimer = null; + let themeSyncPending = false; + let themeSignature = null; const isStandaloneConsole = sessionStorage.getItem("__mode") === "console"; + const themeEndpoint = document.querySelector( + 'meta[name="acode-console-theme-endpoint"]', + )?.content; const originalConsole = console; const $input = tag("textarea", { id: "__c-input", @@ -149,6 +155,10 @@ import ConsoleExecutor, { if (isStandaloneConsole) { $console.setAttribute("standalone", ""); document.documentElement.setAttribute("console-only", ""); + startThemeSync(); + window.addEventListener("pagehide", stopThemeSync, { + once: true, + }); } const counter = {}; const timers = {}; @@ -183,6 +193,49 @@ import ConsoleExecutor, { document.addEventListener("hideconsole", hideConsole); } + function startThemeSync() { + if (!themeEndpoint || themeSyncTimer !== null) return; + void syncTheme(); + themeSyncTimer = setInterval(syncTheme, 1000); + } + + function stopThemeSync() { + if (themeSyncTimer === null) return; + clearInterval(themeSyncTimer); + themeSyncTimer = null; + } + + async function syncTheme() { + if (themeSyncPending) return; + themeSyncPending = true; + + try { + const response = await fetch(themeEndpoint, { cache: "no-store" }); + if (!response.ok) return; + const snapshot = await response.json(); + if (typeof snapshot.css !== "string") return; + + const signature = JSON.stringify([snapshot.type, snapshot.css]); + if (signature === themeSignature) return; + + let $theme = document.getElementById("console-live-theme"); + if (!$theme) { + $theme = tag("style", { id: "console-live-theme" }); + document.head.append($theme); + } + $theme.textContent = snapshot.css; + document.documentElement.setAttribute( + "theme-type", + snapshot.type === "light" ? "light" : "dark", + ); + themeSignature = signature; + } catch { + // Keep the last valid theme if the local endpoint is briefly unavailable. + } finally { + themeSyncPending = false; + } + } + function touchmove(e) { e.preventDefault(); $toggler.style.transform = "translate(" diff --git a/src/lib/run.js b/src/lib/run.js index a92a085c52..d130c11bae 100644 --- a/src/lib/run.js +++ b/src/lib/run.js @@ -22,6 +22,9 @@ import appSettings from "./settings"; /**@type {Server} */ let webServer; +// An open console may outlive the server instance that created it. +const CONSOLE_THEME_STATE = "__acode_console_theme.json"; + /** * Starts the server and run the active file in browser * @param {Boolean} isConsole @@ -73,6 +76,7 @@ async function run( const MIMETYPE_HTML = mimeType.lookup("html"); const CONSOLE_SCRIPT = uuid + "_console.js"; const CONSOLE_WORKER_SCRIPT = uuid + "_console_worker.js"; + const CONSOLE_THEME_STYLE = uuid + "_console_theme.css"; const MARKDOWN_STYLE = uuid + "_md.css"; const queue = []; @@ -211,6 +215,18 @@ async function run( sendFileContent(url, reqId, "application/javascript"); break; + case CONSOLE_THEME_STYLE: + sendText(getConsoleThemeSnapshot().css, reqId, "text/css"); + break; + + case CONSOLE_THEME_STATE: + sendText( + JSON.stringify(getConsoleThemeSnapshot()), + reqId, + "application/json", + ); + break; + case EXECUTING_SCRIPT: { const text = getDocText(activeFile?.session?.doc); sendText(text, reqId, "application/javascript"); @@ -235,7 +251,10 @@ async function run( mustache.render($_console, { CONSOLE_SCRIPT, CONSOLE_WORKER_SCRIPT, + CONSOLE_THEME_STYLE, + CONSOLE_THEME_STATE, EXECUTING_SCRIPT, + APP_THEME_TYPE: getConsoleThemeSnapshot().type, }), reqId, MIMETYPE_HTML, @@ -364,6 +383,13 @@ async function run( } } + function getConsoleThemeSnapshot() { + return { + css: document.head.querySelector("style#app-theme")?.textContent || "", + type: document.body.getAttribute("theme-type") || "dark", + }; + } + /** * Sends 404 error * @param {string} id diff --git a/src/styles/console.m.scss b/src/styles/console.m.scss index 47dbe4dbb8..e39f763605 100644 --- a/src/styles/console.m.scss +++ b/src/styles/console.m.scss @@ -4,10 +4,31 @@ html[console-only] body { height: 100%; margin: 0; overflow: hidden; - background: #313131 !important; + background: var(--primary-color, #313131) !important; } c-console { + --console-background: #313131; + --console-background-text: #eee; + --console-surface: #313131; + --console-surface-text: #eee; + --console-control: #414141; + --console-control-text: #d6d3d3; + --console-active: #555; + --console-active-text: #fff; + --console-border: rgba(204, 204, 204, 0.35); + --console-muted: #aaa; + --console-placeholder: #929292; + --console-scrollbar: #666; + --console-danger: #ff9b9b; + --console-danger-fill: #a00000; + --console-warning-fill: #ffb95c; + --console-error-surface: #422; + --console-warning-surface: #633; + --console-link: #99f; + --console-accent: rgb(120, 105, 225); + --console-function: rgb(145, 136, 168); + --console-success: rgb(59, 161, 59); box-sizing: border-box; display: flex; flex-direction: column; @@ -19,12 +40,47 @@ c-console { min-height: 0; overflow: hidden; z-index: 99998; - background: #313131; - color: #eee; + background: var(--console-background); + color: var(--console-background-text); font-family: var(--app-font-family, Verdana, Geneva, Tahoma, sans-serif); color-scheme: dark; } +html[console-only] c-console { + --console-background: var(--primary-color, #313131); + --console-background-text: var(--primary-text-color, #eee); + --console-surface: var(--secondary-color, var(--primary-color, #313131)); + --console-surface-text: var( + --secondary-text-color, + var(--primary-text-color, #eee) + ); + --console-control: var( + --popup-background-color, + var(--secondary-color, #414141) + ); + --console-control-text: var( + --popup-text-color, + var(--secondary-text-color, #d6d3d3) + ); + --console-active: var(--active-color, #555); + --console-active-text: var(--active-text-color, #fff); + --console-border: var(--border-color, rgba(204, 204, 204, 0.35)); + --console-muted: var(--secondary-text-color, #aaa); + --console-placeholder: var(--secondary-text-color, #929292); + --console-scrollbar: var(--scrollbar-color, #666); + --console-danger: var(--error-text-color, #ff9b9b); + --console-danger-fill: var(--danger-color, #a00000); + --console-warning-fill: var(--error-text-color, #ffb95c); + --console-link: var(--link-text-color, #99f); + --console-accent: var(--active-color, rgb(120, 105, 225)); + --console-function: var(--secondary-text-color, rgb(145, 136, 168)); + --console-success: var(--success-text-color, rgb(59, 161, 59)); +} + +html[theme-type="light"] c-console { + color-scheme: light; +} + // The console-only Activity already resizes its WebView for the keyboard. // Filling that layout directly avoids stale visualViewport pixels after the // keyboard closes; the floating page overlay still uses measured CSS variables. @@ -41,18 +97,19 @@ c-console[standalone] { border: 0; border-radius: 3px; background: transparent; - color: #d6d3d3; + color: var(--console-surface-text); font: inherit; font-size: 0.76rem; touch-action: manipulation; } .__c-action:active { - background: #555; + background: var(--console-active); + color: var(--console-active-text); } .__c-action-danger { - color: #ff9b9b; + color: var(--console-danger); } .__c-context { @@ -63,14 +120,14 @@ c-console[standalone] { border: 0; border-radius: 3px; outline: none; - background: #414141; - color: #d6d3d3; + background: var(--console-control); + color: var(--console-control-text); font: inherit; font-size: 0.7rem; } .__c-context:focus-visible { - outline: 1px solid #929292; + outline: 1px solid var(--console-active); outline-offset: -1px; } @@ -85,7 +142,7 @@ c-output { overflow: auto; overscroll-behavior: contain; scrollbar-width: thin; - scrollbar-color: #666 transparent; + scrollbar-color: var(--console-scrollbar) transparent; } c-output > .variable-virtual-spacer, @@ -102,14 +159,15 @@ c-input { width: 100%; min-height: 96px; padding: 7px 7px max(8px, env(safe-area-inset-bottom)); - background: #313131; + background: var(--console-surface); + color: var(--console-surface-text); } c-input::before { content: ">>"; align-self: flex-start; padding-top: 9px; - color: #d6d3d3; + color: var(--console-accent); font: italic 13px/1 "Courier New", Courier, monospace; } @@ -128,7 +186,7 @@ c-input::before { resize: none; overflow-y: auto; background: transparent; - color: #fff; + color: var(--console-surface-text); caret-color: currentColor !important; font: 13px/1.45 "Courier New", Courier, monospace; } @@ -142,7 +200,8 @@ c-input-actions { } #__c-input::placeholder { - color: #929292; + color: var(--console-placeholder); + opacity: 0.75; } #__c-input:disabled { @@ -156,17 +215,28 @@ c-message { flex-wrap: wrap; min-height: 45px; padding: 5px 7px 4px; - border-bottom: 1px solid rgba(204, 204, 204, 0.35); - background: #313131; + border-bottom: 1px solid var(--console-border); + background: var(--console-surface); + color: var(--console-surface-text); font-size: 0.9rem; } c-message[log-level="error"] { - background: #422; + background: var(--console-error-surface); + background: color-mix( + in srgb, + var(--console-danger-fill) 16%, + var(--console-surface) + ); } c-message[log-level="warn"] { - background: #633; + background: var(--console-warning-surface); + background: color-mix( + in srgb, + var(--console-warning-fill) 20%, + var(--console-surface) + ); } c-text, @@ -185,7 +255,7 @@ c-code { position: relative; padding-right: 42px; overflow-x: auto; - color: #d6d3d3; + color: var(--console-surface-text); font-family: "Courier New", Courier, monospace; white-space: pre-wrap; cursor: pointer; @@ -204,8 +274,8 @@ c-code::after { right: 1px; padding: 1px 6px; border-radius: 3px; - background: #666; - color: inherit; + background: var(--console-active); + color: var(--console-active-text); font: 0.62rem/1.4 var(--app-font-family, sans-serif); } @@ -218,7 +288,8 @@ c-stack { min-width: 0; margin-top: 3px; padding: 3px 4px 0; - color: #aaa; + color: var(--console-muted); + opacity: 0.8; font-size: 0.7rem; } @@ -236,7 +307,7 @@ c-trace { } c-object { - color: #99f; + color: var(--console-link); text-decoration: underline; } @@ -246,28 +317,28 @@ c-line { c-key { margin-right: 5px; - color: #c6f; + color: var(--console-accent); font-size: 0.9rem; } c-text.__c-boolean, c-text.__c-number, c-text.__c-symbol { - color: rgb(120, 105, 225); + color: var(--console-accent); } c-text.__c-function { - color: rgb(145, 136, 168); + color: var(--console-function); font-family: "Courier New", Courier, monospace; } c-text.__c-object, c-text.__c-undefined { - color: rgb(118, 163, 118); + color: var(--console-success); } c-text.__c-string { - color: rgb(59, 161, 59); + color: var(--console-success); } c-text.__c-string:not(.no-quotes)::before { @@ -316,12 +387,12 @@ c-table { display: table; width: 100%; border-collapse: collapse; - color: #d6d3d3; + color: var(--console-surface-text); } c-table c-row { display: table-row; - border-bottom: 1px solid rgba(204, 204, 204, 0.4); + border-bottom: 1px solid var(--console-border); } c-table c-cell { diff --git a/src/views/console.hbs b/src/views/console.hbs index b4589af735..40068d74c8 100644 --- a/src/views/console.hbs +++ b/src/views/console.hbs @@ -1,9 +1,11 @@ - + - + + + Console - - + + From 47f45b8c02ff2755b89aefb1dc0c42176985671f Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Wed, 26 Aug 2026 20:55:52 +0530 Subject: [PATCH 09/38] chore: update deps --- bun.lock | 50 +++++++++++++++++++++++++++++++++-------------- package-lock.json | 48 ++++++++++++++++++++++----------------------- package.json | 18 ++++++++--------- 3 files changed, 68 insertions(+), 48 deletions(-) diff --git a/bun.lock b/bun.lock index 33528b9faf..a52d31d962 100644 --- a/bun.lock +++ b/bun.lock @@ -6,12 +6,12 @@ "name": "com.foxdebug.acode", "dependencies": { "@codemirror/autocomplete": "^6.20.3", - "@codemirror/commands": "^6.10.3", + "@codemirror/commands": "^6.11.0", "@codemirror/lang-angular": "^0.1.4", "@codemirror/lang-cpp": "^6.0.3", "@codemirror/lang-css": "^6.3.1", "@codemirror/lang-go": "^6.0.1", - "@codemirror/lang-html": "^6.4.11", + "@codemirror/lang-html": "^6.4.12", "@codemirror/lang-java": "^6.0.2", "@codemirror/lang-javascript": "^6.2.5", "@codemirror/lang-jinja": "^6.0.1", @@ -28,15 +28,15 @@ "@codemirror/lang-wast": "^6.0.2", "@codemirror/lang-xml": "^6.1.0", "@codemirror/lang-yaml": "^6.1.3", - "@codemirror/language": "^6.12.3", + "@codemirror/language": "^6.12.4", "@codemirror/language-data": "^6.5.2", "@codemirror/legacy-modes": "^6.5.3", "@codemirror/lint": "^6.9.7", "@codemirror/lsp-client": "github:Acode-Foundation/codemirror-lsp-client#db6930c2b6db67e14978f08ae8f5aeb149d29468", "@codemirror/search": "^6.7.1", - "@codemirror/state": "^6.6.0", + "@codemirror/state": "^6.7.1", "@codemirror/theme-one-dark": "^6.1.3", - "@codemirror/view": "^6.43.4", + "@codemirror/view": "^6.43.9", "@deadlyjack/ajax": "^1.2.6", "@emmetio/codemirror6-plugin": "^0.4.1", "@lezer/common": "^1.5.0", @@ -147,12 +147,12 @@ }, "overrides": { "@codemirror/autocomplete": "^6.20.3", - "@codemirror/commands": "^6.10.3", - "@codemirror/language": "^6.12.3", + "@codemirror/commands": "^6.11.0", + "@codemirror/language": "^6.12.4", "@codemirror/lint": "^6.9.7", "@codemirror/search": "^6.7.1", - "@codemirror/state": "^6.6.0", - "@codemirror/view": "^6.43.4", + "@codemirror/state": "^6.7.1", + "@codemirror/view": "^6.43.9", "tar": "^7.5.22", }, "packages": { @@ -374,7 +374,7 @@ "@codemirror/autocomplete": ["@codemirror/autocomplete@6.20.3", "", { "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0" } }, "sha512-tlosUqb+3BbxCxZdu4tKeRghPFC+QM7q4X5YhKV2eCmPG+1r2F3f4AaSz5sCrFqUtX4Jh20VFTKecl16MgiV9g=="], - "@codemirror/commands": ["@codemirror/commands@6.10.3", "", { "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.6.0", "@codemirror/view": "^6.27.0", "@lezer/common": "^1.1.0" } }, "sha512-JFRiqhKu+bvSkDLI+rUhJwSxQxYb759W5GBezE8Uc8mHLqC9aV/9aTC7yJSqCtB3F00pylrLCwnyS91Ap5ej4Q=="], + "@codemirror/commands": ["@codemirror/commands@6.11.0", "", { "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.7.0", "@codemirror/view": "^6.27.0", "@lezer/common": "^1.1.0" } }, "sha512-/K4Rl5BN0OtTiPWmJCdqODu38XnDMsDxKY5rgrPnCkutPTJf2wVbkoixLfealF5Kwse/s8P8M5jAiURiwSwnFA=="], "@codemirror/lang-angular": ["@codemirror/lang-angular@0.1.4", "", { "dependencies": { "@codemirror/lang-html": "^6.0.0", "@codemirror/lang-javascript": "^6.1.2", "@codemirror/language": "^6.0.0", "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.3.3" } }, "sha512-oap+gsltb/fzdlTQWD6BFF4bSLKcDnlxDsLdePiJpCVNKWXSTAbiiQeYI3UmES+BLAdkmIC1WjyztC1pi/bX4g=="], @@ -384,7 +384,7 @@ "@codemirror/lang-go": ["@codemirror/lang-go@6.0.1", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.6.0", "@codemirror/state": "^6.0.0", "@lezer/common": "^1.0.0", "@lezer/go": "^1.0.0" } }, "sha512-7fNvbyNylvqCphW9HD6WFnRpcDjr+KXX/FgqXy5H5ZS0eC5edDljukm/yNgYkwTsgp2busdod50AOTIy6Jikfg=="], - "@codemirror/lang-html": ["@codemirror/lang-html@6.4.11", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/lang-css": "^6.0.0", "@codemirror/lang-javascript": "^6.0.0", "@codemirror/language": "^6.4.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/css": "^1.1.0", "@lezer/html": "^1.3.12" } }, "sha512-9NsXp7Nwp891pQchI7gPdTwBuSuT3K65NGTHWHNJ55HjYcHLllr0rbIZNdOzas9ztc1EUVBlHou85FFZS4BNnw=="], + "@codemirror/lang-html": ["@codemirror/lang-html@6.4.12", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/lang-css": "^6.0.0", "@codemirror/lang-javascript": "^6.0.0", "@codemirror/language": "^6.4.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/css": "^1.1.0", "@lezer/html": "^1.3.12" } }, "sha512-pw2ReWKUqSkbvh76RAT4NYxiogRu+PWkR2ukAwO9uOgrm8uipkzjtKKtNpyeAQwHOqxEeSvAXZ6vr3AfyB9y/w=="], "@codemirror/lang-java": ["@codemirror/lang-java@6.0.2", "", { "dependencies": { "@codemirror/language": "^6.0.0", "@lezer/java": "^1.0.0" } }, "sha512-m5Nt1mQ/cznJY7tMfQTJchmrjdjQ71IDs+55d1GAa8DGaB8JXWsVCkVT284C3RTASaY43YknrK2X3hPO/J3MOQ=="], @@ -418,7 +418,7 @@ "@codemirror/lang-yaml": ["@codemirror/lang-yaml@6.1.3", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.2.0", "@lezer/lr": "^1.0.0", "@lezer/yaml": "^1.0.0" } }, "sha512-AZ8DJBuXGVHybpBQhmZtgew5//4hv3tdkXnr3vDmOUMJRuB6vn/uuwtmTOTlqEaQFg3hQSVeA90NmvIQyUV6FQ=="], - "@codemirror/language": ["@codemirror/language@6.12.3", "", { "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.23.0", "@lezer/common": "^1.5.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.0.0", "style-mod": "^4.0.0" } }, "sha512-QwCZW6Tt1siP37Jet9Tb02Zs81TQt6qQrZR2H+eGMcFsL1zMrk2/b9CLC7/9ieP1fjIUMgviLWMmgiHoJrj+ZA=="], + "@codemirror/language": ["@codemirror/language@6.12.4", "", { "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.23.0", "@lezer/common": "^1.5.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.0.0", "style-mod": "^4.0.0" } }, "sha512-1q4PaT+o6PbgpkJt4Q8Fv5XJxTy4FUZ4MWETtyiDw3J0Pyr9E2vqcKL+k9wcvjNTIsauxvE7OfmWj3FRPHQ76A=="], "@codemirror/language-data": ["@codemirror/language-data@6.5.2", "", { "dependencies": { "@codemirror/lang-angular": "^0.1.0", "@codemirror/lang-cpp": "^6.0.0", "@codemirror/lang-css": "^6.0.0", "@codemirror/lang-go": "^6.0.0", "@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", "@codemirror/lang-markdown": "^6.0.0", "@codemirror/lang-php": "^6.0.0", "@codemirror/lang-python": "^6.0.0", "@codemirror/lang-rust": "^6.0.0", "@codemirror/lang-sass": "^6.0.0", "@codemirror/lang-sql": "^6.0.0", "@codemirror/lang-vue": "^0.1.1", "@codemirror/lang-wast": "^6.0.0", "@codemirror/lang-xml": "^6.0.0", "@codemirror/lang-yaml": "^6.0.0", "@codemirror/language": "^6.0.0", "@codemirror/legacy-modes": "^6.4.0" } }, "sha512-CPkWBKrNS8stYbEU5kwBwTf3JB1kghlbh4FSAwzGW2TEscdeHHH4FGysREW86Mqnj3Qn09s0/6Ea/TutmoTobg=="], @@ -430,11 +430,11 @@ "@codemirror/search": ["@codemirror/search@6.7.1", "", { "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.37.0", "crelt": "^1.0.5" } }, "sha512-uMe5UO6PamJtSHrXhhHOzSX3ReWtiJrva6GnPMwSOrZtiExb5X5eExhr2OUZQVvdxPsKpY3Ro2mFbQadpPWmHA=="], - "@codemirror/state": ["@codemirror/state@6.6.0", "", { "dependencies": { "@marijn/find-cluster-break": "^1.0.0" } }, "sha512-4nbvra5R5EtiCzr9BTHiTLc+MLXK2QGiAVYMyi8PkQd3SR+6ixar/Q/01Fa21TBIDOZXgeWV4WppsQolSreAPQ=="], + "@codemirror/state": ["@codemirror/state@6.7.1", "", { "dependencies": { "@marijn/find-cluster-break": "^1.0.0" } }, "sha512-9QzNDgE4EYDnAHfrTlR2lwiPciiOymLtwKK+8yHQzCc7GXhAP9xdEbEJFy2IWB1j9UGUl9BsgMmTo/ImA02T7A=="], "@codemirror/theme-one-dark": ["@codemirror/theme-one-dark@6.1.3", "", { "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", "@lezer/highlight": "^1.0.0" } }, "sha512-NzBdIvEJmx6fjeremiGp3t/okrLPYT0d9orIc7AFun8oZcRk58aejkqhv6spnz4MLAevrKNPMQYXEWMg4s+sKA=="], - "@codemirror/view": ["@codemirror/view@6.43.4", "", { "dependencies": { "@codemirror/state": "^6.7.0", "crelt": "^1.0.6", "style-mod": "^4.1.0", "w3c-keyname": "^2.2.4" } }, "sha512-YImu23iyKfncJzT7sRy+rEqEhSc8RhOHqDxwy4WzXRKJwYm6iwf/9OJk5ctCAdZ6yi2ZqaGEvmf55fSVqMDrgg=="], + "@codemirror/view": ["@codemirror/view@6.43.9", "", { "dependencies": { "@codemirror/state": "^6.7.0", "crelt": "^1.0.6", "style-mod": "^4.1.0", "w3c-keyname": "^2.2.4" } }, "sha512-sTuUzTpPMFebRhg6dawChoKKgndIwfjmJgKVxBefPElcU2NwQ6AFroupk0SFqEerQyZOGRfDNnSN8Dw/lMAsXw=="], "@deadlyjack/ajax": ["@deadlyjack/ajax@1.2.6", "", {}, "sha512-VwZU8YUflO2/V/dl3dluu+3jg8Ghz/W5fwxD5Z21OZXKeV73d+vStKVBe4wi+Av2KbTR35K7Z+5Q3iIpjB41MA=="], @@ -2416,12 +2416,24 @@ "@chevrotain/gast/lodash-es": ["lodash-es@4.17.21", "", {}, "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="], + "@codemirror/lang-angular/@codemirror/lang-html": ["@codemirror/lang-html@6.4.11", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/lang-css": "^6.0.0", "@codemirror/lang-javascript": "^6.0.0", "@codemirror/language": "^6.4.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/css": "^1.1.0", "@lezer/html": "^1.3.12" } }, "sha512-9NsXp7Nwp891pQchI7gPdTwBuSuT3K65NGTHWHNJ55HjYcHLllr0rbIZNdOzas9ztc1EUVBlHou85FFZS4BNnw=="], + "@codemirror/lang-angular/@codemirror/lang-javascript": ["@codemirror/lang-javascript@6.2.4", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.6.0", "@codemirror/lint": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/javascript": "^1.0.0" } }, "sha512-0WVmhp1QOqZ4Rt6GlVGwKJN3KW7Xh4H2q8ZZNGZaP6lRdxXJzmjm4FqvmOojVj6khWJHIb9sp7U/72W7xQgqAA=="], - "@codemirror/lang-html/@codemirror/lang-javascript": ["@codemirror/lang-javascript@6.2.4", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.6.0", "@codemirror/lint": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/javascript": "^1.0.0" } }, "sha512-0WVmhp1QOqZ4Rt6GlVGwKJN3KW7Xh4H2q8ZZNGZaP6lRdxXJzmjm4FqvmOojVj6khWJHIb9sp7U/72W7xQgqAA=="], + "@codemirror/lang-jinja/@codemirror/lang-html": ["@codemirror/lang-html@6.4.11", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/lang-css": "^6.0.0", "@codemirror/lang-javascript": "^6.0.0", "@codemirror/language": "^6.4.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/css": "^1.1.0", "@lezer/html": "^1.3.12" } }, "sha512-9NsXp7Nwp891pQchI7gPdTwBuSuT3K65NGTHWHNJ55HjYcHLllr0rbIZNdOzas9ztc1EUVBlHou85FFZS4BNnw=="], + + "@codemirror/lang-liquid/@codemirror/lang-html": ["@codemirror/lang-html@6.4.11", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/lang-css": "^6.0.0", "@codemirror/lang-javascript": "^6.0.0", "@codemirror/language": "^6.4.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/css": "^1.1.0", "@lezer/html": "^1.3.12" } }, "sha512-9NsXp7Nwp891pQchI7gPdTwBuSuT3K65NGTHWHNJ55HjYcHLllr0rbIZNdOzas9ztc1EUVBlHou85FFZS4BNnw=="], + + "@codemirror/lang-markdown/@codemirror/lang-html": ["@codemirror/lang-html@6.4.11", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/lang-css": "^6.0.0", "@codemirror/lang-javascript": "^6.0.0", "@codemirror/language": "^6.4.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/css": "^1.1.0", "@lezer/html": "^1.3.12" } }, "sha512-9NsXp7Nwp891pQchI7gPdTwBuSuT3K65NGTHWHNJ55HjYcHLllr0rbIZNdOzas9ztc1EUVBlHou85FFZS4BNnw=="], + + "@codemirror/lang-php/@codemirror/lang-html": ["@codemirror/lang-html@6.4.11", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/lang-css": "^6.0.0", "@codemirror/lang-javascript": "^6.0.0", "@codemirror/language": "^6.4.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/css": "^1.1.0", "@lezer/html": "^1.3.12" } }, "sha512-9NsXp7Nwp891pQchI7gPdTwBuSuT3K65NGTHWHNJ55HjYcHLllr0rbIZNdOzas9ztc1EUVBlHou85FFZS4BNnw=="], + + "@codemirror/lang-vue/@codemirror/lang-html": ["@codemirror/lang-html@6.4.11", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/lang-css": "^6.0.0", "@codemirror/lang-javascript": "^6.0.0", "@codemirror/language": "^6.4.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/css": "^1.1.0", "@lezer/html": "^1.3.12" } }, "sha512-9NsXp7Nwp891pQchI7gPdTwBuSuT3K65NGTHWHNJ55HjYcHLllr0rbIZNdOzas9ztc1EUVBlHou85FFZS4BNnw=="], "@codemirror/lang-vue/@codemirror/lang-javascript": ["@codemirror/lang-javascript@6.2.4", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.6.0", "@codemirror/lint": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/javascript": "^1.0.0" } }, "sha512-0WVmhp1QOqZ4Rt6GlVGwKJN3KW7Xh4H2q8ZZNGZaP6lRdxXJzmjm4FqvmOojVj6khWJHIb9sp7U/72W7xQgqAA=="], + "@codemirror/language-data/@codemirror/lang-html": ["@codemirror/lang-html@6.4.11", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/lang-css": "^6.0.0", "@codemirror/lang-javascript": "^6.0.0", "@codemirror/language": "^6.4.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/css": "^1.1.0", "@lezer/html": "^1.3.12" } }, "sha512-9NsXp7Nwp891pQchI7gPdTwBuSuT3K65NGTHWHNJ55HjYcHLllr0rbIZNdOzas9ztc1EUVBlHou85FFZS4BNnw=="], + "@codemirror/language-data/@codemirror/lang-javascript": ["@codemirror/lang-javascript@6.2.4", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.6.0", "@codemirror/lint": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/javascript": "^1.0.0" } }, "sha512-0WVmhp1QOqZ4Rt6GlVGwKJN3KW7Xh4H2q8ZZNGZaP6lRdxXJzmjm4FqvmOojVj6khWJHIb9sp7U/72W7xQgqAA=="], "@codemirror/language-data/@codemirror/lang-jinja": ["@codemirror/lang-jinja@6.0.0", "", { "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" } }, "sha512-47MFmRcR8UAxd8DReVgj7WJN1WSAMT7OJnewwugZM4XiHWkOjgJQqvEM1NpMj9ALMPyxmlziEI1opH9IaEvmaw=="], @@ -2812,6 +2824,14 @@ "@babel/traverse/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + "@codemirror/lang-jinja/@codemirror/lang-html/@codemirror/lang-javascript": ["@codemirror/lang-javascript@6.2.4", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.6.0", "@codemirror/lint": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/javascript": "^1.0.0" } }, "sha512-0WVmhp1QOqZ4Rt6GlVGwKJN3KW7Xh4H2q8ZZNGZaP6lRdxXJzmjm4FqvmOojVj6khWJHIb9sp7U/72W7xQgqAA=="], + + "@codemirror/lang-liquid/@codemirror/lang-html/@codemirror/lang-javascript": ["@codemirror/lang-javascript@6.2.4", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.6.0", "@codemirror/lint": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/javascript": "^1.0.0" } }, "sha512-0WVmhp1QOqZ4Rt6GlVGwKJN3KW7Xh4H2q8ZZNGZaP6lRdxXJzmjm4FqvmOojVj6khWJHIb9sp7U/72W7xQgqAA=="], + + "@codemirror/lang-markdown/@codemirror/lang-html/@codemirror/lang-javascript": ["@codemirror/lang-javascript@6.2.4", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.6.0", "@codemirror/lint": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/javascript": "^1.0.0" } }, "sha512-0WVmhp1QOqZ4Rt6GlVGwKJN3KW7Xh4H2q8ZZNGZaP6lRdxXJzmjm4FqvmOojVj6khWJHIb9sp7U/72W7xQgqAA=="], + + "@codemirror/lang-php/@codemirror/lang-html/@codemirror/lang-javascript": ["@codemirror/lang-javascript@6.2.4", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.6.0", "@codemirror/lint": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/javascript": "^1.0.0" } }, "sha512-0WVmhp1QOqZ4Rt6GlVGwKJN3KW7Xh4H2q8ZZNGZaP6lRdxXJzmjm4FqvmOojVj6khWJHIb9sp7U/72W7xQgqAA=="], + "@npmcli/arborist/minimatch/brace-expansion": ["brace-expansion@5.0.6", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g=="], "@npmcli/map-workspaces/minimatch/brace-expansion": ["brace-expansion@5.0.6", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g=="], diff --git a/package-lock.json b/package-lock.json index 4cdb90b9e3..967b1b41bf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,12 +10,12 @@ "license": "MIT", "dependencies": { "@codemirror/autocomplete": "^6.20.3", - "@codemirror/commands": "^6.10.3", + "@codemirror/commands": "^6.11.0", "@codemirror/lang-angular": "^0.1.4", "@codemirror/lang-cpp": "^6.0.3", "@codemirror/lang-css": "^6.3.1", "@codemirror/lang-go": "^6.0.1", - "@codemirror/lang-html": "^6.4.11", + "@codemirror/lang-html": "^6.4.12", "@codemirror/lang-java": "^6.0.2", "@codemirror/lang-javascript": "^6.2.5", "@codemirror/lang-jinja": "^6.0.1", @@ -32,15 +32,15 @@ "@codemirror/lang-wast": "^6.0.2", "@codemirror/lang-xml": "^6.1.0", "@codemirror/lang-yaml": "^6.1.3", - "@codemirror/language": "^6.12.3", + "@codemirror/language": "^6.12.4", "@codemirror/language-data": "^6.5.2", "@codemirror/legacy-modes": "^6.5.3", "@codemirror/lint": "^6.9.7", "@codemirror/lsp-client": "github:Acode-Foundation/codemirror-lsp-client#db6930c2b6db67e14978f08ae8f5aeb149d29468", "@codemirror/search": "^6.7.1", - "@codemirror/state": "^6.6.0", + "@codemirror/state": "^6.7.1", "@codemirror/theme-one-dark": "^6.1.3", - "@codemirror/view": "^6.43.4", + "@codemirror/view": "^6.43.9", "@deadlyjack/ajax": "^1.2.6", "@emmetio/codemirror6-plugin": "^0.4.1", "@lezer/common": "^1.5.0", @@ -3608,13 +3608,13 @@ } }, "node_modules/@codemirror/commands": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.10.3.tgz", - "integrity": "sha512-JFRiqhKu+bvSkDLI+rUhJwSxQxYb759W5GBezE8Uc8mHLqC9aV/9aTC7yJSqCtB3F00pylrLCwnyS91Ap5ej4Q==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.11.0.tgz", + "integrity": "sha512-/K4Rl5BN0OtTiPWmJCdqODu38XnDMsDxKY5rgrPnCkutPTJf2wVbkoixLfealF5Kwse/s8P8M5jAiURiwSwnFA==", "license": "MIT", "dependencies": { "@codemirror/language": "^6.0.0", - "@codemirror/state": "^6.6.0", + "@codemirror/state": "^6.7.0", "@codemirror/view": "^6.27.0", "@lezer/common": "^1.1.0" } @@ -3670,9 +3670,9 @@ } }, "node_modules/@codemirror/lang-html": { - "version": "6.4.11", - "resolved": "https://registry.npmjs.org/@codemirror/lang-html/-/lang-html-6.4.11.tgz", - "integrity": "sha512-9NsXp7Nwp891pQchI7gPdTwBuSuT3K65NGTHWHNJ55HjYcHLllr0rbIZNdOzas9ztc1EUVBlHou85FFZS4BNnw==", + "version": "6.4.12", + "resolved": "https://registry.npmjs.org/@codemirror/lang-html/-/lang-html-6.4.12.tgz", + "integrity": "sha512-pw2ReWKUqSkbvh76RAT4NYxiogRu+PWkR2ukAwO9uOgrm8uipkzjtKKtNpyeAQwHOqxEeSvAXZ6vr3AfyB9y/w==", "license": "MIT", "dependencies": { "@codemirror/autocomplete": "^6.0.0", @@ -3900,9 +3900,9 @@ } }, "node_modules/@codemirror/language": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.12.3.tgz", - "integrity": "sha512-QwCZW6Tt1siP37Jet9Tb02Zs81TQt6qQrZR2H+eGMcFsL1zMrk2/b9CLC7/9ieP1fjIUMgviLWMmgiHoJrj+ZA==", + "version": "6.12.4", + "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.12.4.tgz", + "integrity": "sha512-1q4PaT+o6PbgpkJt4Q8Fv5XJxTy4FUZ4MWETtyiDw3J0Pyr9E2vqcKL+k9wcvjNTIsauxvE7OfmWj3FRPHQ76A==", "license": "MIT", "dependencies": { "@codemirror/state": "^6.0.0", @@ -3992,9 +3992,9 @@ } }, "node_modules/@codemirror/state": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.6.0.tgz", - "integrity": "sha512-4nbvra5R5EtiCzr9BTHiTLc+MLXK2QGiAVYMyi8PkQd3SR+6ixar/Q/01Fa21TBIDOZXgeWV4WppsQolSreAPQ==", + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.7.1.tgz", + "integrity": "sha512-9QzNDgE4EYDnAHfrTlR2lwiPciiOymLtwKK+8yHQzCc7GXhAP9xdEbEJFy2IWB1j9UGUl9BsgMmTo/ImA02T7A==", "license": "MIT", "dependencies": { "@marijn/find-cluster-break": "^1.0.0" @@ -4013,9 +4013,9 @@ } }, "node_modules/@codemirror/view": { - "version": "6.43.4", - "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.43.4.tgz", - "integrity": "sha512-YImu23iyKfncJzT7sRy+rEqEhSc8RhOHqDxwy4WzXRKJwYm6iwf/9OJk5ctCAdZ6yi2ZqaGEvmf55fSVqMDrgg==", + "version": "6.43.9", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.43.9.tgz", + "integrity": "sha512-sTuUzTpPMFebRhg6dawChoKKgndIwfjmJgKVxBefPElcU2NwQ6AFroupk0SFqEerQyZOGRfDNnSN8Dw/lMAsXw==", "license": "MIT", "dependencies": { "@codemirror/state": "^6.7.0", @@ -4410,9 +4410,9 @@ } }, "node_modules/@marijn/find-cluster-break": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz", - "integrity": "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@marijn/find-cluster-break/-/find-cluster-break-1.0.4.tgz", + "integrity": "sha512-Wy0V7+SGUjnF9/TkiM1hKVDPj7jKXduPNboMVtHTA8dySMURWqfg/JZ9E2Sq8JgSJmkl7k7Qe9FLeMSrSraWmQ==", "license": "MIT" }, "node_modules/@mermaid-js/parser": { diff --git a/package.json b/package.json index f34c2faf1b..dcf2e77743 100644 --- a/package.json +++ b/package.json @@ -123,12 +123,12 @@ }, "dependencies": { "@codemirror/autocomplete": "^6.20.3", - "@codemirror/commands": "^6.10.3", + "@codemirror/commands": "^6.11.0", "@codemirror/lang-angular": "^0.1.4", "@codemirror/lang-cpp": "^6.0.3", "@codemirror/lang-css": "^6.3.1", "@codemirror/lang-go": "^6.0.1", - "@codemirror/lang-html": "^6.4.11", + "@codemirror/lang-html": "^6.4.12", "@codemirror/lang-java": "^6.0.2", "@codemirror/lang-javascript": "^6.2.5", "@codemirror/lang-jinja": "^6.0.1", @@ -145,15 +145,15 @@ "@codemirror/lang-wast": "^6.0.2", "@codemirror/lang-xml": "^6.1.0", "@codemirror/lang-yaml": "^6.1.3", - "@codemirror/language": "^6.12.3", + "@codemirror/language": "^6.12.4", "@codemirror/language-data": "^6.5.2", "@codemirror/legacy-modes": "^6.5.3", "@codemirror/lint": "^6.9.7", "@codemirror/lsp-client": "github:Acode-Foundation/codemirror-lsp-client#db6930c2b6db67e14978f08ae8f5aeb149d29468", "@codemirror/search": "^6.7.1", - "@codemirror/state": "^6.6.0", + "@codemirror/state": "^6.7.1", "@codemirror/theme-one-dark": "^6.1.3", - "@codemirror/view": "^6.43.4", + "@codemirror/view": "^6.43.9", "@deadlyjack/ajax": "^1.2.6", "@emmetio/codemirror6-plugin": "^0.4.1", "@lezer/common": "^1.5.0", @@ -203,12 +203,12 @@ }, "overrides": { "@codemirror/autocomplete": "^6.20.3", - "@codemirror/commands": "^6.10.3", - "@codemirror/language": "^6.12.3", + "@codemirror/commands": "^6.11.0", + "@codemirror/language": "^6.12.4", "@codemirror/lint": "^6.9.7", "@codemirror/search": "^6.7.1", - "@codemirror/state": "^6.6.0", - "@codemirror/view": "^6.43.4", + "@codemirror/state": "^6.7.1", + "@codemirror/view": "^6.43.9", "tar": "^7.5.22" }, "browserslist": "cover 100%", From 2e7aeadd83ba08a04ca69da6e322bca025e18bd4 Mon Sep 17 00:00:00 2001 From: TM Date: Wed, 26 Aug 2026 15:39:52 +0000 Subject: [PATCH 10/38] Enhanced: Indonesian (id) language translations (#2798) --- src/lang/id-id.json | 256 ++++++++++++++++++++++---------------------- 1 file changed, 128 insertions(+), 128 deletions(-) diff --git a/src/lang/id-id.json b/src/lang/id-id.json index 4f2baf5c81..13dda67747 100644 --- a/src/lang/id-id.json +++ b/src/lang/id-id.json @@ -8,18 +8,18 @@ "autosave": "Simpan Otomatis", "cancel": "Batal", "change language": "Ubah Bahasa", - "choose color": "Pilih warna", + "choose color": "Pilih Warna", "clear": "Kosongkan", - "close app": "Tutup aplikasi?", - "commit message": "Pesan komit", + "close app": "Tutup Aplikasi?", + "commit message": "Pesan Komit", "console": "Konsol", "conflict error": "Terjadi konflik! Harap tunggu sebelum melakukan komit lain.", "copy": "Salin", - "create folder error": "Maaf, tidak dapat membuat folder baru", + "create folder error": "Maaf, tidak dapat membuat folder baru.", "cut": "Potong", "delete": "Hapus", - "dependencies": "Ketergantungan", - "delay": "Waktu dalam milidetik", + "dependencies": "Dependensi", + "delay": "Waktu dalam Milidetik", "editor settings": "Pengaturan Editor", "editor theme": "Tema Editor", "enter file name": "Masukkan nama berkas", @@ -34,13 +34,13 @@ "file deleted": "Berkas dihapus", "file is not supported": "Berkas tidak didukung", "file not supported": "Jenis berkas ini tidak didukung.", - "file too large": "Berkas terlalu besar untuk ditangani. Ukuran maksimal berkas yang diizinkan adalah {size}", + "file too large": "Berkas terlalu besar untuk ditangani. Ukuran maksimal berkas yang diizinkan adalah {size}.", "file renamed": "Berkas berganti nama", "file saved": "Berkas disimpan", "folder added": "Folder ditambahkan", "folder already added": "Folder sudah ditambahkan", "font size": "Ukuran Font", - "goto": "Pergi ke baris", + "goto": "Pergi ke Baris", "icons definition": "Definisi ikon", "info": "Info", "invalid value": "Nilai tidak valid", @@ -48,23 +48,23 @@ "linting": "Cek kesalahan sintaks", "logout": "Keluar", "loading": "Memuat", - "my profile": "Profil saya", + "my profile": "Profil Saya", "new file": "Berkas baru", "new folder": "Folder baru", "no": "Tidak", - "no editor message": "Buka atau buat berkas dan folder baru dari menu", + "no editor message": "Buka atau buat berkas dan folder baru dari menu.", "not set": "Tidak diatur", "unsaved files close app": "Ada berkas yang belum disimpan. Tutup Aplikasi?", "notice": "Pemberitahuan", "open file": "Buka berkas", "open files and folders": "Buka berkas dan folder", "open folder": "Buka folder", - "open recent": "Buka baru-baru ini", + "open recent": "Buka Yang Baru-Baru Ini", "ok": "OK", "overwrite": "Timpa", "paste": "Tempel", "preview mode": "Mode Pratinjau", - "read only file": "Tidak dapat menyimpan berkas hanya baca. Silakan coba simpan sebagai", + "read only file": "Tidak dapat menyimpan berkas hanya-baca. Silakan coba simpan sebagai.", "reload": "Muat Ulang", "rename": "Ubah Nama", "replace": "Ganti", @@ -73,7 +73,7 @@ "save": "Simpan", "saving": "Menyimpan", "save as": "Simpan sebagai", - "save file to run": "Silakan simpan berkas ini untuk berjalan di peramban", + "save file to run": "Silakan simpan berkas ini agar dapat berjalan di peramban.", "search": "Cari", "see logs and errors": "Lihat log dan kesalahan", "select folder": "Pilih folder", @@ -160,7 +160,7 @@ "dark": "Gelap", "file browser": "Penjelajah Berkas", "operation not permitted": "Operasi tidak diizinkan", - "no such file or directory": "Tidak ada berkas atau direktori seperti itu", + "no such file or directory": "Tidak ada berkas atau direktori seperti itu.", "input/output error": "Kesalahan masukan/keluaran", "permission denied": "Izin ditolak", "bad address": "Alamat tidak valid", @@ -177,7 +177,7 @@ "too many users": "Terlalu banyak pengguna", "connection timed out": "Waktu koneksi habis", "connection refused": "Koneksi ditolak", - "owner died": "Proses induk terhenti", + "owner died": "Proses induk berhenti.", "an error occurred": "Terjadi kesalahan", "add ftp": "Tambahkan FTP", "add sftp": "Tambahkan SFTP", @@ -191,7 +191,7 @@ "deleted file": "Berkas yang dihapus", "line height": "Tinggi baris", "preview info": "Jika Anda ingin menjalankan berkas aktif, ketuk dan tahan ikon Putar.", - "manage all files": "Izinkan Acode Editor untuk mengelola semua berkas dalam pengaturan untuk mengedit berkas di perangkat Anda dengan mudah.", + "manage all files": "Izinkan Acode Editor untuk mengelola semua berkas di pengaturan agar dapat mengedit berkas di perangkat Anda dengan mudah.", "close file": "Tutup berkas", "reset connections": "Atur ulang koneksi", "check file changes": "Periksa perubahan berkas", @@ -252,25 +252,25 @@ "select key file": "Pilih berkas kunci", "passphrase": "Frasa sandi", "connecting...": "Menghubungkan...", - "type filename": "Jenis nama berkas", + "type filename": "Ketik nama berkas", "unable to load files": "Tidak dapat memuat berkas", "preview port": "Port pratinjau", "find file": "Temukan berkas", "system": "Sistem", "please select a formatter": "Mohon pilih pemformat", "case sensitive": "Sensitif huruf besar", - "regular expression": "Ekspresi Regular", + "regular expression": "Ekspresi Reguler", "whole word": "Seluruh kata", "edit with": "Edit dengan", "open with": "Buka dengan", "no app found to handle this file": "Tidak ditemukan aplikasi untuk menangani berkas ini", - "restore default settings": "Kembalikan pengaturan default", + "restore default settings": "Kembalikan Pengaturan Bawaan", "server port": "Port server", "preview settings": "Pengaturan pratinjau", - "preview settings note": "Jika port pratinjau dan port server berbeda, aplikasi tidak akan memulai server dan sebaliknya akan membuka https://: di peramban atau peramban-dalam-aplikasi. Ini berguna ketika Anda menjalankan server di tempat lain.", + "preview settings note": "Jika port pratinjau dan port server berbeda, aplikasi tidak akan memulai server dan sebaliknya akan membuka https://: di peramban atau peramban-dalam-aplikasi. Ini berguna ketika Anda menjalankan server di tempat lain.", "backup/restore note": "Ini hanya akan membuat cadangan pengaturan Anda, tema khusus, plugin yang dipasang, dan pemetaan tombol. Ini tidak akan membuat cadangan FTP/SFTP atau status aplikasi Anda.", "host": "Host", - "retry ftp/sftp when fail": "Ulangi FTP/SFTP ketika gagal", + "retry ftp/sftp when fail": "Ulangi FTP/SFTP saat gagal", "more": "Lebih banyak", "thank you :)": "Terima kasih :)", "purchase pending": "Pembelian Tertunda", @@ -292,42 +292,42 @@ "quicktools trigger mode": "Mode Pemicu Alat Cepat", "print margin": "Cetak margin", "touch move threshold": "Ambang pergerakan sentuh", - "info-retryremotefsafterfail": "Ulangi koneksi FTP/SFTP ketika gagal.", - "info-fullscreen": "Sembunyikan Bilah Judul di Layar Beranda.", - "info-checkfiles": "Periksa perubahan berkas ketika aplikasi di latar belakang.", - "info-console": "Pilih konsol JavaScript. Legacy adalah konsol default, Eruda adalah konsol pihak ketiga.", - "info-keyboardmode": "Mode keyboard untuk input teks, tidak ada saran akan menyembunyikan saran dan koreksi otomatis. Jika tidak ada saran tidak berfungsi, cobalah untuk mengubah nilai ke tanpa saran yang agresif.", - "info-rememberfiles": "Ingat berkas yang dibuka ketika aplikasi ditutup.", - "info-rememberfolders": "Ingat folder yang dibuka ketika aplikasi ditutup.", + "info-retryremotefsafterfail": "Ulangi koneksi FTP/SFTP saat gagal.", + "info-fullscreen": "Sembunyikan bilah judul di layar beranda.", + "info-checkfiles": "Periksa perubahan berkas saat aplikasi berjalan di latar belakang.", + "info-console": "Pilih konsol JavaScript. Legacy adalah konsol bawaan, Eruda adalah konsol pihak ketiga.", + "info-keyboardmode": "Mode papan ketik untuk input teks. Pilihan tanpa saran akan menyembunyikan saran dan koreksi otomatis. Jika tidak ada saran tidak berfungsi, coba ubah nilainya ke tanpa saran yang agresif.", + "info-rememberfiles": "Ingat berkas yang dibuka saat aplikasi ditutup.", + "info-rememberfolders": "Ingat folder yang dibuka saat aplikasi ditutup.", "info-floatingbutton": "Tampilkan atau sembunyikan tombol apung Alat Cepat.", - "info-openfilelistpos": "Di mana untuk menampilkan daftar berkas aktif.", + "info-openfilelistpos": "Lokasi untuk menampilkan daftar berkas aktif.", "info-touchmovethreshold": "Jika sensitivitas sentuhan perangkat Anda terlalu tinggi, Anda dapat meningkatkan nilai ini untuk mencegah gerakan sentuh yang tidak disengaja.", - "info-scroll-settings": "Pengaturan ini berisi pengaturan gulir termasuk bungkus teks.", + "info-scroll-settings": "Pengaturan ini mencakup pengaturan gulir termasuk bungkus teks.", "info-animation": "Jika aplikasi terasa lag, nonaktifkan animasi.", - "info-quicktoolstriggermode": "Jika tombol dalam alat cepat tidak berfungsi, cobalah untuk mengubah nilai ini.", + "info-quicktoolstriggermode": "Jika tombol dalam alat cepat tidak berfungsi, coba ubah nilai ini.", "info-checkForAppUpdates": "Periksa pembaruan aplikasi secara otomatis.", "info-quickTools": "Tampilkan atau sembunyikan alat cepat.", - "info-showHiddenFiles": "Tampilkan berkas dan folder tersembunyi. (Berawal dengan .)", - "info-listFiles": "Otomatis daftarkan semua berkas saat folder dibuka", + "info-showHiddenFiles": "Tampilkan berkas dan folder tersembunyi. (Diawali dengan .)", + "info-listFiles": "Secara otomatis daftarkan semua berkas saat folder dibuka.", "info-all_file_access": "Aktifkan akses ke /sdcard dan /storage di terminal.", "info-fontSize": "Ukuran font yang digunakan untuk menampilkan teks.", "info-fontFamily": "Jenis font yang digunakan untuk menampilkan teks.", "info-theme": "Tema warna terminal.", "info-cursorStyle": "Gaya kursor saat terminal sedang aktif.", "info-cursorInactiveStyle": "Gaya kursor saat terminal tidak terfokus.", - "info-fontWeight": "Ketebalan font yang digunakan untuk menampilkan teks tidak tebal.", + "info-fontWeight": "Ketebalan font yang digunakan untuk menampilkan teks biasa.", "info-cursorBlink": "Apakah kursor berkedip.", - "info-scrollback": "Jumlah scrollback di terminal. Scrollback adalah jumlah baris yang dipertahankan ketika baris digulirkan melampaui tampilan awal.", - "info-tabStopWidth": "Ukuran tab berhenti di terminal.", + "info-scrollback": "Jumlah gulir balik di terminal. Gulir balik adalah jumlah baris yang dipertahankan saat baris digulirkan melampaui tampilan awal.", + "info-tabStopWidth": "Ukuran hentian tab di terminal.", "info-letterSpacing": "Jarak antar karakter dalam piksel penuh.", "info-imageSupport": "Apakah gambar didukung di terminal.", "info-fontLigatures": "Apakah ligatur font diaktifkan di terminal.", - "info-confirmTabClose": "Mintalah konfirmasi sebelum menutup tab terminal.", + "info-confirmTabClose": "Minta konfirmasi sebelum menutup tab terminal.", "info-backup": "Membuat cadangan instalasi terminal.", "info-restore": "Memulihkan cadangan instalasi terminal.", "info-uninstall": "Menghapus instalasi terminal.", "owned": "Dimiliki", - "api_error": "API server turun, silakan coba setelah beberapa waktu.", + "api_error": "Server API sedang down, silakan coba beberapa saat lagi.", "installed": "Terpasang", "all": "Semua", "medium": "Sedang", @@ -345,10 +345,10 @@ "bottom": "Bawah", "save all": "Simpan semua", "close all": "Tutup semua", - "unsaved files warning": "Beberapa berkas tidak disimpan. Klik 'Oke' pilih apa yang harus dilakukan atau tekan 'Batal' untuk kembali.", - "save all warning": "Apakah Anda yakin ingin menyimpan semua berkas dan tutup? Tindakan ini tidak dapat dibalik.", + "unsaved files warning": "Beberapa berkas belum disimpan. Klik 'Oke' untuk memilih tindakan atau tekan 'Batal' untuk kembali.", + "save all warning": "Apakah Anda yakin ingin menyimpan semua berkas dan menutupnya? Tindakan ini tidak dapat diurungkan.", "save all changes warning": "Apakah Anda yakin ingin menyimpan semua berkas?", - "close all warning": "Apakah Anda yakin ingin menutup semua berkas? Anda akan kehilangan perubahan yang belum disimpan dan tindakan ini tidak dapat dibalik.", + "close all warning": "Apakah Anda yakin ingin menutup semua berkas? Anda akan kehilangan perubahan yang belum disimpan dan tindakan ini tidak dapat diurungkan.", "refresh": "Segarkan", "shortcut buttons": "Tombol pintasan", "no result": "Tidak ada hasil", @@ -387,17 +387,17 @@ "quicktools:search-settings": "Pengaturan Pencarian", "quicktools:search-replace": "Mengganti", "quicktools:search-replace-all": "Ganti Semua", - "info-quicktoolssettings": "Kustomisasi tombol pintas dan tombol keyboard dalam wadah alat cepat di bawah editor untuk meningkatkan pengalaman pengkodean Anda.", - "info-excludefolders": "Gunakan pola **/node_modules/** untuk mengabaikan semua berkas dari folder node_modules. Ini akan mengecualikan berkas dari terdaftar dan juga akan mencegah mereka dimasukkan dalam pencarian berkas.", - "missed files": "Memindai {count} berkas setelah pencarian dimulai dan tidak akan dimasukkan dalam pencarian.", + "info-quicktoolssettings": "Sesuaikan tombol pintasan dan tombol papan ketik dalam wadah alat cepat di bawah editor untuk meningkatkan pengalaman pengkodean Anda.", + "info-excludefolders": "Gunakan pola **/node_modules/** untuk mengabaikan semua berkas dari folder node_modules. Ini akan mengecualikan berkas dari daftar dan juga mencegahnya diikutsertakan dalam pencarian berkas.", + "missed files": "Memindai {count} berkas setelah pencarian dimulai dan tidak akan dimasukkan dalam hasil pencarian.", "remove": "Hapus", "quicktools:command-palette": "Palet perintah", "default file encoding": "Enkoding berkas default", - "remove entry": "Apakah Anda yakin ingin menghapus '{name}' dari jalur yang disimpan? Harap dicatat bahwa menghapusnya tidak akan menghapus jalur itu sendiri.", - "delete entry": "Konfirmasikan penghapusan: '{name}'. Tindakan ini tidak dapat diurungkan. Melanjutkan?", - "change encoding": "Buka kembali '{file}' dengan enkoding '{encoding}'? Tindakan ini akan mengakibatkan hilangnya perubahan yang belum disimpan yang dilakukan pada berkas. Apakah Anda ingin melanjutkan pembukaan kembali?", - "reopen file": "Apakah Anda yakin ingin membuka kembali '{file}'? Setiap perubahan yang belum disimpan akan hilang.", - "plugin min version": "{name} hanya tersedia dalam Acode - {v-code} dan di atas. Klik di sini untuk memperbarui.", + "remove entry": "Apakah Anda yakin ingin menghapus '{name}' dari jalur yang disimpan? Perlu diketahui bahwa menghapusnya tidak akan menghapus jalur itu sendiri.", + "delete entry": "Konfirmasi penghapusan: '{name}'. Tindakan ini tidak dapat diurungkan. Lanjutkan?", + "change encoding": "Buka kembali '{file}' dengan enkoding '{encoding}'? Tindakan ini akan mengakibatkan hilangnya perubahan yang belum disimpan pada berkas ini. Apakah Anda ingin melanjutkan?", + "reopen file": "Apakah Anda yakin ingin membuka kembali '{file}'? Semua perubahan yang belum disimpan akan hilang.", + "plugin min version": "{name} hanya tersedia di Acode - {v-code} ke atas. Klik di sini untuk memperbarui.", "color preview": "Pratinjau warna", "confirm": "Konfirmasi", "problems": "Masalah", @@ -407,16 +407,16 @@ "most_downloaded": "Paling Banyak Diunduh", "newly_added": "Baru Ditambahkan", "top_rated": "Peringkat Teratas", - "rename not supported": "Mengganti nama pada direktori Termux tidak didukung", + "rename not supported": "Mengganti nama pada direktori Termux tidak didukung.", "compress": "Kompres", "copy uri": "Salin Uri", "delete entries": "Apakah Anda yakin ingin menghapus {count} item?", - "deleting items": "menghapus {count} item...", + "deleting items": "Menghapus {count} item...", "import project zip": "Impor Proyek (zip)", "changelog": "Catatan Perubahan", "notifications": "Notifikasi", "no_unread_notifications": "Tidak ada pemberitahuan yang belum dibaca", - "should_use_current_file_for_preview": "Harus menggunakan berkas saat ini untuk pratinjau alih-alih default (index.html)", + "should_use_current_file_for_preview": "Gunakan berkas saat ini untuk pratinjau, alih-alih default (index.html).", "fade fold widgets": "Widget Lipat Pudar", "quicktools:home-key": "Kunci Home", "quicktools:end-key": "Kunci End", @@ -513,7 +513,7 @@ "add to home screen": "Tambah ke layar beranda", "pin shortcuts not supported": "Pintasan layar beranda tidak didukung di perangkat ini.", "save file before home shortcut": "Simpan berkas sebelum menambahkannya ke layar beranda.", - "terminal_required_message_for_lsp": "Terminal tidak terpasang. Mohon pasang Terminal terlebih dahulu untuk menggunakan server LSP.", + "terminal_required_message_for_lsp": "Terminal belum terpasang. Mohon pasang Terminal terlebih dahulu untuk menggunakan server LSP.", "shift click selection": "Pemilihan Shift + tekan/klik", "earn ad-free time": "Ambil waktu bebas iklan", "indent guides": "Panduan indentasi", @@ -534,7 +534,7 @@ "lsp-empty": "Kosong", "lsp-enabled": "Diaktifkan", "lsp-error-add-server-failed": "Gagal menambahkan server", - "lsp-error-args-must-be-array": "Argumen harus berupa sebuah senarai JSON", + "lsp-error-args-must-be-array": "Argumen harus berupa senarai JSON.", "lsp-error-binary-command-required": "Perintah biner diperlukan", "lsp-error-language-id-required": "Setidaknya satu ID bahasa diperlukan", "lsp-error-package-required": "Setidaknya satu paket diperlukan", @@ -552,14 +552,14 @@ "lsp-feature-signature": "Bantuan parameter fungsi", "lsp-feature-signature-info": "Tampilkan petunjuk parameter fungsi saat mengetik.", "lsp-feature-state-toast": "{feature} {state}", - "lsp-initialization-options": "Opsi inisiasi", - "lsp-initialization-options-json": "Opsi inisiasi (JSON)", - "lsp-initialization-options-updated": "Opsi inisiasi diperbarui", - "lsp-install-command": "Perintah pasang", - "lsp-install-command-unavailable": "Perintah pasang tidak tersedia", + "lsp-initialization-options": "Opsi Inisialisasi", + "lsp-initialization-options-json": "Opsi Inisialisasi (JSON)", + "lsp-initialization-options-updated": "Opsi inisialisasi diperbarui.", + "lsp-install-command": "Perintah Pasang", + "lsp-install-command-unavailable": "Perintah pasang tidak tersedia.", "lsp-install-info-check-failed": "Acode tidak dapat memverifikasi status pemasangan.", - "lsp-install-info-missing": "Server bahasa tidak terpasang di dalam lingkungan terminal.", - "lsp-install-info-ready": "Server bahasa terpasang dan siap.", + "lsp-install-info-missing": "Server bahasa belum terpasang di dalam lingkungan terminal.", + "lsp-install-info-ready": "Server bahasa terpasang dan siap digunakan.", "lsp-install-info-unknown": "Status pemasangan tidak dapat diperiksa secara otomatis.", "lsp-install-info-version-available": "Versi {version} tersedia.", "lsp-install-notification": "{server} belum terpasang. Ketuk untuk memasang.", @@ -570,8 +570,8 @@ "lsp-install-method-pip": "Paket pip", "lsp-install-method-shell": "Shell kustom", "lsp-install-method-title": "Metode pasang", - "lsp-install-repair": "Pasang / perbaiki", - "lsp-installation-status": "Status pemasangan", + "lsp-install-repair": "Pasang / Perbaiki", + "lsp-installation-status": "Status Pemasangan", "lsp-installed": "Terpasang", "lsp-invalid-timeout": "Nilai timeout tidak valid", "lsp-language-ids": "ID bahasa (dipisah koma)", @@ -582,10 +582,10 @@ "lsp-server-id": "ID server", "lsp-server-label": "Label server", "lsp-server-not-found": "Server tidak ditemukan", - "lsp-server-uninstalled": "Server dicopot pemasangannya", - "lsp-startup-timeout": "Batas waktu mulai", - "lsp-startup-timeout-ms": "Batas waktu mulai (milidetik)", - "lsp-startup-timeout-set": "Batas waktu mulai diatur ke {timeout} ms", + "lsp-server-uninstalled": "Server dicopot pemasangannya.", + "lsp-startup-timeout": "Batas Waktu Mulai", + "lsp-startup-timeout-ms": "Batas Waktu Mulai (Milidetik)", + "lsp-startup-timeout-set": "Batas waktu mulai diatur ke {timeout} ms.", "lsp-state-disabled": "dinonaktifkan", "lsp-state-enabled": "diaktifkan", "lsp-status": "Status", @@ -596,14 +596,14 @@ "lsp-status-not-installed": "Tidak terpasang", "lsp-status-unknown": "Tidak diketahui", "lsp-timeout-ms": "{timeout} ms", - "lsp-uninstall-command-unavailable": "Perintah copot pemasangan tidak tersedia", + "lsp-uninstall-command-unavailable": "Perintah copot pemasangan tidak tersedia.", "lsp-uninstall-notification": "Ketuk untuk menghapus {server}.", - "lsp-uninstall-server": "Copot pemasangan server", + "lsp-uninstall-server": "Copot Pemasangan Server", "lsp-update-command-optional": "Perintah perbarui (opsional)", "lsp-update-command-unavailable": "Perintah perbarui tidak tersedia", - "lsp-update-server": "Perbarui server", + "lsp-update-server": "Perbarui Server", "lsp-version-line": "Versi: {version}", - "lsp-view-initialization-options": "Lihat opsi inisiasi", + "lsp-view-initialization-options": "Lihat Opsi Inisialisasi", "settings-category-about-acode": "Tentang Acode", "settings-category-discover-apps": "Temukan lebih banyak aplikasi", "settings-category-advanced": "Lanjutan", @@ -632,63 +632,63 @@ "settings-category-support-acode": "Dukung Acode", "settings-category-text-layout": "Teks & tampilan", "settings-info-app-animation": "Kendalikan animasi transisi di seluruh aplikasi.", - "settings-info-app-check-files": "Segarkan ulang editor ketika berkas berubah di luar Acode.", + "settings-info-app-check-files": "Segarkan editor saat berkas berubah di luar Acode.", "settings-info-app-clean-install-state": "Hapus status instalasi yang tersimpan yang digunakan oleh alur orientasi dan pengaturan.", "settings-info-app-confirm-on-exit": "Tanyakan sebelum menutup aplikasi.", - "settings-info-app-console": "Pilih mana integrasi konsol debug yang Acode gunakan.", + "settings-info-app-console": "Pilih integrasi konsol debug yang digunakan Acode.", "settings-info-app-default-file-encoding": "Enkoding bawaan ketika membuka atau membuat berkas.", "settings-info-app-exclude-folders": "Lewati folder dan pola ketika mencari atau memindai.", "settings-info-app-floating-button": "Tampilkan tombol aksi cepat yang melayang.", - "settings-info-app-font-manager": "Pasang, kelola, atau menghapus font aplikasi.", - "settings-info-app-fullscreen": "Sembunyikan bar status sistem ketika menggunakan Acode.", + "settings-info-app-font-manager": "Pasang, kelola, atau hapus font aplikasi.", + "settings-info-app-fullscreen": "Sembunyikan bilah status sistem saat menggunakan Acode.", "settings-info-app-keybindings": "Edit berkas pemetaan tombol atau atur ulang pintasan.", - "settings-info-app-keyboard-mode": "Pilih bagaimana papan ketik perangkat lunak berperilaku ketika mengedit.", + "settings-info-app-keyboard-mode": "Pilih perilaku papan ketik perangkat lunak saat mengedit.", "settings-info-app-language": "Pilih bahasa aplikasi dan label yang diterjemahkan.", - "settings-info-app-open-file-list-position": "Pilih dimana daftar berkas aktif muncul.", - "settings-info-app-quick-tools-settings": "Urutkan ulang dan kustomisaikan pintasan alat cepat.", - "settings-info-app-quick-tools-trigger-mode": "Pilih bagaimana alat cepat terbuka saat ditekan atau disentuh.", - "settings-info-app-remember-files": "Buka ulang berkas yang dibuka terakhir kali.", - "settings-info-app-remember-folders": "Buka ulang folder dari sesi sebelumnya.", - "settings-info-app-retry-remote-fs": "Ulangi lagi operasi berkas jarak jauh setelah transfer gagal.", + "settings-info-app-open-file-list-position": "Pilih di mana daftar berkas aktif muncul.", + "settings-info-app-quick-tools-settings": "Urutkan ulang dan sesuaikan pintasan alat cepat.", + "settings-info-app-quick-tools-trigger-mode": "Pilih cara alat cepat terbuka saat ditekan atau disentuh.", + "settings-info-app-remember-files": "Buka kembali berkas yang terakhir dibuka.", + "settings-info-app-remember-folders": "Buka kembali folder dari sesi sebelumnya.", + "settings-info-app-retry-remote-fs": "Ulangi operasi berkas jarak jauh setelah transfer gagal.", "settings-info-app-side-buttons": "Tampilkan tombol aksi ekstra di samping editor.", "settings-info-app-sponsor-sidebar": "Tampilkan entri sponsor di bar samping.", - "settings-info-app-touch-move-threshold": "Pergerakan minimum sebelum penyeretan sentuh terdeteksi.", - "settings-info-app-vibrate-on-tap": "Aktifkan umpan balik getar untuk tekan dan kendali.", + "settings-info-app-touch-move-threshold": "Pergerakan minimum sebelum gestur seret sentuh terdeteksi.", + "settings-info-app-vibrate-on-tap": "Aktifkan umpan balik getar untuk ketukan dan kontrol.", "settings-info-editor-autosave": "Simpan perubahan secara otomatis setelah jeda.", - "settings-info-editor-color-preview": "Pratinjau nilai warna langsung di dalam editor.", - "settings-info-editor-fade-fold-widgets": "Redupkan penanda lipatan hingga dibutuhkan.", + "settings-info-editor-color-preview": "Pratinjau nilai warna secara langsung di dalam editor.", + "settings-info-editor-fade-fold-widgets": "Redupkan penanda lipatan hingga diperlukan.", "settings-info-editor-font-family": "Pilih tipe font yang digunakan di dalam editor.", "settings-info-editor-font-size": "Atur ukuran teks di editor.", - "settings-info-editor-format-on-save": "Jalankan pemformat ketika sebuah berkas tersimpan.", - "settings-info-editor-hard-wrap": "Masukkan pemotong baris asli daripada hanya membungkusnya secara visual.", - "settings-info-editor-indent-guides": "Tampilkan baris panduan indentasi.", - "settings-info-editor-line-height": "Atur jarak vertikal diantara baris.", + "settings-info-editor-format-on-save": "Jalankan pemformat saat berkas disimpan.", + "settings-info-editor-hard-wrap": "Sisipkan pemotong baris asli daripada hanya membungkusnya secara visual.", + "settings-info-editor-indent-guides": "Tampilkan garis panduan indentasi.", + "settings-info-editor-line-height": "Atur jarak vertikal antarbaris.", "settings-info-editor-line-numbers": "Tampilkan nomor baris di dalam gutter.", "settings-info-editor-lint-gutter": "Tampilkan alat diagnostik dan penanda lint di gutter.", "settings-info-editor-live-autocomplete": "Tampilkan saran ketika Anda mengetik.", - "settings-info-editor-rainbow-brackets": "Warna menyamakan kurung dari kedalaman bersarang.", + "settings-info-editor-rainbow-brackets": "Warnai tanda kurung berdasarkan kedalaman bersarang.", "settings-info-editor-relative-line-numbers": "Tampilkan jarak dari baris saat ini.", - "settings-info-editor-rtl-text": "Ganti perilaku kanan-ke-kiri setiap baris.", - "settings-info-editor-scroll-settings": "Atur ukuran bar gulir, kecepatan, dan perilaku gestur.", - "settings-info-editor-shift-click-selection": "Perluas pemilihan dengan Shift + tekan atau klik.", - "settings-info-editor-show-spaces": "Tampilkan penanda spasi dan jeda baris yang terlihat.", - "settings-info-editor-soft-tab": "Masukkan spasi daripada karakter tab.", - "settings-info-editor-tab-size": "Atur seberapa banyak spasi setiap langkah tab digunakan.", + "settings-info-editor-rtl-text": "Ganti perilaku kanan-ke-kiri per baris.", + "settings-info-editor-scroll-settings": "Atur ukuran bilah gulir, kecepatan, dan perilaku gestur.", + "settings-info-editor-shift-click-selection": "Perluas pemilihan dengan Shift + ketuk atau klik.", + "settings-info-editor-show-spaces": "Tampilkan penanda spasi dan pemotong baris yang terlihat.", + "settings-info-editor-soft-tab": "Sisipkan spasi sebagai pengganti karakter tab.", + "settings-info-editor-tab-size": "Atur jumlah spasi yang digunakan setiap langkah tab.", "settings-info-editor-teardrop-size": "Atur ukuran penangan kursor untuk pengeditan sentuh.", "settings-info-editor-text-wrap": "Bungkus baris panjang di dalam editor.", - "settings-info-lsp-add-custom-server": "Daftarkan server bahasa kustom dengan perintah pasang, perbarui, dan luncur.", - "settings-info-lsp-edit-init-options": "Edit opsi inisiasi sebagai JSON.", + "settings-info-lsp-add-custom-server": "Daftarkan server bahasa kustom dengan perintah pasang, perbarui, dan luncurkan.", + "settings-info-lsp-edit-init-options": "Edit opsi inisialisasi sebagai JSON.", "settings-info-lsp-install-server": "Pasang atau perbaiki server bahasa ini.", "settings-info-lsp-server-enabled": "Aktifkan atau nonaktifkan server bahasa ini.", - "settings-info-lsp-startup-timeout": "Atur seberapa lama Acode menunggu untuk server memulai.", + "settings-info-lsp-startup-timeout": "Atur durasi tunggu Acode untuk server mulai.", "settings-info-lsp-uninstall-server": "Hapus paket terpasang atau biner dari server ini.", - "settings-info-lsp-update-server": "Perbarui server bahasa ini jika alur pembaruan tersedia.", - "settings-info-lsp-view-init-options": "Lihat opsi inisiasi efektif sebagai JSON.", + "settings-info-lsp-update-server": "Perbarui server bahasa ini jika jalur pembaruan tersedia.", + "settings-info-lsp-view-init-options": "Lihat opsi inisialisasi efektif sebagai JSON.", "settings-info-main-ad-rewards": "Tonton iklan untuk membuka akses bebas iklan sementara.", "settings-info-main-app-settings": "Bahasa, perilaku aplikasi, dan alat akses cepat.", - "settings-info-main-backup-restore": "Ekspor pengaturan ke pencadangan atau atur ulang mereka nanti.", - "settings-info-main-changelog": "Lihat perbaruan saat ini dan catatan rilis.", - "settings-info-main-edit-settings": "Edit berkas mentah settings.json secara langsung.", + "settings-info-main-backup-restore": "Ekspor pengaturan ke cadangan atau pulihkan nanti.", + "settings-info-main-changelog": "Lihat pembaruan saat ini dan catatan rilis.", + "settings-info-main-edit-settings": "Edit berkas settings.json secara langsung.", "settings-info-main-editor-settings": "Font, tab, saran, dan tampilan editor.", "settings-info-main-formatter": "Pilih pemformat untuk setiap bahasa yang didukung.", "settings-info-main-lsp-settings": "Konfigurasi server bahasa dan kecerdasan editor.", @@ -697,76 +697,76 @@ "settings-info-main-rateapp": "Nilai Acode di Google Play.", "settings-info-main-remove-ads": "Buka akses permanen bebas iklan.", "settings-info-main-reset": "Atur ulang Acode ke konfigurasi bawaannya.", - "settings-info-main-sponsors": "Mendukung pengembangan Acode yang berkelanjutan.", + "settings-info-main-sponsors": "Dukung pengembangan Acode secara berkelanjutan.", "settings-info-main-terminal-settings": "Tema Terminal, font, kursor, dan perilaku sesi.", "settings-info-main-theme": "Tema aplikasi, kontras, dan warna kustom.", "settings-info-preview-disable-cache": "Selalu muat ulang konten di dalam peramban-dalam-aplikasi.", "settings-info-preview-host": "Nama host yang digunakan ketika membuka URL pratinjau.", - "settings-info-preview-mode": "Pilih dimana pratinjau dibuka ketika Anda meluncurkannya.", + "settings-info-preview-mode": "Pilih di mana pratinjau dibuka saat Anda meluncurkannya.", "settings-info-preview-preview-port": "Port yang digunakan oleh server pratinjau langsung.", "settings-info-preview-server-port": "Port yang digunakan oleh server internal aplikasi.", "settings-info-preview-show-console-toggler": "Tampilkan tombol konsol di dalam pratinjau.", "settings-info-preview-use-current-file": "Utamakan berkas saat ini ketika memulai pratinjau.", - "settings-info-terminal-convert-eol": "Konversikan akhiran baris saat menempelkan atau menampilkan output terminal.", + "settings-info-terminal-convert-eol": "Konversikan akhir baris saat menempel atau menampilkan keluaran terminal.", "settings-note-formatter-settings": "Tetapkan pemformat untuk setiap bahasa. Pasang plugin pemformat untuk membuka lebih banyak opsi.", - "settings-note-lsp-settings": "Server bahasa menambahkan penyelesaian otomatis, diagnostik, detail melayang, dan sebagainya. Mereka bekerja lebih baik dengan folder yang bisa diakses langsung oleh terminal bawaan Acode, seperti folder terminal/publik. Lokasi SAF, eksternal, dan jarak jauh dilewati secara default karena mereka mungkin menggunakan jalur yang di-cache atau virtual; aktifkan opsi kompatibilitas hanya jika Anda ingin mencobanya.", + "settings-note-lsp-settings": "Server bahasa menambahkan penyelesaian otomatis, diagnostik, informasi saat kursor diarahkan, dan sebagainya. Server bekerja lebih baik dengan folder yang dapat diakses langsung oleh terminal bawaan Acode, seperti folder terminal/publik. Lokasi SAF, eksternal, dan jarak jauh dilewati secara bawaan karena mungkin menggunakan jalur yang di-cache atau virtual; aktifkan opsi kompatibilitas hanya jika Anda ingin mencobanya.", "search result label singular": "hasil", "search result label plural": "hasil", "pin tab": "Sematkan tab", "unpin tab": "Lepas sematan tab", "pinned tab": "Tab yang tersematkan", - "unpin tab before closing": "Lepas sematan tab sebelum ditutup.", + "unpin tab before closing": "Lepas sematan tab sebelum menutupnya.", "app font": "Font Aplikasi", "settings-info-app-font-family": "Pilih font yang digunakan di seluruh antarmuka aplikasi.", "lsp-transport-method-stdio": "STDIO (luncurkan perintah biner)", "lsp-transport-method-websocket": "WebSocket (hubungkan ke sebuah URL ws/wss)", "lsp-websocket-url": "URL WebSocket", - "lsp-websocket-server-managed-externally": "Server ini dikelola secara eksternal lewat WebSocket.", - "lsp-error-websocket-url-invalid": "URL WebSocket harus berawalan ws:// atau wss://", - "lsp-error-websocket-url-required": "URL WebSocket diperlukan", + "lsp-websocket-server-managed-externally": "Server ini dikelola secara eksternal melalui WebSocket.", + "lsp-error-websocket-url-invalid": "URL WebSocket harus diawali dengan ws:// atau wss://.", + "lsp-error-websocket-url-required": "URL WebSocket diperlukan.", "lsp-remove-custom-server": "Hapus server kustom", "lsp-remove-custom-server-confirm": "Hapus server bahasa kustom {server}?", "lsp-custom-server-removed": "Server kustom dihapus", "settings-info-lsp-remove-custom-server": "Hapus server bahasa kustom ini dari Acode.", - "unsaved selected tabs warning": "Beberapa tab terpilih tidak disimpan. Pilih apa yang harus dilakukan.", + "unsaved selected tabs warning": "Beberapa tab yang dipilih belum disimpan. Pilih tindakan yang akan dilakukan.", "save selected tabs": "Simpan tab terpilih", "close selected tabs": "Tutup tab terpilih", - "save selected tabs warning": "Apakah Anda yakin ingin menyimpan dan menutup tab terpilih?", - "close selected tabs warning": "Apakah Anda yakin ingin menutup tab terpilih? Anda akan kehilangan perubahan yang belum disimpan dan aksi ini tidak dapat dibatalkan.", + "save selected tabs warning": "Apakah Anda yakin ingin menyimpan dan menutup tab yang dipilih?", + "close selected tabs warning": "Apakah Anda yakin ingin menutup tab yang dipilih? Anda akan kehilangan perubahan yang belum disimpan dan tindakan ini tidak dapat diurungkan.", "close tabs to right": "Tutup Kanan", "close tabs to left": "Tutup Kiri", "close other tabs": "Tutup Lainnya", "auto close tags": "Penutup tag otomatis", - "settings-info-editor-auto-close-tags": "Menyisipkan tag penutup di berkas HTML, XML, Vue, Angular, dan templat PHP secara otomatis.", + "settings-info-editor-auto-close-tags": "Sisipkan tag penutup secara otomatis di berkas HTML, XML, Vue, Angular, dan templat PHP.", "ui zoom": "Pembesaran UI", "settings-info-app-ui-zoom": "Skalakan teks di seluruh antarmuka Acode.", "show share button": "Tampilkan tombol bagikan", "settings-info-editor-show-share-button": "Tampilkan tombol bagikan di menu pemilihan.", "plugin-not-supported": "Plugin tidak didukung", "plugin-not-supported-info": "Plugin dibuat untuk versi lama dari Acode.", - "login-to-view": "Mohon login untuk melihat ini...", + "login-to-view": "Mohon masuk untuk melihat ini...", "iap-plugin-purchase-warning": "Plugin yang dibeli tidak disinkronkan ke akun Acode Anda. Gunakan akun Google yang sama di Play Store untuk memulihkan pembelian Anda.", "iap-pro-purchase-warning": "Pembelian ini tidak akan disinkronkan ke akun Acode Anda. Gunakan akun Google yang sama di Play Store untuk memulihkan pembelian Anda.", "confirm-login": "Anda belum masuk ke Acode, masuk sekarang?", "local word completion": "Penyelesaian kata lokal", "language package completion": "Penyelesaian paket bahasa", "settings-info-editor-local-word-completion": "Sarankan kata dari berkas saat ini.", - "settings-info-editor-language-completion": "Sarankan kata kunci, snippet, dan penyelesaian lainnya dari paket bahasa CodeMirror.", + "settings-info-editor-language-completion": "Sarankan kata kunci, cuplikan, dan penyelesaian lainnya dari paket bahasa CodeMirror.", "terminal:failsafe": "Mode FailSafe", - "terminal:failsafe-info": "Mulai terminal dengan shell sistem", + "terminal:failsafe-info": "Mulai terminal dengan shell sistem.", "auto rename tags": "Ubah nama tag otomatis", - "settings-info-editor-auto-rename-tags": "Ubah nama tag pembuka atau penutup yang sama ketika mengedit tag yang mirip HTML.", + "settings-info-editor-auto-rename-tags": "Ubah nama tag pembuka atau penutup yang berpasangan saat mengedit tag mirip HTML.", "copying items": "Menyalin {count} item...", - "cannot paste folder into itself": "Tidak bisa menempelkan folder ke dalam dirinya sendiri", + "cannot paste folder into itself": "Tidak dapat menempelkan folder ke dalam dirinya sendiri.", "folder already exists": "Folder sudah ada", "file already exists force named": "'{name}' sudah ada. Timpa?", "lsp-allow-non-terminal-workspace": "Jalankan LSP di folder eksternal", - "settings-info-lsp-allow-non-terminal-workspace": "Izinkan server bahasa untuk lokasi SAF, eksternal, dan jarak jauh. LSP berjalan di terminal bawaan Acode, yang tidak dapat mengakses lokasi tersebut, jadi fitur-fitur mungkin tidak dapat bekerja dengan benar. Karena itu akan terhubung ke jalur virtual atau lokasi cache.", + "settings-info-lsp-allow-non-terminal-workspace": "Izinkan server bahasa untuk lokasi SAF, eksternal, dan jarak jauh. LSP berjalan di terminal bawaan Acode yang tidak dapat mengakses lokasi tersebut, sehingga beberapa fitur mungkin tidak dapat bekerja dengan benar karena akan terhubung ke jalur virtual atau lokasi cache.", "don't ask again": "Jangan tanyakan lagi", "scrollbar height": "Tinggi bilah gulir", "full": "Penuh", "scroll past end": "Gulir melewati akhir", - "settings-info-scroll-past-end": "Menambahkan spasi kosong ekstra di bawah editor, memungkinkan Anda untuk gulir baris terakhir ke atas.", + "settings-info-scroll-past-end": "Menambahkan ruang kosong tambahan di bawah editor, sehingga Anda dapat menggulirkan baris terakhir ke atas.", "compact": "Ringkas", "off": "Mati", "quick tools height": "Tinggi alat cepat", @@ -775,9 +775,9 @@ "recommend extensions": "Rekomendasikan ekstensi", "settings-info-editor-recommend-extensions": "Sarankan plugin saat file dibuka sebagai teks biasa karena mode bahasa tidak tersedia.", "extension recommendation title": "Ekstensi yang tersedia untuk {extension}", - "extension recommendation message": "Tidak ada mode sintaksis yang diinstal untuk {extension}. Cari plugin untuk \"{keyword}\".", + "extension recommendation message": "Tidak ada mode sintaksis yang terpasang untuk {extension}. Cari plugin untuk \"{keyword}\".", "extension request title": "Ekstensi tidak ditemukan untuk {extension}", - "extension request message": "Minta plugin agar Acode dapat menyoroti jenis file ini.", + "extension request message": "Minta plugin agar Acode dapat menyoroti jenis berkas ini.", "search plugins": "Cari plugin", "request plugin": "Minta plugin", "terminal:block": "Blok", @@ -833,7 +833,7 @@ "info-terminal-show-scrollbar": "Tampilkan bilah gulir xterm di samping terminal.", "terminal:show scrollbar": "Tampilkan Bilah Gulir", "apply exclusions when copying": "Terapkan pengecualian saat menyalin", - "settings-info-app-use-file-operation-exclusions": "Lewati file dan folder yang cocok dengan pola pengecualian selama operasi salin dan tempel.", + "settings-info-app-use-file-operation-exclusions": "Lewati berkas dan folder yang cocok dengan pola pengecualian selama operasi salin dan tempel.", "horizontal scroll margin": "Margin gulir horizontal", - "settings-info-horizontal-scroll-margin": "Menambahkan ruang kosong setelah baris terpanjang saat pembungkusan kata (word wrap) nonaktif. Masukkan nilai piksel utuh non-negatif apa pun." + "settings-info-horizontal-scroll-margin": "Menambahkan ruang kosong setelah baris terpanjang saat pembungkus kata (word wrap) dinonaktifkan. Masukkan nilai piksel bilangan bulat non-negatif." } From 4c5b3cb8c4cc41feed1bc5ecfbe38eefc4ed63eb Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Wed, 26 Aug 2026 21:18:34 +0530 Subject: [PATCH 11/38] update deps --- bun.lock | 1284 ++++++--------------------------------------- package-lock.json | 1049 +++++++++++++++++++----------------- package.json | 54 +- 3 files changed, 750 insertions(+), 1637 deletions(-) diff --git a/bun.lock b/bun.lock index a52d31d962..308c5a1031 100644 --- a/bun.lock +++ b/bun.lock @@ -18,7 +18,7 @@ "@codemirror/lang-json": "^6.0.2", "@codemirror/lang-less": "^6.0.2", "@codemirror/lang-liquid": "^6.3.2", - "@codemirror/lang-markdown": "^6.5.0", + "@codemirror/lang-markdown": "^6.5.2", "@codemirror/lang-php": "^6.0.2", "@codemirror/lang-python": "^6.2.1", "@codemirror/lang-rust": "^6.0.2", @@ -51,57 +51,57 @@ "@xterm/addon-web-links": "^0.12.0", "@xterm/addon-webgl": "^0.19.0", "@xterm/xterm": "^6.0.0", - "acorn": "^8.16.0", + "acorn": "^8.18.0", "autosize": "^6.0.1", "codemirror": "^6.0.2", "cordova": "13.0.0", - "core-js": "^3.49.0", - "dayjs": "^1.11.20", - "dompurify": "^3.4.11", + "core-js": "^3.50.0", + "dayjs": "^1.11.23", + "dompurify": "^3.4.14", "escape-string-regexp": "^5.0.0", "esprima": "^4.0.1", - "filesize": "^11.0.17", + "filesize": "^11.0.22", "html-tag-js": "^2.4.16", "jszip": "^3.10.1", - "katex": "^0.16.45", - "markdown-it": "^14.2.0", - "markdown-it-anchor": "^9.2.0", - "markdown-it-emoji": "^3.0.0", + "katex": "^0.16.47", + "markdown-it": "^14.3.0", + "markdown-it-anchor": "^9.2.1", + "markdown-it-emoji": "^3.1.0", "markdown-it-footnote": "^4.0.0", "markdown-it-github-alerts": "^1.0.1", "markdown-it-task-lists": "^2.1.1", "markdown-it-texmath": "^1.0.0", "mermaid": "^11.14.0", "mime-types": "^3.0.2", - "motion": "^12.42.0", + "motion": "^12.43.0", "mustache": "^4.2.0", - "picomatch": "^4.0.4", + "picomatch": "^4.0.7", "url-parse": "^1.5.10", "vanilla-picker": "^2.12.3", "vscode-css-languageservice": "6.3.10", "vscode-html-languageservice": "5.6.2", "vscode-json-languageservice": "5.7.2", "vscode-languageserver-textdocument": "1.0.12", - "yargs": "^18.0.0", + "yargs": "^18.1.0", }, "devDependencies": { "@babel/core": "^8.0.1", - "@babel/generator": "^7.29.1", - "@babel/parser": "^7.29.3", + "@babel/generator": "^7.29.8", + "@babel/parser": "^7.29.8", "@babel/plugin-transform-runtime": "^8.0.1", - "@babel/preset-env": "^8.0.1", + "@babel/preset-env": "^8.0.2", "@babel/preset-typescript": "^8.0.1", - "@babel/runtime": "^7.29.2", - "@babel/runtime-corejs3": "^7.29.2", - "@babel/traverse": "^7.29.0", + "@babel/runtime": "^7.29.7", + "@babel/runtime-corejs3": "^7.29.7", + "@babel/traverse": "^7.29.8", "@biomejs/biome": "2.4.11", "@lezer/generator": "^1.8.0", - "@rspack/cli": "^2.0.0", - "@rspack/core": "^2.0.0", + "@rspack/cli": "^2.2.0", + "@rspack/core": "^2.2.0", "@types/ace": "^0.0.52", "@types/cordova": "^11.0.3", "@types/url-parse": "^1.4.11", - "autoprefixer": "^10.5.0", + "autoprefixer": "^10.5.4", "babel-loader": "^10.1.1", "chokidar": "^4.0.3", "com.foxdebug.acode.rk.auth": "file:src/plugins/auth", @@ -126,22 +126,22 @@ "cordova-plugin-system": "file:src/plugins/system", "cordova-plugin-websocket": "file:src/plugins/websocket", "css-loader": "^7.1.4", - "happy-dom": "^20.11.1", + "happy-dom": "^20.11.6", "mini-css-extract-plugin": "^2.10.2", "path-browserify": "^1.0.1", "postcss-loader": "^8.2.1", "prettier": "^3.8.3", "prettier-plugin-java": "^2.8.1", "raw-loader": "^4.0.2", - "sass": "^1.99.0", + "sass": "^1.103.1", "sass-loader": "^16.0.8", "style-loader": "^4.0.0", "terminal": "^0.1.4", - "ts-loader": "^9.5.7", + "ts-loader": "^9.6.2", "typescript": "^5.9.3", - "vitest": "^4.1.10", + "vitest": "^4.1.11", "vscode-languageserver-types": "^3.17.5", - "ws": "^8.21.0", + "ws": "^8.21.3", }, }, }, @@ -164,7 +164,7 @@ "@babel/core": ["@babel/core@8.0.1", "", { "dependencies": { "@babel/code-frame": "^8.0.0", "@babel/generator": "^8.0.0", "@babel/helper-compilation-targets": "^8.0.0", "@babel/helpers": "^8.0.0", "@babel/parser": "^8.0.0", "@babel/template": "^8.0.0", "@babel/traverse": "^8.0.0", "@babel/types": "^8.0.0", "@types/gensync": "^1.0.5", "convert-source-map": "^2.0.0", "empathic": "^2.0.1", "gensync": "^1.0.0-beta.2", "import-meta-resolve": "^4.2.0", "json5": "^2.2.3", "obug": "^2.1.1", "semver": "^7.7.3" } }, "sha512-5FgxM4dLQpMJHSiVATk8foW263dVHQHBVpXYiimNECVWG01f4nFyEbQixeT6Mwvg7TayREJ2gpKl3o2RoMdnqw=="], - "@babel/generator": ["@babel/generator@7.29.1", "", { "dependencies": { "@babel/parser": "^7.29.0", "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw=="], + "@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], "@babel/helper-annotate-as-pure": ["@babel/helper-annotate-as-pure@8.0.0", "", { "dependencies": { "@babel/types": "^8.0.0" } }, "sha512-NSpMkMsvvZqzThJ0p1B02cbtA2ObEyfBvq950bmNkyxsxvcxwhvvCB036rKhlEnuBBo30bOrk13u3FzlKSoRrw=="], @@ -176,7 +176,7 @@ "@babel/helper-define-polyfill-provider": ["@babel/helper-define-polyfill-provider@1.0.0", "", { "dependencies": { "@babel/helper-compilation-targets": "^8.0.0", "@babel/helper-plugin-utils": "^8.0.0", "lodash.debounce": "^4.0.8" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0" } }, "sha512-9jzVaTeZyXRDKTgUnNzcPQMO8y0ga3o+Z4fKjNet9Fcx7slgKa83qRbz0EwROSd6qO6CoEe/HQszqSPKb5lhkw=="], - "@babel/helper-globals": ["@babel/helper-globals@7.28.0", "", {}, "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw=="], + "@babel/helper-globals": ["@babel/helper-globals@7.29.7", "", {}, "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA=="], "@babel/helper-member-expression-to-functions": ["@babel/helper-member-expression-to-functions@8.0.0", "", { "dependencies": { "@babel/traverse": "^8.0.0", "@babel/types": "^8.0.0" } }, "sha512-xkXrMbtk87Gk7+oKBVmBc6EORg/Qwx++AHESldmHkpvG8wgccdhJJFwrzqlF382Fk8wfXhJHWE/g/43QvEGNPQ=="], @@ -204,7 +204,7 @@ "@babel/helpers": ["@babel/helpers@8.0.0", "", { "dependencies": { "@babel/template": "^8.0.0", "@babel/types": "^8.0.0" } }, "sha512-wfbi91pM3py96oIiJEz7qIpyXDytgr9zQC1HEWwlGNVRAEmItuU/0a41ZUKu1sJGyhhOIpc4t5vk4PYzt8wpsg=="], - "@babel/parser": ["@babel/parser@7.29.3", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA=="], + "@babel/parser": ["@babel/parser@7.29.8", "", { "dependencies": { "@babel/types": "^7.29.8" }, "bin": "./bin/babel-parser.js" }, "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA=="], "@babel/plugin-bugfix-firefox-class-in-computed-class-key": ["@babel/plugin-bugfix-firefox-class-in-computed-class-key@8.0.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^8.0.1" }, "peerDependencies": { "@babel/core": "^8.0.0" } }, "sha512-Ytgjjne4RnG3Oig7ik+NfY4ebRY30BPptVkkyu1f72eINJXRM3/bkU++tIc5aPvyLmo4KH20avq0xJ2o+9aEnw=="], @@ -332,13 +332,13 @@ "@babel/preset-typescript": ["@babel/preset-typescript@8.0.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^8.0.1", "@babel/helper-validator-option": "^8.0.0", "@babel/plugin-transform-modules-commonjs": "^8.0.1", "@babel/plugin-transform-typescript": "^8.0.1" }, "peerDependencies": { "@babel/core": "^8.0.0" } }, "sha512-qrPhQIN1NLrPmzgazF9XKQqXrOcp/WJly+K+6ReFonn24FZqRJO7clxOJo6Ni75L+2vAqI3cHVU2OJLBxoPp5A=="], - "@babel/runtime": ["@babel/runtime@7.29.2", "", {}, "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g=="], + "@babel/runtime": ["@babel/runtime@7.29.7", "", {}, "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw=="], - "@babel/runtime-corejs3": ["@babel/runtime-corejs3@7.29.2", "", { "dependencies": { "core-js-pure": "^3.48.0" } }, "sha512-Lc94FOD5+0aXhdb0Tdg3RUtqT6yWbI/BbFWvlaSJ3gAb9Ks+99nHRDKADVqC37er4eCB0fHyWT+y+K3QOvJKbw=="], + "@babel/runtime-corejs3": ["@babel/runtime-corejs3@7.29.7", "", { "dependencies": { "core-js-pure": "^3.48.0" } }, "sha512-ppj9ouYku+RX0ljtgZd+KMO5mkM2bCqg8H2PYAFWnLsHEIKIdRojqbJ2i3eVHrisuxy7nOFCmngTDdWtUCdXUQ=="], "@babel/template": ["@babel/template@8.0.0", "", { "dependencies": { "@babel/code-frame": "^8.0.0", "@babel/parser": "^8.0.0", "@babel/types": "^8.0.0" } }, "sha512-eAD0QW/AlbamBbw0FeGiwasbCVPq5ncW0HNVyLP3B9czqLyh4gvw+5JTSNt6le9+ziAU7mqDZsKTHf3jTb4chQ=="], - "@babel/traverse": ["@babel/traverse@7.29.0", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/types": "^7.29.0", "debug": "^4.3.1" } }, "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA=="], + "@babel/traverse": ["@babel/traverse@7.29.8", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.8", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg=="], "@babel/types": ["@babel/types@8.0.0", "", { "dependencies": { "@babel/helper-string-parser": "^8.0.0", "@babel/helper-validator-identifier": "^8.0.0" } }, "sha512-K8ponJDxBwDHigkeFqaqT5wLGl4bTlwMafR8k7b5CPxr6Ww+UG9ls8Yx6Tcpboxu97eeGVEEyKcHmEyOwN1vSw=="], @@ -398,7 +398,7 @@ "@codemirror/lang-liquid": ["@codemirror/lang-liquid@6.3.2", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/lang-html": "^6.0.0", "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", "@lezer/common": "^1.0.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.3.1" } }, "sha512-6PDVU3ZnfeYyz1at1E/ttorErZvZFXXt1OPhtfe1EZJ2V2iDFa0CwPqPgG5F7NXN0yONGoBogKmFAafKTqlwIw=="], - "@codemirror/lang-markdown": ["@codemirror/lang-markdown@6.5.0", "", { "dependencies": { "@codemirror/autocomplete": "^6.7.1", "@codemirror/lang-html": "^6.0.0", "@codemirror/language": "^6.3.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", "@lezer/common": "^1.2.1", "@lezer/markdown": "^1.0.0" } }, "sha512-0K40bZ35jpHya6FriukbgaleaqzBLZfOh7HuzqbMxBXkbYMJDxfF39c23xOgxFezR+3G+tR2/Mup+Xk865OMvw=="], + "@codemirror/lang-markdown": ["@codemirror/lang-markdown@6.5.2", "", { "dependencies": { "@codemirror/autocomplete": "^6.7.1", "@codemirror/lang-html": "^6.0.0", "@codemirror/language": "^6.3.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", "@lezer/common": "^1.2.1", "@lezer/markdown": "^1.0.0" } }, "sha512-AwBOdkWYuA//WcM0xO5PfHPUcmz/O2i5o0Nsg1U69SII/loCJlFI1Romd9xp2HYb1kYJRGZotyqRghuHH5n8Kw=="], "@codemirror/lang-php": ["@codemirror/lang-php@6.0.2", "", { "dependencies": { "@codemirror/lang-html": "^6.0.0", "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", "@lezer/common": "^1.0.0", "@lezer/php": "^1.0.0" } }, "sha512-ZKy2v1n8Fc8oEXj0Th0PUMXzQJ0AIR6TaZU+PbDHExFwdu+guzOA4jmCHS1Nz4vbFezwD7LyBdDnddSJeScMCA=="], @@ -426,7 +426,7 @@ "@codemirror/lint": ["@codemirror/lint@6.9.7", "", { "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.42.0", "crelt": "^1.0.5" } }, "sha512-28/+iWLYxKxsvGYhSYL7zaCZqLz5+FFFDq9tVsvGv9kv8RY4fFAchJ5WX9M3YrrRlTIsECjsXPqeNgnSmNP2dg=="], - "@codemirror/lsp-client": ["@codemirror/lsp-client@github:Acode-Foundation/codemirror-lsp-client#db6930c", { "dependencies": { "@codemirror/autocomplete": "^6.20.0", "@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" } }, "Acode-Foundation-codemirror-lsp-client-db6930c"], + "@codemirror/lsp-client": ["@codemirror/lsp-client@github:Acode-Foundation/codemirror-lsp-client#db6930c", { "dependencies": { "@codemirror/autocomplete": "^6.20.0", "@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" } }, "Acode-Foundation-codemirror-lsp-client-db6930c", "sha512-yENf3NqsXGERWcvUL98FziXbUgkB1R4jU2kTQGYxwcZ6HwTP8+uwebs/j+HDRD7VbxRyemYJClvMNU8n0p8UPg=="], "@codemirror/search": ["@codemirror/search@6.7.1", "", { "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.37.0", "crelt": "^1.0.5" } }, "sha512-uMe5UO6PamJtSHrXhhHOzSX3ReWtiJrva6GnPMwSOrZtiExb5X5eExhr2OUZQVvdxPsKpY3Ro2mFbQadpPWmHA=="], @@ -448,16 +448,14 @@ "@emmetio/scanner": ["@emmetio/scanner@1.0.4", "", {}, "sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA=="], - "@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="], + "@emnapi/core": ["@emnapi/core@1.11.3", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.3", "tslib": "^2.4.0" } }, "sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg=="], - "@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="], + "@emnapi/runtime": ["@emnapi/runtime@1.11.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA=="], - "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="], + "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g=="], "@gar/promise-retry": ["@gar/promise-retry@1.0.3", "", {}, "sha512-GmzA9ckNokPypTg10pgpeHNQe7ph+iIKKmhKu3Ob9ANkswreCx7R3cKmY781K8QK3AqVL3xVh9A42JvIAbkkSA=="], - "@gar/promisify": ["@gar/promisify@1.1.3", "", {}, "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw=="], - "@iconify/types": ["@iconify/types@2.0.0", "", {}, "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="], "@iconify/utils": ["@iconify/utils@3.1.0", "", { "dependencies": { "@antfu/install-pkg": "^1.1.0", "@iconify/types": "^2.0.0", "mlly": "^1.8.0" } }, "sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw=="], @@ -514,9 +512,9 @@ "@marijn/find-cluster-break": ["@marijn/find-cluster-break@1.0.2", "", {}, "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g=="], - "@mermaid-js/parser": ["@mermaid-js/parser@1.1.1", "", { "dependencies": { "@chevrotain/types": "~11.1.1" } }, "sha512-VuHdsYMK1bT6X2JbcAaWAhugTRvRBRyuZgd+c22swUeI9g/ntaxF7CY7dYarhZovofCbUNO0G7JesfmNtjYOCw=="], + "@mermaid-js/parser": ["@mermaid-js/parser@1.2.1", "", { "dependencies": { "@chevrotain/types": "~11.1.2" } }, "sha512-n12NohV3mrUyUL2o93IgG/ifeW9FTyeJn3zDxkhwa8MJ9Fxg3HQMlA3RiGmD/3UnJvheztkjjQAjA2T4LmUcpw=="], - "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.4", "", { "dependencies": { "@tybys/wasm-util": "^0.10.1" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" } }, "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow=="], + "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.6", "", { "dependencies": { "@tybys/wasm-util": "^0.10.3" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" } }, "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg=="], "@netflix/nerror": ["@netflix/nerror@1.1.3", "", { "dependencies": { "assert-plus": "^1.0.0", "extsprintf": "^1.4.0", "lodash": "^4.17.15" } }, "sha512-b+MGNyP9/LXkapreJzNUzcvuzZslj/RGgdVVJ16P2wSlYatfLycPObImqVJSmNAdyeShvNeM/pl3sVZsObFueg=="], @@ -540,8 +538,6 @@ "@npmcli/metavuln-calculator": ["@npmcli/metavuln-calculator@9.0.3", "", { "dependencies": { "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" } }, "sha512-94GLSYhLXF2t2LAC7pDwLaM4uCARzxShyAQKsirmlNcpidH89VA4/+K1LbJmRMgz5gy65E/QBBWQdUvGLe2Frg=="], - "@npmcli/move-file": ["@npmcli/move-file@1.1.2", "", { "dependencies": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" } }, "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg=="], - "@npmcli/name-from-folder": ["@npmcli/name-from-folder@4.0.0", "", {}, "sha512-qfrhVlOSqmKM8i6rkNdZzABj8MKEITGFAY+4teqBziksCQAOLutiAxM1wY2BKEd8KjUSpWmWCYxvXr0y4VTlPg=="], "@npmcli/node-gyp": ["@npmcli/node-gyp@5.0.0", "", {}, "sha512-uuG5HZFXLfyFKqg8QypsmgLQW7smiRjVc45bqD/ofZZcR/uxEjgQU8qDPv0s9TEeMUiAAU/GC5bR6++UdTirIQ=="], @@ -618,31 +614,39 @@ "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.1", "", {}, "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw=="], - "@rspack/binding": ["@rspack/binding@2.0.2", "", { "optionalDependencies": { "@rspack/binding-darwin-arm64": "2.0.2", "@rspack/binding-darwin-x64": "2.0.2", "@rspack/binding-linux-arm64-gnu": "2.0.2", "@rspack/binding-linux-arm64-musl": "2.0.2", "@rspack/binding-linux-x64-gnu": "2.0.2", "@rspack/binding-linux-x64-musl": "2.0.2", "@rspack/binding-wasm32-wasi": "2.0.2", "@rspack/binding-win32-arm64-msvc": "2.0.2", "@rspack/binding-win32-ia32-msvc": "2.0.2", "@rspack/binding-win32-x64-msvc": "2.0.2" } }, "sha512-0kZPplW9GWx8mfC6DfsaRY3QBIYPuUs42JfmSM6aSb8tMHZAXQeLeMB8M+h8i4SeI+aFtCgO6UuYGtyWf7+L+A=="], + "@rspack/binding": ["@rspack/binding@2.2.0", "", { "optionalDependencies": { "@rspack/binding-darwin-arm64": "2.2.0", "@rspack/binding-darwin-x64": "2.2.0", "@rspack/binding-linux-arm64-gnu": "2.2.0", "@rspack/binding-linux-arm64-musl": "2.2.0", "@rspack/binding-linux-ppc64-gnu": "2.2.0", "@rspack/binding-linux-riscv64-gnu": "2.2.0", "@rspack/binding-linux-riscv64-musl": "2.2.0", "@rspack/binding-linux-s390x-gnu": "2.2.0", "@rspack/binding-linux-x64-gnu": "2.2.0", "@rspack/binding-linux-x64-musl": "2.2.0", "@rspack/binding-wasm32-wasi": "2.2.0", "@rspack/binding-win32-arm64-msvc": "2.2.0", "@rspack/binding-win32-ia32-msvc": "2.2.0", "@rspack/binding-win32-x64-msvc": "2.2.0" } }, "sha512-nxZzJqqB0EmEKp6qjzFNkBb/SgGt0k0DSENrLvAJgvVvrm3waVsubD0cfxtPlZY/rd5SzadzxWGEHRyFcds5nA=="], + + "@rspack/binding-darwin-arm64": ["@rspack/binding-darwin-arm64@2.2.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-KAVVT7hp3NBjtc/RY2UtOjzzc8i+s4pIhW1p52UV+Aev6ywQCu3dXwkHTonpPvJO3hqLXc4zIMH5l4HbMqBm4g=="], + + "@rspack/binding-darwin-x64": ["@rspack/binding-darwin-x64@2.2.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-rzyJCX99aFwl540trsVMNZOgK4+IFm2d5+YeP+RdNo9Uprxloz8vHz0J4dYtaq6MRiCAyM60dAwEa3wJMwqWAQ=="], - "@rspack/binding-darwin-arm64": ["@rspack/binding-darwin-arm64@2.0.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-0o7lbgBBsDlICWdjIH0q3e0BsSco4GRiImHWVfZSVEG+q2+ykZJvSvYCVhPM1Co375Z0S3VMPa/8SjcY1FHwlw=="], + "@rspack/binding-linux-arm64-gnu": ["@rspack/binding-linux-arm64-gnu@2.2.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-0t8QOiOMcBV7RvPSsTJ5DQ4QCK6FIyUZy77qbxnS6asGTOXPZZn7V5cL26IxEv/wuHdQ6tQOXheau1fi+gGyBQ=="], - "@rspack/binding-darwin-x64": ["@rspack/binding-darwin-x64@2.0.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-tOwxZpoPlTlRs/w6UyUinXJ4TYRVHMlR7+eQxO1R3muKpixvhXQjtvoaY16HuFyTVky5F0IfOoWr3x9FEsgdLg=="], + "@rspack/binding-linux-arm64-musl": ["@rspack/binding-linux-arm64-musl@2.2.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-BAvCukqcuHxUdE294ITCohvhVkEklW8RbkKkR36Uo0WyIiMPGrnvPjARPn0/4Q4xMAz7lUmC60sZrvJHlAOKMw=="], - "@rspack/binding-linux-arm64-gnu": ["@rspack/binding-linux-arm64-gnu@2.0.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-1ZD4YFhG1rmgqj+W8hfwHyKV8xDxGsc/3KgU0FwmiVEX7JfzhCkgBO/xlCG79kRKSrzuVzt4icO/G3cCKn0pag=="], + "@rspack/binding-linux-ppc64-gnu": ["@rspack/binding-linux-ppc64-gnu@2.2.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-nCHqZLv/E8nm2ccGkb00F5DQtXxzGy3W3X73ArA+N0+zXJUnzRcSRSwr7AE8pVgP/FYfX4yMFgUXy0g0YxYGRA=="], - "@rspack/binding-linux-arm64-musl": ["@rspack/binding-linux-arm64-musl@2.0.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-/PtTkM/DsDLjeuXTmeJeRfbjCDbcL9jvoVgZrgxYFZ28y2cdLvbChbW9uigOzs5dQEs1CIBQXMTTj7KhdBTuQg=="], + "@rspack/binding-linux-riscv64-gnu": ["@rspack/binding-linux-riscv64-gnu@2.2.0", "", { "os": "linux", "cpu": "none" }, "sha512-CA3WEqKFDI6FAZTnCho2n9pmdPWZYAW/S8mqgxd0cx2Jix43at3VyLxhCC7ED5A9WBSFn/AdHaIbVtgoQHVhWA=="], - "@rspack/binding-linux-x64-gnu": ["@rspack/binding-linux-x64-gnu@2.0.2", "", { "os": "linux", "cpu": "x64" }, "sha512-bBjsZxMHRaPo6X9SokApm6ucs+UhXtAJFyJJyuk2BH4XJsLeCU9Dz1vMwioeohFbJUUeTASVPm6/BL+RhSaunw=="], + "@rspack/binding-linux-riscv64-musl": ["@rspack/binding-linux-riscv64-musl@2.2.0", "", { "os": "linux", "cpu": "none" }, "sha512-kHB960oClkoPRPZ6sdkhRvqbdRIlbpIMYd/Tbxfmn3DWQahiCk1pkUFJbOtFq3EgESxZISV4THl442W2Y57HvQ=="], - "@rspack/binding-linux-x64-musl": ["@rspack/binding-linux-x64-musl@2.0.2", "", { "os": "linux", "cpu": "x64" }, "sha512-HjlpInqzabDNkhVsUJpsHPqa9QYVWBViJoyWNjzXCAW0vKMDvwaphyUvokSinX8FGTlZi/sr5UEaHJo6XtQ35g=="], + "@rspack/binding-linux-s390x-gnu": ["@rspack/binding-linux-s390x-gnu@2.2.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-lVBdiffVo1jq0P0jT36jNou2suLB4ueQI4aWUs+HM+h67YPBtVKWu/mo5Wh59+8nowgcZmYaFM5hdH69963I9w=="], - "@rspack/binding-wasm32-wasi": ["@rspack/binding-wasm32-wasi@2.0.2", "", { "dependencies": { "@emnapi/core": "1.10.0", "@emnapi/runtime": "1.10.0", "@napi-rs/wasm-runtime": "1.1.4" }, "cpu": "none" }, "sha512-YaRYNFLJRpkGfYjSWR7n9f+nQKtrlmrrffpAn/blc2geHcRvXoBc5SCs1idPtsLhj7H9qWWhs7ucjyHy4csWFg=="], + "@rspack/binding-linux-x64-gnu": ["@rspack/binding-linux-x64-gnu@2.2.0", "", { "os": "linux", "cpu": "x64" }, "sha512-M49UaWspE0YJ3268DsquD8idEQTfjBDMvO/I8qccV/Z5T+Q98FJ+kIs5liUaTWb48OIbDEK+8ZKx5QzLbfVN6g=="], - "@rspack/binding-win32-arm64-msvc": ["@rspack/binding-win32-arm64-msvc@2.0.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-d/3kTEKq+asLjRFPO96t+wfWiM7DLN76VQEPDD9bc1kdsZXlVJBuvyXfsgK8bbEvKplWXYcSsokhmEnuXrLOpg=="], + "@rspack/binding-linux-x64-musl": ["@rspack/binding-linux-x64-musl@2.2.0", "", { "os": "linux", "cpu": "x64" }, "sha512-YYbs0wmey+5blhEQDE4Dax3TwJtqfGwe2QBm3OLphlBHo/fcZVvimzKkMV0/pVrZTLy2z5ZAwNhGMY64bNr77w=="], - "@rspack/binding-win32-ia32-msvc": ["@rspack/binding-win32-ia32-msvc@2.0.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-161cWineq3RW+Jdm1FAfSpXeUtYWvhB3kAbm46vNT9h/YYz+spwsFMvveAZ1nsVSVL0IC5lDBGUte7yUAY8K2g=="], + "@rspack/binding-wasm32-wasi": ["@rspack/binding-wasm32-wasi@2.2.0", "", { "dependencies": { "@emnapi/core": "1.11.3", "@emnapi/runtime": "1.11.3", "@napi-rs/wasm-runtime": "1.1.6" }, "cpu": "none" }, "sha512-rerLPTN/HD4EvLNWs3O2N+Eb37eGvLRIP3dXXc3n+UzTebOepAsahNn44vXeRBsE4m/pHkpDJjwgWTytgQ2gBw=="], - "@rspack/binding-win32-x64-msvc": ["@rspack/binding-win32-x64-msvc@2.0.2", "", { "os": "win32", "cpu": "x64" }, "sha512-y7Q0S1FE+OlkL5GMqLG0PwxrPw6E1r892KhGrGKE1Vdufe5YTEx6xTPxzZ+b7N2KPD7s9G1/iJmWHQxb1+Bjkg=="], + "@rspack/binding-win32-arm64-msvc": ["@rspack/binding-win32-arm64-msvc@2.2.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-JUAmnbOQYGTRyX28vls/MOMonZWcmcCi5YtEq6YMc8Xqh3Qx0HUwaLM/I1xr/N9BX3b8CV0dQDOpNuBc2ei+CA=="], - "@rspack/cli": ["@rspack/cli@2.0.2", "", { "peerDependencies": { "@rspack/core": "^2.0.0-0", "@rspack/dev-server": "^2.0.0-0" }, "optionalPeers": ["@rspack/dev-server"], "bin": { "rspack": "bin/rspack.js" } }, "sha512-rwuzo/V59ck/ChNkxMEEjuXLFs8nPJ37K0PMuUeIMmzFJNdUcPLxSV3qaV9azDLGcyq4XwcyQvexH3okWbfUfQ=="], + "@rspack/binding-win32-ia32-msvc": ["@rspack/binding-win32-ia32-msvc@2.2.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-wOmQRUaOG0eWH/fnfslA9yK9xKfaq9X+3Xa1TdTJnTqlo0ARJYs6A+Lzjbs7cxdY/o1f12Xe00BG3nQozReUOg=="], - "@rspack/core": ["@rspack/core@2.0.2", "", { "dependencies": { "@rspack/binding": "2.0.2" }, "peerDependencies": { "@module-federation/runtime-tools": "^0.24.1 || ^2.0.0", "@swc/helpers": ">=0.5.1" }, "optionalPeers": ["@module-federation/runtime-tools", "@swc/helpers"] }, "sha512-VM3UHOo26uC+4QSqY5tU1ybI7KuXY5rTof8nhFOaBY9SYau0Smvr+hMSAPmrmHwknB6dXT8yaNVxrj7I+qxE1Q=="], + "@rspack/binding-win32-x64-msvc": ["@rspack/binding-win32-x64-msvc@2.2.0", "", { "os": "win32", "cpu": "x64" }, "sha512-v6/3bFr9+i7hRpgulL9b5qCvZL0VgR4vQGQNqOWezUzZmPUj9LYpvB0L9xZIVwDQ2ug/xBiA58bfg5IbESgoyw=="], + + "@rspack/cli": ["@rspack/cli@2.2.0", "", { "peerDependencies": { "@rspack/core": "^2.0.0-0", "@rspack/dev-server": "^2.0.0-0" }, "optionalPeers": ["@rspack/dev-server"], "bin": { "rspack": "./bin/rspack.js" } }, "sha512-GSiQPG5v5tN8vYJdUMYX44sPiwVVG8H25fq3LWRydVB4WswDAD/N3qNgWZtFVliQdLH3ZWzFdFUoCyZmea0TMA=="], + + "@rspack/core": ["@rspack/core@2.2.0", "", { "dependencies": { "@rspack/binding": "2.2.0" }, "peerDependencies": { "@module-federation/runtime-tools": "^0.24.1 || ^2.0.0", "@swc/helpers": "^0.5.23" }, "optionalPeers": ["@module-federation/runtime-tools", "@swc/helpers"] }, "sha512-3W7oX0BAHbK4VlknH3lfyfRvupzxdZtyEa+DfKmdjzmIAcqYtHnFd0nLqp5dzitDPyDI1TIKkDhpB0AZJn0pVg=="], "@sigstore/bundle": ["@sigstore/bundle@4.0.0", "", { "dependencies": { "@sigstore/protobuf-specs": "^0.5.0" } }, "sha512-NwCl5Y0V6Di0NexvkTqdoVfmjTaQwoLM236r89KEojGmq/jMls8S+zb7yOwAPdXvbwfKDlP+lmXgAL4vKSQT+A=="], @@ -656,21 +660,15 @@ "@sigstore/verify": ["@sigstore/verify@3.1.0", "", { "dependencies": { "@sigstore/bundle": "^4.0.0", "@sigstore/core": "^3.1.0", "@sigstore/protobuf-specs": "^0.5.0" } }, "sha512-mNe0Iigql08YupSOGv197YdHpPPr+EzDZmfCgMc7RPNaZTw5aLN01nBl6CHJOh3BGtnMIj83EeN4butBchc8Ag=="], - "@sindresorhus/is": ["@sindresorhus/is@0.14.0", "", {}, "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ=="], - "@sphinxxxx/color-conversion": ["@sphinxxxx/color-conversion@2.2.2", "", {}, "sha512-XExJS3cLqgrmNBIP3bBw6+1oQ1ksGjFh0+oClDKFYpCCqx/hlqwWO5KO/S63fzUo67SxI9dMrF0y5T/Ey7h8Zw=="], "@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], - "@szmarczak/http-timer": ["@szmarczak/http-timer@1.1.2", "", { "dependencies": { "defer-to-connect": "^1.0.1" } }, "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA=="], - - "@tootallnate/once": ["@tootallnate/once@1.1.2", "", {}, "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw=="], - "@tufjs/canonical-json": ["@tufjs/canonical-json@2.0.0", "", {}, "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA=="], "@tufjs/models": ["@tufjs/models@4.1.0", "", { "dependencies": { "@tufjs/canonical-json": "2.0.0", "minimatch": "^10.1.1" } }, "sha512-Y8cK9aggNRsqJVaKUlEYs4s7CvQ1b1ta2DVPyAimb0I2qhzjNk+A+mxvll/klL0RlfuIUei8BF7YWiua4kQqww=="], - "@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], + "@tybys/wasm-util": ["@tybys/wasm-util@0.10.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg=="], "@types/ace": ["@types/ace@0.0.52", "", {}, "sha512-YPF9S7fzpuyrxru+sG/rrTpZkC6gpHBPF14W3x70kqVOD+ks6jkYLapk4yceh36xej7K4HYxcyz9ZDQ2lTvwgQ=="], @@ -778,19 +776,19 @@ "@upsetjs/venn.js": ["@upsetjs/venn.js@2.0.0", "", { "optionalDependencies": { "d3-selection": "^3.0.0", "d3-transition": "^3.0.1" } }, "sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw=="], - "@vitest/expect": ["@vitest/expect@4.1.10", "", { "dependencies": { "@standard-schema/spec": "^1.1.0", "@types/chai": "^5.2.2", "@vitest/spy": "4.1.10", "@vitest/utils": "4.1.10", "chai": "^6.2.2", "tinyrainbow": "^3.1.0" } }, "sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA=="], + "@vitest/expect": ["@vitest/expect@4.1.11", "", { "dependencies": { "@standard-schema/spec": "^1.1.0", "@types/chai": "^5.2.2", "@vitest/spy": "4.1.11", "@vitest/utils": "4.1.11", "chai": "^6.2.2", "tinyrainbow": "^3.1.0" } }, "sha512-VX2x5vNJXET47KAFzwERI+KRMtTTCSWTfSMKsW7JsUsXV4psq++e3DvZpuTDOpHcxytiDs6p2nhVb2tVDiiUYw=="], - "@vitest/mocker": ["@vitest/mocker@4.1.10", "", { "dependencies": { "@vitest/spy": "4.1.10", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "optionalPeers": ["msw", "vite"] }, "sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow=="], + "@vitest/mocker": ["@vitest/mocker@4.1.11", "", { "dependencies": { "@vitest/spy": "4.1.11", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "optionalPeers": ["msw", "vite"] }, "sha512-2XJVD55d1o5AZous5CCGKS74g/riOj9odEt2bQpCVZeblHyHdnMeFl4jl0XjU21stf4mbjUkew2eXQZt65g5CQ=="], - "@vitest/pretty-format": ["@vitest/pretty-format@4.1.10", "", { "dependencies": { "tinyrainbow": "^3.1.0" } }, "sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q=="], + "@vitest/pretty-format": ["@vitest/pretty-format@4.1.11", "", { "dependencies": { "tinyrainbow": "^3.1.0" } }, "sha512-yiZzPbGTS9Sr/JpFl8zHrcIkAofNbFV6k21vIgQN/cY/oxZeXhJv5sc/MBJ5jFKWmWs+oJHw0UXLZjmf931+Vw=="], - "@vitest/runner": ["@vitest/runner@4.1.10", "", { "dependencies": { "@vitest/utils": "4.1.10", "pathe": "^2.0.3" } }, "sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg=="], + "@vitest/runner": ["@vitest/runner@4.1.11", "", { "dependencies": { "@vitest/utils": "4.1.11", "pathe": "^2.0.3" } }, "sha512-LztvUgdwMNJMIkj3hQnnxiC2Xy1zNxq928W/xhjCLaNCzqTZOudjwbQf6v9IntZGPw132i2Lq2rgTRZHD3JHNw=="], - "@vitest/snapshot": ["@vitest/snapshot@4.1.10", "", { "dependencies": { "@vitest/pretty-format": "4.1.10", "@vitest/utils": "4.1.10", "magic-string": "^0.30.21", "pathe": "^2.0.3" } }, "sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw=="], + "@vitest/snapshot": ["@vitest/snapshot@4.1.11", "", { "dependencies": { "@vitest/pretty-format": "4.1.11", "@vitest/utils": "4.1.11", "magic-string": "^0.30.21", "pathe": "^2.0.3" } }, "sha512-pN7ikn1ON7h8ee4gIAp4AzyK+zBtJPzVbqOgu5LCEh4VaJVbPQcgYQYJIMGQPXVeJJq1fnfazis7a5pFNPahog=="], - "@vitest/spy": ["@vitest/spy@4.1.10", "", {}, "sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw=="], + "@vitest/spy": ["@vitest/spy@4.1.11", "", {}, "sha512-apNa/prQy2qCeywhnixOHPRCgGNhvg7T4Dapfl1GahLp/R+uhBm5cPyFoNVyqsNd2h1nJxL6BqqdIjiABL60YA=="], - "@vitest/utils": ["@vitest/utils@4.1.10", "", { "dependencies": { "@vitest/pretty-format": "4.1.10", "convert-source-map": "^2.0.0", "tinyrainbow": "^3.1.0" } }, "sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA=="], + "@vitest/utils": ["@vitest/utils@4.1.11", "", { "dependencies": { "@vitest/pretty-format": "4.1.11", "convert-source-map": "^2.0.0", "tinyrainbow": "^3.1.0" } }, "sha512-zTCVGpyFsGWBhllOyKlTw/vnr6D9qxsfSDyfbyZmTyjHw5N/VuvzHpHoQjm2ZJzn4RJgx5w4r7V0er69CmLgPQ=="], "@vscode/l10n": ["@vscode/l10n@0.0.18", "", {}, "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ=="], @@ -848,18 +846,12 @@ "abbrev": ["abbrev@4.0.0", "", {}, "sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA=="], - "accepts": ["accepts@1.3.8", "", { "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" } }, "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw=="], - - "acorn": ["acorn@8.16.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw=="], + "acorn": ["acorn@8.18.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ=="], "acorn-import-phases": ["acorn-import-phases@1.0.4", "", { "peerDependencies": { "acorn": "^8.14.0" } }, "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ=="], "agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], - "agentkeepalive": ["agentkeepalive@4.6.0", "", { "dependencies": { "humanize-ms": "^1.2.1" } }, "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ=="], - - "aggregate-error": ["aggregate-error@3.1.0", "", { "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" } }, "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA=="], - "ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], "ajv-formats": ["ajv-formats@2.1.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA=="], @@ -870,56 +862,26 @@ "ansi": ["ansi@0.3.1", "", {}, "sha512-iFY7JCgHbepc0b82yLaw4IMortylNb6wG4kL+4R0C3iv6i+RHGHux/yUX5BTiRvSX/shMnngjR1YyNMnXEFh5A=="], - "ansi-align": ["ansi-align@3.0.1", "", { "dependencies": { "string-width": "^4.1.0" } }, "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w=="], - "ansi-colors": ["ansi-colors@4.1.1", "", {}, "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA=="], - "ansi-escapes": ["ansi-escapes@3.2.0", "", {}, "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ=="], - "ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], - "aproba": ["aproba@1.2.0", "", {}, "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="], - - "archiver": ["archiver@3.1.1", "", { "dependencies": { "archiver-utils": "^2.1.0", "async": "^2.6.3", "buffer-crc32": "^0.2.1", "glob": "^7.1.4", "readable-stream": "^3.4.0", "tar-stream": "^2.1.0", "zip-stream": "^2.1.2" } }, "sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg=="], - - "archiver-utils": ["archiver-utils@2.1.0", "", { "dependencies": { "glob": "^7.1.4", "graceful-fs": "^4.2.0", "lazystream": "^1.0.0", "lodash.defaults": "^4.2.0", "lodash.difference": "^4.5.0", "lodash.flatten": "^4.4.0", "lodash.isplainobject": "^4.0.6", "lodash.union": "^4.6.0", "normalize-path": "^3.0.0", "readable-stream": "^2.0.0" } }, "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw=="], - - "are-we-there-yet": ["are-we-there-yet@1.1.7", "", { "dependencies": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" } }, "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g=="], - "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], - "array-find-index": ["array-find-index@1.0.2", "", {}, "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw=="], - - "array-flatten": ["array-flatten@1.1.1", "", {}, "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="], - "array-union": ["array-union@2.1.0", "", {}, "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="], - "asn1": ["asn1@0.2.6", "", { "dependencies": { "safer-buffer": "~2.1.0" } }, "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ=="], - "assert-plus": ["assert-plus@1.0.0", "", {}, "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw=="], "assertion-error": ["assertion-error@1.1.0", "", {}, "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw=="], - "async": ["async@2.6.4", "", { "dependencies": { "lodash": "^4.17.14" } }, "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA=="], - - "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], - - "at-least-node": ["at-least-node@1.0.0", "", {}, "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg=="], - - "atomically": ["atomically@1.7.0", "", {}, "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w=="], - - "autoprefixer": ["autoprefixer@10.5.0", "", { "dependencies": { "browserslist": "^4.28.2", "caniuse-lite": "^1.0.30001787", "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": { "autoprefixer": "bin/autoprefixer" } }, "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong=="], + "autoprefixer": ["autoprefixer@10.5.4", "", { "dependencies": { "browserslist": "^4.28.6", "caniuse-lite": "^1.0.30001806", "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": { "autoprefixer": "bin/autoprefixer" } }, "sha512-MaU0U/za7N3r6brxD4YB/l4NSrFzLPlANv6wEuQVaIPlD3L4W9rFcQPbL/EilY9BHhHvhfcz3gInDLrEtWT4EA=="], "autosize": ["autosize@6.0.1", "", {}, "sha512-f86EjiUKE6Xvczc4ioP1JBlWG7FKrE13qe/DxBCpe8GCipCq2nFw73aO8QEBKHfSbYGDN5eB9jXWKen7tspDqQ=="], - "aws-sign2": ["aws-sign2@0.7.0", "", {}, "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA=="], - - "aws4": ["aws4@1.13.2", "", {}, "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw=="], - "babel-loader": ["babel-loader@10.1.1", "", { "dependencies": { "find-up": "^5.0.0" }, "peerDependencies": { "@babel/core": "^7.12.0 || ^8.0.0-beta.1", "@rspack/core": "^1.0.0 || ^2.0.0-0", "webpack": ">=5.61.0" }, "optionalPeers": ["@rspack/core", "webpack"] }, "sha512-JwKSzk2kjIe7mgPK+/lyZ2QAaJcpahNAdM+hgR2HI8D0OJVkdj8Rl6J3kaLYki9pwF7P2iWnD8qVv80Lq1ABtg=="], "babel-plugin-polyfill-corejs3": ["babel-plugin-polyfill-corejs3@1.0.0", "", { "dependencies": { "@babel/helper-define-polyfill-provider": "^1.0.0", "core-js-compat": "^3.48.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0" } }, "sha512-yIkslVjbmml2Xjb6XhFW7lISXHsqk6cesxTdDsXoMom4Lnb99DbD3OQbSOoM5Z+ASh8YXYaLAsRQrU2Jeh3Qig=="], @@ -928,9 +890,7 @@ "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], - "baseline-browser-mapping": ["baseline-browser-mapping@2.10.29", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-Asa2krT+XTPZINCS+2QcyS8WTkObE77RwkydwF7h6DmnKqbvlalz93m/dnphUyCa6SWSP51VgtEUf2FN+gelFQ=="], - - "bcrypt-pbkdf": ["bcrypt-pbkdf@1.0.2", "", { "dependencies": { "tweetnacl": "^0.14.3" } }, "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w=="], + "baseline-browser-mapping": ["baseline-browser-mapping@2.11.19", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-Grytf1xOxOEMTGRwx6rLGKkTabd4vMg3VrKdj/7joCmV0qgh4QwMMO6xh34YEXQqirAuUdgQGa5orJQQ+69RBw=="], "big-integer": ["big-integer@1.6.52", "", {}, "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg=="], @@ -940,12 +900,6 @@ "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], - "bl": ["bl@4.1.0", "", { "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w=="], - - "body-parser": ["body-parser@1.20.5", "", { "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.1", "iconv-lite": "~0.4.24", "on-finished": "~2.4.1", "qs": "~6.15.1", "raw-body": "~2.5.3", "type-is": "~1.6.18", "unpipe": "~1.0.0" } }, "sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA=="], - - "boxen": ["boxen@5.1.2", "", { "dependencies": { "ansi-align": "^3.0.0", "camelcase": "^6.2.0", "chalk": "^4.1.0", "cli-boxes": "^2.2.1", "string-width": "^4.2.2", "type-fest": "^0.20.2", "widest-line": "^3.1.0", "wrap-ansi": "^7.0.0" } }, "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ=="], - "bplist-parser": ["bplist-parser@0.3.2", "", { "dependencies": { "big-integer": "1.6.x" } }, "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ=="], "brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], @@ -954,42 +908,24 @@ "browser-stdout": ["browser-stdout@1.3.1", "", {}, "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw=="], - "browserslist": ["browserslist@4.28.2", "", { "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", "electron-to-chromium": "^1.5.328", "node-releases": "^2.0.36", "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg=="], - - "buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="], - - "buffer-crc32": ["buffer-crc32@0.2.13", "", {}, "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ=="], + "browserslist": ["browserslist@4.28.8", "", { "dependencies": { "baseline-browser-mapping": "^2.11.12", "caniuse-lite": "^1.0.30001809", "electron-to-chromium": "^1.5.402", "node-releases": "^2.0.53", "update-browserslist-db": "^1.3.0" }, "bin": { "browserslist": "cli.js" } }, "sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA=="], "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], "buffer-image-size": ["buffer-image-size@0.6.4", "", { "dependencies": { "@types/node": "*" } }, "sha512-nEh+kZOPY1w+gcCMobZ6ETUp9WfibndnosbpwB1iJk/8Gt5ZF2bhS6+B6bPYz424KtwsR6Rflc3tCz1/ghX2dQ=="], - "builtins": ["builtins@1.0.3", "", {}, "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ=="], - - "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], - "cacache": ["cacache@20.0.4", "", { "dependencies": { "@npmcli/fs": "^5.0.0", "fs-minipass": "^3.0.0", "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": "^7.0.2", "ssri": "^13.0.0" } }, "sha512-M3Lab8NPYlZU2exsL3bMVvMrMqgwCnMWfdZbK28bn3pK6APT/Te/I8hjRPNu1uwORY9a1eEQoifXbKPQMfMTOA=="], - "cacheable-request": ["cacheable-request@6.1.0", "", { "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", "http-cache-semantics": "^4.0.0", "keyv": "^3.0.0", "lowercase-keys": "^2.0.0", "normalize-url": "^4.1.0", "responselike": "^1.0.2" } }, "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg=="], - - "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], - - "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], - "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], "camelcase": ["camelcase@6.3.0", "", {}, "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="], - "caniuse-lite": ["caniuse-lite@1.0.30001792", "", {}, "sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw=="], - - "caseless": ["caseless@0.12.0", "", {}, "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="], + "caniuse-lite": ["caniuse-lite@1.0.30001810", "", {}, "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg=="], "chai": ["chai@4.3.6", "", { "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", "deep-eql": "^3.0.1", "get-func-name": "^2.0.0", "loupe": "^2.3.1", "pathval": "^1.1.1", "type-detect": "^4.0.5" } }, "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q=="], "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - "chardet": ["chardet@0.7.0", "", {}, "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="], - "check-error": ["check-error@1.0.3", "", { "dependencies": { "get-func-name": "^2.0.2" } }, "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg=="], "chevrotain": ["chevrotain@11.0.3", "", { "dependencies": { "@chevrotain/cst-dts-gen": "11.0.3", "@chevrotain/gast": "11.0.3", "@chevrotain/regexp-to-ast": "11.0.3", "@chevrotain/types": "11.0.3", "@chevrotain/utils": "11.0.3", "lodash-es": "4.17.21" } }, "sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw=="], @@ -998,30 +934,16 @@ "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], - "chownr": ["chownr@2.0.0", "", {}, "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="], + "chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="], "chrome-trace-event": ["chrome-trace-event@1.0.4", "", {}, "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ=="], - "ci-info": ["ci-info@2.0.0", "", {}, "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ=="], - - "clean-stack": ["clean-stack@2.2.0", "", {}, "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A=="], - "cli": ["cli@1.0.1", "", { "dependencies": { "exit": "0.1.2", "glob": "^7.1.1" } }, "sha512-41U72MB56TfUMGndAKK8vJ78eooOD4Z5NOL4xEfjc0c23s+6EYKXlXsmACBVclLP1yOfWCgEganVzddVrSNoTg=="], - "cli-boxes": ["cli-boxes@2.2.1", "", {}, "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw=="], - - "cli-cursor": ["cli-cursor@2.1.0", "", { "dependencies": { "restore-cursor": "^2.0.0" } }, "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw=="], - - "cli-width": ["cli-width@2.2.1", "", {}, "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw=="], - "cliui": ["cliui@9.0.1", "", { "dependencies": { "string-width": "^7.2.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" } }, "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w=="], - "clone-response": ["clone-response@1.0.3", "", { "dependencies": { "mimic-response": "^1.0.0" } }, "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA=="], - "cmd-shim": ["cmd-shim@8.0.0", "", {}, "sha512-Jk/BK6NCapZ58BKUxlSI+ouKRbjH1NLZCgJkYoab+vEHUY3f6OzpNBN9u7HFSv9J6TRDGs4PLOHezoKGaFRSCA=="], - "code-point-at": ["code-point-at@1.1.0", "", {}, "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA=="], - "codemirror": ["codemirror@6.0.2", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/commands": "^6.0.0", "@codemirror/language": "^6.0.0", "@codemirror/lint": "^6.0.0", "@codemirror/search": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0" } }, "sha512-VhydHotNW5w1UGK0Qj96BwSk/Zqbp9WbnyK2W/eVMv4QyF41INRGpjUhFJY7/uDNuudSc33a/PKr4iDqRduvHw=="], "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], @@ -1040,40 +962,20 @@ "com.foxdebug.acode.rk.plugin.plugincontext": ["com.foxdebug.acode.rk.plugin.plugincontext@file:src/plugins/pluginContext", {}], - "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], - "commander": ["commander@8.3.0", "", {}, "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww=="], "common-ancestor-path": ["common-ancestor-path@2.0.0", "", {}, "sha512-dnN3ibLeoRf2HNC+OlCiNc5d2zxbLJXOtiZUudNFSXZrNSydxcCsSpRzXwfu7BBWCIfHPw+xTayeBvJCP/D8Ng=="], - "compress-commons": ["compress-commons@2.1.1", "", { "dependencies": { "buffer-crc32": "^0.2.13", "crc32-stream": "^3.0.1", "normalize-path": "^3.0.0", "readable-stream": "^2.3.6" } }, "sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q=="], - - "compressible": ["compressible@2.0.18", "", { "dependencies": { "mime-db": ">= 1.43.0 < 2" } }, "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg=="], - - "compression": ["compression@1.8.1", "", { "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" } }, "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w=="], - "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], - "conf": ["conf@10.2.0", "", { "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" } }, "sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg=="], - "confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], "configstore": ["configstore@5.0.1", "", { "dependencies": { "dot-prop": "^5.2.0", "graceful-fs": "^4.1.2", "make-dir": "^3.0.0", "unique-string": "^2.0.0", "write-file-atomic": "^3.0.0", "xdg-basedir": "^4.0.0" } }, "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA=="], "console-browserify": ["console-browserify@1.1.0", "", { "dependencies": { "date-now": "^0.1.4" } }, "sha512-duS7VP5pvfsNLDvL1O4VOEbw37AI3A4ZUQYemvDlnpGrNu9tprR7BYWpDYwC0Xia0Zxz5ZupdiIrUp0GH1aXfg=="], - "console-control-strings": ["console-control-strings@1.1.0", "", {}, "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ=="], - - "content-disposition": ["content-disposition@0.5.4", "", { "dependencies": { "safe-buffer": "5.2.1" } }, "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ=="], - - "content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="], - "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], - "cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], - - "cookie-signature": ["cookie-signature@1.0.7", "", {}, "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA=="], - "cordova": ["cordova@13.0.0", "", { "dependencies": { "configstore": "^5.0.1", "cordova-common": "^6.0.0", "cordova-create": "^6.0.0", "cordova-lib": "^13.0.0", "editor": "^1.0.0", "execa": "^5.1.1", "nopt": "^9.0.0", "semver": "^7.7.3", "systeminformation": "^5.27.11" }, "bin": { "cordova": "bin/cordova" } }, "sha512-QAIMwmYLL0jHo4vauWSnRd2fr9l+wajG+F5aUkrC6e4ZQGSTv0wAiRmpqQUkIc1ZdELisKDQws/BjHz5nP/sLw=="], "cordova-android": ["cordova-android@15.1.0", "", { "dependencies": { "android-versions": "^2.1.1", "cordova-common": "^6.0.0", "dedent": "^1.7.1", "execa": "^5.1.1", "fast-glob": "^3.3.3", "is-path-inside": "^3.0.3", "nopt": "^9.0.0", "properties-parser": "^0.6.0", "semver": "^7.7.4", "string-argv": "^0.3.2", "untildify": "^4.0.0", "which": "^6.0.1" } }, "sha512-mnOnOisYUVhyrLCPVlHJBKh4ro+X6nZA7nPqBrpVnyTpiiDiakNCfbBJjSs1MTBUJZ6dcmhhvNKZWPT9w6aGPA=="], @@ -1092,7 +994,7 @@ "cordova-plugin-acode-webview": ["cordova-plugin-acode-webview@file:src/plugins/webview", {}], - "cordova-plugin-advanced-http": ["cordova-plugin-advanced-http@file:src/plugins/cordova-plugin-advanced-http", { "devDependencies": { "chai": "4.3.6", "colors": "1.4.0", "cordova": "11.0.0", "mocha": "9.2.2", "umd-tough-cookie": "3.0.0", "wd": "1.14.0", "xml2js": "0.4.23" } }], + "cordova-plugin-advanced-http": ["cordova-plugin-advanced-http@file:src/plugins/cordova-plugin-advanced-http", { "devDependencies": { "chai": "4.3.6", "colors": "1.4.0", "cordova": "13.0.0", "mocha": "9.2.2", "umd-tough-cookie": "3.0.0", "xml2js": "0.4.23" } }], "cordova-plugin-browser": ["cordova-plugin-browser@file:src/plugins/browser", {}], @@ -1118,9 +1020,7 @@ "cordova-plugin-websocket": ["cordova-plugin-websocket@file:src/plugins/websocket", {}], - "cordova-serve": ["cordova-serve@4.0.1", "", { "dependencies": { "chalk": "^3.0.0", "compression": "^1.7.4", "express": "^4.17.1", "open": "^7.0.3", "which": "^2.0.2" } }, "sha512-YbfXaZ60yr5dkqmDFQgrU7TSKnzCqYsxHgIUzDeX8RggZb6mz1F9jMfUBbaYyaU7JjcuJ0aoRPYLvwSGQVhGkw=="], - - "core-js": ["core-js@3.49.0", "", {}, "sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg=="], + "core-js": ["core-js@3.50.0", "", {}, "sha512-BRWgOLKkFeCgRudR6zrs8p9XJZcE14grzKMMssoYrk6krtuEZ7MTKPIY5RzOnqsEKIR9kst7wNzphttraT+Yqw=="], "core-js-compat": ["core-js-compat@3.49.0", "", { "dependencies": { "browserslist": "^4.28.1" } }, "sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA=="], @@ -1132,10 +1032,6 @@ "cosmiconfig": ["cosmiconfig@9.0.0", "", { "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg=="], - "crc": ["crc@3.8.0", "", { "dependencies": { "buffer": "^5.1.0" } }, "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ=="], - - "crc32-stream": ["crc32-stream@3.0.1", "", { "dependencies": { "crc": "^3.4.4", "readable-stream": "^3.4.0" } }, "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w=="], - "crelt": ["crelt@1.0.6", "", {}, "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g=="], "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], @@ -1146,9 +1042,7 @@ "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], - "currently-unhandled": ["currently-unhandled@0.4.1", "", { "dependencies": { "array-find-index": "^1.0.1" } }, "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng=="], - - "cytoscape": ["cytoscape@3.33.1", "", {}, "sha512-iJc4TwyANnOGR1OmWhsS9ayRS3s+XQ185FmuHObThD+5AeJCakAAbWv8KimMTt08xCCLNgneQwFp+JRJOr9qGQ=="], + "cytoscape": ["cytoscape@3.34.2", "", {}, "sha512-Cm2jaj1X/PBNlzV9yH8zcfGOxO7U+CJ/+mxSBVPSchLaugdp4jtlGx5qaHtPRZ6tgiZ5P+o1XoRfJA+ba6KM3g=="], "cytoscape-cose-bilkent": ["cytoscape-cose-bilkent@4.1.0", "", { "dependencies": { "cose-base": "^1.0.0" }, "peerDependencies": { "cytoscape": "^3.2.0" } }, "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ=="], @@ -1220,40 +1114,20 @@ "dagre-d3-es": ["dagre-d3-es@7.0.14", "", { "dependencies": { "d3": "^7.9.0", "lodash-es": "^4.17.21" } }, "sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg=="], - "dashdash": ["dashdash@1.14.1", "", { "dependencies": { "assert-plus": "^1.0.0" } }, "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g=="], - "date-now": ["date-now@0.1.4", "", {}, "sha512-AsElvov3LoNB7tf5k37H2jYSB+ZZPMT5sG2QjJCcdlV5chIv6htBUBUui2IKRjgtKAKtCBN7Zbwa+MtwLjSeNw=="], - "dayjs": ["dayjs@1.11.20", "", {}, "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ=="], - - "debounce-fn": ["debounce-fn@4.0.0", "", { "dependencies": { "mimic-fn": "^3.0.0" } }, "sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ=="], + "dayjs": ["dayjs@1.11.23", "", {}, "sha512-QDTCU0M0MxR3hQfnlDJfwekQiaanm1ubOD231u73WBckQ/fsamwRLiE2GBz6D3a/xF1NgfiDLJjXBa1hYOYTtQ=="], "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], "decamelize": ["decamelize@4.0.0", "", {}, "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ=="], - "decompress-response": ["decompress-response@3.3.0", "", { "dependencies": { "mimic-response": "^1.0.0" } }, "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA=="], - "dedent": ["dedent@1.7.2", "", { "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, "optionalPeers": ["babel-plugin-macros"] }, "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA=="], "deep-eql": ["deep-eql@3.0.1", "", { "dependencies": { "type-detect": "^4.0.0" } }, "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw=="], - "deep-extend": ["deep-extend@0.6.0", "", {}, "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="], - - "defer-to-connect": ["defer-to-connect@1.1.3", "", {}, "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ=="], - "delaunator": ["delaunator@5.0.1", "", { "dependencies": { "robust-predicates": "^3.0.2" } }, "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw=="], - "delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="], - - "delegates": ["delegates@1.0.0", "", {}, "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="], - - "dep-graph": ["dep-graph@1.1.0", "", { "dependencies": { "underscore": "1.2.1" } }, "sha512-/6yUWlSH0Uevjj6HWvO86rDeFzuYfzbaKDqifTEemwfwEPyBrODTb3ox/jFzqmc2+UmgJ3IDMS88BKEBh1Nm2Q=="], - - "depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="], - - "destroy": ["destroy@1.2.0", "", {}, "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="], - "detect-indent": ["detect-indent@6.1.0", "", {}, "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA=="], "detect-libc": ["detect-libc@1.0.3", "", { "bin": { "detect-libc": "./bin/detect-libc.js" } }, "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg=="], @@ -1270,23 +1144,15 @@ "domhandler": ["domhandler@2.3.0", "", { "dependencies": { "domelementtype": "1" } }, "sha512-q9bUwjfp7Eif8jWxxxPSykdRZAb6GkguBGSgvvCrhI9wB71W2K/Kvv4E61CF/mcCfnVJDeDWx/Vb/uAqbDj6UQ=="], - "dompurify": ["dompurify@3.4.11", "", { "optionalDependencies": { "@types/trusted-types": "^2.0.7" } }, "sha512-zhlUV12GsaRzMsf9q5M254YhA4+VuF0fG+QFqu6aYpoGlKtz+w8//jBcGVYBgQkR5GHjUomejY84AV+/uPbWdw=="], + "dompurify": ["dompurify@3.4.14", "", { "optionalDependencies": { "@types/trusted-types": "^2.0.7" } }, "sha512-dVoH9z+MY+C9IilgGCk3YfFqjLi3fChm2OiKJMzh6axrJ5qwxqWaZamgmHrpv22CN/KdbZJuGEGgfQoL00LTdg=="], "domutils": ["domutils@1.5.1", "", { "dependencies": { "dom-serializer": "0", "domelementtype": "1" } }, "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw=="], "dot-prop": ["dot-prop@5.3.0", "", { "dependencies": { "is-obj": "^2.0.0" } }, "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q=="], - "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], - - "duplexer3": ["duplexer3@0.1.5", "", {}, "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA=="], - - "ecc-jsbn": ["ecc-jsbn@0.1.2", "", { "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw=="], - "editor": ["editor@1.0.0", "", {}, "sha512-SoRmbGStwNYHgKfjOrX2L0mUvp9bUVv0uPppZSOMAntEbcFtoC3MKF5b3T6HQPXKIV+QGY3xPO3JK5it5lVkuw=="], - "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], - - "electron-to-chromium": ["electron-to-chromium@1.5.353", "", {}, "sha512-kOrWphBi8TOZyiJZqsgqIle0lw+tzmnQK83pV9dZUd01Nm2POECSyFQMAuarzZdYqQW7FH9RaYOuaRo3h+bQ3w=="], + "electron-to-chromium": ["electron-to-chromium@1.5.415", "", {}, "sha512-958V+Kbhtgz+SxXeEVKBjrlKRBIDAYvUJfwhjxMZ5S6ut9jAl7l9ZKBkBrvjyjZE36PabLUo2L8kEeV5O4vgJg=="], "elementtree": ["elementtree@0.1.7", "", { "dependencies": { "sax": "1.1.4" } }, "sha512-wkgGT6kugeQk/P6VZ/f4T+4HB41BVgNBq5CDIZVbQ02nvTVqAiVTbskxxu3eA/X96lMlfYOwnLQpN2v5E1zDEg=="], @@ -1298,12 +1164,6 @@ "empathic": ["empathic@2.0.1", "", {}, "sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q=="], - "encodeurl": ["encodeurl@2.0.0", "", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="], - - "encoding": ["encoding@0.1.13", "", { "dependencies": { "iconv-lite": "^0.6.2" } }, "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A=="], - - "end-of-stream": ["end-of-stream@1.4.5", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg=="], - "endent": ["endent@2.1.0", "", { "dependencies": { "dedent": "^0.7.0", "fast-json-parse": "^1.0.3", "objectorarray": "^1.0.5" } }, "sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w=="], "enhanced-resolve": ["enhanced-resolve@5.19.0", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.0" } }, "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg=="], @@ -1312,26 +1172,14 @@ "env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="], - "err-code": ["err-code@2.0.3", "", {}, "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA=="], - "error-ex": ["error-ex@1.3.4", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ=="], - "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], - - "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], - "es-module-lexer": ["es-module-lexer@2.0.0", "", {}, "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw=="], - "es-object-atoms": ["es-object-atoms@1.1.2", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw=="], - - "es-toolkit": ["es-toolkit@1.46.1", "", {}, "sha512-5eNtXOs3tbfxXOj04tjjseeWkRWaoCjdEI+96DgwzZoe6c9juL49pXlzAFTI72aWC9Y8p7168g6XIKjh7k6pyQ=="], + "es-toolkit": ["es-toolkit@1.51.0", "", {}, "sha512-zC2lQGkM7QX+Gm6iM3+WIdZJzthsEd14LvRNJneSO2hzyz/zNBENR8+YXWo1cKxgPBtV6ksPYHELbcwBRzmdCw=="], "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], - "escape-goat": ["escape-goat@2.1.1", "", {}, "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q=="], - - "escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="], - "escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], "eslint-scope": ["eslint-scope@5.1.1", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw=="], @@ -1346,8 +1194,6 @@ "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], - "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], - "events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], "execa": ["execa@5.1.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="], @@ -1358,12 +1204,6 @@ "exponential-backoff": ["exponential-backoff@3.1.3", "", {}, "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA=="], - "express": ["express@4.22.2", "", { "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "~1.20.5", "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.15.1", "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" } }, "sha512-IuL+Elrou2ZvCFHs18/CIzy2Nzvo25nZ1/D2eIZlz7c+QUayAcYoiM2BthCjs+EBHVpjYjcuLDAiCWgeIX3X1Q=="], - - "extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="], - - "external-editor": ["external-editor@3.1.0", "", { "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", "tmp": "^0.0.33" } }, "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew=="], - "extsprintf": ["extsprintf@1.4.1", "", {}, "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA=="], "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], @@ -1380,33 +1220,17 @@ "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], - "figures": ["figures@2.0.0", "", { "dependencies": { "escape-string-regexp": "^1.0.5" } }, "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA=="], - - "filesize": ["filesize@11.0.17", "", {}, "sha512-oHLTvMLw6imZUl1se/RBQrFlyy50nXce4sU7yGR6Qc0JgCwqnfiFsAnEwotdGmfKLD7SArGUk2/5STU0k8LOBQ=="], + "filesize": ["filesize@11.0.22", "", {}, "sha512-RlCVs9CY+oSsRnNZn95J9vDXjNjOwddKyTFjOYtA4yxYVIxBnwiVVGJX+TFhsmu3uUf81JDGyijtYL9xgawlTw=="], "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], - "finalhandler": ["finalhandler@1.3.2", "", { "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.2", "unpipe": "~1.0.0" } }, "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg=="], - "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], "flat": ["flat@5.0.2", "", { "bin": { "flat": "cli.js" } }, "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ=="], - "forever-agent": ["forever-agent@0.6.1", "", {}, "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw=="], - - "form-data": ["form-data@2.3.3", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", "mime-types": "^2.1.12" } }, "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ=="], - - "forwarded": ["forwarded@0.2.0", "", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="], - "fraction.js": ["fraction.js@5.3.4", "", {}, "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ=="], - "framer-motion": ["framer-motion@12.42.0", "", { "dependencies": { "motion-dom": "^12.42.0", "motion-utils": "^12.39.0", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-wp7EJnfWaaEScVygKv3e20udoRz+LbtxScsuTkakAxfXmt+ReC6WyPW2nINRAGvd+hG9odwcjBLyOTPjH5pBRA=="], - - "fresh": ["fresh@0.5.2", "", {}, "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="], - - "fs-constants": ["fs-constants@1.0.0", "", {}, "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="], - - "fs-extra": ["fs-extra@10.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ=="], + "framer-motion": ["framer-motion@12.43.0", "", { "dependencies": { "motion-dom": "^12.43.0", "motion-utils": "^12.39.0", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-1eaL3RvR/kAlbG7UYcpMptEyzPoENO0c6w7ZnB3/hh2vSAz/6uGAFn6fdoqTBguNstf3MsFhJHsD/0DHiclG+g=="], "fs-minipass": ["fs-minipass@3.0.3", "", { "dependencies": { "minipass": "^7.0.3" } }, "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw=="], @@ -1416,58 +1240,34 @@ "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], - "gauge": ["gauge@2.7.4", "", { "dependencies": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", "has-unicode": "^2.0.0", "object-assign": "^4.1.0", "signal-exit": "^3.0.0", "string-width": "^1.0.1", "strip-ansi": "^3.0.1", "wide-align": "^1.1.0" } }, "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg=="], - "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], - "get-east-asian-width": ["get-east-asian-width@1.4.0", "", {}, "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q=="], + "get-east-asian-width": ["get-east-asian-width@1.6.0", "", {}, "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA=="], "get-func-name": ["get-func-name@2.0.2", "", {}, "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ=="], - "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], - - "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], - "get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], - "getpass": ["getpass@0.1.7", "", { "dependencies": { "assert-plus": "^1.0.0" } }, "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng=="], - "glob": ["glob@7.2.0", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q=="], "glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], "glob-to-regexp": ["glob-to-regexp@0.4.1", "", {}, "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="], - "global-dirs": ["global-dirs@3.0.1", "", { "dependencies": { "ini": "2.0.0" } }, "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA=="], - "globby": ["globby@11.1.0", "", { "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" } }, "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g=="], - "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], - - "got": ["got@9.6.0", "", { "dependencies": { "@sindresorhus/is": "^0.14.0", "@szmarczak/http-timer": "^1.1.2", "cacheable-request": "^6.0.0", "decompress-response": "^3.3.0", "duplexer3": "^0.1.4", "get-stream": "^4.1.0", "lowercase-keys": "^1.0.1", "mimic-response": "^1.0.1", "p-cancelable": "^1.0.0", "to-readable-stream": "^1.0.0", "url-parse-lax": "^3.0.0" } }, "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q=="], - "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], "growl": ["growl@1.10.5", "", {}, "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA=="], "hachure-fill": ["hachure-fill@0.5.2", "", {}, "sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg=="], - "happy-dom": ["happy-dom@20.11.1", "", { "dependencies": { "@types/node": ">=20.0.0", "@types/whatwg-mimetype": "^3.0.2", "@types/ws": "^8.18.1", "buffer-image-size": "^0.6.4", "entities": "^7.0.1", "whatwg-mimetype": "^3.0.0", "ws": "^8.21.0" } }, "sha512-XSt8tMzbW9ymE7687xztkO1ckR7qJNQ3LywY9vlYGhGi3zXrGBHuUo2Cl1ztZaICW+1eAGdkLbj6iwVqDT33kg=="], - - "har-schema": ["har-schema@2.0.0", "", {}, "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q=="], - - "har-validator": ["har-validator@5.1.5", "", { "dependencies": { "ajv": "^6.12.3", "har-schema": "^2.0.0" } }, "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w=="], + "happy-dom": ["happy-dom@20.11.6", "", { "dependencies": { "@types/node": ">=20.0.0", "@types/whatwg-mimetype": "^3.0.2", "@types/ws": "^8.18.1", "buffer-image-size": "^0.6.4", "entities": "^7.0.1", "whatwg-mimetype": "^3.0.0", "ws": "^8.21.0" } }, "sha512-Hldbg8AdAa5a5oDcZpjqnGitp7JB0hqWmfv/8qr+kft4vzSD8BHsbdRfzYvL/0QcbKcURC/yyoygbeDQarPvYg=="], "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], - "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], - - "has-unicode": ["has-unicode@2.0.1", "", {}, "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ=="], - - "has-yarn": ["has-yarn@2.1.0", "", {}, "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw=="], - "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], "he": ["he@1.2.0", "", { "bin": { "he": "bin/he" } }, "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="], @@ -1480,24 +1280,16 @@ "http-cache-semantics": ["http-cache-semantics@4.2.0", "", {}, "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ=="], - "http-errors": ["http-errors@2.0.1", "", { "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4", "setprototypeof": "~1.2.0", "statuses": "~2.0.2", "toidentifier": "~1.0.1" } }, "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ=="], + "http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="], - "http-proxy-agent": ["http-proxy-agent@4.0.1", "", { "dependencies": { "@tootallnate/once": "1", "agent-base": "6", "debug": "4" } }, "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg=="], - - "http-signature": ["http-signature@1.2.0", "", { "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", "sshpk": "^1.7.0" } }, "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ=="], - - "https-proxy-agent": ["https-proxy-agent@5.0.1", "", { "dependencies": { "agent-base": "6", "debug": "4" } }, "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA=="], + "https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], "human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="], - "humanize-ms": ["humanize-ms@1.2.1", "", { "dependencies": { "ms": "^2.0.0" } }, "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ=="], - "iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], "icss-utils": ["icss-utils@5.1.0", "", { "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA=="], - "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], - "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], "ignore-walk": ["ignore-walk@8.0.0", "", { "dependencies": { "minimatch": "^10.0.3" } }, "sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A=="], @@ -1508,56 +1300,32 @@ "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], - "import-lazy": ["import-lazy@2.1.0", "", {}, "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A=="], - "import-meta-resolve": ["import-meta-resolve@4.2.0", "", {}, "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg=="], "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], - "indent-string": ["indent-string@4.0.0", "", {}, "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="], - - "infer-owner": ["infer-owner@1.0.4", "", {}, "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A=="], - "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], - "ini": ["ini@2.0.0", "", {}, "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA=="], - - "init-package-json": ["init-package-json@2.0.5", "", { "dependencies": { "npm-package-arg": "^8.1.5", "promzard": "^0.3.0", "read": "~1.0.1", "read-package-json": "^4.1.1", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4", "validate-npm-package-name": "^3.0.0" } }, "sha512-u1uGAtEFu3VA6HNl/yUWw57jmKEMx8SKOxHhxjGnOFUiIlFnohKDFg4ZrPpv9wWqk44nDxGJAtqjdQFm+9XXQA=="], - - "inquirer": ["inquirer@6.5.2", "", { "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" } }, "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ=="], - - "insight": ["insight@0.11.1", "", { "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" } }, "sha512-TBcZ0qC9dgdmcxL93OoqkY/RZXJtIi0i07phX/QyYk2ysmJtZex59dgTj4Doq50N9CG9dLRe/RIudc/5CCoFNw=="], + "ini": ["ini@6.0.0", "", {}, "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ=="], "internmap": ["internmap@1.0.1", "", {}, "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw=="], "ip-address": ["ip-address@10.2.0", "", {}, "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA=="], - "ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], - "is-arrayish": ["is-arrayish@0.2.1", "", {}, "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="], "is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="], - "is-ci": ["is-ci@2.0.0", "", { "dependencies": { "ci-info": "^2.0.0" }, "bin": { "is-ci": "bin.js" } }, "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w=="], - "is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="], - "is-docker": ["is-docker@2.2.1", "", { "bin": { "is-docker": "cli.js" } }, "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="], - "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], - "is-installed-globally": ["is-installed-globally@0.4.0", "", { "dependencies": { "global-dirs": "^3.0.0", "is-path-inside": "^3.0.2" } }, "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ=="], - - "is-lambda": ["is-lambda@1.0.1", "", {}, "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ=="], - - "is-npm": ["is-npm@5.0.0", "", {}, "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA=="], - "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], "is-obj": ["is-obj@2.0.0", "", {}, "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w=="], @@ -1572,18 +1340,12 @@ "is-unicode-supported": ["is-unicode-supported@0.1.0", "", {}, "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw=="], - "is-wsl": ["is-wsl@2.2.0", "", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="], - - "is-yarn-global": ["is-yarn-global@0.3.0", "", {}, "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw=="], - "isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], "isexe": ["isexe@4.0.0", "", {}, "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw=="], "isobject": ["isobject@4.0.0", "", {}, "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA=="], - "isstream": ["isstream@0.1.2", "", {}, "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="], - "java-parser": ["java-parser@3.0.1", "", { "dependencies": { "chevrotain": "11.0.3", "chevrotain-allstar": "0.3.1", "lodash": "4.17.21" } }, "sha512-sDIR7u9b7O2JViNUxiZRhnRz7URII/eE7g2B+BmGxDeS6Ex3OYAcCyz5oh0H4LQ+hL/BS8OJTz8apMy9xtGmrQ=="], "jest-worker": ["jest-worker@27.5.1", "", { "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" } }, "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg=="], @@ -1594,54 +1356,34 @@ "js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="], - "jsbn": ["jsbn@0.1.1", "", {}, "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="], - "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], "jshint": ["jshint@2.13.6", "", { "dependencies": { "cli": "~1.0.0", "console-browserify": "1.1.x", "exit": "0.1.x", "htmlparser2": "3.8.x", "lodash": "~4.17.21", "minimatch": "~3.0.2", "strip-json-comments": "1.0.x" }, "bin": { "jshint": "bin/jshint" } }, "sha512-IVdB4G0NTTeQZrBoM8C5JFVLjV2KtZ9APgybDA1MK73xb09qFs0jCXyQLnCOp1cSZZZbvhq/6mfXHUTaDkffuQ=="], - "json-buffer": ["json-buffer@3.0.0", "", {}, "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ=="], - "json-parse-even-better-errors": ["json-parse-even-better-errors@2.3.1", "", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="], - "json-schema": ["json-schema@0.4.0", "", {}, "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="], - "json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], - "json-schema-typed": ["json-schema-typed@7.0.3", "", {}, "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A=="], - "json-stringify-nice": ["json-stringify-nice@1.1.4", "", {}, "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw=="], - "json-stringify-safe": ["json-stringify-safe@5.0.1", "", {}, "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="], - "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], "jsonc-parser": ["jsonc-parser@3.3.1", "", {}, "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ=="], - "jsonfile": ["jsonfile@6.2.1", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q=="], - "jsonparse": ["jsonparse@1.3.1", "", {}, "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg=="], - "jsprim": ["jsprim@1.4.2", "", { "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", "json-schema": "0.4.0", "verror": "1.10.0" } }, "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw=="], - "jszip": ["jszip@3.10.1", "", { "dependencies": { "lie": "~3.3.0", "pako": "~1.0.2", "readable-stream": "~2.3.6", "setimmediate": "^1.0.5" } }, "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g=="], "just-diff": ["just-diff@6.0.2", "", {}, "sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA=="], "just-diff-apply": ["just-diff-apply@5.5.0", "", {}, "sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw=="], - "katex": ["katex@0.16.45", "", { "dependencies": { "commander": "^8.3.0" }, "bin": { "katex": "cli.js" } }, "sha512-pQpZbdBu7wCTmQUh7ufPmLr0pFoObnGUoL/yhtwJDgmmQpbkg/0HSVti25Fu4rmd1oCR6NGWe9vqTWuWv3GcNA=="], - - "keyv": ["keyv@3.1.0", "", { "dependencies": { "json-buffer": "3.0.0" } }, "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA=="], + "katex": ["katex@0.16.47", "", { "dependencies": { "commander": "^8.3.0" }, "bin": { "katex": "cli.js" } }, "sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg=="], "khroma": ["khroma@2.1.0", "", {}, "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw=="], - "latest-version": ["latest-version@5.1.0", "", { "dependencies": { "package-json": "^6.3.0" } }, "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA=="], - "layout-base": ["layout-base@1.0.2", "", {}, "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg=="], - "lazystream": ["lazystream@1.0.1", "", { "dependencies": { "readable-stream": "^2.0.5" } }, "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw=="], - "lie": ["lie@3.3.0", "", { "dependencies": { "immediate": "~3.0.5" } }, "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ=="], "lightningcss": ["lightningcss@1.33.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.33.0", "lightningcss-darwin-arm64": "1.33.0", "lightningcss-darwin-x64": "1.33.0", "lightningcss-freebsd-x64": "1.33.0", "lightningcss-linux-arm-gnueabihf": "1.33.0", "lightningcss-linux-arm64-gnu": "1.33.0", "lightningcss-linux-arm64-musl": "1.33.0", "lightningcss-linux-x64-gnu": "1.33.0", "lightningcss-linux-x64-musl": "1.33.0", "lightningcss-win32-arm64-msvc": "1.33.0", "lightningcss-win32-x64-msvc": "1.33.0" } }, "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA=="], @@ -1670,7 +1412,7 @@ "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], - "linkify-it": ["linkify-it@5.0.1", "", { "dependencies": { "uc.micro": "^2.0.0" } }, "sha512-wVoTjP4Q6R0NW5hiZkVJaFZPWgtXfoGF+6LucL3/FtiNjmcHhYjEr5f1Kqjirc1nBW07J/ZuRFumqr2oqccEWg=="], + "linkify-it": ["linkify-it@5.0.2", "", { "dependencies": { "uc.micro": "^2.0.0" } }, "sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q=="], "loader-runner": ["loader-runner@4.3.1", "", {}, "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q=="], @@ -1684,39 +1426,23 @@ "lodash.debounce": ["lodash.debounce@4.0.8", "", {}, "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="], - "lodash.defaults": ["lodash.defaults@4.2.0", "", {}, "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ=="], - - "lodash.difference": ["lodash.difference@4.5.0", "", {}, "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA=="], - - "lodash.flatten": ["lodash.flatten@4.4.0", "", {}, "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g=="], - - "lodash.isplainobject": ["lodash.isplainobject@4.0.6", "", {}, "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="], - - "lodash.union": ["lodash.union@4.6.0", "", {}, "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw=="], - "log-symbols": ["log-symbols@4.1.0", "", { "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" } }, "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg=="], - "loud-rejection": ["loud-rejection@2.2.0", "", { "dependencies": { "currently-unhandled": "^0.4.1", "signal-exit": "^3.0.2" } }, "sha512-S0FayMXku80toa5sZ6Ro4C+s+EtFDCsyJNG/AzFMfX3AxD5Si4dZsgzm/kKnbOxHl5Cv8jBlno8+3XYIh2pNjQ=="], - "loupe": ["loupe@2.3.7", "", { "dependencies": { "get-func-name": "^2.0.1" } }, "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA=="], - "lowercase-keys": ["lowercase-keys@1.0.1", "", {}, "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA=="], - "lru-cache": ["lru-cache@11.3.6", "", {}, "sha512-Gf/KoL3C/MlI7Bt0PGI9I+TeTC/I6r/csU58N4BSNc4lppLBeKsOdFYkK+dX0ABDUMJNfCHTyPpzwwO21Awd3A=="], - "macos-release": ["macos-release@2.5.1", "", {}, "sha512-DXqXhEM7gW59OjZO8NIjBCz9AQ1BEMrfiOAl4AYByHCtVHRF4KoGNO8mqQeM8lRCtQe/UnJ4imO/d2HdkKsd+A=="], - "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], "make-dir": ["make-dir@3.1.0", "", { "dependencies": { "semver": "^6.0.0" } }, "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw=="], "make-fetch-happen": ["make-fetch-happen@15.0.5", "", { "dependencies": { "@gar/promise-retry": "^1.0.0", "@npmcli/agent": "^4.0.0", "@npmcli/redact": "^4.0.0", "cacache": "^20.0.1", "http-cache-semantics": "^4.1.1", "minipass": "^7.0.2", "minipass-fetch": "^5.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^1.0.0", "proc-log": "^6.0.0", "ssri": "^13.0.0" } }, "sha512-uCbIa8jWWmQZt4dSnEStkVC6gdakiinAm4PiGsywIkguF0eWMdcjDz0ECYhUolFU3pFLOev9VNPCEygydXnddg=="], - "markdown-it": ["markdown-it@14.2.0", "", { "dependencies": { "argparse": "^2.0.1", "entities": "^4.4.0", "linkify-it": "^5.0.1", "mdurl": "^2.0.0", "punycode.js": "^2.3.1", "uc.micro": "^2.1.0" }, "bin": { "markdown-it": "bin/markdown-it.mjs" } }, "sha512-1TGiQiJVRQ3NPmZH6sx5Cfnmg6GQm9jvC1ch4TK511NjSJvjzKLzn5pPfZRNZkRPZP0HqCioSndqH8v2nRaWVQ=="], + "markdown-it": ["markdown-it@14.3.0", "", { "dependencies": { "argparse": "^2.0.1", "entities": "^4.5.0", "linkify-it": "^5.0.2", "mdurl": "^2.0.0", "punycode.js": "^2.3.1", "uc.micro": "^2.1.0" }, "bin": { "markdown-it": "bin/markdown-it.mjs" } }, "sha512-RCEsPjR+sr0x+AuYp601tKTkgFG4YEPLCzHST3cQ/fhlJkqAkz1L2/Qbp1j9qw5SBwQHFBoW8+hoN5xssOF0Tw=="], - "markdown-it-anchor": ["markdown-it-anchor@9.2.0", "", { "peerDependencies": { "@types/markdown-it": "*", "markdown-it": "*" } }, "sha512-sa2ErMQ6kKOA4l31gLGYliFQrMKkqSO0ZJgGhDHKijPf0pNFM9vghjAh3gn26pS4JDRs7Iwa9S36gxm3vgZTzg=="], + "markdown-it-anchor": ["markdown-it-anchor@9.2.1", "", { "peerDependencies": { "@types/markdown-it": "*", "markdown-it": "*" } }, "sha512-p6APiLJDFAW2GEvaavDvhIBn7jrX2jLv77NkBGgNacFTurbORYc4pyYySg/mI6mpR6cHQuAtzKtmqgQr4K8dsQ=="], - "markdown-it-emoji": ["markdown-it-emoji@3.0.0", "", {}, "sha512-+rUD93bXHubA4arpEZO3q80so0qgoFJEKRkRbjKX8RTdca89v2kfyF+xR3i2sQTwql9tpPZPOQN5B+PunspXRg=="], + "markdown-it-emoji": ["markdown-it-emoji@3.1.0", "", {}, "sha512-NhmMEH2ywduD4Nty1E8uB5NqfLhAT1VR0dyvoJyStKOqCzbZmVdn/+8wj7zpDsb/fLBikpCPsWwxqKlvMmbz4g=="], "markdown-it-footnote": ["markdown-it-footnote@4.0.0", "", {}, "sha512-WYJ7urf+khJYl3DqofQpYfEYkZKbmXmwxQV8c8mO/hGIhgZ1wOe7R4HLFNwqx7TjILbnC98fuyeSsin19JdFcQ=="], @@ -1728,42 +1454,26 @@ "marked": ["marked@15.0.12", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA=="], - "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], - - "md5-file": ["md5-file@5.0.0", "", { "bin": { "md5-file": "cli.js" } }, "sha512-xbEFXCYVWrSx/gEKS1VPlg84h/4L20znVIulKw6kMfmBUAZNAnF00eczz9ICMl+/hjQGo5KSXRxbL/47X3rmMw=="], - "mdurl": ["mdurl@2.0.0", "", {}, "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w=="], - "media-typer": ["media-typer@0.3.0", "", {}, "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="], - - "merge-descriptors": ["merge-descriptors@1.0.3", "", {}, "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ=="], - "merge-stream": ["merge-stream@2.0.0", "", {}, "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="], "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], "mermaid": ["mermaid@11.15.0", "", { "dependencies": { "@braintree/sanitize-url": "^7.1.1", "@iconify/utils": "^3.0.2", "@mermaid-js/parser": "^1.1.1", "@types/d3": "^7.4.3", "@upsetjs/venn.js": "^2.0.0", "cytoscape": "^3.33.1", "cytoscape-cose-bilkent": "^4.1.0", "cytoscape-fcose": "^2.2.0", "d3": "^7.9.0", "d3-sankey": "^0.12.3", "dagre-d3-es": "7.0.14", "dayjs": "^1.11.19", "dompurify": "^3.3.1", "es-toolkit": "^1.45.1", "katex": "^0.16.25", "khroma": "^2.1.0", "marked": "^16.3.0", "roughjs": "^4.6.6", "stylis": "^4.3.6", "ts-dedent": "^2.2.0", "uuid": "^11.1.0 || ^12 || ^13 || ^14.0.0" } }, "sha512-pTMbcf3rWdtLiYGpmoTjHEpeY8seiy6sR+9nD7LOs8KfUbHE4lOUAprTRqRAcWSQ6MQpdX+YEsxShtGsINtPtw=="], - "methods": ["methods@1.1.2", "", {}, "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="], - "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], - "mime": ["mime@1.6.0", "", { "bin": { "mime": "cli.js" } }, "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="], - "mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], "mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], "mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], - "mimic-response": ["mimic-response@1.0.1", "", {}, "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="], - "mini-css-extract-plugin": ["mini-css-extract-plugin@2.10.2", "", { "dependencies": { "schema-utils": "^4.0.0", "tapable": "^2.2.1" }, "peerDependencies": { "webpack": "^5.0.0" } }, "sha512-AOSS0IdEB95ayVkxn5oGzNQwqAi2J0Jb/kKm43t7H73s8+f5873g0yuj0PNvK4dO75mu5DHg4nlgp4k6Kga8eg=="], "minimatch": ["minimatch@4.2.1", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g=="], - "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], - "minipass": ["minipass@7.1.3", "", {}, "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A=="], "minipass-collect": ["minipass-collect@2.0.1", "", { "dependencies": { "minipass": "^7.0.3" } }, "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw=="], @@ -1772,23 +1482,19 @@ "minipass-flush": ["minipass-flush@1.0.7", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-TbqTz9cUwWyHS2Dy89P3ocAGUGxKjjLuR9z8w4WUTGAVgEj17/4nhgo2Du56i0Fm3Pm30g4iA8Lcqctc76jCzA=="], - "minipass-json-stream": ["minipass-json-stream@1.0.2", "", { "dependencies": { "jsonparse": "^1.3.1", "minipass": "^3.0.0" } }, "sha512-myxeeTm57lYs8pH2nxPzmEEg8DGIgW+9mv6D4JZD2pa81I/OBjeU7PtICXV6c9eRGTA5JMDsuIPUZRCyBMYNhg=="], - "minipass-pipeline": ["minipass-pipeline@1.2.4", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A=="], "minipass-sized": ["minipass-sized@2.0.0", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-zSsHhto5BcUVM2m1LurnXY6M//cGhVaegT71OfOXoprxT6o780GZd792ea6FfrQkuU4usHZIUczAQMRUE2plzA=="], "minizlib": ["minizlib@3.1.0", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw=="], - "mkdirp": ["mkdirp@0.5.6", "", { "dependencies": { "minimist": "^1.2.6" }, "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw=="], - "mlly": ["mlly@1.8.1", "", { "dependencies": { "acorn": "^8.16.0", "pathe": "^2.0.3", "pkg-types": "^1.3.1", "ufo": "^1.6.3" } }, "sha512-SnL6sNutTwRWWR/vcmCYHSADjiEesp5TGQQ0pXyLhW5IoeibRlF/CbSLailbB3CNqJUk9cVJ9dUDnbD7GrcHBQ=="], "mocha": ["mocha@9.2.2", "", { "dependencies": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", "chokidar": "3.5.3", "debug": "4.3.3", "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", "glob": "7.2.0", "growl": "1.10.5", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", "minimatch": "4.2.1", "ms": "2.1.3", "nanoid": "3.3.1", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", "which": "2.0.2", "workerpool": "6.2.0", "yargs": "16.2.0", "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" }, "bin": { "mocha": "bin/mocha", "_mocha": "bin/_mocha" } }, "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g=="], - "motion": ["motion@12.42.0", "", { "dependencies": { "framer-motion": "^12.42.0", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-Qhwvu9sVl5/URSq5CNzwMCpSKK8Uhnrwb6VO977kZyj/wOCS7mWebJUnBoHx5cZU1Zv8a9BD5CSICWKAlrLJgA=="], + "motion": ["motion@12.43.0", "", { "dependencies": { "framer-motion": "^12.43.0", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-BQgQbSa9Hn3/mtbib0MK53y6JSANa+YKUKlaYnWzAVDH424RYQ5LVpV3pNiWH00BA2z4ojsSdMzqT7g2FQwjuQ=="], - "motion-dom": ["motion-dom@12.42.0", "", { "dependencies": { "motion-utils": "^12.39.0" } }, "sha512-M63h4n8R+quJdNhBwuLlgxM+OLYa9+I/T2pzDRboB9fLXRdbou+Gw7Zury+SkpaCyACP1JHSjHgZ1EgTkBr30w=="], + "motion-dom": ["motion-dom@12.43.0", "", { "dependencies": { "motion-utils": "^12.39.0" } }, "sha512-azKON4d9S65PEoFUiQTMTgPheEmzf2QngdRc50AKfJp9Q9mmcBVw22c8eMq9k8kxOFHdL7+WZY7N/5F/lwiDag=="], "motion-utils": ["motion-utils@12.39.0", "", {}, "sha512-8nadJAJjTtqRkmRF36FoJTrywK9nnFmnPwnSMyxaOCU7GDjN9RTMJIxx9De8ErM+vpPhMccr/6fo5WciyQLnMQ=="], @@ -1796,11 +1502,9 @@ "mustache": ["mustache@4.2.0", "", { "bin": { "mustache": "bin/mustache" } }, "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ=="], - "mute-stream": ["mute-stream@0.0.7", "", {}, "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ=="], + "nanoid": ["nanoid@3.3.16", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q=="], - "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], - - "negotiator": ["negotiator@0.6.4", "", {}, "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w=="], + "negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="], "neo-async": ["neo-async@2.6.2", "", {}, "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="], @@ -1808,21 +1512,17 @@ "node-gyp": ["node-gyp@12.3.0", "", { "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", "graceful-fs": "^4.2.6", "nopt": "^9.0.0", "proc-log": "^6.0.0", "semver": "^7.3.5", "tar": "^7.5.4", "tinyglobby": "^0.2.12", "undici": "^6.25.0", "which": "^6.0.0" }, "bin": { "node-gyp": "bin/node-gyp.js" } }, "sha512-QNcUWM+HgJplcPzBvFBZ9VXacyGZ4+VTOb80PwWR+TlVzoHbRKULNEzpRsnaoxG3Wzr7Qh7BYxGDU3CbKib2Yg=="], - "node-releases": ["node-releases@2.0.38", "", {}, "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw=="], + "node-releases": ["node-releases@2.0.53", "", {}, "sha512-D9UOmYG3UH1V+ENW56t5QXBwJw1YEY18ruVeus89Rw+SyIgjPkCO84bRzO3uNIYosJbNwiabWVn48o3uJLjxFQ=="], "nopt": ["nopt@9.0.0", "", { "dependencies": { "abbrev": "^4.0.0" }, "bin": { "nopt": "bin/nopt.js" } }, "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw=="], - "normalize-package-data": ["normalize-package-data@3.0.3", "", { "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" } }, "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA=="], - "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], - "normalize-url": ["normalize-url@4.5.1", "", {}, "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA=="], - "npm-bundled": ["npm-bundled@5.0.0", "", { "dependencies": { "npm-normalize-package-bin": "^5.0.0" } }, "sha512-JLSpbzh6UUXIEoqPsYBvVNVmyrjVZ1fzEFbqxKkTJQkWBO3xFzFT+KDnSKQWwOQNbuWRwt5LSD6HOTLGIWzfrw=="], "npm-install-checks": ["npm-install-checks@8.0.0", "", { "dependencies": { "semver": "^7.1.1" } }, "sha512-ScAUdMpyzkbpxoNekQ3tNRdFI8SJ86wgKZSQZdUxT+bj0wVFpsEMWnkXP0twVe1gJyNF5apBWDJhhIbgrIViRA=="], - "npm-normalize-package-bin": ["npm-normalize-package-bin@1.0.1", "", {}, "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA=="], + "npm-normalize-package-bin": ["npm-normalize-package-bin@5.0.0", "", {}, "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag=="], "npm-package-arg": ["npm-package-arg@13.0.2", "", { "dependencies": { "hosted-git-info": "^9.0.0", "proc-log": "^6.0.0", "semver": "^7.3.5", "validate-npm-package-name": "^7.0.0" } }, "sha512-IciCE3SY3uE84Ld8WZU23gAPPV9rIYod4F+rc+vJ7h7cwAJt9Vk6TVsK60ry7Uj3SRS3bqRRIGuTp9YVlk6WNA=="], @@ -1834,48 +1534,20 @@ "npm-run-path": ["npm-run-path@4.0.1", "", { "dependencies": { "path-key": "^3.0.0" } }, "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw=="], - "npmlog": ["npmlog@4.1.2", "", { "dependencies": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", "gauge": "~2.7.3", "set-blocking": "~2.0.0" } }, "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg=="], - - "number-is-nan": ["number-is-nan@1.0.1", "", {}, "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ=="], - - "oauth-sign": ["oauth-sign@0.9.0", "", {}, "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="], - - "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], - - "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], - "objectorarray": ["objectorarray@1.0.5", "", {}, "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg=="], "obug": ["obug@2.1.3", "", {}, "sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg=="], - "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], - - "on-headers": ["on-headers@1.1.0", "", {}, "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A=="], - "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], "onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], - "open": ["open@7.4.2", "", { "dependencies": { "is-docker": "^2.0.0", "is-wsl": "^2.1.1" } }, "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q=="], - - "os-name": ["os-name@4.0.1", "", { "dependencies": { "macos-release": "^2.5.0", "windows-release": "^4.0.0" } }, "sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw=="], - - "os-tmpdir": ["os-tmpdir@1.0.2", "", {}, "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g=="], - - "p-cancelable": ["p-cancelable@1.1.0", "", {}, "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw=="], - - "p-finally": ["p-finally@1.0.0", "", {}, "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow=="], - "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], "p-map": ["p-map@7.0.4", "", {}, "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ=="], - "p-try": ["p-try@2.2.0", "", {}, "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="], - - "package-json": ["package-json@6.5.0", "", { "dependencies": { "got": "^9.6.0", "registry-auth-token": "^4.0.0", "registry-url": "^5.0.0", "semver": "^6.2.0" } }, "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ=="], - "package-manager-detector": ["package-manager-detector@1.6.0", "", {}, "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA=="], "pacote": ["pacote@21.5.0", "", { "dependencies": { "@gar/promise-retry": "^1.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": "^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", "sigstore": "^4.0.0", "ssri": "^13.0.0", "tar": "^7.4.3" }, "bin": { "pacote": "bin/index.js" } }, "sha512-VtZ0SB8mb5Tzw3dXDfVAIjhyVKUHZkS/ZH9/5mpKenwC9sFOXNI0JI7kEF7IMkwOnsWMFrvAZHzx1T5fmrp9FQ=="], @@ -1888,8 +1560,6 @@ "parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="], - "parseurl": ["parseurl@1.3.3", "", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="], - "path-browserify": ["path-browserify@1.0.1", "", {}, "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="], "path-data-parser": ["path-data-parser@0.1.0", "", {}, "sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w=="], @@ -1906,33 +1576,25 @@ "path-scurry": ["path-scurry@2.0.2", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg=="], - "path-to-regexp": ["path-to-regexp@0.1.13", "", {}, "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA=="], - "path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="], "pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], "pathval": ["pathval@1.1.1", "", {}, "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ=="], - "performance-now": ["performance-now@2.1.0", "", {}, "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="], - "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], - "picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="], - - "pify": ["pify@5.0.0", "", {}, "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA=="], + "picomatch": ["picomatch@4.0.7", "", {}, "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA=="], "pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], - "pkg-up": ["pkg-up@3.1.0", "", { "dependencies": { "find-up": "^3.0.0" } }, "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA=="], - "plist": ["plist@3.1.0", "", { "dependencies": { "@xmldom/xmldom": "^0.8.8", "base64-js": "^1.5.1", "xmlbuilder": "^15.1.1" } }, "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ=="], "points-on-curve": ["points-on-curve@0.2.0", "", {}, "sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A=="], "points-on-path": ["points-on-path@0.2.1", "", { "dependencies": { "path-data-parser": "0.1.0", "points-on-curve": "0.2.0" } }, "sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g=="], - "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], + "postcss": ["postcss@8.5.25", "", { "dependencies": { "nanoid": "^3.3.16", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw=="], "postcss-loader": ["postcss-loader@8.2.1", "", { "dependencies": { "cosmiconfig": "^9.0.0", "jiti": "^2.5.1", "semver": "^7.6.2" }, "peerDependencies": { "@rspack/core": "0.x || ^1.0.0 || ^2.0.0-0", "postcss": "^7.0.0 || ^8.0.1", "webpack": "^5.0.0" }, "optionalPeers": ["@rspack/core", "webpack"] }, "sha512-k98jtRzthjj3f76MYTs9JTpRqV1RaaMhEU0Lpw9OTmQZQdppg4B30VZ74BojuBHt3F4KyubHJoXCMUeM8Bqeow=="], @@ -1948,8 +1610,6 @@ "postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="], - "prepend-http": ["prepend-http@2.0.0", "", {}, "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA=="], - "prettier": ["prettier@3.8.3", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw=="], "prettier-plugin-java": ["prettier-plugin-java@2.8.1", "", { "dependencies": { "java-parser": "3.0.1" }, "peerDependencies": { "prettier": "^3.0.0" } }, "sha512-tkteH5OSCEb0E7wKnhhUSitr1pGUCUt9M//CwerSNhoalL/qv0jXTeSVBPZ36KC+kZl3nbq4dxh144NuGchACg=="], @@ -1964,54 +1624,22 @@ "promise-call-limit": ["promise-call-limit@3.0.2", "", {}, "sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw=="], - "promise-inflight": ["promise-inflight@1.0.1", "", {}, "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g=="], - - "promise-retry": ["promise-retry@2.0.1", "", { "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" } }, "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g=="], - - "promzard": ["promzard@0.3.0", "", { "dependencies": { "read": "1" } }, "sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw=="], - "properties-parser": ["properties-parser@0.6.0", "", {}, "sha512-qvr2cSmoA0dln0MARAKwBzPkkXn7FqwX+RVVNpMdMJc7rt9mqO2cXwluxtux9fHrLhjnPFaQkS8BM0kFrTCnSw=="], - "proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="], - - "psl": ["psl@1.15.0", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w=="], - - "pump": ["pump@3.0.4", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA=="], - "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], "punycode.js": ["punycode.js@2.3.1", "", {}, "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA=="], - "pupa": ["pupa@2.1.1", "", { "dependencies": { "escape-goat": "^2.0.0" } }, "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A=="], - - "q": ["q@1.5.1", "", {}, "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="], - - "qs": ["qs@6.5.5", "", {}, "sha512-mzR4sElr1bfCaPJe7m8ilJ6ZXdDaGoObcYR0ZHSsktM/Lt21MVHj5De30GQH2eiZ1qGRTO7LCAzQsUeXTNexWQ=="], - "querystringify": ["querystringify@2.2.0", "", {}, "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ=="], "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], "randombytes": ["randombytes@2.1.0", "", { "dependencies": { "safe-buffer": "^5.1.0" } }, "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ=="], - "range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], - - "raw-body": ["raw-body@2.5.3", "", { "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", "iconv-lite": "~0.4.24", "unpipe": "~1.0.0" } }, "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA=="], - "raw-loader": ["raw-loader@4.0.2", "", { "dependencies": { "loader-utils": "^2.0.0", "schema-utils": "^3.0.0" }, "peerDependencies": { "webpack": "^4.0.0 || ^5.0.0" } }, "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA=="], - "rc": ["rc@1.2.8", "", { "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "bin": { "rc": "./cli.js" } }, "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="], - - "read": ["read@1.0.7", "", { "dependencies": { "mute-stream": "~0.0.4" } }, "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ=="], - - "read-chunk": ["read-chunk@3.2.0", "", { "dependencies": { "pify": "^4.0.1", "with-open-file": "^0.1.6" } }, "sha512-CEjy9LCzhmD7nUpJ1oVOE6s/hBkejlcJEgLQHVnQznOSilOPb+kpKktlLfFDK3/WP43+F80xkUTM2VOkYoSYvQ=="], - "read-cmd-shim": ["read-cmd-shim@6.0.0", "", {}, "sha512-1zM5HuOfagXCBWMN83fuFI/x+T/UhZ7k+KIzhrHXcQoeX5+7gmaDYjELQHmmzIodumBHeByBJT4QYS7ufAgs7A=="], - "read-package-json": ["read-package-json@4.1.2", "", { "dependencies": { "glob": "^7.1.1", "json-parse-even-better-errors": "^2.3.0", "normalize-package-data": "^3.0.0", "npm-normalize-package-bin": "^1.0.0" } }, "sha512-Dqer4pqzamDE2O4M55xp1qZMuLPqi4ldk2ya648FOMHRjwMzFhuxVrG04wd0c38IsvkVdr3vgHI6z+QTPdAjrQ=="], - - "read-package-json-fast": ["read-package-json-fast@2.0.3", "", { "dependencies": { "json-parse-even-better-errors": "^2.3.0", "npm-normalize-package-bin": "^1.0.1" } }, "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ=="], - "readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], "readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], @@ -2022,16 +1650,10 @@ "regexpu-core": ["regexpu-core@6.4.0", "", { "dependencies": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.2.2", "regjsgen": "^0.8.0", "regjsparser": "^0.13.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.2.1" } }, "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA=="], - "registry-auth-token": ["registry-auth-token@4.2.2", "", { "dependencies": { "rc": "1.2.8" } }, "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg=="], - - "registry-url": ["registry-url@5.1.0", "", { "dependencies": { "rc": "^1.2.8" } }, "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw=="], - "regjsgen": ["regjsgen@0.8.0", "", {}, "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q=="], "regjsparser": ["regjsparser@0.13.0", "", { "dependencies": { "jsesc": "~3.1.0" }, "bin": { "regjsparser": "bin/parser" } }, "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q=="], - "request": ["request@2.88.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.0", "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.4.3", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" } }, "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg=="], - "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], @@ -2042,35 +1664,23 @@ "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], - "responselike": ["responselike@1.0.2", "", { "dependencies": { "lowercase-keys": "^1.0.0" } }, "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ=="], - - "restore-cursor": ["restore-cursor@2.0.0", "", { "dependencies": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" } }, "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q=="], - - "retry": ["retry@0.12.0", "", {}, "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow=="], - "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], - "rimraf": ["rimraf@3.0.2", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" } }, "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA=="], - "robust-predicates": ["robust-predicates@3.0.2", "", {}, "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg=="], "rolldown": ["rolldown@1.2.1", "", { "dependencies": { "@oxc-project/types": "=0.142.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.2.1", "@rolldown/binding-darwin-arm64": "1.2.1", "@rolldown/binding-darwin-x64": "1.2.1", "@rolldown/binding-freebsd-x64": "1.2.1", "@rolldown/binding-linux-arm-gnueabihf": "1.2.1", "@rolldown/binding-linux-arm64-gnu": "1.2.1", "@rolldown/binding-linux-arm64-musl": "1.2.1", "@rolldown/binding-linux-ppc64-gnu": "1.2.1", "@rolldown/binding-linux-s390x-gnu": "1.2.1", "@rolldown/binding-linux-x64-gnu": "1.2.1", "@rolldown/binding-linux-x64-musl": "1.2.1", "@rolldown/binding-openharmony-arm64": "1.2.1", "@rolldown/binding-wasm32-wasi": "1.2.1", "@rolldown/binding-win32-arm64-msvc": "1.2.1", "@rolldown/binding-win32-x64-msvc": "1.2.1" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-4FKJhg8d3OiyQOA6Q1Q0hoFFpW9/OoX+VsHzpECsdsIZoOArrAK90gl59YK/Z+gnDel45bgJZK03ozH/9bCqEw=="], "roughjs": ["roughjs@4.6.6", "", { "dependencies": { "hachure-fill": "^0.5.2", "path-data-parser": "^0.1.0", "points-on-curve": "^0.2.0", "points-on-path": "^0.2.1" } }, "sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ=="], - "run-async": ["run-async@2.4.1", "", {}, "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ=="], - "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], "rw": ["rw@1.3.3", "", {}, "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ=="], - "rxjs": ["rxjs@6.6.7", "", { "dependencies": { "tslib": "^1.9.0" } }, "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ=="], - "safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], - "sass": ["sass@1.99.0", "", { "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.1.5", "source-map-js": ">=0.6.2 <2.0.0" }, "optionalDependencies": { "@parcel/watcher": "^2.4.1" }, "bin": { "sass": "sass.js" } }, "sha512-kgW13M54DUB7IsIRM5LvJkNlpH+WhMpooUcaWGFARkF1Tc82v9mIWkCbCYf+MBvpIUBSeSOTilpZjEPr2VYE6Q=="], + "sass": ["sass@1.103.1", "", { "dependencies": { "chokidar": "^5.0.0", "immutable": "^5.1.5", "source-map-js": ">=0.6.2 <2.0.0" }, "optionalDependencies": { "@parcel/watcher": "^2.4.1" }, "bin": { "sass": "sass.js" } }, "sha512-9icZURbP51S6S0QGoyaeqk9uB06GNWxsFYWfH5RgpFgqK5FA8tJcM3AdVxrZEVJ7dz+L87nG95gBKf4VuaMHGw=="], "sass-loader": ["sass-loader@16.0.8", "", { "dependencies": { "neo-async": "^2.6.2" }, "peerDependencies": { "@rspack/core": "0.x || ^1.0.0 || ^2.0.0-0", "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", "sass": "^1.3.0", "sass-embedded": "*", "webpack": "^5.0.0" }, "optionalPeers": ["@rspack/core", "node-sass", "sass", "sass-embedded", "webpack"] }, "sha512-hcov4ZwZJIGbEuyNr9EmiTmZueyrxSToE6GOzoZnq5JM7ecRO7ttyvilPn+VmRsqiP16+VYZzVnGZj/hzZgKBA=="], @@ -2080,32 +1690,14 @@ "semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], - "semver-diff": ["semver-diff@3.1.1", "", { "dependencies": { "semver": "^6.3.0" } }, "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg=="], - - "send": ["send@0.19.2", "", { "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "~0.5.2", "http-errors": "~2.0.1", "mime": "1.6.0", "ms": "2.1.3", "on-finished": "~2.4.1", "range-parser": "~1.2.1", "statuses": "~2.0.2" } }, "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg=="], - "serialize-javascript": ["serialize-javascript@6.0.0", "", { "dependencies": { "randombytes": "^2.1.0" } }, "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag=="], - "serve-static": ["serve-static@1.16.3", "", { "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", "send": "~0.19.1" } }, "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA=="], - - "set-blocking": ["set-blocking@2.0.0", "", {}, "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="], - "setimmediate": ["setimmediate@1.0.5", "", {}, "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="], - "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], - "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], - "side-channel": ["side-channel@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.4", "side-channel-list": "^1.0.1", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ=="], - - "side-channel-list": ["side-channel-list@1.0.1", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.4" } }, "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w=="], - - "side-channel-map": ["side-channel-map@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="], - - "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], - "siginfo": ["siginfo@2.0.0", "", {}, "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g=="], "signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], @@ -2118,7 +1710,7 @@ "socks": ["socks@2.8.9", "", { "dependencies": { "ip-address": "^10.1.1", "smart-buffer": "^4.2.0" } }, "sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw=="], - "socks-proxy-agent": ["socks-proxy-agent@6.2.1", "", { "dependencies": { "agent-base": "^6.0.2", "debug": "^4.3.3", "socks": "^2.6.2" } }, "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ=="], + "socks-proxy-agent": ["socks-proxy-agent@8.0.5", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "^4.3.4", "socks": "^2.8.3" } }, "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw=="], "source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], @@ -2126,29 +1718,23 @@ "source-map-support": ["source-map-support@0.5.21", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="], - "spdx-correct": ["spdx-correct@3.2.0", "", { "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA=="], - "spdx-exceptions": ["spdx-exceptions@2.5.0", "", {}, "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w=="], - "spdx-expression-parse": ["spdx-expression-parse@3.0.1", "", { "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q=="], + "spdx-expression-parse": ["spdx-expression-parse@4.0.0", "", { "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ=="], "spdx-license-ids": ["spdx-license-ids@3.0.23", "", {}, "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw=="], "sprintf": ["sprintf@0.1.5", "", {}, "sha512-4X5KsuXFQ7f+d7Y+bi4qSb6eI+YoifDTGr0MQJXRoYO7BO7evfRCjds6kk3z7l5CiJYxgDN1x5Er4WiyCt+zTQ=="], - "sshpk": ["sshpk@1.18.0", "", { "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" } }, "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ=="], - "ssri": ["ssri@13.0.1", "", { "dependencies": { "minipass": "^7.0.3" } }, "sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ=="], "stackback": ["stackback@0.0.2", "", {}, "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw=="], - "statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="], - "std-env": ["std-env@4.2.0", "", {}, "sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw=="], "string-argv": ["string-argv@0.3.2", "", {}, "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q=="], - "string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], + "string-width": ["string-width@8.2.2", "", { "dependencies": { "get-east-asian-width": "^1.5.0", "strip-ansi": "^7.1.2" } }, "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg=="], "string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], @@ -2156,8 +1742,6 @@ "strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], - "strip-bom": ["strip-bom@4.0.0", "", {}, "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w=="], - "strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="], "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], @@ -2178,54 +1762,36 @@ "tar": ["tar@7.5.22", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.1.0", "yallist": "^5.0.0" } }, "sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA=="], - "tar-stream": ["tar-stream@2.2.0", "", { "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.1.1" } }, "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ=="], - "terminal": ["terminal@0.1.4", "", { "dependencies": { "sprintf": ">= 0.1.1" } }, "sha512-w6OAFpUO+TimZUdQ46dK3fYYOCCBIsS2QUfIEkzX21oJ8tvJOJvJkcmrbleLH5KG02SNohYFDj81bL3VPaULsQ=="], "terser": ["terser@5.44.1", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw=="], "terser-webpack-plugin": ["terser-webpack-plugin@5.3.16", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", "schema-utils": "^4.3.0", "serialize-javascript": "^6.0.2", "terser": "^5.31.1" }, "peerDependencies": { "webpack": "^5.1.0" } }, "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q=="], - "through": ["through@2.3.8", "", {}, "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg=="], - "tinybench": ["tinybench@2.9.0", "", {}, "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg=="], "tinyexec": ["tinyexec@1.0.4", "", {}, "sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw=="], - "tinyglobby": ["tinyglobby@0.2.16", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg=="], + "tinyglobby": ["tinyglobby@0.2.17", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g=="], "tinyrainbow": ["tinyrainbow@3.1.1", "", {}, "sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw=="], "tmp": ["tmp@0.2.5", "", {}, "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow=="], - "to-readable-stream": ["to-readable-stream@1.0.0", "", {}, "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q=="], - "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], - "toidentifier": ["toidentifier@1.0.1", "", {}, "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="], - - "tough-cookie": ["tough-cookie@4.1.4", "", { "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", "universalify": "^0.2.0", "url-parse": "^1.5.3" } }, "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag=="], - "treeverse": ["treeverse@3.0.0", "", {}, "sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ=="], "ts-dedent": ["ts-dedent@2.2.0", "", {}, "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ=="], - "ts-loader": ["ts-loader@9.5.7", "", { "dependencies": { "chalk": "^4.1.0", "enhanced-resolve": "^5.0.0", "micromatch": "^4.0.0", "semver": "^7.3.4", "source-map": "^0.7.4" }, "peerDependencies": { "typescript": "*", "webpack": "^5.0.0" } }, "sha512-/ZNrKgA3K3PtpMYOC71EeMWIloGw3IYEa5/t1cyz2r5/PyUwTXGzYJvcD3kfUvmhlfpz1rhV8B2O6IVTQ0avsg=="], + "ts-loader": ["ts-loader@9.6.2", "", { "dependencies": { "chalk": "^4.1.0", "picomatch": "^4.0.0", "source-map": "^0.7.4" }, "peerDependencies": { "loader-utils": "*", "typescript": "*", "webpack": "^4.0.0 || ^5.0.0" }, "optionalPeers": ["loader-utils"] }, "sha512-R4iuczmtgxvtuI556s+hTZ6/7Ee03VCAk/l/M8LY1OAsUgB7YydsCxkgq9D9pKRaD7GJqUi2u8fp9zZP/ufjKA=="], "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], "tuf-js": ["tuf-js@4.1.0", "", { "dependencies": { "@tufjs/models": "4.1.0", "debug": "^4.4.3", "make-fetch-happen": "^15.0.1" } }, "sha512-50QV99kCKH5P/Vs4E2Gzp7BopNV+KzTXqWeaxrfu5IQJBOULRsTIS9seSsOVT8ZnGXzCyx55nYWAi4qJzpZKEQ=="], - "tunnel-agent": ["tunnel-agent@0.6.0", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w=="], - - "tweetnacl": ["tweetnacl@0.14.5", "", {}, "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA=="], - "type-detect": ["type-detect@4.1.0", "", {}, "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw=="], - "type-fest": ["type-fest@0.20.2", "", {}, "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="], - - "type-is": ["type-is@1.6.18", "", { "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" } }, "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g=="], - "typedarray-to-buffer": ["typedarray-to-buffer@3.1.5", "", { "dependencies": { "is-typedarray": "^1.0.0" } }, "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q=="], "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], @@ -2236,8 +1802,6 @@ "umd-tough-cookie": ["umd-tough-cookie@3.0.0", "", {}, "sha512-LgVV1jgzEPgC/zOj6T9OIDBTj7YCGEJkgoxV2gHYv1Crlst1X95lRIF48hFleGgv4v01Z86LxyyLyvl++M2Srg=="], - "underscore": ["underscore@1.13.8", "", {}, "sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ=="], - "undici": ["undici@6.25.0", "", {}, "sha512-ZgpWDC5gmNiuY9CnLVXEH8rl50xhRCuLNA97fAUnKi8RRuV4E6KG31pDTsLVUKnohJE0I3XDrTeEydAXRw47xg=="], "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], @@ -2250,51 +1814,29 @@ "unicode-property-aliases-ecmascript": ["unicode-property-aliases-ecmascript@2.2.0", "", {}, "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ=="], - "unique-filename": ["unique-filename@1.1.1", "", { "dependencies": { "unique-slug": "^2.0.0" } }, "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ=="], - - "unique-slug": ["unique-slug@2.0.2", "", { "dependencies": { "imurmurhash": "^0.1.4" } }, "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w=="], - "unique-string": ["unique-string@2.0.0", "", { "dependencies": { "crypto-random-string": "^2.0.0" } }, "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg=="], - "universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="], - - "unpipe": ["unpipe@1.0.0", "", {}, "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="], - "untildify": ["untildify@4.0.0", "", {}, "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw=="], - "update-browserslist-db": ["update-browserslist-db@1.2.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="], - - "update-notifier": ["update-notifier@5.1.0", "", { "dependencies": { "boxen": "^5.0.0", "chalk": "^4.1.0", "configstore": "^5.0.1", "has-yarn": "^2.1.0", "import-lazy": "^2.1.0", "is-ci": "^2.0.0", "is-installed-globally": "^0.4.0", "is-npm": "^5.0.0", "is-yarn-global": "^0.3.0", "latest-version": "^5.1.0", "pupa": "^2.1.1", "semver": "^7.3.4", "semver-diff": "^3.1.1", "xdg-basedir": "^4.0.0" } }, "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw=="], + "update-browserslist-db": ["update-browserslist-db@1.3.1", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-ZZ61DsRsOnakl74HAmp3oSN4aXUmEWXf+i/yv0h7tIBfICc3VdrFErQKUUKPgu3AMsTUMbcongALEN4l6GSUrQ=="], "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], "url-parse": ["url-parse@1.5.10", "", { "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" } }, "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ=="], - "url-parse-lax": ["url-parse-lax@3.0.0", "", { "dependencies": { "prepend-http": "^2.0.0" } }, "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ=="], - "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], - "utils-merge": ["utils-merge@1.0.1", "", {}, "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="], - "uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="], "valid-identifier": ["valid-identifier@0.0.2", "", {}, "sha512-zaSmOW6ykXwrkX0YTuFUSoALNEKGaQHpxBJQLb3TXspRNDpBwbfrIQCZqAQ0LKBlKuyn2YOq7NNd6415hvZ33g=="], - "validate-npm-package-license": ["validate-npm-package-license@3.0.4", "", { "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew=="], - "validate-npm-package-name": ["validate-npm-package-name@7.0.2", "", {}, "sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A=="], "vanilla-picker": ["vanilla-picker@2.12.3", "", { "dependencies": { "@sphinxxxx/color-conversion": "^2.2.2" } }, "sha512-qVkT1E7yMbUsB2mmJNFmaXMWE2hF8ffqzMMwe9zdAikd8u2VfnsVY2HQcOUi2F38bgbxzlJBEdS1UUhOXdF9GQ=="], - "vargs": ["vargs@0.1.0", "", {}, "sha512-d/j1kMUt0YjLCQPAI+VMZ7IKwNGjk8dSHMCrHq9txFOCcCIDoe8ck9FmPvABJgxIaZO1tabXmNojQG6mBkLLCw=="], - - "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], - - "verror": ["verror@1.10.0", "", { "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" } }, "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw=="], - "vite": ["vite@8.2.0", "", { "dependencies": { "lightningcss": "^1.33.0", "picomatch": "^4.0.5", "postcss": "^8.5.23", "rolldown": "~1.2.0", "tinyglobby": "^0.2.17" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.4.0", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-pn+CFpM0lwDeKwmOq1ZaBK/9sjorZcgqxki6MbY/jPEVd9vichIlmlD4HmQ5wdP5EgqQCFRaACBxMC7uEGc6lQ=="], - "vitest": ["vitest@4.1.10", "", { "dependencies": { "@vitest/expect": "4.1.10", "@vitest/mocker": "4.1.10", "@vitest/pretty-format": "4.1.10", "@vitest/runner": "4.1.10", "@vitest/snapshot": "4.1.10", "@vitest/spy": "4.1.10", "@vitest/utils": "4.1.10", "es-module-lexer": "^2.0.0", "expect-type": "^1.3.0", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^4.0.0-rc.1", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.1.0", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.1.10", "@vitest/browser-preview": "4.1.10", "@vitest/browser-webdriverio": "4.1.10", "@vitest/coverage-istanbul": "4.1.10", "@vitest/coverage-v8": "4.1.10", "@vitest/ui": "4.1.10", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/coverage-istanbul", "@vitest/coverage-v8", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "./vitest.mjs" } }, "sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw=="], + "vitest": ["vitest@4.1.11", "", { "dependencies": { "@vitest/expect": "4.1.11", "@vitest/mocker": "4.1.11", "@vitest/pretty-format": "4.1.11", "@vitest/runner": "4.1.11", "@vitest/snapshot": "4.1.11", "@vitest/spy": "4.1.11", "@vitest/utils": "4.1.11", "es-module-lexer": "^2.0.0", "expect-type": "^1.3.0", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^4.0.0-rc.1", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.1.0", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.1.11", "@vitest/browser-preview": "4.1.11", "@vitest/browser-webdriverio": "4.1.11", "@vitest/coverage-istanbul": "4.1.11", "@vitest/coverage-v8": "4.1.11", "@vitest/ui": "4.1.11", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/coverage-istanbul", "@vitest/coverage-v8", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "./vitest.mjs" } }, "sha512-fhACrNXUidIbGSBr5FlbuBkO7VWC1ZyLl0DO4CU2DrQoAPxX84Ysxs+HeGQpii5lZWV1Q4gBZTTu49mF+A6Edw=="], "vscode-css-languageservice": ["vscode-css-languageservice@6.3.10", "", { "dependencies": { "@vscode/l10n": "^0.0.18", "vscode-languageserver-textdocument": "^1.0.12", "vscode-languageserver-types": "3.17.5", "vscode-uri": "^3.1.0" } }, "sha512-eq5N9Er3fC4vA9zd9EFhyBG90wtCCuXgRSpAndaOgXMh1Wgep5lBgRIeDgjZBW9pa+332yC9+49cZMW8jcL3MA=="], @@ -2318,8 +1860,6 @@ "watchpack": ["watchpack@2.5.1", "", { "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" } }, "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg=="], - "wd": ["wd@1.14.0", "", { "dependencies": { "archiver": "^3.0.0", "async": "^2.0.0", "lodash": "^4.0.0", "mkdirp": "^0.5.1", "q": "^1.5.1", "request": "2.88.0", "vargs": "^0.1.0" }, "bin": { "wd": "lib/bin.js" } }, "sha512-X7ZfGHHYlQ5zYpRlgP16LUsvYti+Al/6fz3T/ClVyivVCpCZQpESTDdz6zbK910O5OIvujO23Ym2DBBo3XsQlA=="], - "webpack": ["webpack@5.105.0", "", { "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", "acorn": "^8.15.0", "acorn-import-phases": "^1.0.3", "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.19.0", "es-module-lexer": "^2.0.0", "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.3.1", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^4.3.3", "tapable": "^2.3.0", "terser-webpack-plugin": "^5.3.16", "watchpack": "^2.5.1", "webpack-sources": "^3.3.3" }, "bin": { "webpack": "bin/webpack.js" } }, "sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw=="], "webpack-sources": ["webpack-sources@3.3.3", "", {}, "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg=="], @@ -2330,14 +1870,6 @@ "why-is-node-running": ["why-is-node-running@2.3.0", "", { "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" }, "bin": { "why-is-node-running": "cli.js" } }, "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w=="], - "wide-align": ["wide-align@1.1.5", "", { "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" } }, "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg=="], - - "widest-line": ["widest-line@3.1.0", "", { "dependencies": { "string-width": "^4.0.0" } }, "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg=="], - - "windows-release": ["windows-release@4.0.0", "", { "dependencies": { "execa": "^4.0.2" } }, "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg=="], - - "with-open-file": ["with-open-file@0.1.7", "", { "dependencies": { "p-finally": "^1.0.0", "p-try": "^2.1.0", "pify": "^4.0.1" } }, "sha512-ecJS2/oHtESJ1t3ZfMI3B7KIDKyfN0O16miWxdn30zdh66Yd3LsRFebXZXq6GU4xfxLf6nVxp9kIqElb5fqczA=="], - "workerpool": ["workerpool@6.2.0", "", {}, "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A=="], "wrap-ansi": ["wrap-ansi@9.0.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="], @@ -2346,7 +1878,7 @@ "write-file-atomic": ["write-file-atomic@3.0.3", "", { "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", "signal-exit": "^3.0.2", "typedarray-to-buffer": "^3.1.5" } }, "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q=="], - "ws": ["ws@8.21.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g=="], + "ws": ["ws@8.21.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw=="], "xdg-basedir": ["xdg-basedir@4.0.0", "", {}, "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q=="], @@ -2358,7 +1890,7 @@ "yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="], - "yargs": ["yargs@18.0.0", "", { "dependencies": { "cliui": "^9.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "string-width": "^7.2.0", "y18n": "^5.0.5", "yargs-parser": "^22.0.0" } }, "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg=="], + "yargs": ["yargs@18.1.0", "", { "dependencies": { "cliui": "^9.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "string-width": "^8.2.1", "y18n": "^5.0.5", "yargs-parser": "^22.0.0" } }, "sha512-2rAgRKu54VsHkqI0/tYkmluGXHD4KW7yZoycuqDQ15QOTnc2VVfy0nN/1eMhnQLO00A+dwtK20xuCnc1YGeUyg=="], "yargs-parser": ["yargs-parser@22.0.0", "", {}, "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw=="], @@ -2366,15 +1898,15 @@ "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], - "zip-stream": ["zip-stream@2.1.3", "", { "dependencies": { "archiver-utils": "^2.1.0", "compress-commons": "^2.1.1", "readable-stream": "^3.4.0" } }, "sha512-EkXc2JGcKhO5N5aZ7TmuNo45budRaFGHOmz24wtJR7znbNqDPmdZtUauKX6et8KAVseAMBOyWJqEpXcHTBsh7Q=="], - "@babel/core/@babel/generator": ["@babel/generator@8.0.0", "", { "dependencies": { "@babel/parser": "^8.0.0", "@babel/types": "^8.0.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "@types/jsesc": "^2.5.0", "jsesc": "^3.0.2" } }, "sha512-NT9NrVwJsbSV6Y2FSstWa71EETOnzrjkL5/wX3D2mYHtKM+qvqB1DvR4D0Setb/gDBsHzRICifwEWMO8CnTF6g=="], "@babel/core/@babel/parser": ["@babel/parser@8.0.0", "", { "dependencies": { "@babel/types": "^8.0.0" }, "bin": "./bin/babel-parser.js" }, "sha512-aLxAE+imI9bCcyaPrUDjBv3uSkWieifjLe0kuFOZF0zli0L6GCsTmsePnTr55adbIAgYz2zhN1vnFimCBUYcRQ=="], "@babel/core/@babel/traverse": ["@babel/traverse@8.0.0", "", { "dependencies": { "@babel/code-frame": "^8.0.0", "@babel/generator": "^8.0.0", "@babel/helper-globals": "^8.0.0", "@babel/parser": "^8.0.0", "@babel/template": "^8.0.0", "@babel/types": "^8.0.0", "obug": "^2.1.1" } }, "sha512-bxTj/W2VclGE6CctlfQOpxg8MPDzXArRqkOBePw8EHfebcjF7fETWSS3BriEECo+UiU/Yblq+xUtSImFu7cTbw=="], - "@babel/generator/@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], + "@babel/generator/@babel/types": ["@babel/types@7.29.8", "", { "dependencies": { "@babel/helper-string-parser": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7" } }, "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg=="], + + "@babel/helper-compilation-targets/browserslist": ["browserslist@4.28.2", "", { "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", "electron-to-chromium": "^1.5.328", "node-releases": "^2.0.36", "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg=="], "@babel/helper-create-class-features-plugin/@babel/traverse": ["@babel/traverse@8.0.0", "", { "dependencies": { "@babel/code-frame": "^8.0.0", "@babel/generator": "^8.0.0", "@babel/helper-globals": "^8.0.0", "@babel/parser": "^8.0.0", "@babel/template": "^8.0.0", "@babel/types": "^8.0.0", "obug": "^2.1.1" } }, "sha512-bxTj/W2VclGE6CctlfQOpxg8MPDzXArRqkOBePw8EHfebcjF7fETWSS3BriEECo+UiU/Yblq+xUtSImFu7cTbw=="], @@ -2392,7 +1924,7 @@ "@babel/helper-wrap-function/@babel/traverse": ["@babel/traverse@8.0.0", "", { "dependencies": { "@babel/code-frame": "^8.0.0", "@babel/generator": "^8.0.0", "@babel/helper-globals": "^8.0.0", "@babel/parser": "^8.0.0", "@babel/template": "^8.0.0", "@babel/types": "^8.0.0", "obug": "^2.1.1" } }, "sha512-bxTj/W2VclGE6CctlfQOpxg8MPDzXArRqkOBePw8EHfebcjF7fETWSS3BriEECo+UiU/Yblq+xUtSImFu7cTbw=="], - "@babel/parser/@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], + "@babel/parser/@babel/types": ["@babel/types@7.29.8", "", { "dependencies": { "@babel/helper-string-parser": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7" } }, "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg=="], "@babel/plugin-transform-async-generator-functions/@babel/traverse": ["@babel/traverse@8.0.0", "", { "dependencies": { "@babel/code-frame": "^8.0.0", "@babel/generator": "^8.0.0", "@babel/helper-globals": "^8.0.0", "@babel/parser": "^8.0.0", "@babel/template": "^8.0.0", "@babel/types": "^8.0.0", "obug": "^2.1.1" } }, "sha512-bxTj/W2VclGE6CctlfQOpxg8MPDzXArRqkOBePw8EHfebcjF7fETWSS3BriEECo+UiU/Yblq+xUtSImFu7cTbw=="], @@ -2402,11 +1934,11 @@ "@babel/template/@babel/parser": ["@babel/parser@8.0.0", "", { "dependencies": { "@babel/types": "^8.0.0" }, "bin": "./bin/babel-parser.js" }, "sha512-aLxAE+imI9bCcyaPrUDjBv3uSkWieifjLe0kuFOZF0zli0L6GCsTmsePnTr55adbIAgYz2zhN1vnFimCBUYcRQ=="], - "@babel/traverse/@babel/code-frame": ["@babel/code-frame@7.29.0", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw=="], + "@babel/traverse/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/traverse/@babel/template": ["@babel/template@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ=="], + "@babel/traverse/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/traverse/@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], + "@babel/traverse/@babel/types": ["@babel/types@7.29.8", "", { "dependencies": { "@babel/helper-string-parser": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7" } }, "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg=="], "@chevrotain/cst-dts-gen/@chevrotain/types": ["@chevrotain/types@11.0.3", "", {}, "sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ=="], @@ -2424,7 +1956,7 @@ "@codemirror/lang-liquid/@codemirror/lang-html": ["@codemirror/lang-html@6.4.11", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/lang-css": "^6.0.0", "@codemirror/lang-javascript": "^6.0.0", "@codemirror/language": "^6.4.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/css": "^1.1.0", "@lezer/html": "^1.3.12" } }, "sha512-9NsXp7Nwp891pQchI7gPdTwBuSuT3K65NGTHWHNJ55HjYcHLllr0rbIZNdOzas9ztc1EUVBlHou85FFZS4BNnw=="], - "@codemirror/lang-markdown/@codemirror/lang-html": ["@codemirror/lang-html@6.4.11", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/lang-css": "^6.0.0", "@codemirror/lang-javascript": "^6.0.0", "@codemirror/language": "^6.4.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/css": "^1.1.0", "@lezer/html": "^1.3.12" } }, "sha512-9NsXp7Nwp891pQchI7gPdTwBuSuT3K65NGTHWHNJ55HjYcHLllr0rbIZNdOzas9ztc1EUVBlHou85FFZS4BNnw=="], + "@codemirror/lang-markdown/@lezer/common": ["@lezer/common@1.5.2", "", {}, "sha512-sxQE460fPZyU3sdc8lafxiPwJHBzZRy/udNFynGQky1SePYBdhkBl1kOagA9uT3pxR8K09bOrmTUqA9wb/PjSQ=="], "@codemirror/lang-php/@codemirror/lang-html": ["@codemirror/lang-html@6.4.11", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/lang-css": "^6.0.0", "@codemirror/lang-javascript": "^6.0.0", "@codemirror/language": "^6.4.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/css": "^1.1.0", "@lezer/html": "^1.3.12" } }, "sha512-9NsXp7Nwp891pQchI7gPdTwBuSuT3K65NGTHWHNJ55HjYcHLllr0rbIZNdOzas9ztc1EUVBlHou85FFZS4BNnw=="], @@ -2440,34 +1972,22 @@ "@codemirror/language-data/@codemirror/lang-liquid": ["@codemirror/lang-liquid@6.3.1", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/lang-html": "^6.0.0", "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", "@lezer/common": "^1.0.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.3.1" } }, "sha512-S/jE/D7iij2Pu70AC65ME6AYWxOOcX20cSJvaPgY5w7m2sfxsArAcUAuUgm/CZCVmqoi9KiOlS7gj/gyLipABw=="], - "@codemirror/language-data/@codemirror/lang-yaml": ["@codemirror/lang-yaml@6.1.2", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.2.0", "@lezer/lr": "^1.0.0", "@lezer/yaml": "^1.0.0" } }, "sha512-dxrfG8w5Ce/QbT7YID7mWZFKhdhsaTNOYjOkSIMt1qmC4VQnXSDSYVHHHn8k6kJUfIhtLo8t1JJgltlxWdsITw=="], - - "@npmcli/agent/http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="], - - "@npmcli/agent/https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], + "@codemirror/language-data/@codemirror/lang-markdown": ["@codemirror/lang-markdown@6.5.0", "", { "dependencies": { "@codemirror/autocomplete": "^6.7.1", "@codemirror/lang-html": "^6.0.0", "@codemirror/language": "^6.3.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", "@lezer/common": "^1.2.1", "@lezer/markdown": "^1.0.0" } }, "sha512-0K40bZ35jpHya6FriukbgaleaqzBLZfOh7HuzqbMxBXkbYMJDxfF39c23xOgxFezR+3G+tR2/Mup+Xk865OMvw=="], - "@npmcli/agent/socks-proxy-agent": ["socks-proxy-agent@8.0.5", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "^4.3.4", "socks": "^2.8.3" } }, "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw=="], + "@codemirror/language-data/@codemirror/lang-yaml": ["@codemirror/lang-yaml@6.1.2", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.2.0", "@lezer/lr": "^1.0.0", "@lezer/yaml": "^1.0.0" } }, "sha512-dxrfG8w5Ce/QbT7YID7mWZFKhdhsaTNOYjOkSIMt1qmC4VQnXSDSYVHHHn8k6kJUfIhtLo8t1JJgltlxWdsITw=="], "@npmcli/arborist/minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="], - "@npmcli/git/ini": ["ini@6.0.0", "", {}, "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ=="], - - "@npmcli/installed-package-contents/npm-normalize-package-bin": ["npm-normalize-package-bin@5.0.0", "", {}, "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag=="], - "@npmcli/map-workspaces/glob": ["glob@13.0.6", "", { "dependencies": { "minimatch": "^10.2.2", "minipass": "^7.1.3", "path-scurry": "^2.0.2" } }, "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw=="], "@npmcli/map-workspaces/minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="], "@npmcli/metavuln-calculator/json-parse-even-better-errors": ["json-parse-even-better-errors@5.0.0", "", {}, "sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ=="], - "@npmcli/move-file/mkdirp": ["mkdirp@1.0.4", "", { "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="], - "@npmcli/package-json/glob": ["glob@13.0.6", "", { "dependencies": { "minimatch": "^10.2.2", "minipass": "^7.1.3", "path-scurry": "^2.0.2" } }, "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw=="], "@npmcli/package-json/json-parse-even-better-errors": ["json-parse-even-better-errors@5.0.0", "", {}, "sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ=="], - "@npmcli/package-json/spdx-expression-parse": ["spdx-expression-parse@4.0.0", "", { "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ=="], - "@rolldown/binding-wasm32-wasi/@emnapi/core": ["@emnapi/core@2.0.0-alpha.3", "", { "dependencies": { "@emnapi/wasi-threads": "2.0.1", "tslib": "^2.4.0" } }, "sha512-AZypUeJ/yByuxyS7BlSNRDOMLMlROYtjYdIAuBmJssVz1UJDSeYxLrdizhXCFYhedC5bqd/ASy8EuNXbVVXp9g=="], "@rolldown/binding-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@2.0.0-alpha.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-hFPAhMUjJD9BSyCANEISPOogeXC9Zo9ZQl7L6vKnaVsMkCtzznaW/naYypeyl0Gv5rYfWYsZbpixTMpjDJzQeA=="], @@ -2480,76 +2000,34 @@ "@vitest/expect/chai": ["chai@6.2.2", "", {}, "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg=="], - "accepts/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], - - "accepts/negotiator": ["negotiator@0.6.3", "", {}, "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="], - - "ansi-align/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "archiver/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], - - "archiver/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], - - "archiver-utils/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], - - "bin-links/npm-normalize-package-bin": ["npm-normalize-package-bin@5.0.0", "", {}, "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag=="], - "bin-links/write-file-atomic": ["write-file-atomic@7.0.1", "", { "dependencies": { "signal-exit": "^4.0.1" } }, "sha512-OTIk8iR8/aCRWBqvxrzxR0hgxWpnYBblY1S5hDWBQfk/VFmJwzmJgQFN3WsoUKHISv2eAwe+PpbUzyL1CKTLXg=="], - "bl/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], - - "body-parser/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], - - "body-parser/iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="], - - "body-parser/qs": ["qs@6.15.3", "", { "dependencies": { "es-define-property": "^1.0.1", "side-channel": "^1.1.1" } }, "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A=="], - - "boxen/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - - "boxen/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], - "cacache/glob": ["glob@13.0.6", "", { "dependencies": { "minimatch": "^10.2.2", "minipass": "^7.1.3", "path-scurry": "^2.0.2" } }, "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw=="], - "cacheable-request/get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="], - - "cacheable-request/lowercase-keys": ["lowercase-keys@2.0.0", "", {}, "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA=="], - "chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], "chevrotain/@chevrotain/types": ["@chevrotain/types@11.0.3", "", {}, "sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ=="], "chevrotain/lodash-es": ["lodash-es@4.17.21", "", {}, "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="], - "chevrotain-allstar/lodash-es": ["lodash-es@4.17.21", "", {}, "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="], - "cli/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], - "compression/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], - - "compression/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - - "conf/dot-prop": ["dot-prop@6.0.1", "", { "dependencies": { "is-obj": "^2.0.0" } }, "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA=="], - - "content-disposition/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + "cliui/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], "cordova-fetch/which": ["which@5.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ=="], "cordova-lib/write-file-atomic": ["write-file-atomic@7.0.1", "", { "dependencies": { "signal-exit": "^4.0.1" } }, "sha512-OTIk8iR8/aCRWBqvxrzxR0hgxWpnYBblY1S5hDWBQfk/VFmJwzmJgQFN3WsoUKHISv2eAwe+PpbUzyL1CKTLXg=="], - "cordova-plugin-advanced-http/cordova": ["cordova@11.0.0", "", { "dependencies": { "configstore": "^5.0.1", "cordova-common": "^4.0.2", "cordova-create": "^4.0.0", "cordova-lib": "^11.0.0", "editor": "^1.0.0", "execa": "^5.1.1", "fs-extra": "^10.0.0", "insight": "^0.11.1", "loud-rejection": "^2.2.0", "nopt": "^5.0.0", "semver": "^7.3.5", "systeminformation": "^5.9.17", "update-notifier": "^5.1.0" }, "bin": { "cordova": "bin/cordova" } }, "sha512-Hu2YeT0naeP/1sEm/xfJYUsXN48XV6zagxbi1+4q0Ei9c5TKsIq8v4EWukvSHF4UO2pnh+9ViaDlGMcS1Wrnfg=="], - - "cordova-serve/chalk": ["chalk@3.0.0", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg=="], - - "cordova-serve/which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + "core-js-compat/browserslist": ["browserslist@4.28.2", "", { "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", "electron-to-chromium": "^1.5.328", "node-releases": "^2.0.36", "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg=="], "cosmiconfig/js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], - "crc32-stream/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], - "cross-spawn/which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + "css-loader/postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], + "cytoscape-fcose/cose-base": ["cose-base@2.2.0", "", { "dependencies": { "layout-base": "^2.0.0" } }, "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g=="], "d3-dsv/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], @@ -2558,10 +2036,6 @@ "d3-sankey/d3-shape": ["d3-shape@1.3.7", "", { "dependencies": { "d3-path": "1" } }, "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw=="], - "debounce-fn/mimic-fn": ["mimic-fn@3.1.0", "", {}, "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ=="], - - "dep-graph/underscore": ["underscore@1.2.1", "", {}, "sha512-HRhh6FYh5I5/zTt7L9MnHRA/nlSFPiwymMCXEremmzT7tHR+8CNP0FXHPaUpafAPwvAlNrvZiH91kQwoo/CqUA=="], - "dom-serializer/domelementtype": ["domelementtype@2.3.0", "", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="], "dom-serializer/entities": ["entities@2.2.0", "", {}, "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="], @@ -2570,70 +2044,24 @@ "esrecurse/estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], - "express/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], - - "express/qs": ["qs@6.15.3", "", { "dependencies": { "es-define-property": "^1.0.1", "side-channel": "^1.1.1" } }, "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A=="], - - "express/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - - "external-editor/iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="], - - "external-editor/tmp": ["tmp@0.0.33", "", { "dependencies": { "os-tmpdir": "~1.0.2" } }, "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw=="], - - "figures/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], - - "finalhandler/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], - - "form-data/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], - - "gauge/string-width": ["string-width@1.0.2", "", { "dependencies": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", "strip-ansi": "^3.0.0" } }, "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw=="], - - "gauge/strip-ansi": ["strip-ansi@3.0.1", "", { "dependencies": { "ansi-regex": "^2.0.0" } }, "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg=="], - "glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], - "got/get-stream": ["get-stream@4.1.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w=="], - - "har-validator/ajv": ["ajv@6.12.6", "", { "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" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], - "htmlparser2/entities": ["entities@1.0.0", "", {}, "sha512-LbLqfXgJMmy81t+7c14mnulFHJ170cM6E+0vMXR9k/ZiZwgX8i5pNgjTCX3SO4VeUsFLV+8InixoretwU+MjBQ=="], "htmlparser2/readable-stream": ["readable-stream@1.1.14", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", "isarray": "0.0.1", "string_decoder": "~0.10.x" } }, "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ=="], - "http-proxy-agent/agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], - - "https-proxy-agent/agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], - "ignore-walk/minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="], - "init-package-json/npm-package-arg": ["npm-package-arg@8.1.5", "", { "dependencies": { "hosted-git-info": "^4.0.1", "semver": "^7.3.4", "validate-npm-package-name": "^3.0.0" } }, "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q=="], - - "init-package-json/validate-npm-package-name": ["validate-npm-package-name@3.0.0", "", { "dependencies": { "builtins": "^1.0.3" } }, "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw=="], - - "inquirer/chalk": ["chalk@2.4.2", "", { "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="], - - "inquirer/string-width": ["string-width@2.1.1", "", { "dependencies": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" } }, "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw=="], - - "inquirer/strip-ansi": ["strip-ansi@5.2.0", "", { "dependencies": { "ansi-regex": "^4.1.0" } }, "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA=="], - - "insight/uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], - "jshint/minimatch": ["minimatch@3.0.8", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q=="], "jshint/strip-json-comments": ["strip-json-comments@1.0.4", "", { "bin": { "strip-json-comments": "cli.js" } }, "sha512-AOPG8EBc5wAikaG1/7uFCNFJwnKOuQwFTpYBdTW6OvWHeZBQBrAA/amefHGrEiOnCPcLFZK6FUPtWVKpQVIRgg=="], - "jsprim/extsprintf": ["extsprintf@1.3.0", "", {}, "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g=="], - "lightningcss/detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], "make-dir/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "make-fetch-happen/negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="], - "markdown-it/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], - "mermaid/dompurify": ["dompurify@3.4.2", "", { "optionalDependencies": { "@types/trusted-types": "^2.0.7" } }, "sha512-lHeS9SA/IKeIFFyYciHBr2n0v1VMPlSj843HdLOwjb2OxNwdq9Xykxqhk+FE42MzAdHvInbAolSE4mhahPpjXA=="], - "mermaid/marked": ["marked@16.4.2", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA=="], "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], @@ -2642,10 +2070,10 @@ "minipass-flush/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], - "minipass-json-stream/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], - "minipass-pipeline/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + "mlly/acorn": ["acorn@8.16.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw=="], + "mocha/chokidar": ["chokidar@3.5.3", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw=="], "mocha/debug": ["debug@4.3.3", "", { "dependencies": { "ms": "2.1.2" } }, "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q=="], @@ -2660,99 +2088,55 @@ "mocha/yargs-parser": ["yargs-parser@20.2.4", "", {}, "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA=="], - "normalize-package-data/hosted-git-info": ["hosted-git-info@4.1.0", "", { "dependencies": { "lru-cache": "^6.0.0" } }, "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA=="], - - "npm-bundled/npm-normalize-package-bin": ["npm-normalize-package-bin@5.0.0", "", {}, "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag=="], - - "npm-pick-manifest/npm-normalize-package-bin": ["npm-normalize-package-bin@5.0.0", "", {}, "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag=="], - - "package-json/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "node-gyp/tinyglobby": ["tinyglobby@0.2.16", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg=="], "parse-conflict-json/json-parse-even-better-errors": ["json-parse-even-better-errors@5.0.0", "", {}, "sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ=="], "parse-json/@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], - "pkg-up/find-up": ["find-up@3.0.0", "", { "dependencies": { "locate-path": "^3.0.0" } }, "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg=="], - "plist/xmlbuilder": ["xmlbuilder@15.1.1", "", {}, "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg=="], - "raw-body/iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="], - "raw-loader/schema-utils": ["schema-utils@3.3.0", "", { "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } }, "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg=="], - "rc/ini": ["ini@1.3.8", "", {}, "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="], - - "rc/strip-json-comments": ["strip-json-comments@2.0.1", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="], - - "read-chunk/pify": ["pify@4.0.1", "", {}, "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="], - - "read-package-json/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], - - "request/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], - - "request/tough-cookie": ["tough-cookie@2.4.3", "", { "dependencies": { "psl": "^1.1.24", "punycode": "^1.4.1" } }, "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ=="], - - "request/uuid": ["uuid@3.4.0", "", { "bin": { "uuid": "./bin/uuid" } }, "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="], - - "restore-cursor/onetime": ["onetime@2.0.1", "", { "dependencies": { "mimic-fn": "^1.0.0" } }, "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ=="], - - "rimraf/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], - - "rxjs/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], - - "semver-diff/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - - "send/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], - - "socks-proxy-agent/agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], + "sass/chokidar": ["chokidar@5.0.0", "", { "dependencies": { "readdirp": "^5.0.0" } }, "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw=="], "source-map-support/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], - "tar/chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="], - - "tar-stream/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], - "terser/acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], "terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], "terser-webpack-plugin/serialize-javascript": ["serialize-javascript@6.0.2", "", { "dependencies": { "randombytes": "^2.1.0" } }, "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g=="], - "tough-cookie/universalify": ["universalify@0.2.0", "", {}, "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg=="], - - "type-is/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], - - "verror/core-util-is": ["core-util-is@1.0.2", "", {}, "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="], + "tinyglobby/picomatch": ["picomatch@4.0.5", "", {}, "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A=="], "vite/picomatch": ["picomatch@4.0.5", "", {}, "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A=="], - "vite/postcss": ["postcss@8.5.25", "", { "dependencies": { "nanoid": "^3.3.16", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw=="], - - "vite/tinyglobby": ["tinyglobby@0.2.17", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g=="], - "webpack/acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], "webpack/browserslist": ["browserslist@4.28.1", "", { "dependencies": { "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" } }, "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA=="], "webpack/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], - "wide-align/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], + + "wrap-ansi/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], - "widest-line/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "@babel/core/@babel/traverse/@babel/helper-globals": ["@babel/helper-globals@8.0.0", "", {}, "sha512-lLozHOM6sWWlxNo8CYqHy4MBZeTvHXNgVPBfPOGsjPKUzHC2Az9QwB6gxdQmpwHl6GlQtbGgS+lj5887guDiLw=="], - "windows-release/execa": ["execa@4.1.0", "", { "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" } }, "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA=="], + "@babel/generator/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.29.7", "", {}, "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw=="], - "with-open-file/pify": ["pify@4.0.1", "", {}, "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="], + "@babel/generator/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.29.7", "", {}, "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg=="], - "wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], + "@babel/helper-compilation-targets/browserslist/baseline-browser-mapping": ["baseline-browser-mapping@2.10.29", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-Asa2krT+XTPZINCS+2QcyS8WTkObE77RwkydwF7h6DmnKqbvlalz93m/dnphUyCa6SWSP51VgtEUf2FN+gelFQ=="], - "zip-stream/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + "@babel/helper-compilation-targets/browserslist/caniuse-lite": ["caniuse-lite@1.0.30001792", "", {}, "sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw=="], - "@babel/core/@babel/traverse/@babel/helper-globals": ["@babel/helper-globals@8.0.0", "", {}, "sha512-lLozHOM6sWWlxNo8CYqHy4MBZeTvHXNgVPBfPOGsjPKUzHC2Az9QwB6gxdQmpwHl6GlQtbGgS+lj5887guDiLw=="], + "@babel/helper-compilation-targets/browserslist/electron-to-chromium": ["electron-to-chromium@1.5.353", "", {}, "sha512-kOrWphBi8TOZyiJZqsgqIle0lw+tzmnQK83pV9dZUd01Nm2POECSyFQMAuarzZdYqQW7FH9RaYOuaRo3h+bQ3w=="], - "@babel/generator/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + "@babel/helper-compilation-targets/browserslist/node-releases": ["node-releases@2.0.38", "", {}, "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw=="], - "@babel/generator/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + "@babel/helper-compilation-targets/browserslist/update-browserslist-db": ["update-browserslist-db@1.2.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="], "@babel/helper-create-class-features-plugin/@babel/traverse/@babel/generator": ["@babel/generator@8.0.0", "", { "dependencies": { "@babel/parser": "^8.0.0", "@babel/types": "^8.0.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "@types/jsesc": "^2.5.0", "jsesc": "^3.0.2" } }, "sha512-NT9NrVwJsbSV6Y2FSstWa71EETOnzrjkL5/wX3D2mYHtKM+qvqB1DvR4D0Setb/gDBsHzRICifwEWMO8CnTF6g=="], @@ -2802,9 +2186,9 @@ "@babel/helper-wrap-function/@babel/traverse/@babel/parser": ["@babel/parser@8.0.0", "", { "dependencies": { "@babel/types": "^8.0.0" }, "bin": "./bin/babel-parser.js" }, "sha512-aLxAE+imI9bCcyaPrUDjBv3uSkWieifjLe0kuFOZF0zli0L6GCsTmsePnTr55adbIAgYz2zhN1vnFimCBUYcRQ=="], - "@babel/parser/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + "@babel/parser/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.29.7", "", {}, "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw=="], - "@babel/parser/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + "@babel/parser/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.29.7", "", {}, "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg=="], "@babel/plugin-transform-async-generator-functions/@babel/traverse/@babel/generator": ["@babel/generator@8.0.0", "", { "dependencies": { "@babel/parser": "^8.0.0", "@babel/types": "^8.0.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "@types/jsesc": "^2.5.0", "jsesc": "^3.0.2" } }, "sha512-NT9NrVwJsbSV6Y2FSstWa71EETOnzrjkL5/wX3D2mYHtKM+qvqB1DvR4D0Setb/gDBsHzRICifwEWMO8CnTF6g=="], @@ -2816,20 +2200,18 @@ "@babel/plugin-transform-classes/@babel/traverse/@babel/parser": ["@babel/parser@8.0.0", "", { "dependencies": { "@babel/types": "^8.0.0" }, "bin": "./bin/babel-parser.js" }, "sha512-aLxAE+imI9bCcyaPrUDjBv3uSkWieifjLe0kuFOZF0zli0L6GCsTmsePnTr55adbIAgYz2zhN1vnFimCBUYcRQ=="], - "@babel/traverse/@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + "@babel/traverse/@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.29.7", "", {}, "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg=="], "@babel/traverse/@babel/code-frame/js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], - "@babel/traverse/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + "@babel/traverse/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.29.7", "", {}, "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw=="], - "@babel/traverse/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + "@babel/traverse/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.29.7", "", {}, "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg=="], "@codemirror/lang-jinja/@codemirror/lang-html/@codemirror/lang-javascript": ["@codemirror/lang-javascript@6.2.4", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.6.0", "@codemirror/lint": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/javascript": "^1.0.0" } }, "sha512-0WVmhp1QOqZ4Rt6GlVGwKJN3KW7Xh4H2q8ZZNGZaP6lRdxXJzmjm4FqvmOojVj6khWJHIb9sp7U/72W7xQgqAA=="], "@codemirror/lang-liquid/@codemirror/lang-html/@codemirror/lang-javascript": ["@codemirror/lang-javascript@6.2.4", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.6.0", "@codemirror/lint": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/javascript": "^1.0.0" } }, "sha512-0WVmhp1QOqZ4Rt6GlVGwKJN3KW7Xh4H2q8ZZNGZaP6lRdxXJzmjm4FqvmOojVj6khWJHIb9sp7U/72W7xQgqAA=="], - "@codemirror/lang-markdown/@codemirror/lang-html/@codemirror/lang-javascript": ["@codemirror/lang-javascript@6.2.4", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.6.0", "@codemirror/lint": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/javascript": "^1.0.0" } }, "sha512-0WVmhp1QOqZ4Rt6GlVGwKJN3KW7Xh4H2q8ZZNGZaP6lRdxXJzmjm4FqvmOojVj6khWJHIb9sp7U/72W7xQgqAA=="], - "@codemirror/lang-php/@codemirror/lang-html/@codemirror/lang-javascript": ["@codemirror/lang-javascript@6.2.4", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.6.0", "@codemirror/lint": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/javascript": "^1.0.0" } }, "sha512-0WVmhp1QOqZ4Rt6GlVGwKJN3KW7Xh4H2q8ZZNGZaP6lRdxXJzmjm4FqvmOojVj6khWJHIb9sp7U/72W7xQgqAA=="], "@npmcli/arborist/minimatch/brace-expansion": ["brace-expansion@5.0.6", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g=="], @@ -2840,94 +2222,46 @@ "@rolldown/binding-wasm32-wasi/@emnapi/core/@emnapi/wasi-threads": ["@emnapi/wasi-threads@2.0.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9DsSk+o5NBX0CCJT8s0EROGSGxjR/tKu6aBTaVyq+SjAEQH4XcdcRxPBRzsBLizTTJ49MJjF+jgu3qnO9GLQcQ=="], - "@rolldown/binding-wasm32-wasi/@napi-rs/wasm-runtime/@tybys/wasm-util": ["@tybys/wasm-util@0.10.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg=="], - "@tufjs/models/minimatch/brace-expansion": ["brace-expansion@5.0.6", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g=="], - "accepts/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], - - "ansi-align/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - - "ansi-align/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - - "archiver-utils/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], - - "archiver/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], - "bin-links/write-file-atomic/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - "body-parser/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - - "boxen/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - - "boxen/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - - "boxen/wrap-ansi/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "cacache/glob/minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="], "cli/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], - "compression/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], + "cliui/string-width/get-east-asian-width": ["get-east-asian-width@1.4.0", "", {}, "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q=="], "cordova-fetch/which/isexe": ["isexe@3.1.5", "", {}, "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w=="], "cordova-lib/write-file-atomic/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - "cordova-plugin-advanced-http/cordova/cordova-common": ["cordova-common@4.1.0", "", { "dependencies": { "@netflix/nerror": "^1.1.3", "ansi": "^0.3.1", "bplist-parser": "^0.2.0", "cross-spawn": "^7.0.1", "elementtree": "^0.1.7", "endent": "^1.4.1", "fast-glob": "^3.2.2", "fs-extra": "^9.0.0", "glob": "^7.1.6", "plist": "^3.0.1", "q": "^1.5.1", "read-chunk": "^3.2.0", "strip-bom": "^4.0.0", "underscore": "^1.9.2" } }, "sha512-sYfOSfpYGQOmUDlsARUbpT/EvVKT/E+GI3zwTXt+C6DjZ7xs6ZQVHs3umHKSidjf9yVM2LLmvGFpGrGX7aGxug=="], - - "cordova-plugin-advanced-http/cordova/cordova-create": ["cordova-create@4.1.0", "", { "dependencies": { "cordova-app-hello-world": "^6.0.0", "cordova-common": "^4.1.0", "cordova-fetch": "^3.1.0", "fs-extra": "^10.1.0", "globby": "^11.1.0", "import-fresh": "^3.3.0", "isobject": "^4.0.0", "npm-package-arg": "^8.1.5", "path-is-inside": "^1.0.2", "tmp": "^0.2.1", "valid-identifier": "0.0.2" } }, "sha512-8VQohB5w5WwuxurQJ+2L+lAFVhBr//kFvlxLOmF0P3SzTdfIU02pNalbOeLalC0DXD7rfBXJZOxJ+KSM5TOq+Q=="], + "core-js-compat/browserslist/baseline-browser-mapping": ["baseline-browser-mapping@2.10.29", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-Asa2krT+XTPZINCS+2QcyS8WTkObE77RwkydwF7h6DmnKqbvlalz93m/dnphUyCa6SWSP51VgtEUf2FN+gelFQ=="], - "cordova-plugin-advanced-http/cordova/cordova-lib": ["cordova-lib@11.1.0", "", { "dependencies": { "cordova-common": "^4.1.0", "cordova-fetch": "^3.1.0", "cordova-serve": "^4.0.0", "dep-graph": "^1.1.0", "detect-indent": "^6.1.0", "detect-newline": "^3.1.0", "elementtree": "^0.1.7", "execa": "^5.1.1", "fs-extra": "^10.1.0", "globby": "^11.1.0", "init-package-json": "^2.0.5", "md5-file": "^5.0.0", "pify": "^5.0.0", "semver": "^7.3.8", "stringify-package": "^1.0.1", "write-file-atomic": "^3.0.3" } }, "sha512-/XM+/wFag72bD4SNSxwX8b3OWatHNNlnmJpgb5pepp2Pobb957nWyR0GPwIkKyOyszdZesWM3Vv8uH9e2Z1k2w=="], + "core-js-compat/browserslist/caniuse-lite": ["caniuse-lite@1.0.30001792", "", {}, "sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw=="], - "cordova-plugin-advanced-http/cordova/nopt": ["nopt@5.0.0", "", { "dependencies": { "abbrev": "1" }, "bin": { "nopt": "bin/nopt.js" } }, "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ=="], + "core-js-compat/browserslist/electron-to-chromium": ["electron-to-chromium@1.5.353", "", {}, "sha512-kOrWphBi8TOZyiJZqsgqIle0lw+tzmnQK83pV9dZUd01Nm2POECSyFQMAuarzZdYqQW7FH9RaYOuaRo3h+bQ3w=="], - "cordova-serve/chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + "core-js-compat/browserslist/node-releases": ["node-releases@2.0.38", "", {}, "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw=="], - "cordova-serve/which/isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + "core-js-compat/browserslist/update-browserslist-db": ["update-browserslist-db@1.2.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="], "cross-spawn/which/isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + "css-loader/postcss/nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + "cytoscape-fcose/cose-base/layout-base": ["layout-base@2.0.1", "", {}, "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg=="], "d3-sankey/d3-shape/d3-path": ["d3-path@1.0.9", "", {}, "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="], - "express/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - - "finalhandler/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - - "form-data/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], - - "gauge/string-width/is-fullwidth-code-point": ["is-fullwidth-code-point@1.0.0", "", { "dependencies": { "number-is-nan": "^1.0.0" } }, "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw=="], - - "gauge/strip-ansi/ansi-regex": ["ansi-regex@2.1.1", "", {}, "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA=="], - - "har-validator/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], - "htmlparser2/readable-stream/isarray": ["isarray@0.0.1", "", {}, "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="], "htmlparser2/readable-stream/string_decoder": ["string_decoder@0.10.31", "", {}, "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ=="], "ignore-walk/minimatch/brace-expansion": ["brace-expansion@5.0.6", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g=="], - "init-package-json/npm-package-arg/hosted-git-info": ["hosted-git-info@4.1.0", "", { "dependencies": { "lru-cache": "^6.0.0" } }, "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA=="], - - "inquirer/chalk/ansi-styles": ["ansi-styles@3.2.1", "", { "dependencies": { "color-convert": "^1.9.0" } }, "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="], - - "inquirer/chalk/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], - - "inquirer/chalk/supports-color": ["supports-color@5.5.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="], - - "inquirer/string-width/is-fullwidth-code-point": ["is-fullwidth-code-point@2.0.0", "", {}, "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w=="], - - "inquirer/string-width/strip-ansi": ["strip-ansi@4.0.0", "", { "dependencies": { "ansi-regex": "^3.0.0" } }, "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow=="], - - "inquirer/strip-ansi/ansi-regex": ["ansi-regex@4.1.1", "", {}, "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g=="], - "minipass-flush/minipass/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], - "minipass-json-stream/minipass/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], - "minipass-pipeline/minipass/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], "mocha/chokidar/readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], @@ -2940,33 +2274,17 @@ "mocha/yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - "normalize-package-data/hosted-git-info/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], + "node-gyp/tinyglobby/picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="], "parse-json/@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], "parse-json/@babel/code-frame/js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], - "pkg-up/find-up/locate-path": ["locate-path@3.0.0", "", { "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" } }, "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A=="], - "raw-loader/schema-utils/ajv": ["ajv@6.12.6", "", { "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" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], "raw-loader/schema-utils/ajv-keywords": ["ajv-keywords@3.5.2", "", { "peerDependencies": { "ajv": "^6.9.1" } }, "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ=="], - "read-package-json/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], - - "request/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], - - "request/tough-cookie/punycode": ["punycode@1.4.1", "", {}, "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ=="], - - "restore-cursor/onetime/mimic-fn": ["mimic-fn@1.2.0", "", {}, "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ=="], - - "rimraf/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], - - "send/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - - "type-is/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], - - "vite/postcss/nanoid": ["nanoid@3.3.16", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q=="], + "sass/chokidar/readdirp": ["readdirp@5.1.1", "", {}, "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA=="], "webpack/browserslist/baseline-browser-mapping": ["baseline-browser-mapping@2.9.13", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-WhtvB2NG2wjr04+h77sg3klAIwrgOqnjS49GGudnUPGFFgg7G17y7Qecqp+2Dr5kUDxNRBca0SK7cG8JwzkWDQ=="], @@ -2976,19 +2294,11 @@ "webpack/browserslist/node-releases": ["node-releases@2.0.27", "", {}, "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="], - "webpack/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], + "webpack/browserslist/update-browserslist-db": ["update-browserslist-db@1.2.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="], - "wide-align/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - - "wide-align/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - - "widest-line/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - - "widest-line/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - - "windows-release/execa/get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="], + "webpack/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], - "windows-release/execa/human-signals": ["human-signals@1.1.1", "", {}, "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw=="], + "wrap-ansi/string-width/get-east-asian-width": ["get-east-asian-width@1.4.0", "", {}, "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q=="], "@npmcli/arborist/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], @@ -2998,42 +2308,10 @@ "@tufjs/models/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], - "ansi-align/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - - "boxen/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - - "boxen/wrap-ansi/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "cacache/glob/minimatch/brace-expansion": ["brace-expansion@5.0.6", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g=="], - "cordova-plugin-advanced-http/cordova/cordova-common/bplist-parser": ["bplist-parser@0.2.0", "", { "dependencies": { "big-integer": "^1.6.44" } }, "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw=="], - - "cordova-plugin-advanced-http/cordova/cordova-common/endent": ["endent@1.4.1", "", { "dependencies": { "dedent": "^0.7.0", "fast-json-parse": "^1.0.3", "objectorarray": "^1.0.4" } }, "sha512-buHTb5c8AC9NshtP6dgmNLYkiT+olskbq1z6cEGvfGCF3Qphbu/1zz5Xu+yjTDln8RbxNhPoUyJ5H8MSrp1olQ=="], - - "cordova-plugin-advanced-http/cordova/cordova-common/fs-extra": ["fs-extra@9.1.0", "", { "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ=="], - - "cordova-plugin-advanced-http/cordova/cordova-common/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-app-hello-world": ["cordova-app-hello-world@6.0.0", "", {}, "sha512-wPZsm+fzNUwdiTRODT+fQuPV410RNmd3Buiw63vT8BPxjC+cn6Bu8emrgwrDM4pbmU5sa5Unwu3xPcbQGQ3G3g=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch": ["cordova-fetch@3.1.0", "", { "dependencies": { "cordova-common": "^4.1.0", "fs-extra": "^9.1.0", "npm-package-arg": "^8.1.5", "pacote": "^11.3.5", "pify": "^5.0.0", "resolve": "^1.22.1", "semver": "^7.3.8", "which": "^2.0.2" } }, "sha512-qOT3HlNzVWbsCZVvbkZ6PdvAG1byiK8vWG+/Z+7s+8ZB76rOYKdzMvrmmMwrTTX6nglDnz5uJ/4XjQHJB770GQ=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/npm-package-arg": ["npm-package-arg@8.1.5", "", { "dependencies": { "hosted-git-info": "^4.0.1", "semver": "^7.3.4", "validate-npm-package-name": "^3.0.0" } }, "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch": ["cordova-fetch@3.1.0", "", { "dependencies": { "cordova-common": "^4.1.0", "fs-extra": "^9.1.0", "npm-package-arg": "^8.1.5", "pacote": "^11.3.5", "pify": "^5.0.0", "resolve": "^1.22.1", "semver": "^7.3.8", "which": "^2.0.2" } }, "sha512-qOT3HlNzVWbsCZVvbkZ6PdvAG1byiK8vWG+/Z+7s+8ZB76rOYKdzMvrmmMwrTTX6nglDnz5uJ/4XjQHJB770GQ=="], - - "cordova-plugin-advanced-http/cordova/nopt/abbrev": ["abbrev@1.1.1", "", {}, "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="], - "ignore-walk/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], - "init-package-json/npm-package-arg/hosted-git-info/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], - - "inquirer/chalk/ansi-styles/color-convert": ["color-convert@1.9.3", "", { "dependencies": { "color-name": "1.1.3" } }, "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="], - - "inquirer/chalk/supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], - - "inquirer/string-width/strip-ansi/ansi-regex": ["ansi-regex@3.0.1", "", {}, "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw=="], - "mocha/chokidar/readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], "mocha/yargs/cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], @@ -3044,256 +2322,14 @@ "mocha/yargs/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "normalize-package-data/hosted-git-info/lru-cache/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], - - "pkg-up/find-up/locate-path/p-locate": ["p-locate@3.0.0", "", { "dependencies": { "p-limit": "^2.0.0" } }, "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ=="], - - "pkg-up/find-up/locate-path/path-exists": ["path-exists@3.0.0", "", {}, "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ=="], - "raw-loader/schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], - "wide-align/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - - "widest-line/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "@npmcli/package-json/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], "cacache/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], - "cordova-plugin-advanced-http/cordova/cordova-common/endent/dedent": ["dedent@0.7.0", "", {}, "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA=="], - - "cordova-plugin-advanced-http/cordova/cordova-common/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/fs-extra": ["fs-extra@9.1.0", "", { "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote": ["pacote@11.3.5", "", { "dependencies": { "@npmcli/git": "^2.1.0", "@npmcli/installed-package-contents": "^1.0.6", "@npmcli/promise-spawn": "^1.2.0", "@npmcli/run-script": "^1.8.2", "cacache": "^15.0.5", "chownr": "^2.0.0", "fs-minipass": "^2.1.0", "infer-owner": "^1.0.4", "minipass": "^3.1.3", "mkdirp": "^1.0.3", "npm-package-arg": "^8.0.1", "npm-packlist": "^2.1.4", "npm-pick-manifest": "^6.0.0", "npm-registry-fetch": "^11.0.0", "promise-retry": "^2.0.1", "read-package-json-fast": "^2.0.1", "rimraf": "^3.0.2", "ssri": "^8.0.1", "tar": "^6.1.0" }, "bin": { "pacote": "lib/bin.js" } }, "sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/npm-package-arg/hosted-git-info": ["hosted-git-info@4.1.0", "", { "dependencies": { "lru-cache": "^6.0.0" } }, "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/npm-package-arg/validate-npm-package-name": ["validate-npm-package-name@3.0.0", "", { "dependencies": { "builtins": "^1.0.3" } }, "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/fs-extra": ["fs-extra@9.1.0", "", { "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/npm-package-arg": ["npm-package-arg@8.1.5", "", { "dependencies": { "hosted-git-info": "^4.0.1", "semver": "^7.3.4", "validate-npm-package-name": "^3.0.0" } }, "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote": ["pacote@11.3.5", "", { "dependencies": { "@npmcli/git": "^2.1.0", "@npmcli/installed-package-contents": "^1.0.6", "@npmcli/promise-spawn": "^1.2.0", "@npmcli/run-script": "^1.8.2", "cacache": "^15.0.5", "chownr": "^2.0.0", "fs-minipass": "^2.1.0", "infer-owner": "^1.0.4", "minipass": "^3.1.3", "mkdirp": "^1.0.3", "npm-package-arg": "^8.0.1", "npm-packlist": "^2.1.4", "npm-pick-manifest": "^6.0.0", "npm-registry-fetch": "^11.0.0", "promise-retry": "^2.0.1", "read-package-json-fast": "^2.0.1", "rimraf": "^3.0.2", "ssri": "^8.0.1", "tar": "^6.1.0" }, "bin": { "pacote": "lib/bin.js" } }, "sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], - - "init-package-json/npm-package-arg/hosted-git-info/lru-cache/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], - - "inquirer/chalk/ansi-styles/color-convert/color-name": ["color-name@1.1.3", "", {}, "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="], - "mocha/yargs/cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], "mocha/yargs/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - - "pkg-up/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/@npmcli/git": ["@npmcli/git@2.1.0", "", { "dependencies": { "@npmcli/promise-spawn": "^1.3.2", "lru-cache": "^6.0.0", "mkdirp": "^1.0.4", "npm-pick-manifest": "^6.1.1", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", "which": "^2.0.2" } }, "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/@npmcli/installed-package-contents": ["@npmcli/installed-package-contents@1.0.7", "", { "dependencies": { "npm-bundled": "^1.1.1", "npm-normalize-package-bin": "^1.0.1" }, "bin": { "installed-package-contents": "index.js" } }, "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/@npmcli/promise-spawn": ["@npmcli/promise-spawn@1.3.2", "", { "dependencies": { "infer-owner": "^1.0.4" } }, "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/@npmcli/run-script": ["@npmcli/run-script@1.8.6", "", { "dependencies": { "@npmcli/node-gyp": "^1.0.2", "@npmcli/promise-spawn": "^1.3.2", "node-gyp": "^7.1.0", "read-package-json-fast": "^2.0.1" } }, "sha512-e42bVZnC6VluBZBAFEr3YrdqSspG3bgilyg4nSLBJ7TRGNCzxHa92XAHxQBLYg0BmgwO4b2mf3h/l5EkEWRn3g=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/cacache": ["cacache@15.3.0", "", { "dependencies": { "@npmcli/fs": "^1.0.0", "@npmcli/move-file": "^1.0.1", "chownr": "^2.0.0", "fs-minipass": "^2.0.0", "glob": "^7.1.4", "infer-owner": "^1.0.4", "lru-cache": "^6.0.0", "minipass": "^3.1.1", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.2", "mkdirp": "^1.0.3", "p-map": "^4.0.0", "promise-inflight": "^1.0.1", "rimraf": "^3.0.2", "ssri": "^8.0.1", "tar": "^6.0.2", "unique-filename": "^1.1.1" } }, "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/fs-minipass": ["fs-minipass@2.1.0", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/mkdirp": ["mkdirp@1.0.4", "", { "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/npm-packlist": ["npm-packlist@2.2.2", "", { "dependencies": { "glob": "^7.1.6", "ignore-walk": "^3.0.3", "npm-bundled": "^1.1.1", "npm-normalize-package-bin": "^1.0.1" }, "bin": { "npm-packlist": "bin/index.js" } }, "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/npm-pick-manifest": ["npm-pick-manifest@6.1.1", "", { "dependencies": { "npm-install-checks": "^4.0.0", "npm-normalize-package-bin": "^1.0.1", "npm-package-arg": "^8.1.2", "semver": "^7.3.4" } }, "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/npm-registry-fetch": ["npm-registry-fetch@11.0.0", "", { "dependencies": { "make-fetch-happen": "^9.0.1", "minipass": "^3.1.3", "minipass-fetch": "^1.3.0", "minipass-json-stream": "^1.0.1", "minizlib": "^2.0.0", "npm-package-arg": "^8.0.0" } }, "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/ssri": ["ssri@8.0.1", "", { "dependencies": { "minipass": "^3.1.1" } }, "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/which/isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/npm-package-arg/hosted-git-info/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/npm-package-arg/hosted-git-info": ["hosted-git-info@4.1.0", "", { "dependencies": { "lru-cache": "^6.0.0" } }, "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/npm-package-arg/validate-npm-package-name": ["validate-npm-package-name@3.0.0", "", { "dependencies": { "builtins": "^1.0.3" } }, "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/@npmcli/git": ["@npmcli/git@2.1.0", "", { "dependencies": { "@npmcli/promise-spawn": "^1.3.2", "lru-cache": "^6.0.0", "mkdirp": "^1.0.4", "npm-pick-manifest": "^6.1.1", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", "which": "^2.0.2" } }, "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/@npmcli/installed-package-contents": ["@npmcli/installed-package-contents@1.0.7", "", { "dependencies": { "npm-bundled": "^1.1.1", "npm-normalize-package-bin": "^1.0.1" }, "bin": { "installed-package-contents": "index.js" } }, "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/@npmcli/promise-spawn": ["@npmcli/promise-spawn@1.3.2", "", { "dependencies": { "infer-owner": "^1.0.4" } }, "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/@npmcli/run-script": ["@npmcli/run-script@1.8.6", "", { "dependencies": { "@npmcli/node-gyp": "^1.0.2", "@npmcli/promise-spawn": "^1.3.2", "node-gyp": "^7.1.0", "read-package-json-fast": "^2.0.1" } }, "sha512-e42bVZnC6VluBZBAFEr3YrdqSspG3bgilyg4nSLBJ7TRGNCzxHa92XAHxQBLYg0BmgwO4b2mf3h/l5EkEWRn3g=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/cacache": ["cacache@15.3.0", "", { "dependencies": { "@npmcli/fs": "^1.0.0", "@npmcli/move-file": "^1.0.1", "chownr": "^2.0.0", "fs-minipass": "^2.0.0", "glob": "^7.1.4", "infer-owner": "^1.0.4", "lru-cache": "^6.0.0", "minipass": "^3.1.1", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.2", "mkdirp": "^1.0.3", "p-map": "^4.0.0", "promise-inflight": "^1.0.1", "rimraf": "^3.0.2", "ssri": "^8.0.1", "tar": "^6.0.2", "unique-filename": "^1.1.1" } }, "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/fs-minipass": ["fs-minipass@2.1.0", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/mkdirp": ["mkdirp@1.0.4", "", { "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/npm-packlist": ["npm-packlist@2.2.2", "", { "dependencies": { "glob": "^7.1.6", "ignore-walk": "^3.0.3", "npm-bundled": "^1.1.1", "npm-normalize-package-bin": "^1.0.1" }, "bin": { "npm-packlist": "bin/index.js" } }, "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/npm-pick-manifest": ["npm-pick-manifest@6.1.1", "", { "dependencies": { "npm-install-checks": "^4.0.0", "npm-normalize-package-bin": "^1.0.1", "npm-package-arg": "^8.1.2", "semver": "^7.3.4" } }, "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/npm-registry-fetch": ["npm-registry-fetch@11.0.0", "", { "dependencies": { "make-fetch-happen": "^9.0.1", "minipass": "^3.1.3", "minipass-fetch": "^1.3.0", "minipass-json-stream": "^1.0.1", "minizlib": "^2.0.0", "npm-package-arg": "^8.0.0" } }, "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/ssri": ["ssri@8.0.1", "", { "dependencies": { "minipass": "^3.1.1" } }, "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/which/isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/@npmcli/git/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/@npmcli/installed-package-contents/npm-bundled": ["npm-bundled@1.1.2", "", { "dependencies": { "npm-normalize-package-bin": "^1.0.1" } }, "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/@npmcli/run-script/@npmcli/node-gyp": ["@npmcli/node-gyp@1.0.3", "", {}, "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/@npmcli/run-script/node-gyp": ["node-gyp@7.1.2", "", { "dependencies": { "env-paths": "^2.2.0", "glob": "^7.1.4", "graceful-fs": "^4.2.3", "nopt": "^5.0.0", "npmlog": "^4.1.2", "request": "^2.88.2", "rimraf": "^3.0.2", "semver": "^7.3.2", "tar": "^6.0.2", "which": "^2.0.2" }, "bin": { "node-gyp": "bin/node-gyp.js" } }, "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/cacache/@npmcli/fs": ["@npmcli/fs@1.1.1", "", { "dependencies": { "@gar/promisify": "^1.0.1", "semver": "^7.3.5" } }, "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/cacache/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/cacache/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/cacache/minipass-collect": ["minipass-collect@1.0.2", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/cacache/p-map": ["p-map@4.0.0", "", { "dependencies": { "aggregate-error": "^3.0.0" } }, "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/minipass/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/npm-packlist/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/npm-packlist/ignore-walk": ["ignore-walk@3.0.4", "", { "dependencies": { "minimatch": "^3.0.4" } }, "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/npm-packlist/npm-bundled": ["npm-bundled@1.1.2", "", { "dependencies": { "npm-normalize-package-bin": "^1.0.1" } }, "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/npm-pick-manifest/npm-install-checks": ["npm-install-checks@4.0.0", "", { "dependencies": { "semver": "^7.1.1" } }, "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/npm-registry-fetch/make-fetch-happen": ["make-fetch-happen@9.1.0", "", { "dependencies": { "agentkeepalive": "^4.1.3", "cacache": "^15.2.0", "http-cache-semantics": "^4.1.0", "http-proxy-agent": "^4.0.1", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", "lru-cache": "^6.0.0", "minipass": "^3.1.3", "minipass-collect": "^1.0.2", "minipass-fetch": "^1.3.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.2", "promise-retry": "^2.0.1", "socks-proxy-agent": "^6.0.0", "ssri": "^8.0.0" } }, "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/npm-registry-fetch/minipass-fetch": ["minipass-fetch@1.4.1", "", { "dependencies": { "minipass": "^3.1.0", "minipass-sized": "^1.0.3", "minizlib": "^2.0.0" }, "optionalDependencies": { "encoding": "^0.1.12" } }, "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/npm-registry-fetch/minizlib": ["minizlib@2.1.2", "", { "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" } }, "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/npm-package-arg/hosted-git-info/lru-cache/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/npm-package-arg/hosted-git-info/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/@npmcli/git/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/@npmcli/installed-package-contents/npm-bundled": ["npm-bundled@1.1.2", "", { "dependencies": { "npm-normalize-package-bin": "^1.0.1" } }, "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/@npmcli/run-script/@npmcli/node-gyp": ["@npmcli/node-gyp@1.0.3", "", {}, "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/@npmcli/run-script/node-gyp": ["node-gyp@7.1.2", "", { "dependencies": { "env-paths": "^2.2.0", "glob": "^7.1.4", "graceful-fs": "^4.2.3", "nopt": "^5.0.0", "npmlog": "^4.1.2", "request": "^2.88.2", "rimraf": "^3.0.2", "semver": "^7.3.2", "tar": "^6.0.2", "which": "^2.0.2" }, "bin": { "node-gyp": "bin/node-gyp.js" } }, "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/cacache/@npmcli/fs": ["@npmcli/fs@1.1.1", "", { "dependencies": { "@gar/promisify": "^1.0.1", "semver": "^7.3.5" } }, "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/cacache/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/cacache/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/cacache/minipass-collect": ["minipass-collect@1.0.2", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/cacache/p-map": ["p-map@4.0.0", "", { "dependencies": { "aggregate-error": "^3.0.0" } }, "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/minipass/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/npm-packlist/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/npm-packlist/ignore-walk": ["ignore-walk@3.0.4", "", { "dependencies": { "minimatch": "^3.0.4" } }, "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/npm-packlist/npm-bundled": ["npm-bundled@1.1.2", "", { "dependencies": { "npm-normalize-package-bin": "^1.0.1" } }, "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/npm-pick-manifest/npm-install-checks": ["npm-install-checks@4.0.0", "", { "dependencies": { "semver": "^7.1.1" } }, "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/npm-registry-fetch/make-fetch-happen": ["make-fetch-happen@9.1.0", "", { "dependencies": { "agentkeepalive": "^4.1.3", "cacache": "^15.2.0", "http-cache-semantics": "^4.1.0", "http-proxy-agent": "^4.0.1", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", "lru-cache": "^6.0.0", "minipass": "^3.1.3", "minipass-collect": "^1.0.2", "minipass-fetch": "^1.3.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.2", "promise-retry": "^2.0.1", "socks-proxy-agent": "^6.0.0", "ssri": "^8.0.0" } }, "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/npm-registry-fetch/minipass-fetch": ["minipass-fetch@1.4.1", "", { "dependencies": { "minipass": "^3.1.0", "minipass-sized": "^1.0.3", "minizlib": "^2.0.0" }, "optionalDependencies": { "encoding": "^0.1.12" } }, "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/npm-registry-fetch/minizlib": ["minizlib@2.1.2", "", { "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" } }, "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/@npmcli/git/lru-cache/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/@npmcli/run-script/node-gyp/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/@npmcli/run-script/node-gyp/request": ["request@2.88.2", "", { "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" } }, "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/cacache/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/cacache/lru-cache/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/npm-packlist/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/npm-packlist/ignore-walk/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/npm-registry-fetch/make-fetch-happen/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/npm-registry-fetch/make-fetch-happen/minipass-collect": ["minipass-collect@1.0.2", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/npm-registry-fetch/minipass-fetch/minipass-sized": ["minipass-sized@1.0.3", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/npm-registry-fetch/minizlib/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/npm-package-arg/hosted-git-info/lru-cache/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/@npmcli/git/lru-cache/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/@npmcli/run-script/node-gyp/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/@npmcli/run-script/node-gyp/request": ["request@2.88.2", "", { "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" } }, "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/cacache/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/cacache/lru-cache/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/npm-packlist/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/npm-packlist/ignore-walk/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/npm-registry-fetch/make-fetch-happen/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/npm-registry-fetch/make-fetch-happen/minipass-collect": ["minipass-collect@1.0.2", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/npm-registry-fetch/minipass-fetch/minipass-sized": ["minipass-sized@1.0.3", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/npm-registry-fetch/minizlib/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/@npmcli/run-script/node-gyp/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/@npmcli/run-script/node-gyp/request/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/@npmcli/run-script/node-gyp/request/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/@npmcli/run-script/node-gyp/request/tough-cookie": ["tough-cookie@2.5.0", "", { "dependencies": { "psl": "^1.1.28", "punycode": "^2.1.1" } }, "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/@npmcli/run-script/node-gyp/request/uuid": ["uuid@3.4.0", "", { "bin": { "uuid": "./bin/uuid" } }, "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/npm-registry-fetch/make-fetch-happen/lru-cache/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/@npmcli/run-script/node-gyp/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/@npmcli/run-script/node-gyp/request/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/@npmcli/run-script/node-gyp/request/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/@npmcli/run-script/node-gyp/request/tough-cookie": ["tough-cookie@2.5.0", "", { "dependencies": { "psl": "^1.1.28", "punycode": "^2.1.1" } }, "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/@npmcli/run-script/node-gyp/request/uuid": ["uuid@3.4.0", "", { "bin": { "uuid": "./bin/uuid" } }, "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/npm-registry-fetch/make-fetch-happen/lru-cache/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], - - "cordova-plugin-advanced-http/cordova/cordova-create/cordova-fetch/pacote/@npmcli/run-script/node-gyp/request/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], - - "cordova-plugin-advanced-http/cordova/cordova-lib/cordova-fetch/pacote/@npmcli/run-script/node-gyp/request/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], } } diff --git a/package-lock.json b/package-lock.json index 967b1b41bf..ca419ccda3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,7 @@ "@codemirror/lang-json": "^6.0.2", "@codemirror/lang-less": "^6.0.2", "@codemirror/lang-liquid": "^6.3.2", - "@codemirror/lang-markdown": "^6.5.0", + "@codemirror/lang-markdown": "^6.5.2", "@codemirror/lang-php": "^6.0.2", "@codemirror/lang-python": "^6.2.1", "@codemirror/lang-rust": "^6.0.2", @@ -55,57 +55,57 @@ "@xterm/addon-web-links": "^0.12.0", "@xterm/addon-webgl": "^0.19.0", "@xterm/xterm": "^6.0.0", - "acorn": "^8.16.0", + "acorn": "^8.18.0", "autosize": "^6.0.1", "codemirror": "^6.0.2", "cordova": "13.0.0", - "core-js": "^3.49.0", - "dayjs": "^1.11.20", - "dompurify": "^3.4.11", + "core-js": "^3.50.0", + "dayjs": "^1.11.23", + "dompurify": "^3.4.14", "escape-string-regexp": "^5.0.0", "esprima": "^4.0.1", - "filesize": "^11.0.17", + "filesize": "^11.0.22", "html-tag-js": "^2.4.16", "jszip": "^3.10.1", - "katex": "^0.16.45", - "markdown-it": "^14.2.0", - "markdown-it-anchor": "^9.2.0", - "markdown-it-emoji": "^3.0.0", + "katex": "^0.16.47", + "markdown-it": "^14.3.0", + "markdown-it-anchor": "^9.2.1", + "markdown-it-emoji": "^3.1.0", "markdown-it-footnote": "^4.0.0", "markdown-it-github-alerts": "^1.0.1", "markdown-it-task-lists": "^2.1.1", "markdown-it-texmath": "^1.0.0", "mermaid": "^11.14.0", "mime-types": "^3.0.2", - "motion": "^12.42.0", + "motion": "^12.43.0", "mustache": "^4.2.0", - "picomatch": "^4.0.4", + "picomatch": "^4.0.7", "url-parse": "^1.5.10", "vanilla-picker": "^2.12.3", "vscode-css-languageservice": "6.3.10", "vscode-html-languageservice": "5.6.2", "vscode-json-languageservice": "5.7.2", "vscode-languageserver-textdocument": "1.0.12", - "yargs": "^18.0.0" + "yargs": "^18.1.0" }, "devDependencies": { "@babel/core": "^8.0.1", - "@babel/generator": "^7.29.1", - "@babel/parser": "^7.29.3", + "@babel/generator": "^7.29.8", + "@babel/parser": "^7.29.8", "@babel/plugin-transform-runtime": "^8.0.1", - "@babel/preset-env": "^8.0.1", + "@babel/preset-env": "^8.0.2", "@babel/preset-typescript": "^8.0.1", - "@babel/runtime": "^7.29.2", - "@babel/runtime-corejs3": "^7.29.2", - "@babel/traverse": "^7.29.0", + "@babel/runtime": "^7.29.7", + "@babel/runtime-corejs3": "^7.29.7", + "@babel/traverse": "^7.29.8", "@biomejs/biome": "2.4.11", "@lezer/generator": "^1.8.0", - "@rspack/cli": "^2.0.0", - "@rspack/core": "^2.0.0", + "@rspack/cli": "^2.2.0", + "@rspack/core": "^2.2.0", "@types/ace": "^0.0.52", "@types/cordova": "^11.0.3", "@types/url-parse": "^1.4.11", - "autoprefixer": "^10.5.0", + "autoprefixer": "^10.5.4", "babel-loader": "^10.1.1", "chokidar": "^4.0.3", "com.foxdebug.acode.rk.auth": "file:src/plugins/auth", @@ -130,22 +130,22 @@ "cordova-plugin-system": "file:src/plugins/system", "cordova-plugin-websocket": "file:src/plugins/websocket", "css-loader": "^7.1.4", - "happy-dom": "^20.11.1", + "happy-dom": "^20.11.6", "mini-css-extract-plugin": "^2.10.2", "path-browserify": "^1.0.1", "postcss-loader": "^8.2.1", "prettier": "^3.8.3", "prettier-plugin-java": "^2.8.1", "raw-loader": "^4.0.2", - "sass": "^1.99.0", + "sass": "^1.103.1", "sass-loader": "^16.0.8", "style-loader": "^4.0.0", "terminal": "^0.1.4", - "ts-loader": "^9.5.7", + "ts-loader": "^9.6.2", "typescript": "^5.9.3", - "vitest": "^4.1.10", + "vitest": "^4.1.11", "vscode-languageserver-types": "^3.17.5", - "ws": "^8.21.0" + "ws": "^8.21.3" } }, "node_modules/@antfu/install-pkg": { @@ -162,13 +162,13 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", - "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", + "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -365,14 +365,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.29.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", - "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", + "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.29.0", - "@babel/types": "^7.29.0", + "@babel/parser": "^7.29.8", + "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -676,9 +676,9 @@ } }, "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", "dev": true, "license": "MIT", "engines": { @@ -1640,9 +1640,9 @@ "license": "MIT" }, "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "dev": true, "license": "MIT", "engines": { @@ -1650,9 +1650,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "dev": true, "license": "MIT", "engines": { @@ -1918,13 +1918,13 @@ "license": "MIT" }, "node_modules/@babel/parser": { - "version": "7.29.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.3.tgz", - "integrity": "sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", + "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.29.0" + "@babel/types": "^7.29.8" }, "bin": { "parser": "bin/babel-parser.js" @@ -2979,9 +2979,9 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-8.0.1.tgz", - "integrity": "sha512-1WjCi/45Mn5e0uvz26FdvRe6bTAvN6WAtkHgIjl0w/LkBvrv4Y5bDR+8YY72r7cefXBfwYUXIHSoxQkrIfnjXQ==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-8.0.2.tgz", + "integrity": "sha512-aFfsjCRYducRV4dPnpsBbdRkLjboca9FVDg6HZCgy0Ahvk2ZQ/2exmCRC5qS9P6rsWwrmIheNaIM6A1j2F8KMA==", "dev": true, "license": "MIT", "dependencies": { @@ -3213,9 +3213,9 @@ } }, "node_modules/@babel/preset-env": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-8.0.1.tgz", - "integrity": "sha512-tiwl69ZQGIbPif28GK8vI/Nm1nYdP+UHXWRnqXl0fjfBS7DWmAs2XvlpVkZyZjVVDxcprcbzCnN93SbuSgz8WQ==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-8.0.2.tgz", + "integrity": "sha512-CUGLn9hNBCF/eXnwdFAWERbniCcXCRvnKwLV9fegeUEIqv7YlU2MepsWMMM54GcILx5XYMnRh+JAL+K5G+mK6g==", "dev": true, "license": "MIT", "dependencies": { @@ -3268,7 +3268,7 @@ "@babel/plugin-transform-private-methods": "^8.0.1", "@babel/plugin-transform-private-property-in-object": "^8.0.1", "@babel/plugin-transform-property-literals": "^8.0.1", - "@babel/plugin-transform-regenerator": "^8.0.1", + "@babel/plugin-transform-regenerator": "^8.0.2", "@babel/plugin-transform-regexp-modifiers": "^8.0.1", "@babel/plugin-transform-reserved-words": "^8.0.1", "@babel/plugin-transform-shorthand-properties": "^8.0.1", @@ -3280,8 +3280,8 @@ "@babel/plugin-transform-unicode-property-regex": "^8.0.1", "@babel/plugin-transform-unicode-regex": "^8.0.1", "@babel/plugin-transform-unicode-sets-regex": "^8.0.1", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs3": "^1.0.0-rc.2", + "@babel/preset-modules": "^0.2.0", + "babel-plugin-polyfill-corejs3": "^1.0.0", "core-js-compat": "^3.48.0", "semver": "^7.7.3" }, @@ -3306,28 +3306,54 @@ } }, "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.2.0.tgz", + "integrity": "sha512-yz0RBN2fx4fjCeFcTWsWgL7PxSRltvTa0Qg14HkWCU3qS8MO7ZSJlBVbGceynd5C9NsJwwUHNQD3dc6tYO+jqQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", + "@babel/helper-plugin-utils": "^8.0.1", + "@babel/plugin-transform-dotall-regex": "^8.0.1", + "@babel/plugin-transform-unicode-property-regex": "^8.0.1", + "@babel/types": "^8.0.0", "esutils": "^2.0.2" }, "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + "@babel/core": "^8.0.0" } }, - "node_modules/@babel/preset-modules/node_modules/@babel/helper-plugin-utils": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", - "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", + "node_modules/@babel/preset-modules/node_modules/@babel/helper-string-parser": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-8.0.0.tgz", + "integrity": "sha512-6mJgmFFFIIO82vvoLt9XtRC7/TkzXfts1t/SpRX4IHSzMgqoPYCWesVu1udUPUWioAE/2fcG6WuI8zrkE1gwrg==", "dev": true, "license": "MIT", "engines": { - "node": ">=6.9.0" + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/preset-modules/node_modules/@babel/helper-validator-identifier": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-8.0.4.tgz", + "integrity": "sha512-4wFaiLd0bVo4cIoTXI3zKI038NIWE/cr3jvBjejOVYVxV/m8Ltav1USiGzG1fmS5J2RhgEOgXNNK46cRPnRsrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/preset-modules/node_modules/@babel/types": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-8.0.4.tgz", + "integrity": "sha512-eY+Yn3dCqTGmyiq2QRU66lA5FL8lqqqvecHt0fF3uHONIa7ToYsaCiWV8lOKqAs0Rb2SjixiKFROngnulPtt2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^8.0.0", + "@babel/helper-validator-identifier": "^8.0.4" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" } }, "node_modules/@babel/preset-typescript": { @@ -3350,9 +3376,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", - "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", "dev": true, "license": "MIT", "engines": { @@ -3360,9 +3386,9 @@ } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.29.2.tgz", - "integrity": "sha512-Lc94FOD5+0aXhdb0Tdg3RUtqT6yWbI/BbFWvlaSJ3gAb9Ks+99nHRDKADVqC37er4eCB0fHyWT+y+K3QOvJKbw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.29.7.tgz", + "integrity": "sha512-ppj9ouYku+RX0ljtgZd+KMO5mkM2bCqg8H2PYAFWnLsHEIKIdRojqbJ2i3eVHrisuxy7nOFCmngTDdWtUCdXUQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3373,33 +3399,33 @@ } }, "node_modules/@babel/template": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", - "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", - "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", + "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0", + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.8", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.8", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.8", "debug": "^4.3.1" }, "engines": { @@ -3407,14 +3433,14 @@ } }, "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -3767,9 +3793,9 @@ } }, "node_modules/@codemirror/lang-markdown": { - "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==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@codemirror/lang-markdown/-/lang-markdown-6.5.2.tgz", + "integrity": "sha512-AwBOdkWYuA//WcM0xO5PfHPUcmz/O2i5o0Nsg1U69SII/loCJlFI1Romd9xp2HYb1kYJRGZotyqRghuHH5n8Kw==", "license": "MIT", "dependencies": { "@codemirror/autocomplete": "^6.7.1", @@ -4083,21 +4109,21 @@ "license": "MIT" }, "node_modules/@emnapi/core": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", - "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.3.tgz", + "integrity": "sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg==", "dev": true, "license": "MIT", "optional": true, "dependencies": { - "@emnapi/wasi-threads": "1.2.1", + "@emnapi/wasi-threads": "1.2.3", "tslib": "^2.4.0" } }, "node_modules/@emnapi/runtime": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", - "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz", + "integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==", "dev": true, "license": "MIT", "optional": true, @@ -4106,9 +4132,9 @@ } }, "node_modules/@emnapi/wasi-threads": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", - "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.3.tgz", + "integrity": "sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g==", "dev": true, "license": "MIT", "optional": true, @@ -4219,9 +4245,9 @@ } }, "node_modules/@lezer/common": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.5.2.tgz", - "integrity": "sha512-sxQE460fPZyU3sdc8lafxiPwJHBzZRy/udNFynGQky1SePYBdhkBl1kOagA9uT3pxR8K09bOrmTUqA9wb/PjSQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.5.0.tgz", + "integrity": "sha512-PNGcolp9hr4PJdXR4ix7XtixDrClScvtSCYW3rQG106oVMOOI+jFb+0+J3mbeL/53g1Zd6s0kJzaw6Ri68GmAA==", "license": "MIT" }, "node_modules/@lezer/cpp": { @@ -4325,9 +4351,9 @@ } }, "node_modules/@lezer/lr": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.10.tgz", - "integrity": "sha512-rnCpTIBafOx4mRp43xOxDJbFipJm/c0cia/V5TiGlhmMa+wsSdoGmUN3w5Bqrks/09Q/D4tNAmWaT8p6NRi77A==", + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.7.tgz", + "integrity": "sha512-wNIFWdSUfX9Jc6ePMzxSPVgTVB4EOfDIwLQLWASyiUdHKaMsiilj9bYiGkGQCKVodd0x6bgQCV207PILGFCF9Q==", "license": "MIT", "dependencies": { "@lezer/common": "^1.0.0" @@ -4416,23 +4442,23 @@ "license": "MIT" }, "node_modules/@mermaid-js/parser": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-1.1.1.tgz", - "integrity": "sha512-VuHdsYMK1bT6X2JbcAaWAhugTRvRBRyuZgd+c22swUeI9g/ntaxF7CY7dYarhZovofCbUNO0G7JesfmNtjYOCw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-1.2.1.tgz", + "integrity": "sha512-n12NohV3mrUyUL2o93IgG/ifeW9FTyeJn3zDxkhwa8MJ9Fxg3HQMlA3RiGmD/3UnJvheztkjjQAjA2T4LmUcpw==", "license": "MIT", "dependencies": { - "@chevrotain/types": "~11.1.1" + "@chevrotain/types": "~11.1.2" } }, "node_modules/@napi-rs/wasm-runtime": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", - "integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz", + "integrity": "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==", "dev": true, "license": "MIT", "optional": true, "dependencies": { - "@tybys/wasm-util": "^0.10.1" + "@tybys/wasm-util": "^0.10.3" }, "funding": { "type": "github", @@ -4805,9 +4831,9 @@ } }, "node_modules/@oxc-project/types": { - "version": "0.142.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.142.0.tgz", - "integrity": "sha512-7W+2q5AKQVU36fkaryontrHn3YDt1RyUYXatw9i5H8ocYe2sPKSFB6eS8WNPeRKiN1qAWWZUPm7gwFzJGrccqQ==", + "version": "0.147.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.147.0.tgz", + "integrity": "sha512-IJ3s6ltHLp45S0bh7phkX+gJO7A1Wuz2EaqpAhb8WjqDwbzMiWKHhyyT42tskaWjEYXtHtVCPpnBJVT9+dcRLg==", "dev": true, "license": "MIT", "funding": { @@ -5124,10 +5150,27 @@ "url": "https://opencollective.com/parcel" } }, + "node_modules/@rolldown/binding-android-arm-eabi": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.6.tgz", + "integrity": "sha512-b+jTcARdTiFLI6jB4a5XjTm0RWd6KcRfQj/I2356fxUZemiho9zQLxo0RtCuMDAyKcLo6cEltkgbQp6d1+sjjQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, "node_modules/@rolldown/binding-android-arm64": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.1.tgz", - "integrity": "sha512-02hOeOSryYxVrOIphmLAsqnCJWxwlzFk+pEt/N/i6OgT3lShHO7xGCU5cpgchRDHboAEbSjzgGh+O/u1GswQmA==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.6.tgz", + "integrity": "sha512-lkWU8ZJaRk9q3CIEY1Tc7vIFALp3Xw5NfGJo2hQg5oIqNgxWi1zI+IiDEK3r70BF5Dzol1tcXsnzsRc8NLhG+Q==", "cpu": [ "arm64" ], @@ -5142,9 +5185,9 @@ } }, "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.1.tgz", - "integrity": "sha512-fMsTOnN0OjFm3CyppWPitKnc8UlliVARUULW6cfU6AIqjdtgmSFWSk9vecHzZduv/yMWIHDlRhM1e8Iff9uAfA==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.6.tgz", + "integrity": "sha512-dgR56NYnvAszm7Ob1B2/Vn0e8bUQYZH2UjVaMMtMVOCKFSfjhfLmuA/9+O+F+ajUdG6B/bSssrKW6JJYASa8jA==", "cpu": [ "arm64" ], @@ -5159,9 +5202,9 @@ } }, "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.1.tgz", - "integrity": "sha512-1wjKdz/XLGKHaTNHjQveQ/B23TKx4ItAqm1JbyVuvNPc4Ze0Fb48s49TAd/2zcplPl8okE/UbTgmlVfwT7eFeQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.6.tgz", + "integrity": "sha512-vpVxFvUCFioJqug7OTvqptkc4yb8UX0AwfDmJpaR/0sWz+BUmqSVAf7c8JkUgnN8YLspb4a/N6NhTyMAmdyQ7Q==", "cpu": [ "x64" ], @@ -5176,9 +5219,9 @@ } }, "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.1.tgz", - "integrity": "sha512-Fa0jHR07E7YBN4vOEsbVf2briYNsuOowfLJaXULZM0ldMlaCaj2LJgLMbMe4iacRyZmvR8efFhgR9wKuGclQUg==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.6.tgz", + "integrity": "sha512-h1wG6Y6K3JlRswxsI64qQJqBAy4vrLuHgRbc8CZMGSWTOFRY6ghMApM1NKzB2I0n5xV1fjkE18SuVl2QpLeNpA==", "cpu": [ "x64" ], @@ -5193,9 +5236,9 @@ } }, "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.1.tgz", - "integrity": "sha512-pzkgu1SSHGgRRyRZ4fbmSgmajbVt+epaLP99NDjFft69v/ypfTi6swBMiVdh2EkQ0OSnHE1lZDM7DRGkyAzUpA==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.6.tgz", + "integrity": "sha512-tbCiqub0q2MVWJKgF5PoAlNWCtQydiOYSLIkd8sByqK/6MMYLJRcSXSYodqYtd0O+Fw7QaVmKKlS4oL94YRZ0w==", "cpu": [ "arm" ], @@ -5210,9 +5253,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.1.tgz", - "integrity": "sha512-QI5SEDY8cbiYWHx0VO4vIc3UlS6a32vXHjU8Qy/17adEmZIPuByJg13UEvo9c/UCiUkdcVWY83C+b+JrwnNyUg==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.6.tgz", + "integrity": "sha512-oxK9+baEBPhZG5HB4URY+uU04zJWeZlH6Tb9rB5DK4DF9XR1uXNLXt5Q5ZsugTKayNCNLhkcwz/ye74hRI98dg==", "cpu": [ "arm64" ], @@ -5227,9 +5270,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.1.tgz", - "integrity": "sha512-Sm41FyCeXqmYcERoYOCbGIL5hNfd8w9LQ7Y61Bev48HkcjaJqV/iiVOaiDxjVTRMS+QKrZmD8cfPt4uMVnvM+A==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.6.tgz", + "integrity": "sha512-muWCk27FVBEZtv0MsK8gnfSmgczA8KQ0uRVJbTABKhkRfQc38aUrcb7fhi3BNiyseFmgcRsoMfQsSNJ+DbZdSw==", "cpu": [ "arm64" ], @@ -5244,9 +5287,9 @@ } }, "node_modules/@rolldown/binding-linux-ppc64-gnu": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.1.tgz", - "integrity": "sha512-2x+WhXTGl9yJYPbltW/BSEPTVz9OIWQyER4N+gJEDWkkn904eRcBzELqh/Hf7K0w/ubGbKNMv0ZC+94QK/IFEg==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.6.tgz", + "integrity": "sha512-eWDoSfU7Co2qj3vgB3Dt4lj1mG6CoWbcJQkRMP3XJplyCMtuaq3LHvPFjS9QIPvMGWVadJC04Xiy0IdcVPtnwQ==", "cpu": [ "ppc64" ], @@ -5261,9 +5304,9 @@ } }, "node_modules/@rolldown/binding-linux-s390x-gnu": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.1.tgz", - "integrity": "sha512-eEjmQpuRQayHPWWnywaWHkFT3ToPbP3RYy42VVd/B9aBGDA+Ol25EIWHxKQST3IiWJjikCWUF7KtbfqwZrzVwQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.6.tgz", + "integrity": "sha512-2bWNjRSIayvupRKxXUY2tWG9fYdoUlTqWywHRvE8Eq3GvuQ+f2HeIkve697fIt+IQs/PV8yFsdWuhp1aJ1PdnA==", "cpu": [ "s390x" ], @@ -5278,9 +5321,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.1.tgz", - "integrity": "sha512-/Orga1fZYkLc/56jBICcHrKchl8Z2UKdDSr3LG9ToWO1lQ6a4Livk9Xz+9WN91zsz5QR3XQz2NNoSDEvP6qadw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.6.tgz", + "integrity": "sha512-KekI0gS0wLxe1UBSQSjenBVwou/JkcQPDzBPICGZjxUv9k3RteHDPBQaiOicZUFKRIH2wKEimGwVpnJsbPzu7w==", "cpu": [ "x64" ], @@ -5295,9 +5338,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.1.tgz", - "integrity": "sha512-xxBJRL+0q0Kce7orznGWLuylHDY65vuARXZRpX+hPdv+DqK2c3NlCsVA98tlWzWNEE7yPqA/1NQ5nnCrj49Y5A==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.6.tgz", + "integrity": "sha512-TvtPnfVr+HtyGiDmPK4VWmlNm7QhNNAcK5Q9A7aOXsI8545yCyaoMaicXrFZ72JzeYjaUVk7yT243zT0jzjFKQ==", "cpu": [ "x64" ], @@ -5312,9 +5355,9 @@ } }, "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.1.tgz", - "integrity": "sha512-M6AdXIXw3s+/8XpKMzdGDEXGS1S7kwUsy+rcTIUIOx5Ge4nXKCtAFHFV9YKkXvGcC5WMoTjAteLzlsQROVI0Yw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.6.tgz", + "integrity": "sha512-iOo0VEay2XFhaCcH0sps5XIimkSuOnNaZrf6+ZkoSOQBJPKNU48RkmJv0/lSpipexu5P+ouFgafe5IGr/DiQfg==", "cpu": [ "arm64" ], @@ -5328,82 +5371,10 @@ "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@rolldown/binding-wasm32-wasi": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.2.1.tgz", - "integrity": "sha512-/TX0SoRGojHzSAHpfVBbavRVSazg5U3h3Y3VXfcc0cdugq6kxdqw8LPGFiPr+/7gE/60zRcsOY2Vi9b9eT0jww==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "2.0.0-alpha.3", - "@emnapi/runtime": "2.0.0-alpha.3", - "@napi-rs/wasm-runtime": "^1.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=23.5.0" - } - }, - "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/core": { - "version": "2.0.0-alpha.3", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-2.0.0-alpha.3.tgz", - "integrity": "sha512-AZypUeJ/yByuxyS7BlSNRDOMLMlROYtjYdIAuBmJssVz1UJDSeYxLrdizhXCFYhedC5bqd/ASy8EuNXbVVXp9g==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/wasi-threads": "2.0.1", - "tslib": "^2.4.0" - } - }, - "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/runtime": { - "version": "2.0.0-alpha.3", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-2.0.0-alpha.3.tgz", - "integrity": "sha512-hFPAhMUjJD9BSyCANEISPOogeXC9Zo9ZQl7L6vKnaVsMkCtzznaW/naYypeyl0Gv5rYfWYsZbpixTMpjDJzQeA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/wasi-threads": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-2.0.1.tgz", - "integrity": "sha512-9DsSk+o5NBX0CCJT8s0EROGSGxjR/tKu6aBTaVyq+SjAEQH4XcdcRxPBRzsBLizTTJ49MJjF+jgu3qnO9GLQcQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.1.tgz", - "integrity": "sha512-KjZdi8Q1wh89gsVmghvbrMgWl6ZWmRmHV6wjB7/g4Zf0dyO+hH3neZUtuDNPO00qq5YE5RITVWvrIZKRaAmzGQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@tybys/wasm-util": "^0.10.3" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=23.5.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - }, - "peerDependencies": { - "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.3", - "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.3" - } - }, "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.1.tgz", - "integrity": "sha512-EvRrivJieyHG+AO9lleZWgq+g0+S7oV2C51yuqlcyU/R9net+sI4Pj0F+lUoP2bEr6TWX3SqFaaS0SzfLxSzkw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.6.tgz", + "integrity": "sha512-y5NTmmasMS455JlOCO4ZM9krIchv3Mvm1crL1iUPGOPgEzSkves9n0SdC5Sjz6+qWDFhd8/JpfWMH8NSWNHe+A==", "cpu": [ "arm64" ], @@ -5418,9 +5389,9 @@ } }, "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.1.tgz", - "integrity": "sha512-Z4eCmn5QJ/5+azF9knpLWKfVd9aidn0mAe9TpJgvBLId9Ax3t0+JVxBmT25Bv7NBbVW1TZyKjQjQReouMeH5UQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.6.tgz", + "integrity": "sha512-np8iZSLfXlAD4kWhiyq/u0Yt8oZDtRQ8lGhQaCXo2rl37KNjeU0GjJuwr4P3oeZ++ROfofsKNBqR5LTO8aXyWQ==", "cpu": [ "x64" ], @@ -5442,28 +5413,32 @@ "license": "MIT" }, "node_modules/@rspack/binding": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-2.0.3.tgz", - "integrity": "sha512-4exVNhGhW5RFHjK87XeTKbkA/qAgI5NHJlT1jNqiJv0gcUXLqTOEU3w7f8+f9zUo4JMFvPc0c9veOi4M19YYTg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-2.2.0.tgz", + "integrity": "sha512-nxZzJqqB0EmEKp6qjzFNkBb/SgGt0k0DSENrLvAJgvVvrm3waVsubD0cfxtPlZY/rd5SzadzxWGEHRyFcds5nA==", "dev": true, "license": "MIT", "optionalDependencies": { - "@rspack/binding-darwin-arm64": "2.0.3", - "@rspack/binding-darwin-x64": "2.0.3", - "@rspack/binding-linux-arm64-gnu": "2.0.3", - "@rspack/binding-linux-arm64-musl": "2.0.3", - "@rspack/binding-linux-x64-gnu": "2.0.3", - "@rspack/binding-linux-x64-musl": "2.0.3", - "@rspack/binding-wasm32-wasi": "2.0.3", - "@rspack/binding-win32-arm64-msvc": "2.0.3", - "@rspack/binding-win32-ia32-msvc": "2.0.3", - "@rspack/binding-win32-x64-msvc": "2.0.3" + "@rspack/binding-darwin-arm64": "2.2.0", + "@rspack/binding-darwin-x64": "2.2.0", + "@rspack/binding-linux-arm64-gnu": "2.2.0", + "@rspack/binding-linux-arm64-musl": "2.2.0", + "@rspack/binding-linux-ppc64-gnu": "2.2.0", + "@rspack/binding-linux-riscv64-gnu": "2.2.0", + "@rspack/binding-linux-riscv64-musl": "2.2.0", + "@rspack/binding-linux-s390x-gnu": "2.2.0", + "@rspack/binding-linux-x64-gnu": "2.2.0", + "@rspack/binding-linux-x64-musl": "2.2.0", + "@rspack/binding-wasm32-wasi": "2.2.0", + "@rspack/binding-win32-arm64-msvc": "2.2.0", + "@rspack/binding-win32-ia32-msvc": "2.2.0", + "@rspack/binding-win32-x64-msvc": "2.2.0" } }, "node_modules/@rspack/binding-darwin-arm64": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-2.0.3.tgz", - "integrity": "sha512-4UyCjLJwU/WxR6K1/gG4u3+jUsoaRHJ5rNu9fto/UbvrItwdlVNULChAApqZFw6mcSetMddSjSICeuj5pSB6sA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-2.2.0.tgz", + "integrity": "sha512-KAVVT7hp3NBjtc/RY2UtOjzzc8i+s4pIhW1p52UV+Aev6ywQCu3dXwkHTonpPvJO3hqLXc4zIMH5l4HbMqBm4g==", "cpu": [ "arm64" ], @@ -5475,9 +5450,9 @@ ] }, "node_modules/@rspack/binding-darwin-x64": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-2.0.3.tgz", - "integrity": "sha512-K3evrbTgZNa8emEqk+AjDtbuoXZp5tPZz3pcEgETxuu3KanW8Zu+Fb+TUp1DEUcL0xOmHPPox8H2cZ3pF4Zmug==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-2.2.0.tgz", + "integrity": "sha512-rzyJCX99aFwl540trsVMNZOgK4+IFm2d5+YeP+RdNo9Uprxloz8vHz0J4dYtaq6MRiCAyM60dAwEa3wJMwqWAQ==", "cpu": [ "x64" ], @@ -5489,9 +5464,9 @@ ] }, "node_modules/@rspack/binding-linux-arm64-gnu": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-2.0.3.tgz", - "integrity": "sha512-aPLDaaTtX1wqjLYAIHc2MGDQZtv1Hbjx47oaaefbWz5GbAnSA4P8jdYIeeGRyrqvQ0WqJXIWXgT0d/iXtes00A==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-2.2.0.tgz", + "integrity": "sha512-0t8QOiOMcBV7RvPSsTJ5DQ4QCK6FIyUZy77qbxnS6asGTOXPZZn7V5cL26IxEv/wuHdQ6tQOXheau1fi+gGyBQ==", "cpu": [ "arm64" ], @@ -5503,9 +5478,9 @@ ] }, "node_modules/@rspack/binding-linux-arm64-musl": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-2.0.3.tgz", - "integrity": "sha512-0WulUQPop6vmSDfrTxghmVlm+6crU8/XqD2f0dOWbEniZVuDZJ5/Y/cBqTRyk3rjl0vrmUv3lc87/t7UgQJQSw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-2.2.0.tgz", + "integrity": "sha512-BAvCukqcuHxUdE294ITCohvhVkEklW8RbkKkR36Uo0WyIiMPGrnvPjARPn0/4Q4xMAz7lUmC60sZrvJHlAOKMw==", "cpu": [ "arm64" ], @@ -5516,10 +5491,66 @@ "linux" ] }, + "node_modules/@rspack/binding-linux-ppc64-gnu": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-2.2.0.tgz", + "integrity": "sha512-nCHqZLv/E8nm2ccGkb00F5DQtXxzGy3W3X73ArA+N0+zXJUnzRcSRSwr7AE8pVgP/FYfX4yMFgUXy0g0YxYGRA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rspack/binding-linux-riscv64-gnu": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-2.2.0.tgz", + "integrity": "sha512-CA3WEqKFDI6FAZTnCho2n9pmdPWZYAW/S8mqgxd0cx2Jix43at3VyLxhCC7ED5A9WBSFn/AdHaIbVtgoQHVhWA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rspack/binding-linux-riscv64-musl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-2.2.0.tgz", + "integrity": "sha512-kHB960oClkoPRPZ6sdkhRvqbdRIlbpIMYd/Tbxfmn3DWQahiCk1pkUFJbOtFq3EgESxZISV4THl442W2Y57HvQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rspack/binding-linux-s390x-gnu": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-2.2.0.tgz", + "integrity": "sha512-lVBdiffVo1jq0P0jT36jNou2suLB4ueQI4aWUs+HM+h67YPBtVKWu/mo5Wh59+8nowgcZmYaFM5hdH69963I9w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rspack/binding-linux-x64-gnu": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-2.0.3.tgz", - "integrity": "sha512-fAhiMuV5omT53YMft+f3Y9euAFgspuyBAk9ZpeW2buL2TkuUMwP07adhhvQfKdQ5gpELfzmjQaRDGqaIT8UWiA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-2.2.0.tgz", + "integrity": "sha512-M49UaWspE0YJ3268DsquD8idEQTfjBDMvO/I8qccV/Z5T+Q98FJ+kIs5liUaTWb48OIbDEK+8ZKx5QzLbfVN6g==", "cpu": [ "x64" ], @@ -5531,9 +5562,9 @@ ] }, "node_modules/@rspack/binding-linux-x64-musl": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-2.0.3.tgz", - "integrity": "sha512-0kcuFoZ8vy2iNWoISFOZt+/Ujo7LRLrzE7h07AV5r+oN/mv+/v14Sd/8NUtDIScCkrYOszYq/QS31e6t0UrVfw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-2.2.0.tgz", + "integrity": "sha512-YYbs0wmey+5blhEQDE4Dax3TwJtqfGwe2QBm3OLphlBHo/fcZVvimzKkMV0/pVrZTLy2z5ZAwNhGMY64bNr77w==", "cpu": [ "x64" ], @@ -5545,9 +5576,9 @@ ] }, "node_modules/@rspack/binding-wasm32-wasi": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-2.0.3.tgz", - "integrity": "sha512-x2fsw7GzNZEnw444ikj4/b8kVjM0Y0TllxmizHpYZ9gmaQrOk5OXo9RQdz+l4zzoGors0l2IZP5Cc4GJNCaSoQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-2.2.0.tgz", + "integrity": "sha512-rerLPTN/HD4EvLNWs3O2N+Eb37eGvLRIP3dXXc3n+UzTebOepAsahNn44vXeRBsE4m/pHkpDJjwgWTytgQ2gBw==", "cpu": [ "wasm32" ], @@ -5555,15 +5586,15 @@ "license": "MIT", "optional": true, "dependencies": { - "@emnapi/core": "1.10.0", - "@emnapi/runtime": "1.10.0", - "@napi-rs/wasm-runtime": "1.1.4" + "@emnapi/core": "1.11.3", + "@emnapi/runtime": "1.11.3", + "@napi-rs/wasm-runtime": "1.1.6" } }, "node_modules/@rspack/binding-win32-arm64-msvc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-2.0.3.tgz", - "integrity": "sha512-jqlxuVPdrgMuwj/HEjSkC/jmhl4fAuKyob36zJXq2uAusn2FRJ4kClGe1fLFpfxRXFVQAWwlAOwLJg8T0suuaA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-2.2.0.tgz", + "integrity": "sha512-JUAmnbOQYGTRyX28vls/MOMonZWcmcCi5YtEq6YMc8Xqh3Qx0HUwaLM/I1xr/N9BX3b8CV0dQDOpNuBc2ei+CA==", "cpu": [ "arm64" ], @@ -5575,9 +5606,9 @@ ] }, "node_modules/@rspack/binding-win32-ia32-msvc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-2.0.3.tgz", - "integrity": "sha512-QM4JEuyk5QaZ5gnvnAIaCwVQzCkrD2E4Sud77kx/MVGDsRkcOlMx3blMC5QNHPDamRmWGk+7314YOQvRhKuWyg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-2.2.0.tgz", + "integrity": "sha512-wOmQRUaOG0eWH/fnfslA9yK9xKfaq9X+3Xa1TdTJnTqlo0ARJYs6A+Lzjbs7cxdY/o1f12Xe00BG3nQozReUOg==", "cpu": [ "ia32" ], @@ -5589,9 +5620,9 @@ ] }, "node_modules/@rspack/binding-win32-x64-msvc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-2.0.3.tgz", - "integrity": "sha512-vSQNnAy0wswG6AfNRuArTHQBiXOXl+A9ddQxBFup4PMHUzXxKtsBLQzw7BgFC0EgrPeHbt+30j7sXVZKYukj4A==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-2.2.0.tgz", + "integrity": "sha512-v6/3bFr9+i7hRpgulL9b5qCvZL0VgR4vQGQNqOWezUzZmPUj9LYpvB0L9xZIVwDQ2ug/xBiA58bfg5IbESgoyw==", "cpu": [ "x64" ], @@ -5603,9 +5634,9 @@ ] }, "node_modules/@rspack/cli": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@rspack/cli/-/cli-2.0.3.tgz", - "integrity": "sha512-h/Xbkupx82UaPr5Ye3hNORi5eXmpEGSPri7WkEOrKIcT+Y3h603kujCQziNIPX3G4UURWPiksIArp1GBTF+A9w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@rspack/cli/-/cli-2.2.0.tgz", + "integrity": "sha512-GSiQPG5v5tN8vYJdUMYX44sPiwVVG8H25fq3LWRydVB4WswDAD/N3qNgWZtFVliQdLH3ZWzFdFUoCyZmea0TMA==", "dev": true, "license": "MIT", "bin": { @@ -5622,20 +5653,20 @@ } }, "node_modules/@rspack/core": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@rspack/core/-/core-2.0.3.tgz", - "integrity": "sha512-2ufO/8FHIA/lX6UOgSsKPhpDvHr0sh9lYq/n/LsIZsTwu3973BGbu2fg1Akvuu3rEnskPqXjsqH2EPBzEA42uA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@rspack/core/-/core-2.2.0.tgz", + "integrity": "sha512-3W7oX0BAHbK4VlknH3lfyfRvupzxdZtyEa+DfKmdjzmIAcqYtHnFd0nLqp5dzitDPyDI1TIKkDhpB0AZJn0pVg==", "dev": true, "license": "MIT", "dependencies": { - "@rspack/binding": "2.0.3" + "@rspack/binding": "2.2.0" }, "engines": { "node": "^20.19.0 || >=22.12.0" }, "peerDependencies": { "@module-federation/runtime-tools": "^0.24.1 || ^2.0.0", - "@swc/helpers": ">=0.5.1" + "@swc/helpers": "^0.5.23" }, "peerDependenciesMeta": { "@module-federation/runtime-tools": { @@ -6218,16 +6249,16 @@ } }, "node_modules/@vitest/expect": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.10.tgz", - "integrity": "sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.11.tgz", + "integrity": "sha512-VX2x5vNJXET47KAFzwERI+KRMtTTCSWTfSMKsW7JsUsXV4psq++e3DvZpuTDOpHcxytiDs6p2nhVb2tVDiiUYw==", "dev": true, "license": "MIT", "dependencies": { "@standard-schema/spec": "^1.1.0", "@types/chai": "^5.2.2", - "@vitest/spy": "4.1.10", - "@vitest/utils": "4.1.10", + "@vitest/spy": "4.1.11", + "@vitest/utils": "4.1.11", "chai": "^6.2.2", "tinyrainbow": "^3.1.0" }, @@ -6246,13 +6277,13 @@ } }, "node_modules/@vitest/mocker": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.10.tgz", - "integrity": "sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow==", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.11.tgz", + "integrity": "sha512-2XJVD55d1o5AZous5CCGKS74g/riOj9odEt2bQpCVZeblHyHdnMeFl4jl0XjU21stf4mbjUkew2eXQZt65g5CQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "4.1.10", + "@vitest/spy": "4.1.11", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, @@ -6273,9 +6304,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.10.tgz", - "integrity": "sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q==", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.11.tgz", + "integrity": "sha512-yiZzPbGTS9Sr/JpFl8zHrcIkAofNbFV6k21vIgQN/cY/oxZeXhJv5sc/MBJ5jFKWmWs+oJHw0UXLZjmf931+Vw==", "dev": true, "license": "MIT", "dependencies": { @@ -6286,13 +6317,13 @@ } }, "node_modules/@vitest/runner": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.10.tgz", - "integrity": "sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg==", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.11.tgz", + "integrity": "sha512-LztvUgdwMNJMIkj3hQnnxiC2Xy1zNxq928W/xhjCLaNCzqTZOudjwbQf6v9IntZGPw132i2Lq2rgTRZHD3JHNw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "4.1.10", + "@vitest/utils": "4.1.11", "pathe": "^2.0.3" }, "funding": { @@ -6300,14 +6331,14 @@ } }, "node_modules/@vitest/snapshot": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.10.tgz", - "integrity": "sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw==", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.11.tgz", + "integrity": "sha512-pN7ikn1ON7h8ee4gIAp4AzyK+zBtJPzVbqOgu5LCEh4VaJVbPQcgYQYJIMGQPXVeJJq1fnfazis7a5pFNPahog==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.1.10", - "@vitest/utils": "4.1.10", + "@vitest/pretty-format": "4.1.11", + "@vitest/utils": "4.1.11", "magic-string": "^0.30.21", "pathe": "^2.0.3" }, @@ -6316,9 +6347,9 @@ } }, "node_modules/@vitest/spy": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.10.tgz", - "integrity": "sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw==", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.11.tgz", + "integrity": "sha512-apNa/prQy2qCeywhnixOHPRCgGNhvg7T4Dapfl1GahLp/R+uhBm5cPyFoNVyqsNd2h1nJxL6BqqdIjiABL60YA==", "dev": true, "license": "MIT", "funding": { @@ -6326,13 +6357,13 @@ } }, "node_modules/@vitest/utils": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.10.tgz", - "integrity": "sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.11.tgz", + "integrity": "sha512-zTCVGpyFsGWBhllOyKlTw/vnr6D9qxsfSDyfbyZmTyjHw5N/VuvzHpHoQjm2ZJzn4RJgx5w4r7V0er69CmLgPQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.1.10", + "@vitest/pretty-format": "4.1.11", "convert-source-map": "^2.0.0", "tinyrainbow": "^3.1.0" }, @@ -6655,9 +6686,9 @@ } }, "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz", + "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -7027,9 +7058,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.0.tgz", - "integrity": "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==", + "version": "10.5.4", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.4.tgz", + "integrity": "sha512-MaU0U/za7N3r6brxD4YB/l4NSrFzLPlANv6wEuQVaIPlD3L4W9rFcQPbL/EilY9BHhHvhfcz3gInDLrEtWT4EA==", "dev": true, "funding": [ { @@ -7047,8 +7078,8 @@ ], "license": "MIT", "dependencies": { - "browserslist": "^4.28.2", - "caniuse-lite": "^1.0.30001787", + "browserslist": "^4.28.6", + "caniuse-lite": "^1.0.30001806", "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" @@ -7159,9 +7190,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.10.30", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.30.tgz", - "integrity": "sha512-xjOFN16Ha1+Rz4nFYKqHU/LSB+gx/Vi3yQLX7r7sAW+Wa+8hhF2h4pvqTrTMc8+WcDBEunnUurr46Jvv0jk3Vg==", + "version": "2.11.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.19.tgz", + "integrity": "sha512-Grytf1xOxOEMTGRwx6rLGKkTabd4vMg3VrKdj/7joCmV0qgh4QwMMO6xh34YEXQqirAuUdgQGa5orJQQ+69RBw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -7455,9 +7486,9 @@ "license": "ISC" }, "node_modules/browserslist": { - "version": "4.28.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", - "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "version": "4.28.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.8.tgz", + "integrity": "sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==", "dev": true, "funding": [ { @@ -7475,11 +7506,11 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.10.12", - "caniuse-lite": "^1.0.30001782", - "electron-to-chromium": "^1.5.328", - "node-releases": "^2.0.36", - "update-browserslist-db": "^1.2.3" + "baseline-browser-mapping": "^2.11.12", + "caniuse-lite": "^1.0.30001809", + "electron-to-chromium": "^1.5.402", + "node-releases": "^2.0.53", + "update-browserslist-db": "^1.3.0" }, "bin": { "browserslist": "cli.js" @@ -7646,9 +7677,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001793", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001793.tgz", - "integrity": "sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==", + "version": "1.0.30001810", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz", + "integrity": "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==", "dev": true, "funding": [ { @@ -8644,11 +8675,14 @@ } }, "node_modules/core-js": { - "version": "3.49.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.49.0.tgz", - "integrity": "sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg==", + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.50.0.tgz", + "integrity": "sha512-BRWgOLKkFeCgRudR6zrs8p9XJZcE14grzKMMssoYrk6krtuEZ7MTKPIY5RzOnqsEKIR9kst7wNzphttraT+Yqw==", "hasInstallScript": true, "license": "MIT", + "engines": { + "node": "*" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" @@ -8847,9 +8881,9 @@ } }, "node_modules/cytoscape": { - "version": "3.33.3", - "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.33.3.tgz", - "integrity": "sha512-Gej7U+OKR+LZ8kvX7rb2HhCYJ0IhvEFsnkud4SB1PR+BUY/TsSO0dmOW59WEVLu51b1Rm+gQRKoz4bLYxGSZ2g==", + "version": "3.34.2", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.34.2.tgz", + "integrity": "sha512-Cm2jaj1X/PBNlzV9yH8zcfGOxO7U+CJ/+mxSBVPSchLaugdp4jtlGx5qaHtPRZ6tgiZ5P+o1XoRfJA+ba6KM3g==", "license": "MIT", "engines": { "node": ">=0.10" @@ -9374,9 +9408,9 @@ "dev": true }, "node_modules/dayjs": { - "version": "1.11.20", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.20.tgz", - "integrity": "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==", + "version": "1.11.23", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.23.tgz", + "integrity": "sha512-QDTCU0M0MxR3hQfnlDJfwekQiaanm1ubOD231u73WBckQ/fsamwRLiE2GBz6D3a/xF1NgfiDLJjXBa1hYOYTtQ==", "license": "MIT" }, "node_modules/debounce-fn": { @@ -9663,9 +9697,9 @@ } }, "node_modules/dompurify": { - "version": "3.4.11", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.11.tgz", - "integrity": "sha512-zhlUV12GsaRzMsf9q5M254YhA4+VuF0fG+QFqu6aYpoGlKtz+w8//jBcGVYBgQkR5GHjUomejY84AV+/uPbWdw==", + "version": "3.4.14", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.14.tgz", + "integrity": "sha512-dVoH9z+MY+C9IilgGCk3YfFqjLi3fChm2OiKJMzh6axrJ5qwxqWaZamgmHrpv22CN/KdbZJuGEGgfQoL00LTdg==", "license": "(MPL-2.0 OR Apache-2.0)", "optionalDependencies": { "@types/trusted-types": "^2.0.7" @@ -9740,9 +9774,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.357", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.357.tgz", - "integrity": "sha512-NHlTIQDK8fmVwHwuIzmXYEJ1Ewq3D9wDNc0cWXxDGysP6Pb21giwGNkxiTifyKy/4SoPuN5l6GLP1W9Sv7zB2g==", + "version": "1.5.415", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.415.tgz", + "integrity": "sha512-958V+Kbhtgz+SxXeEVKBjrlKRBIDAYvUJfwhjxMZ5S6ut9jAl7l9ZKBkBrvjyjZE36PabLUo2L8kEeV5O4vgJg==", "dev": true, "license": "ISC" }, @@ -9854,6 +9888,7 @@ "integrity": "sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.3" @@ -9940,13 +9975,15 @@ } }, "node_modules/es-toolkit": { - "version": "1.46.1", - "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.46.1.tgz", - "integrity": "sha512-5eNtXOs3tbfxXOj04tjjseeWkRWaoCjdEI+96DgwzZoe6c9juL49pXlzAFTI72aWC9Y8p7168g6XIKjh7k6pyQ==", + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.51.0.tgz", + "integrity": "sha512-zC2lQGkM7QX+Gm6iM3+WIdZJzthsEd14LvRNJneSO2hzyz/zNBENR8+YXWo1cKxgPBtV6ksPYHELbcwBRzmdCw==", "license": "MIT", "workspaces": [ "docs", - "benchmarks" + "benchmarks", + "tests/types", + "tests/browser-compat" ] }, "node_modules/escalade": { @@ -10402,9 +10439,9 @@ } }, "node_modules/filesize": { - "version": "11.0.17", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-11.0.17.tgz", - "integrity": "sha512-oHLTvMLw6imZUl1se/RBQrFlyy50nXce4sU7yGR6Qc0JgCwqnfiFsAnEwotdGmfKLD7SArGUk2/5STU0k8LOBQ==", + "version": "11.0.22", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-11.0.22.tgz", + "integrity": "sha512-RlCVs9CY+oSsRnNZn95J9vDXjNjOwddKyTFjOYtA4yxYVIxBnwiVVGJX+TFhsmu3uUf81JDGyijtYL9xgawlTw==", "license": "BSD-3-Clause", "engines": { "node": ">= 10.8.0" @@ -10558,12 +10595,12 @@ } }, "node_modules/framer-motion": { - "version": "12.42.0", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.42.0.tgz", - "integrity": "sha512-wp7EJnfWaaEScVygKv3e20udoRz+LbtxScsuTkakAxfXmt+ReC6WyPW2nINRAGvd+hG9odwcjBLyOTPjH5pBRA==", + "version": "12.43.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.43.0.tgz", + "integrity": "sha512-1eaL3RvR/kAlbG7UYcpMptEyzPoENO0c6w7ZnB3/hh2vSAz/6uGAFn6fdoqTBguNstf3MsFhJHsD/0DHiclG+g==", "license": "MIT", "dependencies": { - "motion-dom": "^12.42.0", + "motion-dom": "^12.43.0", "motion-utils": "^12.39.0", "tslib": "^2.4.0" }, @@ -10970,9 +11007,9 @@ "license": "MIT" }, "node_modules/happy-dom": { - "version": "20.11.1", - "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-20.11.1.tgz", - "integrity": "sha512-XSt8tMzbW9ymE7687xztkO1ckR7qJNQ3LywY9vlYGhGi3zXrGBHuUo2Cl1ztZaICW+1eAGdkLbj6iwVqDT33kg==", + "version": "20.11.6", + "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-20.11.6.tgz", + "integrity": "sha512-Hldbg8AdAa5a5oDcZpjqnGitp7JB0hqWmfv/8qr+kft4vzSD8BHsbdRfzYvL/0QcbKcURC/yyoygbeDQarPvYg==", "dev": true, "license": "MIT", "dependencies": { @@ -12630,9 +12667,9 @@ "license": "MIT" }, "node_modules/linkify-it": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.1.tgz", - "integrity": "sha512-wVoTjP4Q6R0NW5hiZkVJaFZPWgtXfoGF+6LucL3/FtiNjmcHhYjEr5f1Kqjirc1nBW07J/ZuRFumqr2oqccEWg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.2.tgz", + "integrity": "sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q==", "funding": [ { "type": "github", @@ -12820,9 +12857,9 @@ } }, "node_modules/markdown-it": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.2.0.tgz", - "integrity": "sha512-1TGiQiJVRQ3NPmZH6sx5Cfnmg6GQm9jvC1ch4TK511NjSJvjzKLzn5pPfZRNZkRPZP0HqCioSndqH8v2nRaWVQ==", + "version": "14.3.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.3.0.tgz", + "integrity": "sha512-RCEsPjR+sr0x+AuYp601tKTkgFG4YEPLCzHST3cQ/fhlJkqAkz1L2/Qbp1j9qw5SBwQHFBoW8+hoN5xssOF0Tw==", "funding": [ { "type": "github", @@ -12836,8 +12873,8 @@ "license": "MIT", "dependencies": { "argparse": "^2.0.1", - "entities": "^4.4.0", - "linkify-it": "^5.0.1", + "entities": "^4.5.0", + "linkify-it": "^5.0.2", "mdurl": "^2.0.0", "punycode.js": "^2.3.1", "uc.micro": "^2.1.0" @@ -12847,9 +12884,9 @@ } }, "node_modules/markdown-it-anchor": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-9.2.0.tgz", - "integrity": "sha512-sa2ErMQ6kKOA4l31gLGYliFQrMKkqSO0ZJgGhDHKijPf0pNFM9vghjAh3gn26pS4JDRs7Iwa9S36gxm3vgZTzg==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-9.2.1.tgz", + "integrity": "sha512-p6APiLJDFAW2GEvaavDvhIBn7jrX2jLv77NkBGgNacFTurbORYc4pyYySg/mI6mpR6cHQuAtzKtmqgQr4K8dsQ==", "license": "Unlicense", "peerDependencies": { "@types/markdown-it": "*", @@ -12857,9 +12894,9 @@ } }, "node_modules/markdown-it-emoji": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/markdown-it-emoji/-/markdown-it-emoji-3.0.0.tgz", - "integrity": "sha512-+rUD93bXHubA4arpEZO3q80so0qgoFJEKRkRbjKX8RTdca89v2kfyF+xR3i2sQTwql9tpPZPOQN5B+PunspXRg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/markdown-it-emoji/-/markdown-it-emoji-3.1.0.tgz", + "integrity": "sha512-NhmMEH2ywduD4Nty1E8uB5NqfLhAT1VR0dyvoJyStKOqCzbZmVdn/+8wj7zpDsb/fLBikpCPsWwxqKlvMmbz4g==", "license": "MIT" }, "node_modules/markdown-it-footnote": { @@ -13745,12 +13782,12 @@ } }, "node_modules/motion": { - "version": "12.42.0", - "resolved": "https://registry.npmjs.org/motion/-/motion-12.42.0.tgz", - "integrity": "sha512-Qhwvu9sVl5/URSq5CNzwMCpSKK8Uhnrwb6VO977kZyj/wOCS7mWebJUnBoHx5cZU1Zv8a9BD5CSICWKAlrLJgA==", + "version": "12.43.0", + "resolved": "https://registry.npmjs.org/motion/-/motion-12.43.0.tgz", + "integrity": "sha512-BQgQbSa9Hn3/mtbib0MK53y6JSANa+YKUKlaYnWzAVDH424RYQ5LVpV3pNiWH00BA2z4ojsSdMzqT7g2FQwjuQ==", "license": "MIT", "dependencies": { - "framer-motion": "^12.42.0", + "framer-motion": "^12.43.0", "tslib": "^2.4.0" }, "peerDependencies": { @@ -13771,9 +13808,9 @@ } }, "node_modules/motion-dom": { - "version": "12.42.0", - "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.42.0.tgz", - "integrity": "sha512-M63h4n8R+quJdNhBwuLlgxM+OLYa9+I/T2pzDRboB9fLXRdbou+Gw7Zury+SkpaCyACP1JHSjHgZ1EgTkBr30w==", + "version": "12.43.0", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.43.0.tgz", + "integrity": "sha512-azKON4d9S65PEoFUiQTMTgPheEmzf2QngdRc50AKfJp9Q9mmcBVw22c8eMq9k8kxOFHdL7+WZY7N/5F/lwiDag==", "license": "MIT", "dependencies": { "motion-utils": "^12.39.0" @@ -13808,9 +13845,9 @@ "license": "ISC" }, "node_modules/nanoid": { - "version": "3.3.16", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz", - "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==", + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", "dev": true, "funding": [ { @@ -13887,11 +13924,14 @@ } }, "node_modules/node-releases": { - "version": "2.0.44", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.44.tgz", - "integrity": "sha512-5WUyunoPMsvvEhS8AxHtRzP+oA8UCkJ7YRxatWKjngndhDGLiqEVAQKWjFAiAiuL8zMRGzGSJxFnLetoa43qGQ==", + "version": "2.0.53", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.53.tgz", + "integrity": "sha512-D9UOmYG3UH1V+ENW56t5QXBwJw1YEY18ruVeus89Rw+SyIgjPkCO84bRzO3uNIYosJbNwiabWVn48o3uJLjxFQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=18" + } }, "node_modules/nopt": { "version": "9.0.0", @@ -14608,9 +14648,9 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", - "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", "license": "MIT", "engines": { "node": ">=12" @@ -14739,9 +14779,9 @@ } }, "node_modules/postcss": { - "version": "8.5.25", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.25.tgz", - "integrity": "sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==", + "version": "8.5.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", + "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==", "dev": true, "funding": [ { @@ -14759,7 +14799,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.16", + "nanoid": "^3.3.17", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -15819,13 +15859,13 @@ "license": "Unlicense" }, "node_modules/rolldown": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.1.tgz", - "integrity": "sha512-4FKJhg8d3OiyQOA6Q1Q0hoFFpW9/OoX+VsHzpECsdsIZoOArrAK90gl59YK/Z+gnDel45bgJZK03ozH/9bCqEw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.6.tgz", + "integrity": "sha512-vMM4q3aixf46GiF1Kok8jDPFsEpXgFWGjUHXNkNHNm+Y2adXAG2dbX91jkti3i0ZRsOlcmbuzAz1poObSHCmUA==", "dev": true, "license": "MIT", "dependencies": { - "@oxc-project/types": "=0.142.0", + "@oxc-project/types": "=0.147.0", "@rolldown/pluginutils": "^1.0.0" }, "bin": { @@ -15835,21 +15875,21 @@ "node": "^20.19.0 || >=22.12.0" }, "optionalDependencies": { - "@rolldown/binding-android-arm64": "1.2.1", - "@rolldown/binding-darwin-arm64": "1.2.1", - "@rolldown/binding-darwin-x64": "1.2.1", - "@rolldown/binding-freebsd-x64": "1.2.1", - "@rolldown/binding-linux-arm-gnueabihf": "1.2.1", - "@rolldown/binding-linux-arm64-gnu": "1.2.1", - "@rolldown/binding-linux-arm64-musl": "1.2.1", - "@rolldown/binding-linux-ppc64-gnu": "1.2.1", - "@rolldown/binding-linux-s390x-gnu": "1.2.1", - "@rolldown/binding-linux-x64-gnu": "1.2.1", - "@rolldown/binding-linux-x64-musl": "1.2.1", - "@rolldown/binding-openharmony-arm64": "1.2.1", - "@rolldown/binding-wasm32-wasi": "1.2.1", - "@rolldown/binding-win32-arm64-msvc": "1.2.1", - "@rolldown/binding-win32-x64-msvc": "1.2.1" + "@rolldown/binding-android-arm-eabi": "1.2.6", + "@rolldown/binding-android-arm64": "1.2.6", + "@rolldown/binding-darwin-arm64": "1.2.6", + "@rolldown/binding-darwin-x64": "1.2.6", + "@rolldown/binding-freebsd-x64": "1.2.6", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.6", + "@rolldown/binding-linux-arm64-gnu": "1.2.6", + "@rolldown/binding-linux-arm64-musl": "1.2.6", + "@rolldown/binding-linux-ppc64-gnu": "1.2.6", + "@rolldown/binding-linux-s390x-gnu": "1.2.6", + "@rolldown/binding-linux-x64-gnu": "1.2.6", + "@rolldown/binding-linux-x64-musl": "1.2.6", + "@rolldown/binding-openharmony-arm64": "1.2.6", + "@rolldown/binding-win32-arm64-msvc": "1.2.6", + "@rolldown/binding-win32-x64-msvc": "1.2.6" } }, "node_modules/roughjs": { @@ -15936,13 +15976,13 @@ "license": "MIT" }, "node_modules/sass": { - "version": "1.99.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.99.0.tgz", - "integrity": "sha512-kgW13M54DUB7IsIRM5LvJkNlpH+WhMpooUcaWGFARkF1Tc82v9mIWkCbCYf+MBvpIUBSeSOTilpZjEPr2VYE6Q==", + "version": "1.103.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.103.1.tgz", + "integrity": "sha512-9icZURbP51S6S0QGoyaeqk9uB06GNWxsFYWfH5RgpFgqK5FA8tJcM3AdVxrZEVJ7dz+L87nG95gBKf4VuaMHGw==", "dev": true, "license": "MIT", "dependencies": { - "chokidar": "^4.0.0", + "chokidar": "^5.0.0", "immutable": "^5.1.5", "source-map-js": ">=0.6.2 <2.0.0" }, @@ -15950,7 +15990,7 @@ "sass": "sass.js" }, "engines": { - "node": ">=14.0.0" + "node": ">=20.19.0" }, "optionalDependencies": { "@parcel/watcher": "^2.4.1" @@ -15997,6 +16037,36 @@ } } }, + "node_modules/sass/node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/sass/node_modules/readdirp": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz", + "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/sax": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz", @@ -16846,37 +16916,28 @@ } }, "node_modules/ts-loader": { - "version": "9.5.7", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.7.tgz", - "integrity": "sha512-/ZNrKgA3K3PtpMYOC71EeMWIloGw3IYEa5/t1cyz2r5/PyUwTXGzYJvcD3kfUvmhlfpz1rhV8B2O6IVTQ0avsg==", + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.6.2.tgz", + "integrity": "sha512-R4iuczmtgxvtuI556s+hTZ6/7Ee03VCAk/l/M8LY1OAsUgB7YydsCxkgq9D9pKRaD7GJqUi2u8fp9zZP/ufjKA==", "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4", + "picomatch": "^4.0.0", "source-map": "^0.7.4" }, "engines": { "node": ">=12.0.0" }, "peerDependencies": { + "loader-utils": "*", "typescript": "*", - "webpack": "^5.0.0" - } - }, - "node_modules/ts-loader/node_modules/semver": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", - "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "webpack": "^4.0.0 || ^5.0.0" }, - "engines": { - "node": ">=10" + "peerDependenciesMeta": { + "loader-utils": { + "optional": true + } } }, "node_modules/tslib": { @@ -17145,9 +17206,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", - "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.1.tgz", + "integrity": "sha512-ZZ61DsRsOnakl74HAmp3oSN4aXUmEWXf+i/yv0h7tIBfICc3VdrFErQKUUKPgu3AMsTUMbcongALEN4l6GSUrQ==", "dev": true, "funding": [ { @@ -17267,16 +17328,16 @@ } }, "node_modules/uuid": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.0.tgz", - "integrity": "sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.1.tgz", + "integrity": "sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], "license": "MIT", "bin": { - "uuid": "dist-node/bin/uuid" + "uuid": "dist/esm/bin/uuid" } }, "node_modules/valid-identifier": { @@ -17358,16 +17419,16 @@ "license": "MIT" }, "node_modules/vite": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.0.tgz", - "integrity": "sha512-pn+CFpM0lwDeKwmOq1ZaBK/9sjorZcgqxki6MbY/jPEVd9vichIlmlD4HmQ5wdP5EgqQCFRaACBxMC7uEGc6lQ==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.2.tgz", + "integrity": "sha512-cFKLV/PRgAUlIRm5WjMjJ86jrftzpqcgH+Us+DS8mI3CDNiH30Whrz8uHL3+MOLPAgqbMBAqWdAHAphOAM+z/Q==", "dev": true, "license": "MIT", "dependencies": { "lightningcss": "^1.33.0", "picomatch": "^4.0.5", - "postcss": "^8.5.23", - "rolldown": "~1.2.0", + "postcss": "^8.5.26", + "rolldown": "~1.2.4", "tinyglobby": "^0.2.17" }, "bin": { @@ -17384,7 +17445,7 @@ }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", - "@vitejs/devtools": "^0.4.0", + "@vitejs/devtools": "^0.4.0 || ^0.5.0", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", @@ -17436,19 +17497,19 @@ } }, "node_modules/vitest": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.10.tgz", - "integrity": "sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw==", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.11.tgz", + "integrity": "sha512-fhACrNXUidIbGSBr5FlbuBkO7VWC1ZyLl0DO4CU2DrQoAPxX84Ysxs+HeGQpii5lZWV1Q4gBZTTu49mF+A6Edw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "4.1.10", - "@vitest/mocker": "4.1.10", - "@vitest/pretty-format": "4.1.10", - "@vitest/runner": "4.1.10", - "@vitest/snapshot": "4.1.10", - "@vitest/spy": "4.1.10", - "@vitest/utils": "4.1.10", + "@vitest/expect": "4.1.11", + "@vitest/mocker": "4.1.11", + "@vitest/pretty-format": "4.1.11", + "@vitest/runner": "4.1.11", + "@vitest/snapshot": "4.1.11", + "@vitest/spy": "4.1.11", + "@vitest/utils": "4.1.11", "es-module-lexer": "^2.0.0", "expect-type": "^1.3.0", "magic-string": "^0.30.21", @@ -17476,12 +17537,12 @@ "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "4.1.10", - "@vitest/browser-preview": "4.1.10", - "@vitest/browser-webdriverio": "4.1.10", - "@vitest/coverage-istanbul": "4.1.10", - "@vitest/coverage-v8": "4.1.10", - "@vitest/ui": "4.1.10", + "@vitest/browser-playwright": "4.1.11", + "@vitest/browser-preview": "4.1.11", + "@vitest/browser-webdriverio": "4.1.11", + "@vitest/coverage-istanbul": "4.1.11", + "@vitest/coverage-v8": "4.1.11", + "@vitest/ui": "4.1.11", "happy-dom": "*", "jsdom": "*", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" @@ -17983,9 +18044,9 @@ } }, "node_modules/ws": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", - "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz", + "integrity": "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==", "dev": true, "license": "MIT", "engines": { @@ -18062,15 +18123,15 @@ "license": "ISC" }, "node_modules/yargs": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", - "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.1.0.tgz", + "integrity": "sha512-2rAgRKu54VsHkqI0/tYkmluGXHD4KW7yZoycuqDQ15QOTnc2VVfy0nN/1eMhnQLO00A+dwtK20xuCnc1YGeUyg==", "license": "MIT", "dependencies": { "cliui": "^9.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", - "string-width": "^7.2.0", + "string-width": "^8.2.1", "y18n": "^5.0.5", "yargs-parser": "^22.0.0" }, @@ -18103,6 +18164,22 @@ "node": ">=10" } }, + "node_modules/yargs/node_modules/string-width": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz", + "integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==", + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index dcf2e77743..c1cf55d0d7 100644 --- a/package.json +++ b/package.json @@ -64,22 +64,22 @@ "homepage": "https://github.com/deadlyjack/acode#readme", "devDependencies": { "@babel/core": "^8.0.1", - "@babel/generator": "^7.29.1", - "@babel/parser": "^7.29.3", + "@babel/generator": "^7.29.8", + "@babel/parser": "^7.29.8", "@babel/plugin-transform-runtime": "^8.0.1", - "@babel/preset-env": "^8.0.1", + "@babel/preset-env": "^8.0.2", "@babel/preset-typescript": "^8.0.1", - "@babel/runtime": "^7.29.2", - "@babel/runtime-corejs3": "^7.29.2", - "@babel/traverse": "^7.29.0", + "@babel/runtime": "^7.29.7", + "@babel/runtime-corejs3": "^7.29.7", + "@babel/traverse": "^7.29.8", "@biomejs/biome": "2.4.11", "@lezer/generator": "^1.8.0", - "@rspack/cli": "^2.0.0", - "@rspack/core": "^2.0.0", + "@rspack/cli": "^2.2.0", + "@rspack/core": "^2.2.0", "@types/ace": "^0.0.52", "@types/cordova": "^11.0.3", "@types/url-parse": "^1.4.11", - "autoprefixer": "^10.5.0", + "autoprefixer": "^10.5.4", "babel-loader": "^10.1.1", "chokidar": "^4.0.3", "com.foxdebug.acode.rk.auth": "file:src/plugins/auth", @@ -104,22 +104,22 @@ "cordova-plugin-system": "file:src/plugins/system", "cordova-plugin-websocket": "file:src/plugins/websocket", "css-loader": "^7.1.4", - "happy-dom": "^20.11.1", + "happy-dom": "^20.11.6", "mini-css-extract-plugin": "^2.10.2", "path-browserify": "^1.0.1", "postcss-loader": "^8.2.1", "prettier": "^3.8.3", "prettier-plugin-java": "^2.8.1", "raw-loader": "^4.0.2", - "sass": "^1.99.0", + "sass": "^1.103.1", "sass-loader": "^16.0.8", "style-loader": "^4.0.0", "terminal": "^0.1.4", - "ts-loader": "^9.5.7", + "ts-loader": "^9.6.2", "typescript": "^5.9.3", - "vitest": "^4.1.10", + "vitest": "^4.1.11", "vscode-languageserver-types": "^3.17.5", - "ws": "^8.21.0" + "ws": "^8.21.3" }, "dependencies": { "@codemirror/autocomplete": "^6.20.3", @@ -135,7 +135,7 @@ "@codemirror/lang-json": "^6.0.2", "@codemirror/lang-less": "^6.0.2", "@codemirror/lang-liquid": "^6.3.2", - "@codemirror/lang-markdown": "^6.5.0", + "@codemirror/lang-markdown": "^6.5.2", "@codemirror/lang-php": "^6.0.2", "@codemirror/lang-python": "^6.2.1", "@codemirror/lang-rust": "^6.0.2", @@ -168,38 +168,38 @@ "@xterm/addon-web-links": "^0.12.0", "@xterm/addon-webgl": "^0.19.0", "@xterm/xterm": "^6.0.0", - "acorn": "^8.16.0", + "acorn": "^8.18.0", "autosize": "^6.0.1", "codemirror": "^6.0.2", "cordova": "13.0.0", - "core-js": "^3.49.0", - "dayjs": "^1.11.20", - "dompurify": "^3.4.11", + "core-js": "^3.50.0", + "dayjs": "^1.11.23", + "dompurify": "^3.4.14", "escape-string-regexp": "^5.0.0", "esprima": "^4.0.1", - "filesize": "^11.0.17", + "filesize": "^11.0.22", "html-tag-js": "^2.4.16", "jszip": "^3.10.1", - "katex": "^0.16.45", - "markdown-it": "^14.2.0", - "markdown-it-anchor": "^9.2.0", - "markdown-it-emoji": "^3.0.0", + "katex": "^0.16.47", + "markdown-it": "^14.3.0", + "markdown-it-anchor": "^9.2.1", + "markdown-it-emoji": "^3.1.0", "markdown-it-footnote": "^4.0.0", "markdown-it-github-alerts": "^1.0.1", "markdown-it-task-lists": "^2.1.1", "markdown-it-texmath": "^1.0.0", "mermaid": "^11.14.0", "mime-types": "^3.0.2", - "motion": "^12.42.0", + "motion": "^12.43.0", "mustache": "^4.2.0", - "picomatch": "^4.0.4", + "picomatch": "^4.0.7", "url-parse": "^1.5.10", "vanilla-picker": "^2.12.3", "vscode-css-languageservice": "6.3.10", "vscode-html-languageservice": "5.6.2", "vscode-json-languageservice": "5.7.2", "vscode-languageserver-textdocument": "1.0.12", - "yargs": "^18.0.0" + "yargs": "^18.1.0" }, "overrides": { "@codemirror/autocomplete": "^6.20.3", From e27eb1a877df53079a9a5e2806559ed15253e03e Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Thu, 27 Aug 2026 15:27:33 +0000 Subject: [PATCH 12/38] fix: preserve MIME type for plugin icons on plugin details page (#2818) * fix: preserve MIME type for plugin icons on plugin details page * fix --- src/pages/plugin/plugin.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/pages/plugin/plugin.js b/src/pages/plugin/plugin.js index 2503ff9853..f4c91d74ba 100644 --- a/src/pages/plugin/plugin.js +++ b/src/pages/plugin/plugin.js @@ -18,6 +18,7 @@ import anchor from "markdown-it-anchor"; import markdownItFootnote from "markdown-it-footnote"; import MarkdownItGitHubAlerts from "markdown-it-github-alerts"; import markdownItTaskLists from "markdown-it-task-lists"; +import mimeTypes from "mime-types"; import { highlightCodeBlock, initHighlighting } from "utils/codeHighlight"; import helpers from "utils/helpers"; import Url from "utils/Url"; @@ -120,8 +121,10 @@ export default async function PluginInclude( Url.join(PLUGIN_DIR, id, installedPlugin.icon), ); const iconData = await fsOperation(iconUrl).readFile(); + const iconMimeType = + mimeTypes.lookup(installedPlugin.icon) || "image/png"; const icon = URL.createObjectURL( - new Blob([iconData], { type: "image/png" }), + new Blob([iconData], { type: iconMimeType }), ); plugin = { id, From 5612038a220fbd4d17c09d908b962f1f1fccad31 Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Thu, 27 Aug 2026 17:34:32 +0000 Subject: [PATCH 13/38] fix(console): run JavaScript files in isolated worker (#2819) * fix(console): run JavaScript files in isolated worker * fix --- src/lib/console.js | 20 ++++++++ src/lib/consoleRuntime.js | 31 ++++++++++++ src/lib/run.js | 9 ++-- src/views/console.hbs | 8 +-- tests/unit/consoleExecutionContext.test.js | 59 ++++++++++++++++++++++ 5 files changed, 121 insertions(+), 6 deletions(-) diff --git a/src/lib/console.js b/src/lib/console.js index 05ca41fa6a..35a32cb2b9 100644 --- a/src/lib/console.js +++ b/src/lib/console.js @@ -7,6 +7,7 @@ import loadPolyFill from "utils/polyfill"; import ConsoleExecutor, { applyConsoleViewport, executeConsoleCommand, + executeConsoleScript, resolveConsoleExecutionContext, } from "./consoleRuntime"; @@ -25,6 +26,9 @@ import ConsoleExecutor, { const themeEndpoint = document.querySelector( 'meta[name="acode-console-theme-endpoint"]', )?.content; + const startupScriptUrl = document.querySelector( + 'meta[name="acode-console-executing-script"]', + )?.content; const originalConsole = console; const $input = tag("textarea", { id: "__c-input", @@ -184,6 +188,7 @@ import ConsoleExecutor, { if (isStandaloneConsole) { showConsole(); + void runStartupScript(); return; } @@ -205,6 +210,21 @@ import ConsoleExecutor, { themeSyncTimer = null; } + async function runStartupScript() { + if (!startupScriptUrl) return; + + setExecutionState(true); + const result = await executeConsoleScript({ + scriptUrl: startupScriptUrl, + workerExecutor: executor, + }); + setExecutionState(false); + + if (result?.type === "error") { + log("error", getStack(new Error()), result.value); + } + } + async function syncTheme() { if (themeSyncPending) return; themeSyncPending = true; diff --git a/src/lib/consoleRuntime.js b/src/lib/consoleRuntime.js index 383ddd0946..5e45e25236 100644 --- a/src/lib/consoleRuntime.js +++ b/src/lib/consoleRuntime.js @@ -184,3 +184,34 @@ export function executeConsoleCommand({ if (context === "page") return Promise.resolve(pageExecutor(code)); return workerExecutor.execute(code); } + +/** + * Loads a standalone JavaScript file and executes it in the isolated console + * worker. The file is fetched first so it is never inserted as a page script. + */ +export async function executeConsoleScript({ + scriptUrl, + workerExecutor, + fetchScript = globalThis.fetch, +}) { + if (!scriptUrl) return null; + + try { + if (typeof fetchScript !== "function") { + throw new Error("This WebView cannot load the JavaScript file."); + } + + const response = await fetchScript(scriptUrl, { cache: "no-store" }); + if (!response.ok) { + const status = response.status ? ` (${response.status})` : ""; + throw new Error(`Failed to load JavaScript file${status}.`); + } + + return workerExecutor.execute(await response.text()); + } catch (error) { + return { + type: "error", + value: error instanceof Error ? error : new Error(String(error)), + }; + } +} diff --git a/src/lib/run.js b/src/lib/run.js index d130c11bae..beb5346433 100644 --- a/src/lib/run.js +++ b/src/lib/run.js @@ -72,10 +72,13 @@ async function run( let isLoading = false; let filename, pathName, extension; let port = appSettings.value.serverPort; - let EXECUTING_SCRIPT = uuid + "_script.js"; + let shouldExecuteScript = false; const MIMETYPE_HTML = mimeType.lookup("html"); const CONSOLE_SCRIPT = uuid + "_console.js"; const CONSOLE_WORKER_SCRIPT = uuid + "_console_worker.js"; + // Keep this route independent of the filename because characters such as + // "#" and "?" change how browsers parse a URL. + const EXECUTING_SCRIPT = uuid + "_script.js"; const CONSOLE_THEME_STYLE = uuid + "_console_theme.css"; const MARKDOWN_STYLE = uuid + "_md.css"; const queue = []; @@ -143,7 +146,7 @@ async function run( } function runConsole() { - if (!isConsole) EXECUTING_SCRIPT = activeFile.filename; + if (!isConsole) shouldExecuteScript = true; isConsole = true; target = "inapp"; filename = "console.html"; @@ -253,7 +256,7 @@ async function run( CONSOLE_WORKER_SCRIPT, CONSOLE_THEME_STYLE, CONSOLE_THEME_STATE, - EXECUTING_SCRIPT, + EXECUTING_SCRIPT: shouldExecuteScript ? EXECUTING_SCRIPT : null, APP_THEME_TYPE: getConsoleThemeSnapshot().type, }), reqId, diff --git a/src/views/console.hbs b/src/views/console.hbs index 40068d74c8..69ba1eca4e 100644 --- a/src/views/console.hbs +++ b/src/views/console.hbs @@ -6,15 +6,17 @@ + {{#EXECUTING_SCRIPT}} + + {{/EXECUTING_SCRIPT}} Console - - - + + diff --git a/tests/unit/consoleExecutionContext.test.js b/tests/unit/consoleExecutionContext.test.js index ab92a29872..3d6a6519e9 100644 --- a/tests/unit/consoleExecutionContext.test.js +++ b/tests/unit/consoleExecutionContext.test.js @@ -1,6 +1,7 @@ import { describe, expect, it } from "vitest"; import { executeConsoleCommand, + executeConsoleScript, resolveConsoleExecutionContext, } from "lib/consoleRuntime"; @@ -49,4 +50,62 @@ describe("console execution context", () => { expect(calls).toEqual([["page", 'document.querySelector("main")']]); expect(result.value).toBe("live page"); }); + + it("loads Run-button scripts and executes them in the worker", async () => { + const calls = []; + const result = await executeConsoleScript({ + scriptUrl: "example.js", + fetchScript: async (url, options) => { + calls.push(["fetch", url, options]); + return { + ok: true, + text: async () => "while (true) {}", + }; + }, + workerExecutor: { + execute(code) { + calls.push(["worker", code]); + return Promise.resolve({ type: "result" }); + }, + }, + }); + + expect(calls).toEqual([ + ["fetch", "example.js", { cache: "no-store" }], + ["worker", "while (true) {}"], + ]); + expect(result).toEqual({ type: "result" }); + }); + + it("does not load a script for an empty menu console", async () => { + let fetched = false; + const result = await executeConsoleScript({ + scriptUrl: null, + fetchScript: async () => { + fetched = true; + }, + }); + + expect(fetched).toBe(false); + expect(result).toBeNull(); + }); + + it("returns a console error when a Run-button script cannot be loaded", async () => { + let executed = false; + const result = await executeConsoleScript({ + scriptUrl: "missing.js", + fetchScript: async () => ({ ok: false, status: 404 }), + workerExecutor: { + execute() { + executed = true; + }, + }, + }); + + expect(executed).toBe(false); + expect(result).toMatchObject({ + type: "error", + value: { message: "Failed to load JavaScript file (404)." }, + }); + }); }); From ae67e3b75c0a9d2064282fb0b09a7367f55d7ea6 Mon Sep 17 00:00:00 2001 From: Ajit Kumar Date: Sat, 29 Aug 2026 08:36:30 +0000 Subject: [PATCH 14/38] feat: plugin review (#2826) * feat: plugin commit Allow logged in user to review plugins from the app. * fix: api url --------- Co-authored-by: Ajit Kumar --- src/dialogs/confirm.js | 5 +- src/dialogs/style.scss | 8 + src/lang/ar-ye.json | 34 +- src/lang/be-by.json | 34 +- src/lang/bn-bd.json | 34 +- src/lang/cs-cz.json | 34 +- src/lang/de-de.json | 34 +- src/lang/en-us.json | 34 +- src/lang/es-sv.json | 34 +- src/lang/fr-fr.json | 34 +- src/lang/he-il.json | 34 +- src/lang/hi-in.json | 34 +- src/lang/hu-hu.json | 34 +- src/lang/id-id.json | 34 +- src/lang/index.d.ts | 32 ++ src/lang/ir-fa.json | 34 +- src/lang/it-it.json | 34 +- src/lang/ja-jp.json | 34 +- src/lang/ko-kr.json | 34 +- src/lang/ml-in.json | 34 +- src/lang/mm-unicode.json | 34 +- src/lang/mm-zawgyi.json | 34 +- src/lang/pl-pl.json | 34 +- src/lang/pt-br.json | 34 +- src/lang/pu-in.json | 34 +- src/lang/ru-ru.json | 34 +- src/lang/tl-ph.json | 34 +- src/lang/tr-tr.json | 34 +- src/lang/uk-ua.json | 34 +- src/lang/uz-uz.json | 34 +- src/lang/vi-vn.json | 34 +- src/lang/zh-cn.json | 34 +- src/lang/zh-hant.json | 34 +- src/lang/zh-tw.json | 34 +- src/lib/lang.js | 28 ++ src/pages/plugin/plugin.scss | 504 +++++++++++++++++--- src/pages/plugin/plugin.view.js | 792 ++++++++++++++++++++++++++++---- src/pages/plugin/reviewUtils.js | 180 ++++++++ tests/unit/confirm.test.js | 103 +++++ tests/unit/pluginReview.test.js | 183 ++++++++ 40 files changed, 2724 insertions(+), 165 deletions(-) create mode 100644 src/pages/plugin/reviewUtils.js create mode 100644 tests/unit/confirm.test.js create mode 100644 tests/unit/pluginReview.test.js diff --git a/src/dialogs/confirm.js b/src/dialogs/confirm.js index e42e360458..393dd592a0 100644 --- a/src/dialogs/confirm.js +++ b/src/dialogs/confirm.js @@ -8,7 +8,7 @@ import restoreTheme from "lib/restoreTheme"; * @param {string} titleText Title text * @param {string} [message] Alert message * @param {boolean} [isHTML] Whether the message is HTML - * @param {{checkboxText?: string, returnState?: boolean}} [options] + * @param {{checkboxText?: string, returnState?: boolean, direction?: "ltr" | "rtl", aboveOverlay?: boolean}} [options] * @returns {Promise} */ function confirm(titleText, message, isHTML, options = {}) { @@ -55,7 +55,8 @@ function confirm(titleText, message, isHTML, options = {}) { }, }); const confirmDiv = tag("div", { - className: "prompt confirm", + className: `prompt confirm${options.aboveOverlay ? " above-overlay" : ""}`, + dir: options.direction, children: [ titleSpan, messageSpan, diff --git a/src/dialogs/style.scss b/src/dialogs/style.scss index 91fe9ab802..0380b5c0d5 100644 --- a/src/dialogs/style.scss +++ b/src/dialogs/style.scss @@ -49,6 +49,14 @@ z-index: 113; } + &.above-overlay { + z-index: 1001; + + & + .mask { + z-index: 1000; + } + } + &.multi { textarea:not(:first-of-type) { margin-top: 20px; diff --git a/src/lang/ar-ye.json b/src/lang/ar-ye.json index 70ca153df6..9149ce9f1b 100644 --- a/src/lang/ar-ye.json +++ b/src/lang/ar-ye.json @@ -835,5 +835,37 @@ "apply exclusions when copying": "Apply exclusions when copying", "settings-info-app-use-file-operation-exclusions": "Skip files and folders matching the exclusion patterns during copy and paste operations.", "horizontal scroll margin": "Horizontal scroll margin", - "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value." + "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value.", + "plugin-review:dialog-label": "تقييمات الإضافة", + "plugin-review:account-check-failed": "تعذّر التحقق من حسابك. حاول مرة أخرى.", + "plugin-review:sign-in": "سجّل الدخول لكتابة تقييم", + "plugin-review:edit": "عدّل تقييمك", + "plugin-review:add": "أضف تقييمًا...", + "plugin-review:placeholder": "شارك تجربتك...", + "plugin-review:input-label": "تقييم الإضافة", + "plugin-review:vote-group-label": "التصويت", + "plugin-review:thumbs-up": "أعجبني", + "plugin-review:thumbs-down": "لم يعجبني", + "plugin-review:delete": "حذف التقييم", + "plugin-review:load-failed": "تعذّر تحميل التقييمات.", + "plugin-review:retry": "إعادة المحاولة", + "plugin-review:empty-title": "لا توجد تقييمات بعد", + "plugin-review:empty-description": "كن أول من يشارك تجربته.", + "plugin-review:yours": "تقييمك", + "plugin-review:community": "تقييمات المجتمع", + "plugin-review:no-other-reviews": "لا توجد تقييمات أخرى بعد.", + "plugin-review:login-incomplete": "لم يكتمل تسجيل الدخول.", + "plugin-review:sign-in-failed": "تعذّر تسجيل الدخول.", + "plugin-review:session-expired-review": "انتهت جلستك. سجّل الدخول مجددًا لكتابة تقييم.", + "plugin-review:save-failed": "تعذّر حفظ التقييم.", + "plugin-review:delete-confirmation": "هل تريد حذف تقييمك؟ لا يمكن التراجع عن هذا الإجراء.", + "plugin-review:session-expired-continue": "انتهت جلستك. سجّل الدخول مجددًا للمتابعة.", + "plugin-review:delete-failed": "تعذّر حذف التقييم.", + "plugin-review:you": "أنت", + "plugin-review:edit-action": "تعديل التقييم", + "plugin-review:recommended": "أوصى بهذه الإضافة", + "plugin-review:error-max-length": "يجب ألا يتجاوز التقييم {max} حرفًا.", + "plugin-review:error-downvote-comment": "أخبر المطوّر بما يمكن تحسينه.", + "plugin-review:error-empty": "أضف تعليقًا أو اختر «أعجبني».", + "plugin-review:unrated": "غير مقيّم" } diff --git a/src/lang/be-by.json b/src/lang/be-by.json index 98f392e34e..240f92549a 100644 --- a/src/lang/be-by.json +++ b/src/lang/be-by.json @@ -835,5 +835,37 @@ "apply exclusions when copying": "Apply exclusions when copying", "settings-info-app-use-file-operation-exclusions": "Skip files and folders matching the exclusion patterns during copy and paste operations.", "horizontal scroll margin": "Horizontal scroll margin", - "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value." + "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value.", + "plugin-review:dialog-label": "Водгукі пра плагін", + "plugin-review:account-check-failed": "Не ўдалося праверыць ваш уліковы запіс. Паспрабуйце яшчэ раз.", + "plugin-review:sign-in": "Увайсці, каб пакінуць водгук", + "plugin-review:edit": "Рэдагаваць свой водгук", + "plugin-review:add": "Дадаць водгук…", + "plugin-review:placeholder": "Падзяліцеся сваім досведам…", + "plugin-review:input-label": "Водгук пра плагін", + "plugin-review:vote-group-label": "Ацэнка", + "plugin-review:thumbs-up": "Падабаецца", + "plugin-review:thumbs-down": "Не падабаецца", + "plugin-review:delete": "Выдаліць водгук", + "plugin-review:load-failed": "Не ўдалося загрузіць водгукі.", + "plugin-review:retry": "Паспрабаваць яшчэ раз", + "plugin-review:empty-title": "Водгукаў пакуль няма", + "plugin-review:empty-description": "Падзяліцеся сваім досведам першымі.", + "plugin-review:yours": "Ваш водгук", + "plugin-review:community": "Водгукі супольнасці", + "plugin-review:no-other-reviews": "Іншых водгукаў пакуль няма.", + "plugin-review:login-incomplete": "Уваход не быў завершаны.", + "plugin-review:sign-in-failed": "Не ўдалося ўвайсці.", + "plugin-review:session-expired-review": "Сеанс скончыўся. Увайдзіце зноў, каб пакінуць водгук.", + "plugin-review:save-failed": "Не ўдалося захаваць водгук.", + "plugin-review:delete-confirmation": "Выдаліць ваш водгук? Гэта дзеянне нельга скасаваць.", + "plugin-review:session-expired-continue": "Сеанс скончыўся. Увайдзіце зноў, каб працягнуць.", + "plugin-review:delete-failed": "Не ўдалося выдаліць водгук.", + "plugin-review:you": "Вы", + "plugin-review:edit-action": "Рэдагаваць водгук", + "plugin-review:recommended": "Рэкамендуе гэты плагін", + "plugin-review:error-max-length": "Водгук павінен змяшчаць не больш за {max} сімвалаў.", + "plugin-review:error-downvote-comment": "Раскажыце распрацоўшчыку, што можна палепшыць.", + "plugin-review:error-empty": "Дадайце каментарый або выберыце «Падабаецца».", + "plugin-review:unrated": "Без ацэнкі" } diff --git a/src/lang/bn-bd.json b/src/lang/bn-bd.json index 36323c674a..3dad218691 100644 --- a/src/lang/bn-bd.json +++ b/src/lang/bn-bd.json @@ -835,5 +835,37 @@ "apply exclusions when copying": "Apply exclusions when copying", "settings-info-app-use-file-operation-exclusions": "Skip files and folders matching the exclusion patterns during copy and paste operations.", "horizontal scroll margin": "Horizontal scroll margin", - "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value." + "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value.", + "plugin-review:dialog-label": "প্লাগইন পর্যালোচনা", + "plugin-review:account-check-failed": "আপনার অ্যাকাউন্ট যাচাই করা যায়নি। আবার চেষ্টা করুন।", + "plugin-review:sign-in": "পর্যালোচনা দিতে সাইন ইন করুন", + "plugin-review:edit": "আপনার পর্যালোচনা সম্পাদনা করুন", + "plugin-review:add": "পর্যালোচনা যোগ করুন...", + "plugin-review:placeholder": "আপনার অভিজ্ঞতা শেয়ার করুন...", + "plugin-review:input-label": "প্লাগইন পর্যালোচনা", + "plugin-review:vote-group-label": "ভোট", + "plugin-review:thumbs-up": "পছন্দ", + "plugin-review:thumbs-down": "অপছন্দ", + "plugin-review:delete": "পর্যালোচনা মুছুন", + "plugin-review:load-failed": "পর্যালোচনাগুলো লোড করা যায়নি।", + "plugin-review:retry": "আবার চেষ্টা করুন", + "plugin-review:empty-title": "এখনও কোনো পর্যালোচনা নেই", + "plugin-review:empty-description": "সবার আগে আপনার অভিজ্ঞতা শেয়ার করুন।", + "plugin-review:yours": "আপনার পর্যালোচনা", + "plugin-review:community": "কমিউনিটির পর্যালোচনা", + "plugin-review:no-other-reviews": "এখনও অন্য কোনো পর্যালোচনা নেই।", + "plugin-review:login-incomplete": "সাইন ইন সম্পন্ন হয়নি।", + "plugin-review:sign-in-failed": "সাইন ইন করা যায়নি।", + "plugin-review:session-expired-review": "আপনার সেশনের মেয়াদ শেষ। পর্যালোচনা দিতে আবার সাইন ইন করুন।", + "plugin-review:save-failed": "পর্যালোচনা সংরক্ষণ করা যায়নি।", + "plugin-review:delete-confirmation": "আপনার পর্যালোচনা মুছবেন? এটি আর ফিরিয়ে আনা যাবে না।", + "plugin-review:session-expired-continue": "আপনার সেশনের মেয়াদ শেষ। চালিয়ে যেতে আবার সাইন ইন করুন।", + "plugin-review:delete-failed": "পর্যালোচনা মোছা যায়নি।", + "plugin-review:you": "আপনি", + "plugin-review:edit-action": "পর্যালোচনা সম্পাদনা করুন", + "plugin-review:recommended": "এই প্লাগইনটি সুপারিশ করেছেন", + "plugin-review:error-max-length": "পর্যালোচনা {max} অক্ষর বা তার কম হতে হবে।", + "plugin-review:error-downvote-comment": "কী উন্নত করা যায় তা ডেভেলপারকে জানান।", + "plugin-review:error-empty": "একটি মন্তব্য যোগ করুন বা পছন্দ নির্বাচন করুন।", + "plugin-review:unrated": "এখনও মূল্যায়ন নেই" } diff --git a/src/lang/cs-cz.json b/src/lang/cs-cz.json index 52e5bbb078..6e3070fffb 100644 --- a/src/lang/cs-cz.json +++ b/src/lang/cs-cz.json @@ -835,5 +835,37 @@ "apply exclusions when copying": "Apply exclusions when copying", "settings-info-app-use-file-operation-exclusions": "Skip files and folders matching the exclusion patterns during copy and paste operations.", "horizontal scroll margin": "Horizontal scroll margin", - "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value." + "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value.", + "plugin-review:dialog-label": "Recenze pluginu", + "plugin-review:account-check-failed": "Váš účet se nepodařilo ověřit. Zkuste to znovu.", + "plugin-review:sign-in": "Přihlásit se a napsat recenzi", + "plugin-review:edit": "Upravit vaši recenzi", + "plugin-review:add": "Přidat recenzi…", + "plugin-review:placeholder": "Podělte se o své zkušenosti…", + "plugin-review:input-label": "Recenze pluginu", + "plugin-review:vote-group-label": "Hlas", + "plugin-review:thumbs-up": "Líbí se mi", + "plugin-review:thumbs-down": "Nelíbí se mi", + "plugin-review:delete": "Smazat recenzi", + "plugin-review:load-failed": "Recenze se nepodařilo načíst.", + "plugin-review:retry": "Zkusit znovu", + "plugin-review:empty-title": "Zatím žádné recenze", + "plugin-review:empty-description": "Podělte se o zkušenost jako první.", + "plugin-review:yours": "Vaše recenze", + "plugin-review:community": "Recenze komunity", + "plugin-review:no-other-reviews": "Zatím žádné další recenze.", + "plugin-review:login-incomplete": "Přihlášení nebylo dokončeno.", + "plugin-review:sign-in-failed": "Přihlášení se nezdařilo.", + "plugin-review:session-expired-review": "Vaše relace vypršela. Chcete-li napsat recenzi, přihlaste se znovu.", + "plugin-review:save-failed": "Recenzi se nepodařilo uložit.", + "plugin-review:delete-confirmation": "Smazat vaši recenzi? Tuto akci nelze vrátit zpět.", + "plugin-review:session-expired-continue": "Vaše relace vypršela. Chcete-li pokračovat, přihlaste se znovu.", + "plugin-review:delete-failed": "Recenzi se nepodařilo smazat.", + "plugin-review:you": "Vy", + "plugin-review:edit-action": "Upravit recenzi", + "plugin-review:recommended": "Doporučuje tento plugin", + "plugin-review:error-max-length": "Recenze může mít nejvýše {max} znaků.", + "plugin-review:error-downvote-comment": "Sdělte vývojáři, co by se dalo zlepšit.", + "plugin-review:error-empty": "Přidejte komentář nebo zvolte Líbí se mi.", + "plugin-review:unrated": "Nehodnoceno" } diff --git a/src/lang/de-de.json b/src/lang/de-de.json index d1fb0ed422..157c1e985d 100644 --- a/src/lang/de-de.json +++ b/src/lang/de-de.json @@ -835,5 +835,37 @@ "apply exclusions when copying": "Apply exclusions when copying", "settings-info-app-use-file-operation-exclusions": "Skip files and folders matching the exclusion patterns during copy and paste operations.", "horizontal scroll margin": "Horizontal scroll margin", - "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value." + "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value.", + "plugin-review:dialog-label": "Plugin-Bewertungen", + "plugin-review:account-check-failed": "Dein Konto konnte nicht überprüft werden. Versuche es erneut.", + "plugin-review:sign-in": "Zum Bewerten anmelden", + "plugin-review:edit": "Deine Bewertung bearbeiten", + "plugin-review:add": "Bewertung hinzufügen…", + "plugin-review:placeholder": "Teile deine Erfahrung…", + "plugin-review:input-label": "Plugin-Bewertung", + "plugin-review:vote-group-label": "Stimme", + "plugin-review:thumbs-up": "Gefällt mir", + "plugin-review:thumbs-down": "Gefällt mir nicht", + "plugin-review:delete": "Bewertung löschen", + "plugin-review:load-failed": "Bewertungen konnten nicht geladen werden.", + "plugin-review:retry": "Erneut versuchen", + "plugin-review:empty-title": "Noch keine Bewertungen", + "plugin-review:empty-description": "Teile als Erste oder Erster deine Erfahrung.", + "plugin-review:yours": "Deine Bewertung", + "plugin-review:community": "Bewertungen der Community", + "plugin-review:no-other-reviews": "Noch keine weiteren Bewertungen.", + "plugin-review:login-incomplete": "Die Anmeldung wurde nicht abgeschlossen.", + "plugin-review:sign-in-failed": "Anmeldung nicht möglich.", + "plugin-review:session-expired-review": "Deine Sitzung ist abgelaufen. Melde dich erneut an, um eine Bewertung abzugeben.", + "plugin-review:save-failed": "Bewertung konnte nicht gespeichert werden.", + "plugin-review:delete-confirmation": "Deine Bewertung löschen? Dies kann nicht rückgängig gemacht werden.", + "plugin-review:session-expired-continue": "Deine Sitzung ist abgelaufen. Melde dich erneut an, um fortzufahren.", + "plugin-review:delete-failed": "Bewertung konnte nicht gelöscht werden.", + "plugin-review:you": "Du", + "plugin-review:edit-action": "Bewertung bearbeiten", + "plugin-review:recommended": "Empfiehlt dieses Plugin", + "plugin-review:error-max-length": "Die Bewertung darf höchstens {max} Zeichen lang sein.", + "plugin-review:error-downvote-comment": "Sage dem Entwickler, was verbessert werden könnte.", + "plugin-review:error-empty": "Füge einen Kommentar hinzu oder wähle „Gefällt mir“.", + "plugin-review:unrated": "Nicht bewertet" } diff --git a/src/lang/en-us.json b/src/lang/en-us.json index fa275a3766..23ae1c2679 100644 --- a/src/lang/en-us.json +++ b/src/lang/en-us.json @@ -835,5 +835,37 @@ "managed": "Managed", "acode service": "Acode Service", "horizontal scroll margin": "Horizontal scroll margin", - "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value." + "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value.", + "plugin-review:dialog-label": "Plugin reviews", + "plugin-review:account-check-failed": "Unable to check your account. Try again.", + "plugin-review:sign-in": "Sign in to review", + "plugin-review:edit": "Edit your review", + "plugin-review:add": "Add a review...", + "plugin-review:placeholder": "Share your experience...", + "plugin-review:input-label": "Plugin review", + "plugin-review:vote-group-label": "Vote", + "plugin-review:thumbs-up": "Thumbs up", + "plugin-review:thumbs-down": "Thumbs down", + "plugin-review:delete": "Delete review", + "plugin-review:load-failed": "Unable to load reviews.", + "plugin-review:retry": "Retry", + "plugin-review:empty-title": "No reviews yet", + "plugin-review:empty-description": "Be the first to share your experience.", + "plugin-review:yours": "Your review", + "plugin-review:community": "Community reviews", + "plugin-review:no-other-reviews": "No other reviews yet.", + "plugin-review:login-incomplete": "Login was not completed.", + "plugin-review:sign-in-failed": "Unable to sign in.", + "plugin-review:session-expired-review": "Your session expired. Sign in again to review.", + "plugin-review:save-failed": "Unable to save review.", + "plugin-review:delete-confirmation": "Delete your review? This cannot be undone.", + "plugin-review:session-expired-continue": "Your session expired. Sign in again to continue.", + "plugin-review:delete-failed": "Unable to delete review.", + "plugin-review:you": "You", + "plugin-review:edit-action": "Edit review", + "plugin-review:recommended": "Recommended this plugin", + "plugin-review:error-max-length": "Review must be {max} characters or less.", + "plugin-review:error-downvote-comment": "Tell the developer what could be improved.", + "plugin-review:error-empty": "Add a comment or choose thumbs up.", + "plugin-review:unrated": "Unrated" } diff --git a/src/lang/es-sv.json b/src/lang/es-sv.json index 8c3108cb68..18ee5d6146 100644 --- a/src/lang/es-sv.json +++ b/src/lang/es-sv.json @@ -835,5 +835,37 @@ "apply exclusions when copying": "Apply exclusions when copying", "settings-info-app-use-file-operation-exclusions": "Skip files and folders matching the exclusion patterns during copy and paste operations.", "horizontal scroll margin": "Horizontal scroll margin", - "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value." + "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value.", + "plugin-review:dialog-label": "Reseñas del complemento", + "plugin-review:account-check-failed": "No se pudo verificar tu cuenta. Inténtalo de nuevo.", + "plugin-review:sign-in": "Inicia sesión para opinar", + "plugin-review:edit": "Editar tu reseña", + "plugin-review:add": "Agregar una reseña...", + "plugin-review:placeholder": "Comparte tu experiencia...", + "plugin-review:input-label": "Reseña del complemento", + "plugin-review:vote-group-label": "Voto", + "plugin-review:thumbs-up": "Me gusta", + "plugin-review:thumbs-down": "No me gusta", + "plugin-review:delete": "Eliminar reseña", + "plugin-review:load-failed": "No se pudieron cargar las reseñas.", + "plugin-review:retry": "Reintentar", + "plugin-review:empty-title": "Aún no hay reseñas", + "plugin-review:empty-description": "Sé la primera persona en compartir tu experiencia.", + "plugin-review:yours": "Tu reseña", + "plugin-review:community": "Reseñas de la comunidad", + "plugin-review:no-other-reviews": "Aún no hay otras reseñas.", + "plugin-review:login-incomplete": "No se completó el inicio de sesión.", + "plugin-review:sign-in-failed": "No se pudo iniciar sesión.", + "plugin-review:session-expired-review": "Tu sesión venció. Inicia sesión de nuevo para opinar.", + "plugin-review:save-failed": "No se pudo guardar la reseña.", + "plugin-review:delete-confirmation": "¿Eliminar tu reseña? Esta acción no se puede deshacer.", + "plugin-review:session-expired-continue": "Tu sesión venció. Inicia sesión de nuevo para continuar.", + "plugin-review:delete-failed": "No se pudo eliminar la reseña.", + "plugin-review:you": "Tú", + "plugin-review:edit-action": "Editar reseña", + "plugin-review:recommended": "Recomendó este complemento", + "plugin-review:error-max-length": "La reseña debe tener {max} caracteres o menos.", + "plugin-review:error-downvote-comment": "Dile al desarrollador qué podría mejorar.", + "plugin-review:error-empty": "Agrega un comentario o elige Me gusta.", + "plugin-review:unrated": "Sin calificar" } diff --git a/src/lang/fr-fr.json b/src/lang/fr-fr.json index f4edc7a62f..4f7b96c83e 100644 --- a/src/lang/fr-fr.json +++ b/src/lang/fr-fr.json @@ -835,5 +835,37 @@ "apply exclusions when copying": "Apply exclusions when copying", "settings-info-app-use-file-operation-exclusions": "Skip files and folders matching the exclusion patterns during copy and paste operations.", "horizontal scroll margin": "Horizontal scroll margin", - "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value." + "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value.", + "plugin-review:dialog-label": "Avis sur l’extension", + "plugin-review:account-check-failed": "Impossible de vérifier votre compte. Réessayez.", + "plugin-review:sign-in": "Se connecter pour donner un avis", + "plugin-review:edit": "Modifier votre avis", + "plugin-review:add": "Ajouter un avis…", + "plugin-review:placeholder": "Partagez votre expérience…", + "plugin-review:input-label": "Avis sur l’extension", + "plugin-review:vote-group-label": "Vote", + "plugin-review:thumbs-up": "J’aime", + "plugin-review:thumbs-down": "Je n’aime pas", + "plugin-review:delete": "Supprimer l’avis", + "plugin-review:load-failed": "Impossible de charger les avis.", + "plugin-review:retry": "Réessayer", + "plugin-review:empty-title": "Aucun avis pour le moment", + "plugin-review:empty-description": "Soyez la première personne à partager votre expérience.", + "plugin-review:yours": "Votre avis", + "plugin-review:community": "Avis de la communauté", + "plugin-review:no-other-reviews": "Aucun autre avis pour le moment.", + "plugin-review:login-incomplete": "La connexion n’a pas abouti.", + "plugin-review:sign-in-failed": "Impossible de se connecter.", + "plugin-review:session-expired-review": "Votre session a expiré. Reconnectez-vous pour donner un avis.", + "plugin-review:save-failed": "Impossible d’enregistrer l’avis.", + "plugin-review:delete-confirmation": "Supprimer votre avis ? Cette action est irréversible.", + "plugin-review:session-expired-continue": "Votre session a expiré. Reconnectez-vous pour continuer.", + "plugin-review:delete-failed": "Impossible de supprimer l’avis.", + "plugin-review:you": "Vous", + "plugin-review:edit-action": "Modifier l’avis", + "plugin-review:recommended": "Recommande cette extension", + "plugin-review:error-max-length": "L’avis doit contenir au maximum {max} caractères.", + "plugin-review:error-downvote-comment": "Indiquez au développeur ce qui pourrait être amélioré.", + "plugin-review:error-empty": "Ajoutez un commentaire ou choisissez J’aime.", + "plugin-review:unrated": "Non évalué" } diff --git a/src/lang/he-il.json b/src/lang/he-il.json index 9d67df02ca..5e65d36f14 100644 --- a/src/lang/he-il.json +++ b/src/lang/he-il.json @@ -835,5 +835,37 @@ "apply exclusions when copying": "Apply exclusions when copying", "settings-info-app-use-file-operation-exclusions": "Skip files and folders matching the exclusion patterns during copy and paste operations.", "horizontal scroll margin": "Horizontal scroll margin", - "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value." + "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value.", + "plugin-review:dialog-label": "ביקורות על התוסף", + "plugin-review:account-check-failed": "לא ניתן לבדוק את החשבון שלך. נסה שוב.", + "plugin-review:sign-in": "יש להתחבר כדי לכתוב ביקורת", + "plugin-review:edit": "עריכת הביקורת שלך", + "plugin-review:add": "הוספת ביקורת...", + "plugin-review:placeholder": "שתף את החוויה שלך...", + "plugin-review:input-label": "ביקורת על התוסף", + "plugin-review:vote-group-label": "הצבעה", + "plugin-review:thumbs-up": "אהבתי", + "plugin-review:thumbs-down": "לא אהבתי", + "plugin-review:delete": "מחיקת ביקורת", + "plugin-review:load-failed": "לא ניתן לטעון את הביקורות.", + "plugin-review:retry": "נסה שוב", + "plugin-review:empty-title": "אין עדיין ביקורות", + "plugin-review:empty-description": "היה הראשון לשתף את החוויה שלך.", + "plugin-review:yours": "הביקורת שלך", + "plugin-review:community": "ביקורות הקהילה", + "plugin-review:no-other-reviews": "אין עדיין ביקורות נוספות.", + "plugin-review:login-incomplete": "ההתחברות לא הושלמה.", + "plugin-review:sign-in-failed": "לא ניתן להתחבר.", + "plugin-review:session-expired-review": "פג תוקף ההפעלה שלך. התחבר שוב כדי לכתוב ביקורת.", + "plugin-review:save-failed": "לא ניתן לשמור את הביקורת.", + "plugin-review:delete-confirmation": "למחוק את הביקורת שלך? לא ניתן לבטל פעולה זו.", + "plugin-review:session-expired-continue": "פג תוקף ההפעלה שלך. התחבר שוב כדי להמשיך.", + "plugin-review:delete-failed": "לא ניתן למחוק את הביקורת.", + "plugin-review:you": "אתה", + "plugin-review:edit-action": "עריכת ביקורת", + "plugin-review:recommended": "המליץ על התוסף הזה", + "plugin-review:error-max-length": "הביקורת צריכה להכיל עד {max} תווים.", + "plugin-review:error-downvote-comment": "ספר למפתח מה אפשר לשפר.", + "plugin-review:error-empty": "הוסף תגובה או בחר באהבתי.", + "plugin-review:unrated": "ללא דירוג" } diff --git a/src/lang/hi-in.json b/src/lang/hi-in.json index bd1a21d6b5..f1ff016551 100644 --- a/src/lang/hi-in.json +++ b/src/lang/hi-in.json @@ -835,5 +835,37 @@ "apply exclusions when copying": "कॉपी करते टाइम एक्सक्लूज़न्स अप्लाई करें", "settings-info-app-use-file-operation-exclusions": "कॉपी और पेस्ट ऑपरेशन्स के दौरान एक्सक्लूज़न पैटर्न्स से मैच करने वाले फ़ाइल्स और फ़ोल्डर्स स्किप कर।", "horizontal scroll margin": "Horizontal scroll margin", - "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value." + "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value.", + "plugin-review:dialog-label": "प्लगइन समीक्षाएँ", + "plugin-review:account-check-failed": "आपके खाते की जाँच नहीं हो सकी। फिर से कोशिश करें।", + "plugin-review:sign-in": "समीक्षा देने के लिए साइन इन करें", + "plugin-review:edit": "अपनी समीक्षा संपादित करें", + "plugin-review:add": "समीक्षा जोड़ें...", + "plugin-review:placeholder": "अपना अनुभव साझा करें...", + "plugin-review:input-label": "प्लगइन समीक्षा", + "plugin-review:vote-group-label": "वोट", + "plugin-review:thumbs-up": "पसंद", + "plugin-review:thumbs-down": "नापसंद", + "plugin-review:delete": "समीक्षा हटाएँ", + "plugin-review:load-failed": "समीक्षाएँ लोड नहीं हो सकीं।", + "plugin-review:retry": "फिर से कोशिश करें", + "plugin-review:empty-title": "अभी कोई समीक्षा नहीं है", + "plugin-review:empty-description": "अपना अनुभव साझा करने वाले पहले व्यक्ति बनें।", + "plugin-review:yours": "आपकी समीक्षा", + "plugin-review:community": "समुदाय की समीक्षाएँ", + "plugin-review:no-other-reviews": "अभी कोई अन्य समीक्षा नहीं है।", + "plugin-review:login-incomplete": "साइन इन पूरा नहीं हुआ।", + "plugin-review:sign-in-failed": "साइन इन नहीं हो सका।", + "plugin-review:session-expired-review": "आपका सत्र समाप्त हो गया। समीक्षा देने के लिए फिर से साइन इन करें।", + "plugin-review:save-failed": "समीक्षा सहेजी नहीं जा सकी।", + "plugin-review:delete-confirmation": "अपनी समीक्षा हटाएँ? इसे वापस नहीं किया जा सकता।", + "plugin-review:session-expired-continue": "आपका सत्र समाप्त हो गया। जारी रखने के लिए फिर से साइन इन करें।", + "plugin-review:delete-failed": "समीक्षा हटाई नहीं जा सकी।", + "plugin-review:you": "आप", + "plugin-review:edit-action": "समीक्षा संपादित करें", + "plugin-review:recommended": "इस प्लगइन की सिफ़ारिश की", + "plugin-review:error-max-length": "समीक्षा {max} वर्णों या उससे कम की होनी चाहिए।", + "plugin-review:error-downvote-comment": "डेवलपर को बताएँ कि क्या बेहतर किया जा सकता है।", + "plugin-review:error-empty": "टिप्पणी जोड़ें या पसंद चुनें।", + "plugin-review:unrated": "अभी रेटिंग नहीं" } diff --git a/src/lang/hu-hu.json b/src/lang/hu-hu.json index 769ce29a00..061b674d7b 100644 --- a/src/lang/hu-hu.json +++ b/src/lang/hu-hu.json @@ -835,5 +835,37 @@ "apply exclusions when copying": "Kizárások használata másoláskor", "settings-info-app-use-file-operation-exclusions": "A kizárási mintáknak megfelelő fájlok és mappák kihagyása másoláskor és beillesztéskor.", "horizontal scroll margin": "Vízszintes görgetési margó", - "settings-info-horizontal-scroll-margin": "A leghosszabb sor után egy üres hely lesz hozzáadva a képernyő széléhez, ha a sorok tördelése ki van kapcsolva. Adjon meg egy nem negatív egész pixelértéket." + "settings-info-horizontal-scroll-margin": "A leghosszabb sor után egy üres hely lesz hozzáadva a képernyő széléhez, ha a sorok tördelése ki van kapcsolva. Adjon meg egy nem negatív egész pixelértéket.", + "plugin-review:dialog-label": "Bővítményértékelések", + "plugin-review:account-check-failed": "Nem sikerült ellenőrizni a fiókodat. Próbáld újra.", + "plugin-review:sign-in": "Jelentkezz be az értékeléshez", + "plugin-review:edit": "Értékelésed szerkesztése", + "plugin-review:add": "Értékelés hozzáadása…", + "plugin-review:placeholder": "Oszd meg a tapasztalataidat…", + "plugin-review:input-label": "Bővítmény értékelése", + "plugin-review:vote-group-label": "Szavazat", + "plugin-review:thumbs-up": "Tetszik", + "plugin-review:thumbs-down": "Nem tetszik", + "plugin-review:delete": "Értékelés törlése", + "plugin-review:load-failed": "Nem sikerült betölteni az értékeléseket.", + "plugin-review:retry": "Újrapróbálkozás", + "plugin-review:empty-title": "Még nincsenek értékelések", + "plugin-review:empty-description": "Oszd meg elsőként a tapasztalataidat.", + "plugin-review:yours": "Saját értékelésed", + "plugin-review:community": "Közösségi értékelések", + "plugin-review:no-other-reviews": "Még nincsenek további értékelések.", + "plugin-review:login-incomplete": "A bejelentkezés nem fejeződött be.", + "plugin-review:sign-in-failed": "Nem sikerült bejelentkezni.", + "plugin-review:session-expired-review": "A munkameneted lejárt. Jelentkezz be újra az értékeléshez.", + "plugin-review:save-failed": "Nem sikerült menteni az értékelést.", + "plugin-review:delete-confirmation": "Törlöd az értékelésedet? Ez nem vonható vissza.", + "plugin-review:session-expired-continue": "A munkameneted lejárt. Jelentkezz be újra a folytatáshoz.", + "plugin-review:delete-failed": "Nem sikerült törölni az értékelést.", + "plugin-review:you": "Te", + "plugin-review:edit-action": "Értékelés szerkesztése", + "plugin-review:recommended": "Ajánlja ezt a bővítményt", + "plugin-review:error-max-length": "Az értékelés legfeljebb {max} karakter lehet.", + "plugin-review:error-downvote-comment": "Írd meg a fejlesztőnek, min lehetne javítani.", + "plugin-review:error-empty": "Adj hozzá megjegyzést, vagy válaszd a Tetszik lehetőséget.", + "plugin-review:unrated": "Nincs értékelve" } diff --git a/src/lang/id-id.json b/src/lang/id-id.json index 13dda67747..f2560fd6d8 100644 --- a/src/lang/id-id.json +++ b/src/lang/id-id.json @@ -835,5 +835,37 @@ "apply exclusions when copying": "Terapkan pengecualian saat menyalin", "settings-info-app-use-file-operation-exclusions": "Lewati berkas dan folder yang cocok dengan pola pengecualian selama operasi salin dan tempel.", "horizontal scroll margin": "Margin gulir horizontal", - "settings-info-horizontal-scroll-margin": "Menambahkan ruang kosong setelah baris terpanjang saat pembungkus kata (word wrap) dinonaktifkan. Masukkan nilai piksel bilangan bulat non-negatif." + "settings-info-horizontal-scroll-margin": "Menambahkan ruang kosong setelah baris terpanjang saat pembungkus kata (word wrap) dinonaktifkan. Masukkan nilai piksel bilangan bulat non-negatif.", + "plugin-review:dialog-label": "Ulasan plugin", + "plugin-review:account-check-failed": "Akun Anda tidak dapat diperiksa. Coba lagi.", + "plugin-review:sign-in": "Masuk untuk memberi ulasan", + "plugin-review:edit": "Edit ulasan Anda", + "plugin-review:add": "Tambahkan ulasan...", + "plugin-review:placeholder": "Bagikan pengalaman Anda...", + "plugin-review:input-label": "Ulasan plugin", + "plugin-review:vote-group-label": "Suara", + "plugin-review:thumbs-up": "Suka", + "plugin-review:thumbs-down": "Tidak suka", + "plugin-review:delete": "Hapus ulasan", + "plugin-review:load-failed": "Ulasan tidak dapat dimuat.", + "plugin-review:retry": "Coba lagi", + "plugin-review:empty-title": "Belum ada ulasan", + "plugin-review:empty-description": "Jadilah yang pertama membagikan pengalaman Anda.", + "plugin-review:yours": "Ulasan Anda", + "plugin-review:community": "Ulasan komunitas", + "plugin-review:no-other-reviews": "Belum ada ulasan lain.", + "plugin-review:login-incomplete": "Proses masuk tidak selesai.", + "plugin-review:sign-in-failed": "Tidak dapat masuk.", + "plugin-review:session-expired-review": "Sesi Anda telah berakhir. Masuk lagi untuk memberi ulasan.", + "plugin-review:save-failed": "Ulasan tidak dapat disimpan.", + "plugin-review:delete-confirmation": "Hapus ulasan Anda? Tindakan ini tidak dapat dibatalkan.", + "plugin-review:session-expired-continue": "Sesi Anda telah berakhir. Masuk lagi untuk melanjutkan.", + "plugin-review:delete-failed": "Ulasan tidak dapat dihapus.", + "plugin-review:you": "Anda", + "plugin-review:edit-action": "Edit ulasan", + "plugin-review:recommended": "Merekomendasikan plugin ini", + "plugin-review:error-max-length": "Ulasan harus terdiri dari {max} karakter atau kurang.", + "plugin-review:error-downvote-comment": "Beri tahu developer apa yang dapat ditingkatkan.", + "plugin-review:error-empty": "Tambahkan komentar atau pilih Suka.", + "plugin-review:unrated": "Belum dinilai" } diff --git a/src/lang/index.d.ts b/src/lang/index.d.ts index 076f096961..5777e10477 100644 --- a/src/lang/index.d.ts +++ b/src/lang/index.d.ts @@ -839,6 +839,38 @@ declare type LangStrings = { "acode service": string; "horizontal scroll margin": string; "settings-info-horizontal-scroll-margin": string; + "plugin-review:dialog-label": string; + "plugin-review:account-check-failed": string; + "plugin-review:sign-in": string; + "plugin-review:edit": string; + "plugin-review:add": string; + "plugin-review:placeholder": string; + "plugin-review:input-label": string; + "plugin-review:vote-group-label": string; + "plugin-review:thumbs-up": string; + "plugin-review:thumbs-down": string; + "plugin-review:delete": string; + "plugin-review:load-failed": string; + "plugin-review:retry": string; + "plugin-review:empty-title": string; + "plugin-review:empty-description": string; + "plugin-review:yours": string; + "plugin-review:community": string; + "plugin-review:no-other-reviews": string; + "plugin-review:login-incomplete": string; + "plugin-review:sign-in-failed": string; + "plugin-review:session-expired-review": string; + "plugin-review:save-failed": string; + "plugin-review:delete-confirmation": string; + "plugin-review:session-expired-continue": string; + "plugin-review:delete-failed": string; + "plugin-review:you": string; + "plugin-review:edit-action": string; + "plugin-review:recommended": string; + "plugin-review:error-max-length": string; + "plugin-review:error-downvote-comment": string; + "plugin-review:error-empty": string; + "plugin-review:unrated": string; }; declare var strings: LangStrings; diff --git a/src/lang/ir-fa.json b/src/lang/ir-fa.json index b19d8c385d..7d9cbedea2 100644 --- a/src/lang/ir-fa.json +++ b/src/lang/ir-fa.json @@ -835,5 +835,37 @@ "apply exclusions when copying": "Apply exclusions when copying", "settings-info-app-use-file-operation-exclusions": "Skip files and folders matching the exclusion patterns during copy and paste operations.", "horizontal scroll margin": "Horizontal scroll margin", - "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value." + "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value.", + "plugin-review:dialog-label": "نظرهای افزونه", + "plugin-review:account-check-failed": "امکان بررسی حساب شما نبود. دوباره تلاش کنید.", + "plugin-review:sign-in": "برای ثبت نظر وارد شوید", + "plugin-review:edit": "نظر خود را ویرایش کنید", + "plugin-review:add": "افزودن نظر...", + "plugin-review:placeholder": "تجربهٔ خود را به اشتراک بگذارید...", + "plugin-review:input-label": "نظر افزونه", + "plugin-review:vote-group-label": "رأی", + "plugin-review:thumbs-up": "پسندیدم", + "plugin-review:thumbs-down": "نپسندیدم", + "plugin-review:delete": "حذف نظر", + "plugin-review:load-failed": "بارگیری نظرها ممکن نبود.", + "plugin-review:retry": "تلاش دوباره", + "plugin-review:empty-title": "هنوز نظری ثبت نشده است", + "plugin-review:empty-description": "نخستین نفری باشید که تجربهٔ خود را به اشتراک می‌گذارد.", + "plugin-review:yours": "نظر شما", + "plugin-review:community": "نظرهای کاربران", + "plugin-review:no-other-reviews": "هنوز نظر دیگری ثبت نشده است.", + "plugin-review:login-incomplete": "ورود کامل نشد.", + "plugin-review:sign-in-failed": "ورود ممکن نبود.", + "plugin-review:session-expired-review": "نشست شما منقضی شده است. برای ثبت نظر دوباره وارد شوید.", + "plugin-review:save-failed": "ذخیرهٔ نظر ممکن نبود.", + "plugin-review:delete-confirmation": "نظر شما حذف شود؟ این کار قابل بازگشت نیست.", + "plugin-review:session-expired-continue": "نشست شما منقضی شده است. برای ادامه دوباره وارد شوید.", + "plugin-review:delete-failed": "حذف نظر ممکن نبود.", + "plugin-review:you": "شما", + "plugin-review:edit-action": "ویرایش نظر", + "plugin-review:recommended": "این افزونه را پیشنهاد کرده است", + "plugin-review:error-max-length": "نظر باید حداکثر {max} نویسه باشد.", + "plugin-review:error-downvote-comment": "به توسعه‌دهنده بگویید چه چیزی می‌تواند بهتر شود.", + "plugin-review:error-empty": "یک دیدگاه بنویسید یا «پسندیدم» را انتخاب کنید.", + "plugin-review:unrated": "بدون امتیاز" } diff --git a/src/lang/it-it.json b/src/lang/it-it.json index dbb883ce3c..28c6ba3bd0 100644 --- a/src/lang/it-it.json +++ b/src/lang/it-it.json @@ -835,5 +835,37 @@ "apply exclusions when copying": "Apply exclusions when copying", "settings-info-app-use-file-operation-exclusions": "Skip files and folders matching the exclusion patterns during copy and paste operations.", "horizontal scroll margin": "Horizontal scroll margin", - "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value." + "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value.", + "plugin-review:dialog-label": "Recensioni del plugin", + "plugin-review:account-check-failed": "Impossibile verificare il tuo account. Riprova.", + "plugin-review:sign-in": "Accedi per lasciare una recensione", + "plugin-review:edit": "Modifica la tua recensione", + "plugin-review:add": "Aggiungi una recensione…", + "plugin-review:placeholder": "Condividi la tua esperienza…", + "plugin-review:input-label": "Recensione del plugin", + "plugin-review:vote-group-label": "Voto", + "plugin-review:thumbs-up": "Mi piace", + "plugin-review:thumbs-down": "Non mi piace", + "plugin-review:delete": "Elimina recensione", + "plugin-review:load-failed": "Impossibile caricare le recensioni.", + "plugin-review:retry": "Riprova", + "plugin-review:empty-title": "Ancora nessuna recensione", + "plugin-review:empty-description": "Condividi per primo la tua esperienza.", + "plugin-review:yours": "La tua recensione", + "plugin-review:community": "Recensioni della community", + "plugin-review:no-other-reviews": "Ancora nessun'altra recensione.", + "plugin-review:login-incomplete": "Accesso non completato.", + "plugin-review:sign-in-failed": "Impossibile accedere.", + "plugin-review:session-expired-review": "La sessione è scaduta. Accedi di nuovo per lasciare una recensione.", + "plugin-review:save-failed": "Impossibile salvare la recensione.", + "plugin-review:delete-confirmation": "Eliminare la tua recensione? Questa azione non può essere annullata.", + "plugin-review:session-expired-continue": "La sessione è scaduta. Accedi di nuovo per continuare.", + "plugin-review:delete-failed": "Impossibile eliminare la recensione.", + "plugin-review:you": "Tu", + "plugin-review:edit-action": "Modifica recensione", + "plugin-review:recommended": "Consiglia questo plugin", + "plugin-review:error-max-length": "La recensione deve contenere al massimo {max} caratteri.", + "plugin-review:error-downvote-comment": "Spiega allo sviluppatore cosa potrebbe essere migliorato.", + "plugin-review:error-empty": "Aggiungi un commento o scegli Mi piace.", + "plugin-review:unrated": "Non valutato" } diff --git a/src/lang/ja-jp.json b/src/lang/ja-jp.json index ddd1e5b633..2329d81b84 100644 --- a/src/lang/ja-jp.json +++ b/src/lang/ja-jp.json @@ -835,5 +835,37 @@ "apply exclusions when copying": "Apply exclusions when copying", "settings-info-app-use-file-operation-exclusions": "Skip files and folders matching the exclusion patterns during copy and paste operations.", "horizontal scroll margin": "Horizontal scroll margin", - "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value." + "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value.", + "plugin-review:dialog-label": "プラグインのレビュー", + "plugin-review:account-check-failed": "アカウントを確認できませんでした。もう一度お試しください。", + "plugin-review:sign-in": "ログインしてレビュー", + "plugin-review:edit": "レビューを編集", + "plugin-review:add": "レビューを追加…", + "plugin-review:placeholder": "使用した感想を共有…", + "plugin-review:input-label": "プラグインのレビュー", + "plugin-review:vote-group-label": "評価", + "plugin-review:thumbs-up": "高評価", + "plugin-review:thumbs-down": "低評価", + "plugin-review:delete": "レビューを削除", + "plugin-review:load-failed": "レビューを読み込めませんでした。", + "plugin-review:retry": "再試行", + "plugin-review:empty-title": "まだレビューはありません", + "plugin-review:empty-description": "最初のレビューを投稿しましょう。", + "plugin-review:yours": "あなたのレビュー", + "plugin-review:community": "コミュニティのレビュー", + "plugin-review:no-other-reviews": "ほかのレビューはまだありません。", + "plugin-review:login-incomplete": "ログインが完了しませんでした。", + "plugin-review:sign-in-failed": "ログインできませんでした。", + "plugin-review:session-expired-review": "セッションの有効期限が切れました。もう一度ログインしてレビューしてください。", + "plugin-review:save-failed": "レビューを保存できませんでした。", + "plugin-review:delete-confirmation": "レビューを削除しますか?この操作は元に戻せません。", + "plugin-review:session-expired-continue": "セッションの有効期限が切れました。続行するにはもう一度ログインしてください。", + "plugin-review:delete-failed": "レビューを削除できませんでした。", + "plugin-review:you": "あなた", + "plugin-review:edit-action": "レビューを編集", + "plugin-review:recommended": "このプラグインをおすすめしています", + "plugin-review:error-max-length": "レビューは {max} 文字以内で入力してください。", + "plugin-review:error-downvote-comment": "改善してほしい点を開発者に伝えてください。", + "plugin-review:error-empty": "コメントを追加するか、高評価を選んでください。", + "plugin-review:unrated": "未評価" } diff --git a/src/lang/ko-kr.json b/src/lang/ko-kr.json index 20ae0a3146..d8d1daec75 100644 --- a/src/lang/ko-kr.json +++ b/src/lang/ko-kr.json @@ -835,5 +835,37 @@ "apply exclusions when copying": "Apply exclusions when copying", "settings-info-app-use-file-operation-exclusions": "Skip files and folders matching the exclusion patterns during copy and paste operations.", "horizontal scroll margin": "Horizontal scroll margin", - "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value." + "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value.", + "plugin-review:dialog-label": "플러그인 리뷰", + "plugin-review:account-check-failed": "계정을 확인할 수 없습니다. 다시 시도하세요.", + "plugin-review:sign-in": "로그인하고 리뷰 작성", + "plugin-review:edit": "내 리뷰 수정", + "plugin-review:add": "리뷰 추가...", + "plugin-review:placeholder": "사용 경험을 공유하세요...", + "plugin-review:input-label": "플러그인 리뷰", + "plugin-review:vote-group-label": "평가", + "plugin-review:thumbs-up": "좋아요", + "plugin-review:thumbs-down": "싫어요", + "plugin-review:delete": "리뷰 삭제", + "plugin-review:load-failed": "리뷰를 불러올 수 없습니다.", + "plugin-review:retry": "다시 시도", + "plugin-review:empty-title": "아직 리뷰가 없습니다", + "plugin-review:empty-description": "첫 번째로 사용 경험을 공유해 보세요.", + "plugin-review:yours": "내 리뷰", + "plugin-review:community": "커뮤니티 리뷰", + "plugin-review:no-other-reviews": "아직 다른 리뷰가 없습니다.", + "plugin-review:login-incomplete": "로그인이 완료되지 않았습니다.", + "plugin-review:sign-in-failed": "로그인할 수 없습니다.", + "plugin-review:session-expired-review": "세션이 만료되었습니다. 다시 로그인하고 리뷰를 작성하세요.", + "plugin-review:save-failed": "리뷰를 저장할 수 없습니다.", + "plugin-review:delete-confirmation": "리뷰를 삭제할까요? 이 작업은 되돌릴 수 없습니다.", + "plugin-review:session-expired-continue": "세션이 만료되었습니다. 계속하려면 다시 로그인하세요.", + "plugin-review:delete-failed": "리뷰를 삭제할 수 없습니다.", + "plugin-review:you": "나", + "plugin-review:edit-action": "리뷰 수정", + "plugin-review:recommended": "이 플러그인을 추천함", + "plugin-review:error-max-length": "리뷰는 {max}자 이하여야 합니다.", + "plugin-review:error-downvote-comment": "개발자에게 개선할 점을 알려 주세요.", + "plugin-review:error-empty": "댓글을 추가하거나 좋아요를 선택하세요.", + "plugin-review:unrated": "평가 없음" } diff --git a/src/lang/ml-in.json b/src/lang/ml-in.json index bcc5171dcf..137e1311d2 100644 --- a/src/lang/ml-in.json +++ b/src/lang/ml-in.json @@ -835,5 +835,37 @@ "apply exclusions when copying": "Apply exclusions when copying", "settings-info-app-use-file-operation-exclusions": "Skip files and folders matching the exclusion patterns during copy and paste operations.", "horizontal scroll margin": "Horizontal scroll margin", - "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value." + "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value.", + "plugin-review:dialog-label": "പ്ലഗിൻ അവലോകനങ്ങൾ", + "plugin-review:account-check-failed": "നിങ്ങളുടെ അക്കൗണ്ട് പരിശോധിക്കാനായില്ല. വീണ്ടും ശ്രമിക്കുക.", + "plugin-review:sign-in": "അവലോകനം നൽകാൻ സൈൻ ഇൻ ചെയ്യുക", + "plugin-review:edit": "നിങ്ങളുടെ അവലോകനം തിരുത്തുക", + "plugin-review:add": "അവലോകനം ചേർക്കുക...", + "plugin-review:placeholder": "നിങ്ങളുടെ അനുഭവം പങ്കിടുക...", + "plugin-review:input-label": "പ്ലഗിൻ അവലോകനം", + "plugin-review:vote-group-label": "വോട്ട്", + "plugin-review:thumbs-up": "ഇഷ്ടപ്പെട്ടു", + "plugin-review:thumbs-down": "ഇഷ്ടപ്പെട്ടില്ല", + "plugin-review:delete": "അവലോകനം ഇല്ലാതാക്കുക", + "plugin-review:load-failed": "അവലോകനങ്ങൾ ലോഡ് ചെയ്യാനായില്ല.", + "plugin-review:retry": "വീണ്ടും ശ്രമിക്കുക", + "plugin-review:empty-title": "ഇതുവരെ അവലോകനങ്ങളൊന്നുമില്ല", + "plugin-review:empty-description": "നിങ്ങളുടെ അനുഭവം ആദ്യം പങ്കിടൂ.", + "plugin-review:yours": "നിങ്ങളുടെ അവലോകനം", + "plugin-review:community": "കമ്മ്യൂണിറ്റി അവലോകനങ്ങൾ", + "plugin-review:no-other-reviews": "മറ്റ് അവലോകനങ്ങളൊന്നും ഇതുവരെ ഇല്ല.", + "plugin-review:login-incomplete": "സൈൻ ഇൻ പൂർത്തിയായില്ല.", + "plugin-review:sign-in-failed": "സൈൻ ഇൻ ചെയ്യാനായില്ല.", + "plugin-review:session-expired-review": "നിങ്ങളുടെ സെഷൻ കാലഹരണപ്പെട്ടു. അവലോകനം നൽകാൻ വീണ്ടും സൈൻ ഇൻ ചെയ്യുക.", + "plugin-review:save-failed": "അവലോകനം സേവ് ചെയ്യാനായില്ല.", + "plugin-review:delete-confirmation": "നിങ്ങളുടെ അവലോകനം ഇല്ലാതാക്കണോ? ഇത് പഴയപടിയാക്കാനാകില്ല.", + "plugin-review:session-expired-continue": "നിങ്ങളുടെ സെഷൻ കാലഹരണപ്പെട്ടു. തുടരാൻ വീണ്ടും സൈൻ ഇൻ ചെയ്യുക.", + "plugin-review:delete-failed": "അവലോകനം ഇല്ലാതാക്കാനായില്ല.", + "plugin-review:you": "നിങ്ങൾ", + "plugin-review:edit-action": "അവലോകനം തിരുത്തുക", + "plugin-review:recommended": "ഈ പ്ലഗിൻ ശുപാർശ ചെയ്തു", + "plugin-review:error-max-length": "അവലോകനം {max} അക്ഷരങ്ങളോ അതിൽ കുറവോ ആയിരിക്കണം.", + "plugin-review:error-downvote-comment": "എന്താണ് മെച്ചപ്പെടുത്താനാകുന്നതെന്ന് ഡെവലപ്പറോട് പറയുക.", + "plugin-review:error-empty": "ഒരു അഭിപ്രായം ചേർക്കുക അല്ലെങ്കിൽ ഇഷ്ടപ്പെട്ടു തിരഞ്ഞെടുക്കുക.", + "plugin-review:unrated": "വിലയിരുത്തിയിട്ടില്ല" } diff --git a/src/lang/mm-unicode.json b/src/lang/mm-unicode.json index 00262a2a54..2a504340ee 100644 --- a/src/lang/mm-unicode.json +++ b/src/lang/mm-unicode.json @@ -835,5 +835,37 @@ "apply exclusions when copying": "Apply exclusions when copying", "settings-info-app-use-file-operation-exclusions": "Skip files and folders matching the exclusion patterns during copy and paste operations.", "horizontal scroll margin": "Horizontal scroll margin", - "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value." + "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value.", + "plugin-review:dialog-label": "ပလပ်အင် သုံးသပ်ချက်များ", + "plugin-review:account-check-failed": "သင့်အကောင့်ကို စစ်ဆေး၍မရပါ။ ထပ်မံကြိုးစားပါ။", + "plugin-review:sign-in": "သုံးသပ်ချက်ရေးရန် အကောင့်ဝင်ပါ", + "plugin-review:edit": "သင့်သုံးသပ်ချက်ကို ပြင်ဆင်ပါ", + "plugin-review:add": "သုံးသပ်ချက် ထည့်ရန်...", + "plugin-review:placeholder": "သင့်အတွေ့အကြုံကို မျှဝေပါ...", + "plugin-review:input-label": "ပလပ်အင် သုံးသပ်ချက်", + "plugin-review:vote-group-label": "မဲ", + "plugin-review:thumbs-up": "ကြိုက်သည်", + "plugin-review:thumbs-down": "မကြိုက်ပါ", + "plugin-review:delete": "သုံးသပ်ချက် ဖျက်ရန်", + "plugin-review:load-failed": "သုံးသပ်ချက်များကို ဖွင့်၍မရပါ။", + "plugin-review:retry": "ထပ်မံကြိုးစားပါ", + "plugin-review:empty-title": "သုံးသပ်ချက် မရှိသေးပါ", + "plugin-review:empty-description": "သင့်အတွေ့အကြုံကို ပထမဆုံး မျှဝေပါ။", + "plugin-review:yours": "သင့်သုံးသပ်ချက်", + "plugin-review:community": "အသိုင်းအဝိုင်း သုံးသပ်ချက်များ", + "plugin-review:no-other-reviews": "အခြားသုံးသပ်ချက် မရှိသေးပါ။", + "plugin-review:login-incomplete": "အကောင့်ဝင်ခြင်း မပြီးဆုံးပါ။", + "plugin-review:sign-in-failed": "အကောင့်ဝင်၍မရပါ။", + "plugin-review:session-expired-review": "သင့်အသုံးပြုချိန် ကုန်ဆုံးသွားပါပြီ။ သုံးသပ်ချက်ရေးရန် ပြန်ဝင်ပါ။", + "plugin-review:save-failed": "သုံးသပ်ချက်ကို သိမ်း၍မရပါ။", + "plugin-review:delete-confirmation": "သင့်သုံးသပ်ချက်ကို ဖျက်မလား။ ပြန်ယူ၍မရပါ။", + "plugin-review:session-expired-continue": "သင့်အသုံးပြုချိန် ကုန်ဆုံးသွားပါပြီ။ ဆက်လုပ်ရန် ပြန်ဝင်ပါ။", + "plugin-review:delete-failed": "သုံးသပ်ချက်ကို ဖျက်၍မရပါ။", + "plugin-review:you": "သင်", + "plugin-review:edit-action": "သုံးသပ်ချက် ပြင်ဆင်ရန်", + "plugin-review:recommended": "ဤပလပ်အင်ကို အကြံပြုထားသည်", + "plugin-review:error-max-length": "သုံးသပ်ချက်သည် စာလုံးရေ {max} လုံး သို့မဟုတ် ထိုထက်နည်းရမည်။", + "plugin-review:error-downvote-comment": "မည်သည့်အရာကို ပိုကောင်းအောင်လုပ်နိုင်ကြောင်း developer ကို ပြောပါ။", + "plugin-review:error-empty": "မှတ်ချက်ထည့်ပါ သို့မဟုတ် ကြိုက်သည်ကို ရွေးပါ။", + "plugin-review:unrated": "အဆင့်မသတ်မှတ်ရသေးပါ" } diff --git a/src/lang/mm-zawgyi.json b/src/lang/mm-zawgyi.json index 84cf0cfc9f..2962e24868 100644 --- a/src/lang/mm-zawgyi.json +++ b/src/lang/mm-zawgyi.json @@ -835,5 +835,37 @@ "apply exclusions when copying": "Apply exclusions when copying", "settings-info-app-use-file-operation-exclusions": "Skip files and folders matching the exclusion patterns during copy and paste operations.", "horizontal scroll margin": "Horizontal scroll margin", - "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value." + "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value.", + "plugin-review:dialog-label": "ပလပ္အင္ သုံးသပ္ခ်က္မ်ား", + "plugin-review:account-check-failed": "သင့္အေကာင့္ကို စစ္ေဆး၍မရပါ။ ထပ္မံႀကိဳးစားပါ။", + "plugin-review:sign-in": "သုံးသပ္ခ်က္ေရးရန္ အေကာင့္ဝင္ပါ", + "plugin-review:edit": "သင့္သုံးသပ္ခ်က္ကို ျပင္ဆင္ပါ", + "plugin-review:add": "သုံးသပ္ခ်က္ ထည့္ရန္...", + "plugin-review:placeholder": "သင့္အေတြ႕အႀကဳံကို မွ်ေဝပါ...", + "plugin-review:input-label": "ပလပ္အင္ သုံးသပ္ခ်က္", + "plugin-review:vote-group-label": "မဲ", + "plugin-review:thumbs-up": "ႀကိဳက္သည္", + "plugin-review:thumbs-down": "မႀကိဳက္ပါ", + "plugin-review:delete": "သုံးသပ္ခ်က္ ဖ်က္ရန္", + "plugin-review:load-failed": "သုံးသပ္ခ်က္မ်ားကို ဖြင့္၍မရပါ။", + "plugin-review:retry": "ထပ္မံႀကိဳးစားပါ", + "plugin-review:empty-title": "သုံးသပ္ခ်က္ မရွိေသးပါ", + "plugin-review:empty-description": "သင့္အေတြ႕အႀကဳံကို ပထမဆုံး မွ်ေဝပါ။", + "plugin-review:yours": "သင့္သုံးသပ္ခ်က္", + "plugin-review:community": "အသိုင္းအဝိုင္း သုံးသပ္ခ်က္မ်ား", + "plugin-review:no-other-reviews": "အျခားသုံးသပ္ခ်က္ မရွိေသးပါ။", + "plugin-review:login-incomplete": "အေကာင့္ဝင္ျခင္း မၿပီးဆုံးပါ။", + "plugin-review:sign-in-failed": "အေကာင့္ဝင္၍မရပါ။", + "plugin-review:session-expired-review": "သင့္အသုံးျပဳခ်ိန္ ကုန္ဆုံးသြားပါၿပီ။ သုံးသပ္ခ်က္ေရးရန္ ျပန္ဝင္ပါ။", + "plugin-review:save-failed": "သုံးသပ္ခ်က္ကို သိမ္း၍မရပါ။", + "plugin-review:delete-confirmation": "သင့္သုံးသပ္ခ်က္ကို ဖ်က္မလား။ ျပန္ယူ၍မရပါ။", + "plugin-review:session-expired-continue": "သင့္အသုံးျပဳခ်ိန္ ကုန္ဆုံးသြားပါၿပီ။ ဆက္လုပ္ရန္ ျပန္ဝင္ပါ။", + "plugin-review:delete-failed": "သုံးသပ္ခ်က္ကို ဖ်က္၍မရပါ။", + "plugin-review:you": "သင္", + "plugin-review:edit-action": "သုံးသပ္ခ်က္ ျပင္ဆင္ရန္", + "plugin-review:recommended": "ဤပလပ္အင္ကို အႀကံျပဳထားသည္", + "plugin-review:error-max-length": "သုံးသပ္ခ်က္သည္ စာလုံးေရ {max} လုံး သို႔မဟုတ္ ထိုထက္နည္းရမည္။", + "plugin-review:error-downvote-comment": "မည္သည့္အရာကို ပိုေကာင္းေအာင္လုပ္ႏိုင္ေၾကာင္း developer ကို ေျပာပါ။", + "plugin-review:error-empty": "မွတ္ခ်က္ထည့္ပါ သို႔မဟုတ္ ႀကိဳက္သည္ကို ေ႐ြးပါ။", + "plugin-review:unrated": "အဆင့္မသတ္မွတ္ရေသးပါ" } diff --git a/src/lang/pl-pl.json b/src/lang/pl-pl.json index 1634787b00..9f9aa52498 100644 --- a/src/lang/pl-pl.json +++ b/src/lang/pl-pl.json @@ -835,5 +835,37 @@ "apply exclusions when copying": "Apply exclusions when copying", "settings-info-app-use-file-operation-exclusions": "Skip files and folders matching the exclusion patterns during copy and paste operations.", "horizontal scroll margin": "Horizontal scroll margin", - "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value." + "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value.", + "plugin-review:dialog-label": "Opinie o wtyczce", + "plugin-review:account-check-failed": "Nie udało się sprawdzić Twojego konta. Spróbuj ponownie.", + "plugin-review:sign-in": "Zaloguj się, aby dodać opinię", + "plugin-review:edit": "Edytuj swoją opinię", + "plugin-review:add": "Dodaj opinię…", + "plugin-review:placeholder": "Podziel się swoim doświadczeniem…", + "plugin-review:input-label": "Opinia o wtyczce", + "plugin-review:vote-group-label": "Głos", + "plugin-review:thumbs-up": "Lubię", + "plugin-review:thumbs-down": "Nie lubię", + "plugin-review:delete": "Usuń opinię", + "plugin-review:load-failed": "Nie udało się wczytać opinii.", + "plugin-review:retry": "Spróbuj ponownie", + "plugin-review:empty-title": "Brak opinii", + "plugin-review:empty-description": "Podziel się swoim doświadczeniem jako pierwsza osoba.", + "plugin-review:yours": "Twoja opinia", + "plugin-review:community": "Opinie społeczności", + "plugin-review:no-other-reviews": "Nie ma jeszcze innych opinii.", + "plugin-review:login-incomplete": "Logowanie nie zostało ukończone.", + "plugin-review:sign-in-failed": "Nie udało się zalogować.", + "plugin-review:session-expired-review": "Twoja sesja wygasła. Zaloguj się ponownie, aby dodać opinię.", + "plugin-review:save-failed": "Nie udało się zapisać opinii.", + "plugin-review:delete-confirmation": "Usunąć Twoją opinię? Tej operacji nie można cofnąć.", + "plugin-review:session-expired-continue": "Twoja sesja wygasła. Zaloguj się ponownie, aby kontynuować.", + "plugin-review:delete-failed": "Nie udało się usunąć opinii.", + "plugin-review:you": "Ty", + "plugin-review:edit-action": "Edytuj opinię", + "plugin-review:recommended": "Poleca tę wtyczkę", + "plugin-review:error-max-length": "Opinia może mieć maksymalnie {max} znaków.", + "plugin-review:error-downvote-comment": "Powiedz deweloperowi, co można poprawić.", + "plugin-review:error-empty": "Dodaj komentarz lub wybierz „Lubię”.", + "plugin-review:unrated": "Bez oceny" } diff --git a/src/lang/pt-br.json b/src/lang/pt-br.json index 9f6552f768..1affbea199 100644 --- a/src/lang/pt-br.json +++ b/src/lang/pt-br.json @@ -835,5 +835,37 @@ "apply exclusions when copying": "Apply exclusions when copying", "settings-info-app-use-file-operation-exclusions": "Skip files and folders matching the exclusion patterns during copy and paste operations.", "horizontal scroll margin": "Horizontal scroll margin", - "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value." + "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value.", + "plugin-review:dialog-label": "Avaliações do plugin", + "plugin-review:account-check-failed": "Não foi possível verificar sua conta. Tente novamente.", + "plugin-review:sign-in": "Entre para avaliar", + "plugin-review:edit": "Editar sua avaliação", + "plugin-review:add": "Adicionar uma avaliação...", + "plugin-review:placeholder": "Compartilhe sua experiência...", + "plugin-review:input-label": "Avaliação do plugin", + "plugin-review:vote-group-label": "Voto", + "plugin-review:thumbs-up": "Gostei", + "plugin-review:thumbs-down": "Não gostei", + "plugin-review:delete": "Excluir avaliação", + "plugin-review:load-failed": "Não foi possível carregar as avaliações.", + "plugin-review:retry": "Tentar novamente", + "plugin-review:empty-title": "Ainda não há avaliações", + "plugin-review:empty-description": "Seja a primeira pessoa a compartilhar sua experiência.", + "plugin-review:yours": "Sua avaliação", + "plugin-review:community": "Avaliações da comunidade", + "plugin-review:no-other-reviews": "Ainda não há outras avaliações.", + "plugin-review:login-incomplete": "O login não foi concluído.", + "plugin-review:sign-in-failed": "Não foi possível entrar.", + "plugin-review:session-expired-review": "Sua sessão expirou. Entre novamente para avaliar.", + "plugin-review:save-failed": "Não foi possível salvar a avaliação.", + "plugin-review:delete-confirmation": "Excluir sua avaliação? Esta ação não pode ser desfeita.", + "plugin-review:session-expired-continue": "Sua sessão expirou. Entre novamente para continuar.", + "plugin-review:delete-failed": "Não foi possível excluir a avaliação.", + "plugin-review:you": "Você", + "plugin-review:edit-action": "Editar avaliação", + "plugin-review:recommended": "Recomendou este plugin", + "plugin-review:error-max-length": "A avaliação deve ter no máximo {max} caracteres.", + "plugin-review:error-downvote-comment": "Diga ao desenvolvedor o que pode ser melhorado.", + "plugin-review:error-empty": "Adicione um comentário ou escolha Gostei.", + "plugin-review:unrated": "Sem avaliação" } diff --git a/src/lang/pu-in.json b/src/lang/pu-in.json index 0cdbc0b314..22734a25c9 100644 --- a/src/lang/pu-in.json +++ b/src/lang/pu-in.json @@ -835,5 +835,37 @@ "apply exclusions when copying": "Apply exclusions when copying", "settings-info-app-use-file-operation-exclusions": "Skip files and folders matching the exclusion patterns during copy and paste operations.", "horizontal scroll margin": "Horizontal scroll margin", - "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value." + "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value.", + "plugin-review:dialog-label": "ਪਲੱਗਇਨ ਸਮੀਖਿਆਵਾਂ", + "plugin-review:account-check-failed": "ਤੁਹਾਡੇ ਖਾਤੇ ਦੀ ਜਾਂਚ ਨਹੀਂ ਹੋ ਸਕੀ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।", + "plugin-review:sign-in": "ਸਮੀਖਿਆ ਦੇਣ ਲਈ ਸਾਈਨ ਇਨ ਕਰੋ", + "plugin-review:edit": "ਆਪਣੀ ਸਮੀਖਿਆ ਸੋਧੋ", + "plugin-review:add": "ਸਮੀਖਿਆ ਸ਼ਾਮਲ ਕਰੋ...", + "plugin-review:placeholder": "ਆਪਣਾ ਅਨੁਭਵ ਸਾਂਝਾ ਕਰੋ...", + "plugin-review:input-label": "ਪਲੱਗਇਨ ਸਮੀਖਿਆ", + "plugin-review:vote-group-label": "ਵੋਟ", + "plugin-review:thumbs-up": "ਪਸੰਦ", + "plugin-review:thumbs-down": "ਨਾਪਸੰਦ", + "plugin-review:delete": "ਸਮੀਖਿਆ ਮਿਟਾਓ", + "plugin-review:load-failed": "ਸਮੀਖਿਆਵਾਂ ਲੋਡ ਨਹੀਂ ਹੋ ਸਕੀਆਂ।", + "plugin-review:retry": "ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ", + "plugin-review:empty-title": "ਹਾਲੇ ਕੋਈ ਸਮੀਖਿਆ ਨਹੀਂ", + "plugin-review:empty-description": "ਆਪਣਾ ਅਨੁਭਵ ਸਾਂਝਾ ਕਰਨ ਵਾਲੇ ਪਹਿਲੇ ਵਿਅਕਤੀ ਬਣੋ।", + "plugin-review:yours": "ਤੁਹਾਡੀ ਸਮੀਖਿਆ", + "plugin-review:community": "ਭਾਈਚਾਰੇ ਦੀਆਂ ਸਮੀਖਿਆਵਾਂ", + "plugin-review:no-other-reviews": "ਹਾਲੇ ਹੋਰ ਕੋਈ ਸਮੀਖਿਆ ਨਹੀਂ।", + "plugin-review:login-incomplete": "ਸਾਈਨ ਇਨ ਪੂਰਾ ਨਹੀਂ ਹੋਇਆ।", + "plugin-review:sign-in-failed": "ਸਾਈਨ ਇਨ ਨਹੀਂ ਹੋ ਸਕਿਆ।", + "plugin-review:session-expired-review": "ਤੁਹਾਡਾ ਸੈਸ਼ਨ ਖਤਮ ਹੋ ਗਿਆ। ਸਮੀਖਿਆ ਦੇਣ ਲਈ ਦੁਬਾਰਾ ਸਾਈਨ ਇਨ ਕਰੋ।", + "plugin-review:save-failed": "ਸਮੀਖਿਆ ਸੰਭਾਲੀ ਨਹੀਂ ਜਾ ਸਕੀ।", + "plugin-review:delete-confirmation": "ਆਪਣੀ ਸਮੀਖਿਆ ਮਿਟਾਉਣੀ ਹੈ? ਇਹ ਵਾਪਸ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ।", + "plugin-review:session-expired-continue": "ਤੁਹਾਡਾ ਸੈਸ਼ਨ ਖਤਮ ਹੋ ਗਿਆ। ਜਾਰੀ ਰੱਖਣ ਲਈ ਦੁਬਾਰਾ ਸਾਈਨ ਇਨ ਕਰੋ।", + "plugin-review:delete-failed": "ਸਮੀਖਿਆ ਮਿਟਾਈ ਨਹੀਂ ਜਾ ਸਕੀ।", + "plugin-review:you": "ਤੁਸੀਂ", + "plugin-review:edit-action": "ਸਮੀਖਿਆ ਸੋਧੋ", + "plugin-review:recommended": "ਇਸ ਪਲੱਗਇਨ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੀ", + "plugin-review:error-max-length": "ਸਮੀਖਿਆ {max} ਅੱਖਰਾਂ ਜਾਂ ਇਸ ਤੋਂ ਘੱਟ ਦੀ ਹੋਣੀ ਚਾਹੀਦੀ ਹੈ।", + "plugin-review:error-downvote-comment": "ਡਿਵੈਲਪਰ ਨੂੰ ਦੱਸੋ ਕਿ ਕੀ ਸੁਧਾਰਿਆ ਜਾ ਸਕਦਾ ਹੈ।", + "plugin-review:error-empty": "ਟਿੱਪਣੀ ਸ਼ਾਮਲ ਕਰੋ ਜਾਂ ਪਸੰਦ ਚੁਣੋ।", + "plugin-review:unrated": "ਹਾਲੇ ਮੁਲਾਂਕਣ ਨਹੀਂ" } diff --git a/src/lang/ru-ru.json b/src/lang/ru-ru.json index 4095204dc4..1d28242fce 100644 --- a/src/lang/ru-ru.json +++ b/src/lang/ru-ru.json @@ -835,5 +835,37 @@ "apply exclusions when copying": "Apply exclusions when copying", "settings-info-app-use-file-operation-exclusions": "Skip files and folders matching the exclusion patterns during copy and paste operations.", "horizontal scroll margin": "Horizontal scroll margin", - "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value." + "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value.", + "plugin-review:dialog-label": "Отзывы о плагине", + "plugin-review:account-check-failed": "Не удалось проверить вашу учётную запись. Повторите попытку.", + "plugin-review:sign-in": "Войти, чтобы оставить отзыв", + "plugin-review:edit": "Редактировать свой отзыв", + "plugin-review:add": "Добавить отзыв…", + "plugin-review:placeholder": "Поделитесь своим опытом…", + "plugin-review:input-label": "Отзыв о плагине", + "plugin-review:vote-group-label": "Оценка", + "plugin-review:thumbs-up": "Нравится", + "plugin-review:thumbs-down": "Не нравится", + "plugin-review:delete": "Удалить отзыв", + "plugin-review:load-failed": "Не удалось загрузить отзывы.", + "plugin-review:retry": "Повторить", + "plugin-review:empty-title": "Отзывов пока нет", + "plugin-review:empty-description": "Станьте первым, кто поделится своим опытом.", + "plugin-review:yours": "Ваш отзыв", + "plugin-review:community": "Отзывы сообщества", + "plugin-review:no-other-reviews": "Других отзывов пока нет.", + "plugin-review:login-incomplete": "Вход не был завершён.", + "plugin-review:sign-in-failed": "Не удалось войти.", + "plugin-review:session-expired-review": "Сеанс истёк. Войдите снова, чтобы оставить отзыв.", + "plugin-review:save-failed": "Не удалось сохранить отзыв.", + "plugin-review:delete-confirmation": "Удалить ваш отзыв? Это действие нельзя отменить.", + "plugin-review:session-expired-continue": "Сеанс истёк. Войдите снова, чтобы продолжить.", + "plugin-review:delete-failed": "Не удалось удалить отзыв.", + "plugin-review:you": "Вы", + "plugin-review:edit-action": "Редактировать отзыв", + "plugin-review:recommended": "Рекомендует этот плагин", + "plugin-review:error-max-length": "Отзыв должен содержать не более {max} символов.", + "plugin-review:error-downvote-comment": "Расскажите разработчику, что можно улучшить.", + "plugin-review:error-empty": "Добавьте комментарий или выберите «Нравится».", + "plugin-review:unrated": "Нет оценок" } diff --git a/src/lang/tl-ph.json b/src/lang/tl-ph.json index 509640d0c0..811030d742 100644 --- a/src/lang/tl-ph.json +++ b/src/lang/tl-ph.json @@ -835,5 +835,37 @@ "apply exclusions when copying": "Apply exclusions when copying", "settings-info-app-use-file-operation-exclusions": "Skip files and folders matching the exclusion patterns during copy and paste operations.", "horizontal scroll margin": "Horizontal scroll margin", - "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value." + "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value.", + "plugin-review:dialog-label": "Mga review ng plugin", + "plugin-review:account-check-failed": "Hindi masuri ang iyong account. Subukan muli.", + "plugin-review:sign-in": "Mag-sign in para mag-review", + "plugin-review:edit": "I-edit ang iyong review", + "plugin-review:add": "Magdagdag ng review...", + "plugin-review:placeholder": "Ibahagi ang iyong karanasan...", + "plugin-review:input-label": "Review ng plugin", + "plugin-review:vote-group-label": "Boto", + "plugin-review:thumbs-up": "Gusto", + "plugin-review:thumbs-down": "Hindi gusto", + "plugin-review:delete": "I-delete ang review", + "plugin-review:load-failed": "Hindi ma-load ang mga review.", + "plugin-review:retry": "Subukan muli", + "plugin-review:empty-title": "Wala pang review", + "plugin-review:empty-description": "Mauna sa pagbabahagi ng iyong karanasan.", + "plugin-review:yours": "Iyong review", + "plugin-review:community": "Mga review ng komunidad", + "plugin-review:no-other-reviews": "Wala pang ibang review.", + "plugin-review:login-incomplete": "Hindi natapos ang pag-sign in.", + "plugin-review:sign-in-failed": "Hindi makapag-sign in.", + "plugin-review:session-expired-review": "Nag-expire ang iyong session. Mag-sign in muli para mag-review.", + "plugin-review:save-failed": "Hindi mai-save ang review.", + "plugin-review:delete-confirmation": "I-delete ang iyong review? Hindi na ito maibabalik.", + "plugin-review:session-expired-continue": "Nag-expire ang iyong session. Mag-sign in muli para magpatuloy.", + "plugin-review:delete-failed": "Hindi ma-delete ang review.", + "plugin-review:you": "Ikaw", + "plugin-review:edit-action": "I-edit ang review", + "plugin-review:recommended": "Inirerekomenda ang plugin na ito", + "plugin-review:error-max-length": "Dapat {max} character o mas kaunti ang review.", + "plugin-review:error-downvote-comment": "Sabihin sa developer kung ano ang maaaring mapabuti.", + "plugin-review:error-empty": "Magdagdag ng komento o piliin ang Gusto.", + "plugin-review:unrated": "Walang rating" } diff --git a/src/lang/tr-tr.json b/src/lang/tr-tr.json index 327b4556db..742f48ad5f 100644 --- a/src/lang/tr-tr.json +++ b/src/lang/tr-tr.json @@ -835,5 +835,37 @@ "apply exclusions when copying": "Apply exclusions when copying", "settings-info-app-use-file-operation-exclusions": "Skip files and folders matching the exclusion patterns during copy and paste operations.", "horizontal scroll margin": "Horizontal scroll margin", - "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value." + "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value.", + "plugin-review:dialog-label": "Eklenti değerlendirmeleri", + "plugin-review:account-check-failed": "Hesabınız kontrol edilemedi. Tekrar deneyin.", + "plugin-review:sign-in": "Değerlendirmek için oturum açın", + "plugin-review:edit": "Değerlendirmenizi düzenleyin", + "plugin-review:add": "Değerlendirme ekleyin...", + "plugin-review:placeholder": "Deneyiminizi paylaşın...", + "plugin-review:input-label": "Eklenti değerlendirmesi", + "plugin-review:vote-group-label": "Oy", + "plugin-review:thumbs-up": "Beğendim", + "plugin-review:thumbs-down": "Beğenmedim", + "plugin-review:delete": "Değerlendirmeyi sil", + "plugin-review:load-failed": "Değerlendirmeler yüklenemedi.", + "plugin-review:retry": "Tekrar dene", + "plugin-review:empty-title": "Henüz değerlendirme yok", + "plugin-review:empty-description": "Deneyiminizi ilk paylaşan siz olun.", + "plugin-review:yours": "Değerlendirmeniz", + "plugin-review:community": "Topluluk değerlendirmeleri", + "plugin-review:no-other-reviews": "Henüz başka değerlendirme yok.", + "plugin-review:login-incomplete": "Oturum açma tamamlanmadı.", + "plugin-review:sign-in-failed": "Oturum açılamadı.", + "plugin-review:session-expired-review": "Oturumunuzun süresi doldu. Değerlendirmek için tekrar oturum açın.", + "plugin-review:save-failed": "Değerlendirme kaydedilemedi.", + "plugin-review:delete-confirmation": "Değerlendirmeniz silinsin mi? Bu işlem geri alınamaz.", + "plugin-review:session-expired-continue": "Oturumunuzun süresi doldu. Devam etmek için tekrar oturum açın.", + "plugin-review:delete-failed": "Değerlendirme silinemedi.", + "plugin-review:you": "Siz", + "plugin-review:edit-action": "Değerlendirmeyi düzenle", + "plugin-review:recommended": "Bu eklentiyi önerdi", + "plugin-review:error-max-length": "Değerlendirme en fazla {max} karakter olmalıdır.", + "plugin-review:error-downvote-comment": "Geliştiriciye nelerin iyileştirilebileceğini söyleyin.", + "plugin-review:error-empty": "Yorum ekleyin veya Beğendim’i seçin.", + "plugin-review:unrated": "Değerlendirilmedi" } diff --git a/src/lang/uk-ua.json b/src/lang/uk-ua.json index 1f14b264af..b6522b1d60 100644 --- a/src/lang/uk-ua.json +++ b/src/lang/uk-ua.json @@ -835,5 +835,37 @@ "apply exclusions when copying": "Apply exclusions when copying", "settings-info-app-use-file-operation-exclusions": "Skip files and folders matching the exclusion patterns during copy and paste operations.", "horizontal scroll margin": "Horizontal scroll margin", - "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value." + "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value.", + "plugin-review:dialog-label": "Відгуки про плагін", + "plugin-review:account-check-failed": "Не вдалося перевірити ваш обліковий запис. Спробуйте ще раз.", + "plugin-review:sign-in": "Увійти, щоб залишити відгук", + "plugin-review:edit": "Редагувати свій відгук", + "plugin-review:add": "Додати відгук…", + "plugin-review:placeholder": "Поділіться своїм досвідом…", + "plugin-review:input-label": "Відгук про плагін", + "plugin-review:vote-group-label": "Оцінка", + "plugin-review:thumbs-up": "Подобається", + "plugin-review:thumbs-down": "Не подобається", + "plugin-review:delete": "Видалити відгук", + "plugin-review:load-failed": "Не вдалося завантажити відгуки.", + "plugin-review:retry": "Спробувати ще раз", + "plugin-review:empty-title": "Відгуків ще немає", + "plugin-review:empty-description": "Поділіться своїм досвідом першими.", + "plugin-review:yours": "Ваш відгук", + "plugin-review:community": "Відгуки спільноти", + "plugin-review:no-other-reviews": "Інших відгуків ще немає.", + "plugin-review:login-incomplete": "Вхід не було завершено.", + "plugin-review:sign-in-failed": "Не вдалося ввійти.", + "plugin-review:session-expired-review": "Сеанс завершився. Увійдіть знову, щоб залишити відгук.", + "plugin-review:save-failed": "Не вдалося зберегти відгук.", + "plugin-review:delete-confirmation": "Видалити ваш відгук? Цю дію не можна скасувати.", + "plugin-review:session-expired-continue": "Сеанс завершився. Увійдіть знову, щоб продовжити.", + "plugin-review:delete-failed": "Не вдалося видалити відгук.", + "plugin-review:you": "Ви", + "plugin-review:edit-action": "Редагувати відгук", + "plugin-review:recommended": "Рекомендує цей плагін", + "plugin-review:error-max-length": "Відгук має містити не більше {max} символів.", + "plugin-review:error-downvote-comment": "Розкажіть розробнику, що можна покращити.", + "plugin-review:error-empty": "Додайте коментар або виберіть «Подобається».", + "plugin-review:unrated": "Без оцінки" } diff --git a/src/lang/uz-uz.json b/src/lang/uz-uz.json index eec005214b..1f4272b967 100644 --- a/src/lang/uz-uz.json +++ b/src/lang/uz-uz.json @@ -835,5 +835,37 @@ "apply exclusions when copying": "Apply exclusions when copying", "settings-info-app-use-file-operation-exclusions": "Skip files and folders matching the exclusion patterns during copy and paste operations.", "horizontal scroll margin": "Horizontal scroll margin", - "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value." + "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value.", + "plugin-review:dialog-label": "Plagin sharhlari", + "plugin-review:account-check-failed": "Hisobingizni tekshirib bo‘lmadi. Qayta urinib ko‘ring.", + "plugin-review:sign-in": "Sharh qoldirish uchun kiring", + "plugin-review:edit": "Sharhingizni tahrirlash", + "plugin-review:add": "Sharh qo‘shish...", + "plugin-review:placeholder": "Tajribangizni ulashing...", + "plugin-review:input-label": "Plagin sharhi", + "plugin-review:vote-group-label": "Ovoz", + "plugin-review:thumbs-up": "Yoqdi", + "plugin-review:thumbs-down": "Yoqmadi", + "plugin-review:delete": "Sharhni o‘chirish", + "plugin-review:load-failed": "Sharhlarni yuklab bo‘lmadi.", + "plugin-review:retry": "Qayta urinish", + "plugin-review:empty-title": "Hozircha sharhlar yo‘q", + "plugin-review:empty-description": "Tajribangizni birinchi bo‘lib ulashing.", + "plugin-review:yours": "Sharhingiz", + "plugin-review:community": "Hamjamiyat sharhlari", + "plugin-review:no-other-reviews": "Hozircha boshqa sharhlar yo‘q.", + "plugin-review:login-incomplete": "Kirish yakunlanmadi.", + "plugin-review:sign-in-failed": "Tizimga kirib bo‘lmadi.", + "plugin-review:session-expired-review": "Seans muddati tugadi. Sharh qoldirish uchun qayta kiring.", + "plugin-review:save-failed": "Sharhni saqlab bo‘lmadi.", + "plugin-review:delete-confirmation": "Sharhingiz o‘chirilsinmi? Buni ortga qaytarib bo‘lmaydi.", + "plugin-review:session-expired-continue": "Seans muddati tugadi. Davom etish uchun qayta kiring.", + "plugin-review:delete-failed": "Sharhni o‘chirib bo‘lmadi.", + "plugin-review:you": "Siz", + "plugin-review:edit-action": "Sharhni tahrirlash", + "plugin-review:recommended": "Bu plaginni tavsiya qildi", + "plugin-review:error-max-length": "Sharh {max} ta yoki undan kam belgidan iborat bo‘lishi kerak.", + "plugin-review:error-downvote-comment": "Dasturchiga nimani yaxshilash mumkinligini ayting.", + "plugin-review:error-empty": "Izoh qo‘shing yoki “Yoqdi”ni tanlang.", + "plugin-review:unrated": "Baholanmagan" } diff --git a/src/lang/vi-vn.json b/src/lang/vi-vn.json index 4c992e2502..fd4eee2626 100644 --- a/src/lang/vi-vn.json +++ b/src/lang/vi-vn.json @@ -835,5 +835,37 @@ "apply exclusions when copying": "Apply exclusions when copying", "settings-info-app-use-file-operation-exclusions": "Skip files and folders matching the exclusion patterns during copy and paste operations.", "horizontal scroll margin": "Horizontal scroll margin", - "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value." + "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value.", + "plugin-review:dialog-label": "Đánh giá plugin", + "plugin-review:account-check-failed": "Không thể kiểm tra tài khoản của bạn. Hãy thử lại.", + "plugin-review:sign-in": "Đăng nhập để đánh giá", + "plugin-review:edit": "Chỉnh sửa đánh giá của bạn", + "plugin-review:add": "Thêm đánh giá...", + "plugin-review:placeholder": "Chia sẻ trải nghiệm của bạn...", + "plugin-review:input-label": "Đánh giá plugin", + "plugin-review:vote-group-label": "Bình chọn", + "plugin-review:thumbs-up": "Thích", + "plugin-review:thumbs-down": "Không thích", + "plugin-review:delete": "Xóa đánh giá", + "plugin-review:load-failed": "Không thể tải các đánh giá.", + "plugin-review:retry": "Thử lại", + "plugin-review:empty-title": "Chưa có đánh giá", + "plugin-review:empty-description": "Hãy là người đầu tiên chia sẻ trải nghiệm.", + "plugin-review:yours": "Đánh giá của bạn", + "plugin-review:community": "Đánh giá từ cộng đồng", + "plugin-review:no-other-reviews": "Chưa có đánh giá nào khác.", + "plugin-review:login-incomplete": "Quá trình đăng nhập chưa hoàn tất.", + "plugin-review:sign-in-failed": "Không thể đăng nhập.", + "plugin-review:session-expired-review": "Phiên của bạn đã hết hạn. Hãy đăng nhập lại để đánh giá.", + "plugin-review:save-failed": "Không thể lưu đánh giá.", + "plugin-review:delete-confirmation": "Xóa đánh giá của bạn? Bạn không thể hoàn tác thao tác này.", + "plugin-review:session-expired-continue": "Phiên của bạn đã hết hạn. Hãy đăng nhập lại để tiếp tục.", + "plugin-review:delete-failed": "Không thể xóa đánh giá.", + "plugin-review:you": "Bạn", + "plugin-review:edit-action": "Chỉnh sửa đánh giá", + "plugin-review:recommended": "Đã đề xuất plugin này", + "plugin-review:error-max-length": "Đánh giá phải có tối đa {max} ký tự.", + "plugin-review:error-downvote-comment": "Hãy cho nhà phát triển biết điều gì có thể được cải thiện.", + "plugin-review:error-empty": "Thêm bình luận hoặc chọn Thích.", + "plugin-review:unrated": "Chưa đánh giá" } diff --git a/src/lang/zh-cn.json b/src/lang/zh-cn.json index 377aa0f004..d8067ddb03 100644 --- a/src/lang/zh-cn.json +++ b/src/lang/zh-cn.json @@ -835,5 +835,37 @@ "apply exclusions when copying": "复制时应用排除项", "settings-info-app-use-file-operation-exclusions": "在复制和粘贴操作期间,跳过符合排除规则的文件和文件夹。", "horizontal scroll margin": "水平滚动边距", - "settings-info-horizontal-scroll-margin": "在关闭自动换行时,为最长行的末尾添加空白区域。请输入任意非负整数的像素值。" + "settings-info-horizontal-scroll-margin": "在关闭自动换行时,为最长行的末尾添加空白区域。请输入任意非负整数的像素值。", + "plugin-review:dialog-label": "插件评价", + "plugin-review:account-check-failed": "无法检查你的账户,请重试。", + "plugin-review:sign-in": "登录后评价", + "plugin-review:edit": "编辑你的评价", + "plugin-review:add": "添加评价…", + "plugin-review:placeholder": "分享你的使用体验…", + "plugin-review:input-label": "插件评价", + "plugin-review:vote-group-label": "投票", + "plugin-review:thumbs-up": "赞", + "plugin-review:thumbs-down": "踩", + "plugin-review:delete": "删除评价", + "plugin-review:load-failed": "无法加载评价。", + "plugin-review:retry": "重试", + "plugin-review:empty-title": "暂无评价", + "plugin-review:empty-description": "成为第一个分享使用体验的人。", + "plugin-review:yours": "你的评价", + "plugin-review:community": "社区评价", + "plugin-review:no-other-reviews": "暂无其他评价。", + "plugin-review:login-incomplete": "登录未完成。", + "plugin-review:sign-in-failed": "无法登录。", + "plugin-review:session-expired-review": "会话已过期,请重新登录后评价。", + "plugin-review:save-failed": "无法保存评价。", + "plugin-review:delete-confirmation": "要删除你的评价吗?此操作无法撤销。", + "plugin-review:session-expired-continue": "会话已过期,请重新登录后继续。", + "plugin-review:delete-failed": "无法删除评价。", + "plugin-review:you": "你", + "plugin-review:edit-action": "编辑评价", + "plugin-review:recommended": "推荐了此插件", + "plugin-review:error-max-length": "评价不能超过 {max} 个字符。", + "plugin-review:error-downvote-comment": "告诉开发者哪些地方可以改进。", + "plugin-review:error-empty": "添加评论或选择“赞”。", + "plugin-review:unrated": "暂无评分" } diff --git a/src/lang/zh-hant.json b/src/lang/zh-hant.json index 2e450d79c3..2bbe289d28 100644 --- a/src/lang/zh-hant.json +++ b/src/lang/zh-hant.json @@ -835,5 +835,37 @@ "apply exclusions when copying": "複製時應用排除項", "settings-info-app-use-file-operation-exclusions": "在複製和粘貼操作期間,跳過符合排除規則的文件和文件夾。", "horizontal scroll margin": "水平滾動邊距", - "settings-info-horizontal-scroll-margin": "在關閉自動換行時,爲最長行的末尾添加空白區域。請輸入任意非負整數的像素值。" + "settings-info-horizontal-scroll-margin": "在關閉自動換行時,爲最長行的末尾添加空白區域。請輸入任意非負整數的像素值。", + "plugin-review:dialog-label": "外掛評論", + "plugin-review:account-check-failed": "無法檢查你的帳戶,請再試一次。", + "plugin-review:sign-in": "登入以撰寫評論", + "plugin-review:edit": "編輯你的評論", + "plugin-review:add": "新增評論…", + "plugin-review:placeholder": "分享你的使用體驗…", + "plugin-review:input-label": "外掛評論", + "plugin-review:vote-group-label": "投票", + "plugin-review:thumbs-up": "讚", + "plugin-review:thumbs-down": "倒讚", + "plugin-review:delete": "刪除評論", + "plugin-review:load-failed": "無法載入評論。", + "plugin-review:retry": "重試", + "plugin-review:empty-title": "尚無評論", + "plugin-review:empty-description": "成為第一個分享使用體驗的人。", + "plugin-review:yours": "你的評論", + "plugin-review:community": "社群評論", + "plugin-review:no-other-reviews": "尚無其他評論。", + "plugin-review:login-incomplete": "登入未完成。", + "plugin-review:sign-in-failed": "無法登入。", + "plugin-review:session-expired-review": "工作階段已過期,請重新登入以撰寫評論。", + "plugin-review:save-failed": "無法儲存評論。", + "plugin-review:delete-confirmation": "要刪除你的評論嗎?此操作無法復原。", + "plugin-review:session-expired-continue": "工作階段已過期,請重新登入以繼續。", + "plugin-review:delete-failed": "無法刪除評論。", + "plugin-review:you": "你", + "plugin-review:edit-action": "編輯評論", + "plugin-review:recommended": "推薦了此外掛", + "plugin-review:error-max-length": "評論不得超過 {max} 個字元。", + "plugin-review:error-downvote-comment": "告訴開發者哪些地方可以改進。", + "plugin-review:error-empty": "新增留言或選擇「讚」。", + "plugin-review:unrated": "尚未評分" } diff --git a/src/lang/zh-tw.json b/src/lang/zh-tw.json index 734c10caf0..add0b58a04 100644 --- a/src/lang/zh-tw.json +++ b/src/lang/zh-tw.json @@ -835,5 +835,37 @@ "apply exclusions when copying": "Apply exclusions when copying", "settings-info-app-use-file-operation-exclusions": "Skip files and folders matching the exclusion patterns during copy and paste operations.", "horizontal scroll margin": "Horizontal scroll margin", - "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value." + "settings-info-horizontal-scroll-margin": "Adds empty space after the longest line when word wrap is off. Enter any non-negative whole-pixel value.", + "plugin-review:dialog-label": "外掛評論", + "plugin-review:account-check-failed": "無法檢查你的帳號,請再試一次。", + "plugin-review:sign-in": "登入以撰寫評論", + "plugin-review:edit": "編輯你的評論", + "plugin-review:add": "新增評論…", + "plugin-review:placeholder": "分享你的使用心得…", + "plugin-review:input-label": "外掛評論", + "plugin-review:vote-group-label": "評分", + "plugin-review:thumbs-up": "讚", + "plugin-review:thumbs-down": "倒讚", + "plugin-review:delete": "刪除評論", + "plugin-review:load-failed": "無法載入評論。", + "plugin-review:retry": "重試", + "plugin-review:empty-title": "目前沒有評論", + "plugin-review:empty-description": "成為第一個分享使用心得的人。", + "plugin-review:yours": "你的評論", + "plugin-review:community": "社群評論", + "plugin-review:no-other-reviews": "目前沒有其他評論。", + "plugin-review:login-incomplete": "登入未完成。", + "plugin-review:sign-in-failed": "無法登入。", + "plugin-review:session-expired-review": "工作階段已過期,請重新登入以撰寫評論。", + "plugin-review:save-failed": "無法儲存評論。", + "plugin-review:delete-confirmation": "要刪除你的評論嗎?此動作無法復原。", + "plugin-review:session-expired-continue": "工作階段已過期,請重新登入以繼續。", + "plugin-review:delete-failed": "無法刪除評論。", + "plugin-review:you": "你", + "plugin-review:edit-action": "編輯評論", + "plugin-review:recommended": "推薦這個外掛", + "plugin-review:error-max-length": "評論不得超過 {max} 個字元。", + "plugin-review:error-downvote-comment": "告訴開發者哪些地方可以改進。", + "plugin-review:error-empty": "新增留言或選擇「讚」。", + "plugin-review:unrated": "尚未評分" } diff --git a/src/lib/lang.js b/src/lib/lang.js index b8a2966ab5..77a21e1c6f 100644 --- a/src/lib/lang.js +++ b/src/lib/lang.js @@ -187,6 +187,34 @@ const langMap = { }, }; +const intlLocaleOverrides = { + "ir-fa": "fa-IR", + "mm-unicode": "my-MM", + "mm-zawgyi": "my-MM", + "pu-in": "pa-IN", +}; +const rtlLanguages = new Set(["ar", "fa", "he"]); + +export function getIntlLocale(code) { + const normalizedCode = code?.toLowerCase(); + const locale = + intlLocaleOverrides[normalizedCode] || + (normalizedCode in langMap + ? normalizedCode + : globalThis.navigator?.language || "en-US"); + + try { + return Intl.getCanonicalLocales(locale)[0]; + } catch { + return "en-US"; + } +} + +export function getLocaleDirection(locale) { + const language = locale?.split("-")[0]?.toLowerCase(); + return rtlLanguages.has(language) ? "rtl" : "ltr"; +} + export default { async set(code) { code = code?.toLowerCase(); diff --git a/src/pages/plugin/plugin.scss b/src/pages/plugin/plugin.scss index cf88e1b229..68c1bc2119 100644 --- a/src/pages/plugin/plugin.scss +++ b/src/pages/plugin/plugin.scss @@ -608,117 +608,515 @@ position: fixed; display: flex; flex-direction: column; - width: 100vw; - height: 70vh; - top: auto; + width: min(100vw, 720px); + height: 76vh; + height: min(76dvh, 680px); + max-height: calc(100vh - 16px - env(safe-area-inset-top)); + max-height: calc(100dvh - 16px - env(safe-area-inset-top)); + inset-inline: 0; bottom: 0; - background-color: rgb(255, 255, 255); + margin: auto; background-color: var(--secondary-color); + color: var(--primary-text-color); z-index: 999; - box-shadow: 0 0 20px rgba(0, 0, 0, 0.2); box-shadow: 0 0 20px var(--box-shadow-color); - border-radius: 40px 40px 0 0; + border-radius: 24px 24px 0 0; overflow: hidden; animation: slide-up 0.3s ease-in-out; + overscroll-behavior: contain; &.hide { - transition: all 0.3s ease-in-out !important; + transition: transform 0.3s ease-in-out !important; transform: translateY(100%) !important; } .reviews-header { - height: 40px; + position: relative; + flex: 0 0 52px; display: flex; align-items: center; justify-content: center; + border-bottom: 1px solid var(--border-color); + background: color-mix(in srgb, var(--secondary-color), var(--popup-background-color) 28%); + user-select: none; + touch-action: pan-y; - &::after { - content: ""; + .reviews-drag-handle { + position: absolute; + top: 7px; + width: 40px; + height: 4px; + border-radius: 999px; + background: color-mix(in srgb, var(--secondary-text-color) 50%, transparent); + } + + strong { + margin-top: 5px; + font-size: 16px; + font-weight: 600; + text-transform: capitalize; + } + + .reviews-close { + position: absolute; + inset-inline-end: 8px; + bottom: 6px; width: 40px; - height: 5px; - border-radius: 2.5px; - background-color: rgba(0, 0, 0, 0.2); + height: 40px; + padding: 0; + border: 0; + border-radius: 50%; + background: transparent; + color: var(--secondary-text-color); + font-size: 18px; + + &:active { + background: color-mix(in srgb, var(--primary-text-color) 7%, transparent); + } + } + } + + button { + font: inherit; + + &:focus-visible { + outline: 2px solid var(--active-icon-color); + outline-offset: 2px; + } + + &:disabled { + cursor: default; + opacity: 0.55; + } + } + + .review-composer { + flex: 0 0 auto; + min-height: 64px; + padding: 12px 16px; + box-sizing: border-box; + border-bottom: 1px solid var(--border-color); + background: var(--secondary-color); + + &.review-composer-hidden { + display: none; + } + + &.loading { + @include mixins.loader(24px); } } - .write-review { - padding: 0 10px; + .review-entry-surface { + width: 100%; + padding: 10px; + box-sizing: border-box; + border: 1px solid var(--popup-border-color); + border-radius: 14px; + background: color-mix(in srgb, var(--secondary-color), var(--popup-background-color) 56%); + } + + .review-add-row, + .review-sign-in, + .review-editor-main { display: flex; - align-content: center; - justify-content: center; - width: fit-content; - margin: auto; + align-items: center; + gap: 12px; + } - span { - height: fit-content; - margin: auto; + .review-editor-main { + align-items: flex-start; + } + + .review-avatar, + .user-profile { + position: relative; + display: grid; + flex: 0 0 auto; + place-items: center; + width: 36px; + height: 36px; + overflow: hidden; + border-radius: 50%; + background: color-mix(in srgb, var(--primary-text-color) 8%, transparent); + color: var(--secondary-text-color); + font-size: 20px; + + > img { + position: absolute; + inset: 0; + display: block; + width: 100%; + height: 100%; + object-fit: cover; } + } + + .review-sign-in > .review-avatar.icon { + display: grid; + place-items: center; + background: color-mix(in srgb, var(--primary-text-color) 8%, transparent); + color: var(--secondary-text-color); + font-size: 20px; + } + + .review-sign-in-content, + .review-editor-fields { + min-width: 0; + flex: 1; + } - .icon { - height: 30px; - margin-right: 10px; + .review-editor-fields { + padding: 8px 10px 4px; + box-sizing: border-box; + border: 1px solid var(--border-color); + border-radius: 12px; + background: var(--secondary-color); + transition: border-color 160ms ease, box-shadow 160ms ease; + + &:focus-within { + border-color: var(--active-icon-color); + box-shadow: 0 0 0 2px color-mix(in srgb, var(--active-icon-color) 12%, transparent); } } + .review-add-button { + width: 100%; + min-height: 40px; + padding: 7px 10px; + border: 0; + border-radius: 10px; + background: transparent; + color: var(--secondary-text-color); + text-align: start; + font-weight: 500; + + &:active { + background: color-mix(in srgb, var(--primary-text-color) 6%, transparent); + color: var(--primary-text-color); + } + } + + .review-editor textarea { + display: block; + width: 100%; + min-height: 32px; + max-height: 144px; + padding: 3px 0; + box-sizing: border-box; + resize: none; + overflow-y: auto; + border: 0; + border-radius: 0; + outline: none; + background: transparent; + color: var(--primary-text-color); + font: inherit; + line-height: 1.4; + + &::placeholder { + color: var(--secondary-text-color); + } + } + + .review-editor-meta { + display: flex; + justify-content: space-between; + gap: 8px; + min-height: 18px; + padding-top: 2px; + } + + .review-error { + color: var(--error-text-color); + line-height: 1.35; + } + + .review-counter { + margin-inline-start: auto; + color: var(--secondary-text-color); + white-space: nowrap; + font-size: 11px; + } + + .review-editor-actions { + display: flex; + align-items: center; + justify-content: flex-end; + gap: 10px; + margin-top: 10px; + padding-inline-start: 48px; + } + + .review-vote-actions, + .review-form-actions { + display: flex; + align-items: center; + gap: 4px; + } + + .review-vote-actions { + margin-inline-end: auto; + padding: 2px; + border: 1px solid var(--border-color); + border-radius: 999px; + background: var(--secondary-color); + } + + .review-vote-button, + .review-delete-button, + .review-edit-button { + display: grid; + place-items: center; + width: 34px; + height: 34px; + padding: 0; + border: 0; + border-radius: 50%; + background: transparent; + color: var(--secondary-text-color); + + &.selected { + background: color-mix(in srgb, var(--button-background-color) 16%, transparent); + color: var(--button-background-color); + } + + &:active { + background: color-mix(in srgb, var(--primary-text-color) 7%, transparent); + } + } + + .review-vote-down .icon, + .review-vote-indicator.down .icon { + transform: rotate(180deg); + } + + .review-delete-button { + margin-inline-end: 6px; + background: color-mix(in srgb, var(--error-text-color) 9%, transparent); + color: var(--error-text-color); + } + + .review-cancel-button, + .review-save-button, + .reviews-state button { + min-height: 36px; + padding: 7px 14px; + border: 0; + border-radius: 18px; + font-weight: 500; + } + + .review-cancel-button { + background: transparent; + color: var(--primary-text-color); + } + + .review-save-button, + .reviews-state button { + min-width: 76px; + background: var(--button-background-color); + color: var(--button-text-color); + } + .reviews-body { + min-height: 0; flex: 1; overflow: auto; + padding: 4px 0 max(16px, env(safe-area-inset-bottom)); + box-sizing: border-box; + overscroll-behavior: contain; &.loading { @include mixins.loader(30px); } + .reviews-state { + min-height: 180px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 10px; + padding: 24px; + box-sizing: border-box; + color: var(--secondary-text-color); + text-align: center; + + &.reviews-empty .icon { + font-size: 30px; + } + + strong { + color: var(--primary-text-color); + } + } + + .reviews-section { + padding: 10px 12px 0; + } + + .reviews-section-label { + padding: 0 4px 7px; + color: color-mix(in srgb, var(--secondary-text-color), transparent 12%); + font-size: 12px; + font-weight: 600; + line-height: 1.3; + } + + .reviews-card { + overflow: hidden; + border: 1px solid var(--popup-border-color); + border-radius: 14px; + background: color-mix(in srgb, var(--secondary-color), var(--popup-background-color) 48%); + } + + .own-review-card { + border-color: color-mix(in srgb, var(--active-icon-color) 38%, var(--border-color)); + background: color-mix(in srgb, var(--secondary-color), var(--active-icon-color) 6%); + } + + .reviews-community-empty { + display: grid; + min-height: 72px; + place-items: center; + color: var(--secondary-text-color); + } + .review { - padding: 10px; + padding: 14px 16px; display: flex; flex-direction: column; - border-bottom: solid 1px rgba(255, 255, 255, 0.1); + border-bottom: 1px solid var(--border-color); + + &:last-child { + border-bottom: 0; + } .review-author { display: flex; - height: 30px; + min-height: 36px; align-items: center; justify-content: flex-start; - margin-bottom: 5px; - - .vote { - height: 40px; - width: 40px; - background-position: center; - background-repeat: no-repeat; - background-size: 20px; + gap: 10px; + margin-bottom: 6px; + + .review-author-identity { + min-width: 0; + display: flex; + align-items: baseline; + gap: 6px; + overflow: hidden; + + time { + flex: 0 0 auto; + color: color-mix(in srgb, var(--secondary-text-color), transparent 30%); + font-size: 0.85em; + font-weight: 400; + white-space: nowrap; + } + } + + .user-name { + min-width: 0; + display: flex; + align-items: baseline; + gap: 6px; + overflow: hidden; + font-weight: 500; + text-overflow: ellipsis; + white-space: nowrap; + + small { + color: var(--secondary-text-color); + font-weight: 400; + } } .user-profile { - height: 30px; - width: 30px; - border-radius: 50%; - background-position: center; - background-repeat: no-repeat; - background-size: cover; - margin-right: 10px; - font-weight: 400; + width: 32px; + height: 32px; } } + .review-vote-indicator { + display: grid; + place-items: center; + width: 28px; + height: 28px; + margin-inline-start: auto; + color: var(--secondary-text-color); + } + + .review-edit-button { + width: 32px; + height: 32px; + margin-inline-start: 0; + background: color-mix(in srgb, var(--button-background-color) 10%, transparent); + color: var(--button-background-color); + } + .review-body { - display: flex; - align-items: center; - font-weight: 300; - overflow: auto; + margin: 0; + margin-inline-start: 42px; + color: var(--primary-text-color); + font-weight: 400; + line-height: 1.45; + overflow-wrap: anywhere; + white-space: pre-wrap; + + &.review-vote-only { + color: var(--secondary-text-color); + font-size: 0.92em; + font-style: italic; + } } .author-reply { + margin: 10px 0 0; + margin-inline-start: 42px; + padding: 10px 12px; + border-inline-start: 3px solid var(--active-icon-color); + border-radius: 8px; + background: color-mix(in srgb, var(--primary-text-color) 6%, transparent); + line-height: 1.4; + &::before { display: block; content: attr(data-author); - font-weight: 400; - margin-bottom: 10px; + margin-bottom: 4px; + font-weight: 600; } - - padding: 10px; - background-color: rgba(0, 0, 0, 0.1); } } } + + @media (max-width: 480px) { + border-radius: 20px 20px 0 0; + + .review-composer { + padding-inline: 12px; + } + + .review-entry-surface { + padding: 9px; + } + + .reviews-body .reviews-section { + padding-inline: 10px; + } + + .reviews-body .review { + padding-inline: 12px; + } + + .review-editor-actions { + padding-inline-start: 0; + flex-wrap: wrap; + } + + .review-form-actions { + gap: 2px; + } + } } diff --git a/src/pages/plugin/plugin.view.js b/src/pages/plugin/plugin.view.js index f93bc64943..ed0cc0e53c 100644 --- a/src/pages/plugin/plugin.view.js +++ b/src/pages/plugin/plugin.view.js @@ -6,13 +6,27 @@ import dayjsRelativeTime from "dayjs/esm/plugin/relativeTime"; import dayjsUpdateLocale from "dayjs/esm/plugin/updateLocale"; import dayjsUtc from "dayjs/esm/plugin/utc"; import alert from "dialogs/alert"; +import confirm from "dialogs/confirm"; import DOMPurify from "dompurify"; import Ref from "html-tag-js/ref"; import actionStack from "lib/actionStack"; import auth, { loginEvents } from "lib/auth"; import config from "lib/config"; +import { getIntlLocale, getLocaleDirection } from "lib/lang"; +import settings from "lib/settings"; import helpers from "utils/helpers"; import Url from "utils/Url"; +import { + formatReviewDate, + getRatingClass, + getRatingLabel, + hasReviewChanged, + partitionPluginReviews, + REVIEW_MAX_COMMENT_LENGTH, + resolveReviewAvatarUrl, + updateReviewStats, + validateReviewDraft, +} from "./reviewUtils"; dayjs.extend(dayjsRelativeTime); dayjs.extend(dayjsUtc); @@ -68,7 +82,16 @@ export default (props) => { unsupportedEditor, } = props; - let rating = "unrated"; + let reviewStats = { + votesUp: Number(votesUp) || 0, + votesDown: Number(votesDown) || 0, + commentCount: Number(commentCount) || 0, + }; + let rating = getRatingLabel(reviewStats.votesUp, reviewStats.votesDown); + const getRatingText = () => + rating === "unrated" ? strings["plugin-review:unrated"] : rating; + const ratingValueRef = Ref(); + const commentCountRef = Ref(); const keywords = typeof keywordsRaw === "string" ? JSON.parse(keywordsRaw) : keywordsRaw; @@ -77,10 +100,14 @@ export default (props) => { ? JSON.parse(contributorsRaw) : contributorsRaw; - if (votesUp || votesDown) { - rating = `${Math.round((votesUp / (votesUp + votesDown)) * 100)}%`; - } const showPurchaseWarning = !helpers.shouldAllowExternalPurchase(); + const applyReviewStats = (nextStats) => { + reviewStats = nextStats; + rating = getRatingLabel(reviewStats.votesUp, reviewStats.votesDown); + ratingValueRef.textContent = getRatingText(); + ratingValueRef.className = getRatingClass(rating); + commentCountRef.textContent = reviewStats.commentCount; + }; const formatUpdatedDate = (dateString) => { if (!dateString) return null; @@ -158,18 +185,25 @@ export default (props) => {
- = 80 ? "rating-high" : rating.replace("%", "") >= 50 ? "rating-medium" : "rating-low"}`} - > - {rating} + + {getRatingText()}
+ showReviews({ + pluginId: id, + author, + stats: reviewStats, + onStatsChange: applyReviewStats, + }) + } > - {commentCount} + + {reviewStats.commentCount} + {strings.reviews}
@@ -449,10 +483,28 @@ function Version({ ); } -async function showReviews(pluginId, author) { +async function showReviews({ pluginId, author, stats, onStatsChange }) { + const locale = getIntlLocale(settings.value?.lang); const mask = Ref(); const body = Ref(); + const composer = Ref(); const container = Ref(); + const state = { + busy: false, + closed: false, + draftComment: "", + draftDirty: false, + draftVote: 0, + editorError: "", + expanded: false, + reviewListError: null, + reviews: [], + resumeDraftAfterSignIn: false, + stats: { ...stats }, + user: null, + userReview: null, + }; + let removeDragListeners = () => {}; actionStack.push({ id: "reviews", @@ -468,50 +520,574 @@ async function showReviews(pluginId, author) { >, ); app.append( -
-
-
- - - Review - +
+
+ + {strings.reviews} +
+
, ); - try { - const reviews = await fsOperation( - config.API_BASE, - `/comments/${pluginId}`, - ).readFile("json"); - if (!reviews.length) { - body.style.textAlign = "center"; - body.textContent = "No reviews yet"; + await initialize(); + + async function initialize() { + composer.el.classList.add("loading"); + body.el.classList.add("loading"); + state.reviewListError = null; + + const [reviewsResult, userResult] = await Promise.allSettled([ + loadReviews(), + auth.getLoggedInUser(), + ]); + if (state.closed) return; + + if (reviewsResult.status === "fulfilled") { + state.reviews = reviewsResult.value; + } else { + state.reviewListError = reviewsResult.reason; + } + + if (userResult.status === "fulfilled") { + state.user = userResult.value; + if (state.user) { + const { ownReview: listedReview } = partitionPluginReviews( + state.reviews, + null, + state.user.id, + ); + try { + state.userReview = (await loadUserReview()) || listedReview || null; + } catch { + state.userReview = listedReview || null; + } + } + } else { + state.editorError = strings["plugin-review:account-check-failed"]; + } + + composer.el.classList.remove("loading"); + body.el.classList.remove("loading"); + renderComposer(); + renderReviews(); + } + + function renderComposer({ focus = false } = {}) { + if (state.closed) return; + composer.el.classList.remove("loading"); + composer.el.classList.remove("review-composer-hidden"); + + if (!state.user) { + const errorMessage = state.editorError; + composer.el.replaceChildren( +
+ +
+ + {errorMessage ? ( + {errorMessage} + ) : null} +
+
, + ); + return; + } + + if (!state.expanded && state.userReview) { + composer.el.replaceChildren(); + composer.el.classList.add("review-composer-hidden"); + return; + } + + if (!state.expanded) { + composer.el.replaceChildren( +
+ + +
, + ); + return; + } + + const textarea = Ref(); + const counter = Ref(); + const error = Ref(); + const saveButton = Ref(); + const upButton = Ref(); + const upIcon = Ref(); + const downButton = Ref(); + const downIcon = Ref(); + + composer.el.replaceChildren( +
+
+ +
+ +
+ + +
+
+
+
+
+ + +
+
+ {state.userReview ? ( + + ) : null} + + +
+
+
, + ); + + textarea.el.value = state.draftComment; + autosizeReviewInput(textarea.el); + updateEditorState(); + if (focus) requestAnimationFrame(() => textarea.el.focus()); + + function toggleVote(vote) { + state.draftVote = state.draftVote === vote ? 0 : vote; + state.draftDirty = true; + state.editorError = ""; + updateEditorState(); + } + + function updateEditorState() { + const validation = validateReviewDraft({ + comment: state.draftComment, + vote: state.draftVote, + }); + const unchanged = !hasReviewChanged(state.userReview, validation); + const validationMessage = + state.draftDirty && validation.errorKey + ? getReviewString(validation.errorKey, { + max: REVIEW_MAX_COMMENT_LENGTH, + }) + : ""; + + counter.textContent = `${state.draftComment.length}/${REVIEW_MAX_COMMENT_LENGTH}`; + error.textContent = state.editorError || validationMessage; + upButton.el.classList.toggle("selected", state.draftVote === 1); + downButton.el.classList.toggle("selected", state.draftVote === -1); + upButton.el.setAttribute("aria-pressed", state.draftVote === 1); + downButton.el.setAttribute("aria-pressed", state.draftVote === -1); + upIcon.className = `icon ${state.draftVote === 1 ? "like-solid" : "like"}`; + downIcon.className = `icon ${state.draftVote === -1 ? "like-solid" : "like"}`; + saveButton.disabled = Boolean( + validation.errorKey || unchanged || state.busy, + ); + saveButton.textContent = state.busy + ? strings["loading..."] + : state.userReview + ? strings.update + : strings.save; + } + } + + function renderReviews() { + if (state.closed) return; + body.el.classList.remove("loading"); + + if (state.reviewListError) { + body.el.replaceChildren( +
+ {strings["plugin-review:load-failed"]} + +
, + ); return; } - reviews.forEach((review) => { - if (!review.comment) return; - review.author = author; - body.append(); + const { ownReview, communityReviews } = partitionPluginReviews( + state.reviews, + state.userReview, + state.user?.id, + ); + const showOwnReview = Boolean(ownReview && !state.expanded); + + if (!showOwnReview && !communityReviews.length && !state.expanded) { + body.el.replaceChildren( +
+ + {strings["plugin-review:empty-title"]} + {strings["plugin-review:empty-description"]} +
, + ); + return; + } + + const sections = []; + if (showOwnReview) { + sections.push( +
+
+ {strings["plugin-review:yours"]} +
+
+ +
+
, + ); + } + + sections.push( +
+
+ {strings["plugin-review:community"]} +
+ {communityReviews.length ? ( +
+ {communityReviews.map((review) => ( + + ))} +
+ ) : ( +
+ {strings["plugin-review:no-other-reviews"]} +
+ )} +
, + ); + + body.el.replaceChildren(...sections); + } + + function openEditor() { + state.draftComment = state.userReview?.comment || ""; + state.draftVote = state.userReview?.vote || 0; + state.draftDirty = false; + state.editorError = ""; + state.expanded = true; + state.resumeDraftAfterSignIn = false; + renderComposer({ focus: true }); + renderReviews(); + } + + function cancelEditor() { + if (state.busy) return; + state.expanded = false; + state.editorError = ""; + state.resumeDraftAfterSignIn = false; + renderComposer(); + renderReviews(); + } + + async function signIn() { + if (state.busy) return; + state.busy = true; + state.editorError = ""; + renderComposer(); + + try { + await auth.login(); + const user = await auth.getLoggedInUser(true); + if (!user) { + state.busy = false; + state.editorError = strings["plugin-review:login-incomplete"]; + renderComposer(); + return; + } + state.user = user; + const { ownReview: listedReview } = partitionPluginReviews( + state.reviews, + null, + state.user.id, + ); + state.userReview = await loadUserReview().catch( + () => listedReview || null, + ); + state.busy = false; + if (state.resumeDraftAfterSignIn) { + state.resumeDraftAfterSignIn = false; + state.editorError = ""; + state.expanded = true; + renderComposer({ focus: true }); + renderReviews(); + } else { + openEditor(); + } + } catch { + state.busy = false; + state.editorError = strings["plugin-review:sign-in-failed"]; + renderComposer(); + } + } + + async function saveReview() { + if (state.busy) return; + const review = validateReviewDraft({ + comment: state.draftComment, + vote: state.draftVote, }); - } catch (error) { - body.textContent = error.message; - } finally { - body.classList.remove("loading"); + if (review.errorKey || !hasReviewChanged(state.userReview, review)) return; + + state.busy = true; + state.editorError = ""; + renderComposer(); + + try { + const result = await requestJson(Url.join(config.API_BASE, "comment"), { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + plugin_id: pluginId, + comment: review.comment, + vote: review.vote, + }), + }); + const previousReview = state.userReview; + state.userReview = { + ...previousReview, + id: result.id, + plugin_id: pluginId, + user_id: state.user.id, + name: state.user.name, + github: state.user.github, + comment: result.comment, + vote: result.vote, + updated_at: new Date().toISOString(), + }; + state.reviews = [ + state.userReview, + ...state.reviews.filter( + (item) => + item.id !== state.userReview.id && item.user_id !== state.user.id, + ), + ]; + state.stats = updateReviewStats( + state.stats, + previousReview, + state.userReview, + ); + onStatsChange(state.stats); + state.busy = false; + state.expanded = false; + state.editorError = ""; + state.resumeDraftAfterSignIn = false; + renderComposer(); + renderReviews(); + toast(strings.success); + } catch (error) { + state.busy = false; + if (error.status === 401) { + state.user = null; + state.expanded = false; + state.resumeDraftAfterSignIn = true; + state.editorError = strings["plugin-review:session-expired-review"]; + renderComposer(); + } else { + state.editorError = strings["plugin-review:save-failed"]; + renderComposer({ focus: true }); + } + } + } + + async function deleteReview() { + if (state.busy || !state.userReview?.id) return; + const approved = await confirm( + strings.delete, + strings["plugin-review:delete-confirmation"], + false, + { + direction: getLocaleDirection(locale), + aboveOverlay: true, + }, + ); + if (!approved || state.closed) return; + + state.busy = true; + state.editorError = ""; + renderComposer(); + + try { + const previousReview = state.userReview; + await requestJson( + Url.join(config.API_BASE, "comment", previousReview.id), + { + method: "DELETE", + headers: { "Content-Type": "application/json" }, + }, + ); + state.reviews = state.reviews.filter( + (item) => + item.id !== previousReview.id && item.user_id !== state.user.id, + ); + state.stats = updateReviewStats(state.stats, previousReview, null); + onStatsChange(state.stats); + state.userReview = null; + state.busy = false; + state.expanded = false; + renderComposer(); + renderReviews(); + toast(strings.success); + } catch (error) { + state.busy = false; + if (error.status === 401) { + state.user = null; + state.expanded = false; + state.editorError = strings["plugin-review:session-expired-continue"]; + renderComposer(); + } else { + state.editorError = strings["plugin-review:delete-failed"]; + renderComposer({ focus: true }); + } + } + } + + async function retryReviews() { + body.el.classList.add("loading"); + state.reviewListError = null; + try { + state.reviews = await loadReviews(); + } catch (error) { + state.reviewListError = error; + } finally { + renderReviews(); + } + } + + function loadReviews() { + return fsOperation(config.API_BASE, `/comments/${pluginId}`).readFile( + "json", + ); + } + + async function loadUserReview() { + const review = await requestJson( + Url.join(config.API_BASE, "user", "comment", pluginId), + ); + return review?.id ? review : null; + } + + async function requestJson(url, options) { + const response = await fetch(url, options); + const result = await response.json().catch(() => ({})); + if (!response.ok) { + const error = new Error(); + error.status = response.status; + throw error; + } + return result; } function closeReviews() { + if (state.closed) return; + state.closed = true; + removeDragListeners(); actionStack.remove("reviews"); - container.classList.add("hide"); + container.el.classList.add("hide"); setTimeout(() => { - mask.el.remove(); - container.el.remove(); + mask.el?.remove(); + container.el?.remove(); }, 300); } @@ -519,32 +1095,38 @@ async function showReviews(pluginId, author) { * @param {TouchEvent} e */ function ontouchstart(e) { + if (state.closed || e.touches.length !== 1) return; + removeDragListeners(); const { clientY } = e.touches[0]; const { top } = container.el.getBoundingClientRect(); const y = clientY - top; let dy = 0; - container.style.transition = "none"; + container.el.style.transition = "none"; document.addEventListener("touchmove", ontouchmove); document.addEventListener("touchend", ontouchend); document.addEventListener("touchcancel", ontouchend); + removeDragListeners = () => { + document.removeEventListener("touchmove", ontouchmove); + document.removeEventListener("touchend", ontouchend); + document.removeEventListener("touchcancel", ontouchend); + }; function ontouchmove(e) { + if (e.touches.length !== 1) return; const { clientY } = e.touches[0]; dy = clientY - top - y; if (dy < 0) dy = 0; - container.style.transform = `translateY(${dy}px)`; + container.el.style.transform = `translateY(${dy}px)`; } function ontouchend() { - document.removeEventListener("touchmove", ontouchmove); - document.removeEventListener("touchend", ontouchend); - document.removeEventListener("touchcancel", ontouchcancel); + removeDragListeners(); if (dy < 100) { - container.style.transition = "transform 0.3s ease-in-out"; - container.style.transform = "translateY(0)"; + container.el.style.transition = "transform 0.3s ease-in-out"; + container.el.style.transform = "translateY(0)"; return; } closeReviews(); @@ -552,50 +1134,102 @@ async function showReviews(pluginId, author) { } } +function ReviewAvatar({ user, className = "review-avatar" }) { + const avatarUrl = resolveReviewAvatarUrl(user); + return ( + + ); +} + +function autosizeReviewInput(textarea) { + textarea.style.height = "auto"; + textarea.style.height = `${Math.min(textarea.scrollHeight, 144)}px`; +} + +function getReviewString(key, replacements = {}) { + let value = strings[key] || key; + for (const [name, replacement] of Object.entries(replacements)) { + value = value.replaceAll(`{${name}}`, String(replacement)); + } + return value; +} + function Review({ name, github, + avatar_url: avatarUrl, + updated_at: updatedAt, vote, comment, author, author_reply: authorReply, + isOwn, + onEdit, + locale, }) { - let dp = Url.join(config.API_BASE, `../user.png`); - let voteImage = Ref(); - let review = Ref(); - - if (github) { - dp = `https://avatars.githubusercontent.com/${github}`; - } - - if (vote === 1) { - voteImage.style.backgroundImage = `url(${Url.join(config.API_BASE, `../thumbs-up.gif`)})`; - } else if (vote === -1) { - voteImage.style.backgroundImage = `url(${Url.join(config.API_BASE, `../thumbs-down.gif`)})`; - } - - if (authorReply) { - setTimeout(() => { - review.append( -

- {authorReply} -

, - ); - }, 0); - } - + const reviewDate = formatReviewDate(updatedAt, Date.now(), locale); + const hasComment = typeof comment === "string" && Boolean(comment.trim()); return ( -
+
- - {name} - + /> + + + {name} + {isOwn ? {strings["plugin-review:you"]} : null} + + {reviewDate ? ( + + ) : null} + + {vote ? ( + + + + ) : null} + {isOwn ? ( + + ) : null}
-

{comment}

-
+ {hasComment ? ( +

{comment}

+ ) : isOwn && Number(vote) === 1 ? ( +

+ {strings["plugin-review:recommended"]} +

+ ) : null} + {authorReply ? ( +

+ {authorReply} +

+ ) : null} + ); } diff --git a/src/pages/plugin/reviewUtils.js b/src/pages/plugin/reviewUtils.js new file mode 100644 index 0000000000..73722c6d5a --- /dev/null +++ b/src/pages/plugin/reviewUtils.js @@ -0,0 +1,180 @@ +export const REVIEW_MAX_COMMENT_LENGTH = 250; + +const SECOND = 1000; +const MINUTE = 60 * SECOND; +const HOUR = 60 * MINUTE; +const DAY = 24 * HOUR; + +function parseReviewDate(value) { + if (typeof value !== "string" || !value.trim()) return null; + + const trimmed = value.trim(); + const normalized = /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}(?:\.\d+)?$/.test( + trimmed, + ) + ? `${trimmed.replace(" ", "T")}Z` + : trimmed; + const date = new Date(normalized); + return Number.isNaN(date.getTime()) ? null : date; +} + +export function formatReviewDate(value, now = Date.now(), locale = "en-US") { + const date = parseReviewDate(value); + const currentTime = now instanceof Date ? now.getTime() : Number(now); + if (!date || !Number.isFinite(currentTime)) return null; + + const difference = date.getTime() - currentTime; + const absoluteDifference = Math.abs(difference); + let unit = "second"; + let amount = 0; + + if (absoluteDifference < 45 * SECOND) { + amount = 0; + } else if (absoluteDifference < 90 * SECOND) { + unit = "minute"; + amount = Math.sign(difference); + } else if (absoluteDifference < 45 * MINUTE) { + unit = "minute"; + amount = Math.round(difference / MINUTE); + } else if (absoluteDifference < 90 * MINUTE) { + unit = "hour"; + amount = Math.sign(difference); + } else if (absoluteDifference < 22 * HOUR) { + unit = "hour"; + amount = Math.round(difference / HOUR); + } else if (absoluteDifference < 36 * HOUR) { + unit = "day"; + amount = Math.sign(difference); + } else if (absoluteDifference < 26 * DAY) { + unit = "day"; + amount = Math.round(difference / DAY); + } else if (absoluteDifference < 45 * DAY) { + unit = "month"; + amount = Math.sign(difference); + } else if (absoluteDifference < 320 * DAY) { + unit = "month"; + amount = Math.round(difference / (30 * DAY)); + } else if (absoluteDifference < 548 * DAY) { + unit = "year"; + amount = Math.sign(difference); + } else { + unit = "year"; + amount = Math.round(difference / (365 * DAY)); + } + + const relative = new Intl.RelativeTimeFormat(locale, { + numeric: "auto", + }).format(amount, unit); + + return { + dateTime: date.toISOString(), + relative, + title: date.toLocaleString(locale, { + dateStyle: "medium", + timeStyle: "short", + }), + }; +} + +export function resolveReviewAvatarUrl(user = {}) { + const avatarUrl = + typeof user?.avatar_url === "string" ? user.avatar_url.trim() : ""; + if (avatarUrl) return avatarUrl; + + const github = typeof user?.github === "string" ? user.github.trim() : ""; + return github ? `https://avatars.githubusercontent.com/${github}` : null; +} + +function hasSameId(left, right) { + if (left === null || left === undefined) return false; + if (right === null || right === undefined) return false; + return String(left) === String(right); +} + +export function partitionPluginReviews(reviews = [], currentReview, userId) { + const reviewList = Array.isArray(reviews) ? reviews : []; + const ownReview = + currentReview || + reviewList.find((review) => hasSameId(review?.user_id, userId)) || + null; + const communityReviews = reviewList.filter((review) => { + if (!review?.comment?.trim()) return false; + if (hasSameId(review.user_id, userId)) return false; + if (hasSameId(review.id, ownReview?.id)) return false; + return !hasSameId(review.user_id, ownReview?.user_id); + }); + + return { ownReview, communityReviews }; +} + +export function normalizeReviewDraft(draft = {}) { + const { comment = "", vote = 0 } = draft || {}; + return { + comment: typeof comment === "string" ? comment.trim() : "", + vote: [-1, 0, 1].includes(Number(vote)) ? Number(vote) : 0, + }; +} + +export function validateReviewDraft(draft) { + const normalized = normalizeReviewDraft(draft); + + if (normalized.comment.length > REVIEW_MAX_COMMENT_LENGTH) { + return { + ...normalized, + errorKey: "plugin-review:error-max-length", + }; + } + if (normalized.vote === -1 && !normalized.comment) { + return { + ...normalized, + errorKey: "plugin-review:error-downvote-comment", + }; + } + if (normalized.vote === 0 && !normalized.comment) { + return { ...normalized, errorKey: "plugin-review:error-empty" }; + } + + return normalized; +} + +export function hasReviewChanged(previousReview, nextReview) { + const previous = normalizeReviewDraft(previousReview); + const next = normalizeReviewDraft(nextReview); + return previous.comment !== next.comment || previous.vote !== next.vote; +} + +export function updateReviewStats(stats, previousReview, nextReview) { + const previous = normalizeReviewDraft(previousReview); + const next = normalizeReviewDraft(nextReview); + let votesUp = Number(stats?.votesUp) || 0; + let votesDown = Number(stats?.votesDown) || 0; + let commentCount = Number(stats?.commentCount) || 0; + + if (previous.vote === 1) votesUp -= 1; + if (previous.vote === -1) votesDown -= 1; + if (next.vote === 1) votesUp += 1; + if (next.vote === -1) votesDown += 1; + if (previous.comment) commentCount -= 1; + if (next.comment) commentCount += 1; + + return { + votesUp: Math.max(0, votesUp), + votesDown: Math.max(0, votesDown), + commentCount: Math.max(0, commentCount), + }; +} + +export function getRatingLabel(votesUp, votesDown) { + const up = Number(votesUp) || 0; + const down = Number(votesDown) || 0; + const total = up + down; + return total ? `${Math.round((up / total) * 100)}%` : "unrated"; +} + +export function getRatingClass(rating) { + if (rating === "unrated") return "rating-value"; + const value = Number.parseInt(rating, 10); + if (value >= 80) return "rating-value rating-high"; + if (value >= 50) return "rating-value rating-medium"; + return "rating-value rating-low"; +} diff --git a/tests/unit/confirm.test.js b/tests/unit/confirm.test.js new file mode 100644 index 0000000000..cec4ae2d48 --- /dev/null +++ b/tests/unit/confirm.test.js @@ -0,0 +1,103 @@ +// @vitest-environment happy-dom + +import tag from "html-tag-js"; +import { + afterAll, + afterEach, + beforeEach, + describe, + expect, + it, + vi, +} from "vitest"; + +const mocks = vi.hoisted(() => ({ + push: vi.fn(), + remove: vi.fn(), + restoreTheme: vi.fn(), +})); + +vi.mock("components/checkbox", () => ({ default: () => null })); +vi.mock("dompurify", () => ({ + default: { sanitize: vi.fn((value) => value) }, +})); +vi.mock("lib/actionStack", () => ({ + default: { + push: mocks.push, + remove: mocks.remove, + }, +})); +vi.mock("lib/restoreTheme", () => ({ default: mocks.restoreTheme })); + +import confirm from "dialogs/confirm"; + +const originalApp = globalThis.app; +const originalStrings = globalThis.strings; +const originalTag = globalThis.tag; + +function restoreGlobal(name, value) { + if (value === undefined) { + Reflect.deleteProperty(globalThis, name); + } else { + globalThis[name] = value; + } +} + +function getDialog() { + return document.querySelector(".prompt.confirm"); +} + +function getButtons() { + return document.querySelectorAll(".button-container button"); +} + +describe("confirm dialog layering", () => { + beforeEach(() => { + vi.useFakeTimers(); + vi.clearAllMocks(); + document.body.replaceChildren(); + globalThis.tag = tag; + globalThis.app = document.body; + globalThis.strings = { ok: "OK", cancel: "Cancel" }; + }); + + afterEach(() => { + vi.runOnlyPendingTimers(); + vi.useRealTimers(); + document.body.replaceChildren(); + }); + + afterAll(() => { + restoreGlobal("app", originalApp); + restoreGlobal("strings", originalStrings); + restoreGlobal("tag", originalTag); + }); + + it("keeps the default layer and resolves false when cancelled", async () => { + const result = confirm("Delete", "Delete this review?"); + const dialog = getDialog(); + + expect(dialog).not.toBeNull(); + expect(dialog.className).toBe("prompt confirm"); + + getButtons()[0].click(); + + await expect(result).resolves.toBe(false); + }); + + it("applies the overlay layer without losing RTL and resolves true", async () => { + const result = confirm("Delete", "Delete this review?", false, { + direction: "rtl", + aboveOverlay: true, + }); + const dialog = getDialog(); + + expect(dialog).not.toBeNull(); + expect(dialog.className).toBe("prompt confirm above-overlay"); + expect(dialog.dir).toBe("rtl"); + + getButtons()[1].click(); + + await expect(result).resolves.toBe(true); + }); +}); diff --git a/tests/unit/pluginReview.test.js b/tests/unit/pluginReview.test.js new file mode 100644 index 0000000000..efb70b1bbc --- /dev/null +++ b/tests/unit/pluginReview.test.js @@ -0,0 +1,183 @@ +import { describe, expect, it } from "vitest"; +import { getIntlLocale, getLocaleDirection } from "lib/lang"; +import { + formatReviewDate, + getRatingClass, + getRatingLabel, + hasReviewChanged, + normalizeReviewDraft, + partitionPluginReviews, + resolveReviewAvatarUrl, + updateReviewStats, + validateReviewDraft, +} from "pages/plugin/reviewUtils"; + +describe("plugin review dates", () => { + it("formats database timestamps as website-style relative dates", () => { + const formatted = formatReviewDate( + "2026-08-26 12:00:00", + Date.parse("2026-08-28T12:00:00Z"), + "en-US", + ); + + expect(formatted?.dateTime).toBe("2026-08-26T12:00:00.000Z"); + expect(formatted?.relative).toBe("2 days ago"); + expect(formatted?.title).toBeTruthy(); + }); + + it("uses the selected locale for relative and absolute dates", () => { + const value = "2026-08-26 12:00:00"; + const now = Date.parse("2026-08-28T12:00:00Z"); + const formatted = formatReviewDate(value, now, "fr-FR"); + const date = new Date("2026-08-26T12:00:00Z"); + + expect(formatted?.relative).toBe( + new Intl.RelativeTimeFormat("fr-FR", { numeric: "auto" }).format( + -2, + "day", + ), + ); + expect(formatted?.title).toBe( + date.toLocaleString("fr-FR", { + dateStyle: "medium", + timeStyle: "short", + }), + ); + }); + + it("normalizes Acode-specific locale codes", () => { + expect(getIntlLocale("pu-in")).toBe("pa-IN"); + expect(getIntlLocale("ir-fa")).toBe("fa-IR"); + expect(getIntlLocale("mm-unicode")).toBe("my-MM"); + expect(getIntlLocale("mm-zawgyi")).toBe("my-MM"); + expect(getLocaleDirection("fa-IR")).toBe("rtl"); + expect(getLocaleDirection("ar-YE")).toBe("rtl"); + expect(getLocaleDirection("he-IL")).toBe("rtl"); + expect(getLocaleDirection("de-DE")).toBe("ltr"); + }); + + it("hides missing or invalid review dates", () => { + expect(formatReviewDate()).toBeNull(); + expect(formatReviewDate("not-a-date")).toBeNull(); + }); +}); + +describe("plugin review avatars", () => { + it("prefers an explicit avatar and falls back to GitHub", () => { + expect( + resolveReviewAvatarUrl({ + avatar_url: " https://example.com/avatar.png ", + github: "acode-foundation", + }), + ).toBe("https://example.com/avatar.png"); + expect(resolveReviewAvatarUrl({ github: " acode-foundation " })).toBe( + "https://avatars.githubusercontent.com/acode-foundation", + ); + }); + + it("uses the local placeholder when no avatar is available", () => { + expect(resolveReviewAvatarUrl()).toBeNull(); + expect(resolveReviewAvatarUrl({ avatar_url: " ", github: " " })).toBeNull(); + }); +}); + +describe("plugin review ordering", () => { + it("pins and deduplicates the current user's review across id types", () => { + const reviews = [ + { id: 1, user_id: 10, comment: "First" }, + { id: 2, user_id: "7", comment: "Mine from the list" }, + { id: 3, user_id: 11, comment: "Second" }, + ]; + const currentReview = { + id: "2", + user_id: 7, + comment: "", + vote: 1, + }; + + expect(partitionPluginReviews(reviews, currentReview, "7")).toEqual({ + ownReview: currentReview, + communityReviews: [reviews[0], reviews[2]], + }); + }); +}); + +describe("plugin review draft", () => { + it("normalizes whitespace and preserves valid votes", () => { + expect(normalizeReviewDraft({ comment: " Very useful ", vote: "1" })).toEqual( + { + comment: "Very useful", + vote: 1, + }, + ); + }); + + it("supports an upvote without text and validates negative feedback", () => { + expect(validateReviewDraft({ vote: 1 })).toEqual({ comment: "", vote: 1 }); + expect(validateReviewDraft({ comment: " ", vote: -1 }).errorKey).toBe( + "plugin-review:error-downvote-comment", + ); + expect(validateReviewDraft({ comment: " ", vote: 0 }).errorKey).toBe( + "plugin-review:error-empty", + ); + }); + + it("enforces the 250 character limit", () => { + expect(validateReviewDraft({ comment: "x".repeat(250), vote: 0 })).toEqual({ + comment: "x".repeat(250), + vote: 0, + }); + expect( + validateReviewDraft({ comment: "x".repeat(251), vote: 0 }).errorKey, + ).toBe("plugin-review:error-max-length"); + }); + + it("compares normalized drafts to prevent duplicate submissions", () => { + expect( + hasReviewChanged( + { comment: "Useful", vote: 1 }, + { comment: " Useful ", vote: "1" }, + ), + ).toBe(false); + expect( + hasReviewChanged( + { comment: "Useful", vote: 1 }, + { comment: "Updated", vote: 1 }, + ), + ).toBe(true); + }); +}); + +describe("plugin review metrics", () => { + it("moves votes and comment counts without inflation", () => { + expect( + updateReviewStats( + { votesUp: 8, votesDown: 2, commentCount: 4 }, + { vote: 1, comment: "Old" }, + { vote: -1, comment: "New" }, + ), + ).toEqual({ votesUp: 7, votesDown: 3, commentCount: 4 }); + }); + + it("handles vote-only reviews and deletion", () => { + const added = updateReviewStats( + { votesUp: 0, votesDown: 0, commentCount: 0 }, + null, + { vote: 1, comment: "" }, + ); + expect(added).toEqual({ votesUp: 1, votesDown: 0, commentCount: 0 }); + expect(updateReviewStats(added, { vote: 1 }, null)).toEqual({ + votesUp: 0, + votesDown: 0, + commentCount: 0, + }); + }); + + it("formats rating labels and visual states", () => { + expect(getRatingLabel(0, 0)).toBe("unrated"); + expect(getRatingLabel(8, 2)).toBe("80%"); + expect(getRatingClass("80%")).toContain("rating-high"); + expect(getRatingClass("50%")).toContain("rating-medium"); + expect(getRatingClass("49%")).toContain("rating-low"); + }); +}); From 2a17db0221ae18eaec5183ce8014ce75538b5fdc Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Sat, 29 Aug 2026 09:40:11 +0000 Subject: [PATCH 15/38] Improve selection menu UX and plugin action overflow (#2813) * feat(editor): improve mobile selection menu overflow UX * fix(editor): prevent selection actions during overflow scrolling * fix(editor): validate pointer displacement on release --- src/cm/selectionMenuUtils.ts | 91 ++++++ src/cm/touchSelectionMenu.js | 365 ++++++++++++++++++++++--- src/lib/selectionMenu.js | 60 +++- src/main.scss | 154 ++++++++++- tests/unit/selectionMenuButton.test.ts | 89 ++++++ tests/unit/selectionMenuUtils.test.ts | 34 ++- 6 files changed, 737 insertions(+), 56 deletions(-) create mode 100644 tests/unit/selectionMenuButton.test.ts diff --git a/src/cm/selectionMenuUtils.ts b/src/cm/selectionMenuUtils.ts index 414dbfa836..65abc0ceda 100644 --- a/src/cm/selectionMenuUtils.ts +++ b/src/cm/selectionMenuUtils.ts @@ -1,4 +1,5 @@ export interface SelectionMenuItem { + id?: string; mode?: "selected" | "all"; readOnly?: boolean; } @@ -8,6 +9,70 @@ export interface SelectionMenuFilterOptions { hasSelection: boolean; } +const POINTER_MOVE_TOLERANCE = 8; + +/** Preserve editor focus during a pointer press and activate on release. */ +export function bindSelectionMenuButton( + button: HTMLButtonElement, + onActivate: (event: Event) => void, +): void { + let activePointerId: number | null = null; + let pointerStart: { x: number; y: number } | null = null; + + const stopEvent = (event: Event) => { + event.preventDefault(); + event.stopPropagation(); + }; + const clearPointer = () => { + activePointerId = null; + pointerStart = null; + button.classList.remove("is-pressed"); + }; + const pointerMoved = (event: PointerEvent) => { + if (!pointerStart) return false; + const xDistance = event.clientX - pointerStart.x; + const yDistance = event.clientY - pointerStart.y; + return ( + xDistance ** 2 + yDistance ** 2 > + POINTER_MOVE_TOLERANCE ** 2 + ); + }; + + button.addEventListener("pointerdown", (event) => { + if (event.isPrimary === false) return; + if (event.pointerType === "mouse" && event.button !== 0) return; + activePointerId = event.pointerId; + pointerStart = { x: event.clientX, y: event.clientY }; + button.classList.add("is-pressed"); + stopEvent(event); + try { + button.setPointerCapture?.(event.pointerId); + } catch { + // Pointer capture is optional in older Android WebViews. + } + }); + + button.addEventListener("pointermove", (event) => { + if (event.pointerId !== activePointerId || !pointerStart) return; + if (pointerMoved(event)) clearPointer(); + }); + + button.addEventListener("pointerup", (event) => { + if (event.pointerId !== activePointerId || !pointerStart) return; + const moved = pointerMoved(event); + clearPointer(); + stopEvent(event); + if (!moved) onActivate(event); + }); + + button.addEventListener("pointercancel", clearPointer); + button.addEventListener("lostpointercapture", clearPointer); + button.addEventListener("click", (event) => { + stopEvent(event); + if (event.detail === 0) onActivate(event); + }); +} + /** Filter selection actions using Acode's read-only and selection rules. */ export function filterSelectionMenuItems( items: readonly T[], @@ -23,3 +88,29 @@ export function filterSelectionMenuItems( return true; }); } + +const SELECTION_PRIMARY_ACTIONS = new Set([ + "copy", + "cut", + "paste", + "select-all", +]); +const CARET_PRIMARY_ACTIONS = new Set(["paste", "select-all"]); + +/** Keep the touch toolbar compact by moving secondary/plugin actions into More. */ +export function partitionSelectionMenuItems( + items: readonly T[], + options: Pick, +): { primary: T[]; overflow: T[] } { + const primaryIds = options.hasSelection + ? SELECTION_PRIMARY_ACTIONS + : CARET_PRIMARY_ACTIONS; + const primary: T[] = []; + const overflow: T[] = []; + + for (const item of items) { + (primaryIds.has(item.id ?? "") ? primary : overflow).push(item); + } + + return { primary, overflow }; +} diff --git a/src/cm/touchSelectionMenu.js b/src/cm/touchSelectionMenu.js index f99badae35..fc004d5327 100644 --- a/src/cm/touchSelectionMenu.js +++ b/src/cm/touchSelectionMenu.js @@ -1,3 +1,4 @@ +import { LSPPlugin } from "@codemirror/lsp-client"; import { EditorSelection } from "@codemirror/state"; import { focusEditorIfEditable, @@ -5,8 +6,13 @@ import { resolveReadOnlyContextSelection, shouldCommitReadOnlyTap, } from "cm/editorReadOnly"; -import { filterSelectionMenuItems } from "cm/selectionMenuUtils"; +import { + bindSelectionMenuButton, + filterSelectionMenuItems, + partitionSelectionMenuItems, +} from "cm/selectionMenuUtils"; import selectionMenu from "lib/selectionMenu"; +import { animate } from "motion"; export { filterSelectionMenuItems } from "cm/selectionMenuUtils"; @@ -18,6 +24,7 @@ const MENU_SHOW_DELAY = 120; const MENU_CARET_GAP = 10; const MENU_SELECTION_GAP = 12; const MENU_HANDLE_CLEARANCE = 28; +const OVERFLOW_GRID_THRESHOLD = 10; const TAP_MAX_COLUMN_DELTA = 2; const TAP_MAX_POS_DELTA = 2; @@ -127,6 +134,19 @@ function clamp(value, min, max) { return Math.max(min, Math.min(max, value)); } +function hasCodeActionProvider(view) { + return LSPPlugin.getAll(view, "codeAction").some( + (plugin) => !!plugin.client.serverCapabilities?.codeActionProvider, + ); +} + +function animationsDisabled() { + return ( + document.body.classList.contains("no-animation") || + globalThis.matchMedia?.("(prefers-reduced-motion: reduce)").matches + ); +} + export default function createTouchSelectionMenu(view, options = {}) { return new TouchSelectionMenuController(view, options); } @@ -149,6 +169,11 @@ class TouchSelectionMenuController { #handlingMenuAction = false; #menuShowTimer = null; #tooltipObserver = null; + #dismissedSelection = null; + #renderedMenuKey = ""; + #menuAnchor = null; + #menuAnimation = null; + #viewAnimations = []; constructor(view, options = {}) { this.#view = view; @@ -226,6 +251,7 @@ class TouchSelectionMenuController { this.#pointerSelectionSession = null; this.#readOnlyTapSession = null; this.#pendingPointerSelectionClick = null; + this.#dismissedSelection = null; this.#menuRequested = false; this.#isPointerInteracting = false; this.#isScrolling = false; @@ -238,6 +264,7 @@ class TouchSelectionMenuController { setSelection(value) { if (!this.#enabled) return; if (value) { + this.#dismissedSelection = null; this.#menuRequested = true; } this.onStateChanged({ @@ -254,6 +281,7 @@ class TouchSelectionMenuController { this.#hideMenu(); return; } + this.#dismissedSelection = null; this.#scheduleMenuShow(MENU_SHOW_DELAY); } @@ -279,6 +307,12 @@ class TouchSelectionMenuController { onStateChanged(meta = {}) { if (!this.#enabled) return; if (meta.selectionChanged) this.#cancelReadOnlyTap(); + if ( + meta.selectionChanged && + this.#dismissedSelection !== this.#selectionSignature() + ) { + this.#dismissedSelection = null; + } if (this.#handlingMenuAction) return; if (!this.#shouldShowMenu()) { if (!this.#hasSelection()) { @@ -298,6 +332,7 @@ class TouchSelectionMenuController { this.#pointerSelectionSession = null; this.#readOnlyTapSession = null; this.#pendingPointerSelectionClick = null; + this.#dismissedSelection = null; this.#menuRequested = false; this.#isPointerInteracting = false; this.#isScrolling = false; @@ -321,6 +356,7 @@ class TouchSelectionMenuController { } event.preventDefault(); event.stopPropagation(); + this.#dismissedSelection = null; this.#menuRequested = true; this.#scheduleMenuShow(MENU_SHOW_DELAY); }; @@ -337,6 +373,7 @@ class TouchSelectionMenuController { return; } if (target instanceof Node && this.#view.dom.contains(target)) { + this.#dismissedSelection = null; this.#capturePointerSelection(event); this.#captureReadOnlyTap(event); this.#isPointerInteracting = true; @@ -549,6 +586,12 @@ class TouchSelectionMenuController { #shouldShowMenu() { if (this.#isScrolling || this.#isPointerInteracting) return false; if (!this.#view.hasFocus && !this.#isReadOnly()) return false; + if ( + !this.#menuRequested && + this.#dismissedSelection === this.#selectionSignature() + ) { + return false; + } return this.#hasSelection() || this.#menuRequested; } @@ -616,52 +659,248 @@ class TouchSelectionMenuController { } #showMenu(anchor) { + this.#menuAnchor = anchor; const hasSelection = this.#hasSelection(); - const items = filterSelectionMenuItems(selectionMenu(), { - readOnly: this.#isReadOnly(), - hasSelection, - }); + const items = filterSelectionMenuItems( + selectionMenu({ + codeActionsAvailable: hasCodeActionProvider(this.#view), + }), + { + readOnly: this.#isReadOnly(), + hasSelection, + }, + ); - this.$menu.innerHTML = ""; if (!items.length) { this.#menuRequested = false; this.#hideMenu(true); return; } - items.forEach(({ onclick, text }) => { - const $item = document.createElement("div"); - if (typeof text === "string") { - $item.textContent = text; - } else if (text instanceof Node) { - $item.append(text.cloneNode(true)); - } - let handled = false; - const runAction = (event) => { - if (handled) return; - handled = true; - event.preventDefault(); - event.stopPropagation(); - this.#handlingMenuAction = true; - try { - onclick?.(); - } finally { - this.#handlingMenuAction = false; - this.#menuRequested = false; - this.#hideMenu(); - focusEditorIfEditable(this.#view); - } - }; - $item.addEventListener("pointerdown", runAction); - $item.addEventListener("click", runAction); - this.$menu.append($item); - }); + const menuKey = `${hasSelection}:${items + .map((item) => item.id || this.#getItemLabel(item)) + .join("|")}`; + if (menuKey !== this.#renderedMenuKey) { + const groups = partitionSelectionMenuItems(items, { hasSelection }); + this.#renderMenu(groups.primary, groups.overflow); + this.#renderedMenuKey = menuKey; + } if (!this.$menu.isConnected) { this.#container.append(this.$menu); } + const isOpening = !this.#menuActive; + this.#positionMenu(anchor); + this.#menuActive = true; + this.#menuRequested = false; + if (isOpening) this.#animateMenuIn(); + } + + #renderMenu(primaryItems, overflowItems) { + this.$menu.replaceChildren(); + this.$menu.setAttribute("aria-label", "Text selection actions"); + + const $primary = document.createElement("div"); + $primary.className = "cursor-menu__primary"; + $primary.setAttribute("role", "toolbar"); + for (const item of primaryItems) { + $primary.append(this.#createActionButton(item, false)); + } + + if (overflowItems.length) { + const $overflow = document.createElement("div"); + $overflow.className = "cursor-menu__overflow"; + if (overflowItems.length > OVERFLOW_GRID_THRESHOLD) { + $overflow.classList.add("cursor-menu__overflow--grid"); + } + $overflow.setAttribute("role", "toolbar"); + $overflow.setAttribute("aria-label", "More text actions"); + $overflow.hidden = true; + + const backLabel = globalThis.strings?.back || "Back"; + const $back = document.createElement("button"); + $back.type = "button"; + $back.className = "cursor-menu__action cursor-menu__back"; + $back.setAttribute("aria-label", backLabel); + $back.append(this.#createIcon("arrow_back")); + + const $overflowActions = document.createElement("div"); + $overflowActions.className = "cursor-menu__overflow-actions"; + for (const item of overflowItems) { + $overflowActions.append(this.#createActionButton(item, true)); + } + $overflow.append($back, $overflowActions); + + const moreLabel = globalThis.strings?.more || "More"; + const $more = document.createElement("button"); + $more.type = "button"; + $more.className = "cursor-menu__action cursor-menu__more"; + $more.setAttribute("aria-label", moreLabel); + $more.setAttribute("aria-expanded", "false"); + $more.append(this.#createIcon("keyboard_control")); + bindSelectionMenuButton($more, () => { + $more.setAttribute("aria-expanded", "true"); + this.#setOverflowExpanded($primary, $overflow, true); + }); + bindSelectionMenuButton($back, () => { + $more.setAttribute("aria-expanded", "false"); + this.#setOverflowExpanded($primary, $overflow, false); + }); + + $primary.append($more); + this.$menu.append($primary, $overflow); + return; + } + + this.$menu.append($primary); + } + + #createActionButton(item, isOverflow) { + const $item = document.createElement("button"); + const label = this.#getItemLabel(item); + $item.type = "button"; + $item.className = `cursor-menu__action${ + isOverflow ? " cursor-menu__overflow-action" : "" + }`; + $item.setAttribute("aria-label", label); + if (label !== "More action") $item.title = label; + + if (isOverflow) { + if (item.text instanceof Node) { + $item.append(item.text.cloneNode(true)); + } else { + $item.textContent = label; + } + } else if (item.text instanceof Node) { + $item.append(item.text.cloneNode(true)); + } else { + $item.textContent = label; + } + + let handled = false; + const runAction = (event) => { + if (handled) return; + handled = true; + event.preventDefault(); + event.stopPropagation(); + this.#clearMenuShowTimer(); + cancelAnimationFrame(this.#stateSyncRaf); + this.#stateSyncRaf = 0; + this.#handlingMenuAction = true; + try { + item.onclick?.(); + } finally { + this.#handlingMenuAction = false; + this.#menuRequested = false; + this.#dismissedSelection = this.#selectionSignature(); + this.#hideMenu(); + focusEditorIfEditable(this.#view); + } + }; + bindSelectionMenuButton($item, runAction); + return $item; + } + + #animateMenuIn() { + this.#menuAnimation?.cancel?.(); + if (animationsDisabled()) { + this.$menu.style.opacity = "1"; + this.$menu.style.transform = "none"; + return; + } + + const y = this.$menu.dataset.placement === "above" ? 3 : -3; + this.#menuAnimation = animate( + this.$menu, + { + opacity: [0, 1], + scale: [0.96, 1], + y: [y, 0], + }, + { duration: 0.14, ease: "easeOut" }, + ); + } + + #setOverflowExpanded($primary, $overflow, expanded) { + for (const animation of this.#viewAnimations) animation.cancel?.(); + this.#viewAnimations = []; + const initialRect = this.$menu.getBoundingClientRect(); + const outgoing = expanded ? $primary : $overflow; + const incoming = expanded ? $overflow : $primary; + const direction = expanded ? 1 : -1; + this.$menu.style.width = `${this.$menu.getBoundingClientRect().width}px`; + incoming.hidden = false; + incoming.style.visibility = ""; + incoming.style.pointerEvents = "auto"; + outgoing.style.pointerEvents = "none"; + + const usesGrid = $overflow.classList.contains( + "cursor-menu__overflow--grid", + ); + const targetHeight = + expanded && usesGrid ? $overflow.getBoundingClientRect().height : 40; + this.$menu.style.height = `${targetHeight}px`; + if (usesGrid && this.#menuAnchor) this.#positionMenu(this.#menuAnchor); + const finalRect = this.$menu.getBoundingClientRect(); + + const finish = () => { + outgoing.hidden = true; + outgoing.style.opacity = ""; + outgoing.style.transform = ""; + outgoing.style.visibility = ""; + incoming.style.opacity = ""; + incoming.style.transform = ""; + this.$menu.style.height = `${targetHeight}px`; + this.$menu.style.transform = ""; + this.#viewAnimations = []; + }; + if (animationsDisabled()) { + finish(); + return; + } + + const outgoingAnimation = animate( + outgoing, + { opacity: [1, 0], x: [0, -6 * direction] }, + { duration: 0.1, ease: "easeIn" }, + ); + const incomingAnimation = animate( + incoming, + { opacity: [0, 1], x: [6 * direction, 0] }, + { duration: 0.14, ease: "easeOut" }, + ); + const animations = [outgoingAnimation, incomingAnimation]; + if (usesGrid && initialRect.height !== finalRect.height) { + animations.push( + animate( + this.$menu, + { + height: [initialRect.height, finalRect.height], + y: [initialRect.top - finalRect.top, 0], + }, + { duration: 0.16, ease: "easeOut" }, + ), + ); + } + this.#viewAnimations = animations; + Promise.allSettled(animations).then(() => { + if (this.#viewAnimations !== animations) return; + finish(); + }); + } + + #positionMenu(anchor) { + if (!this.$menu.isConnected) return; const containerRect = this.#container.getBoundingClientRect(); + this.$menu.style.setProperty( + "--cursor-menu-max-width", + `${Math.max(0, containerRect.width - MENU_MARGIN * 2)}px`, + ); + this.$menu.style.setProperty( + "--cursor-menu-grid-max-height", + `${Math.max(40, Math.min(240, containerRect.height - MENU_MARGIN * 2))}px`, + ); this.$menu.style.left = "0px"; this.$menu.style.top = "0px"; this.$menu.style.visibility = "hidden"; @@ -679,10 +918,11 @@ class TouchSelectionMenuController { containerRect.top + containerRect.height - menuRect.height - MENU_MARGIN; const fitsAbove = topAbove >= minTop; const fitsBelow = topBelow <= maxTop; + const placedAbove = fitsAbove || !fitsBelow; const clamped = clampMenuPosition( { left: preferredLeft, - top: fitsAbove || !fitsBelow ? topAbove : topBelow, + top: placedAbove ? topAbove : topBelow, width: menuRect.width, height: menuRect.height, }, @@ -698,9 +938,29 @@ class TouchSelectionMenuController { this.$menu.style.left = `${clamped.left - containerRect.left}px`; this.$menu.style.top = `${clamped.top - containerRect.top}px`; + this.$menu.dataset.placement = placedAbove ? "above" : "below"; this.$menu.style.visibility = ""; - this.#menuActive = true; - this.#menuRequested = false; + } + + #getItemLabel(item) { + if (item.label) return item.label; + if (typeof item.text === "string" && item.text.trim()) return item.text; + if (item.text instanceof Element) { + return ( + item.text.getAttribute("aria-label") || + item.text.getAttribute("title") || + item.text.textContent?.trim() || + "More action" + ); + } + return "More action"; + } + + #createIcon(name) { + const $icon = document.createElement("span"); + $icon.className = `icon ${name}`; + $icon.setAttribute("aria-hidden", "true"); + return $icon; } #showMenuDeferred() { @@ -771,9 +1031,36 @@ class TouchSelectionMenuController { #hideMenu(force = false) { if (!force && !this.#menuActive && !this.$menu.isConnected) return; + this.#menuAnimation?.cancel?.(); + for (const animation of this.#viewAnimations) animation.cancel?.(); + this.#menuAnimation = null; + this.#viewAnimations = []; if (this.$menu.isConnected) { this.$menu.remove(); } + const overflow = this.$menu.querySelector(".cursor-menu__overflow"); + if (overflow) overflow.hidden = true; + if (overflow) { + overflow.style.opacity = ""; + overflow.style.transform = ""; + overflow.style.pointerEvents = ""; + } + const primary = this.$menu.querySelector(".cursor-menu__primary"); + if (primary) { + primary.hidden = false; + primary.style.opacity = ""; + primary.style.transform = ""; + primary.style.pointerEvents = ""; + } + this.$menu.style.opacity = ""; + this.$menu.style.transform = ""; + this.$menu.style.width = ""; + this.$menu.style.height = "40px"; + this.$menu + .querySelector(".cursor-menu__more") + ?.setAttribute("aria-expanded", "false"); + this.#renderedMenuKey = ""; + this.#menuAnchor = null; this.#menuActive = false; } @@ -817,4 +1104,10 @@ class TouchSelectionMenuController { const selection = this.#view.state.selection.main; return selection.from !== selection.to; } + + #selectionSignature() { + return this.#view.state.selection.ranges + .map((range) => `${range.anchor}:${range.head}`) + .join("|"); + } } diff --git a/src/lib/selectionMenu.js b/src/lib/selectionMenu.js index e697802e6c..333333fb8e 100644 --- a/src/lib/selectionMenu.js +++ b/src/lib/selectionMenu.js @@ -29,21 +29,42 @@ const showCodeActions = async () => { const items = []; -export default function selectionMenu() { +export default function selectionMenu(options = {}) { + const { codeActionsAvailable = true } = options; return [ item( () => exec("copy"), , "selected", true, + { id: "copy", label: getLabel("copy", "Copy") }, + ), + item( + () => exec("cut"), + , + "selected", + false, + { + id: "cut", + label: getLabel("cut", "Cut"), + }, + ), + item( + () => exec("paste"), + , + "all", + false, + { + id: "paste", + label: getLabel("paste", "Paste"), + }, ), - item(() => exec("cut"), , "selected"), - item(() => exec("paste"), , "all"), item( () => exec("selectall"), , "all", true, + { id: "select-all", label: getLabel("select all", "Select all") }, ), appSettings.get("showShareButton") && item( @@ -51,18 +72,26 @@ export default function selectionMenu() { , "selected", true, + { id: "share", label: getLabel("share", "Share") }, ), item( (color) => acode.exec("insert-color", color), , "all", + false, + { id: "insert-color", label: getLabel("insert color", "Insert color") }, ), - item( - () => showCodeActions(), - , - "all", - true, - ), + codeActionsAvailable && + item( + () => showCodeActions(), + , + "all", + true, + { + id: "code-actions", + label: getLabel("code actions", "Code Actions"), + }, + ), ...items, ].filter(Boolean); } @@ -73,15 +102,20 @@ export default function selectionMenu() { * @param {string | HTMLElement} text content of the item * @param {'selected'|'all'} mode mode supported by the item * @param {boolean} readOnly whether to show the item in readOnly mode + * @param {{id?: string, label?: string}} options display metadata */ -selectionMenu.add = (onclick, text, mode, readOnly) => { - items.push(item(onclick, text, mode, readOnly)); +selectionMenu.add = (onclick, text, mode, readOnly, options) => { + items.push(item(onclick, text, mode, readOnly, options)); }; selectionMenu.exec = (command) => { exec(command); }; -function item(onclick, text, mode = "all", readOnly = false) { - return { onclick, text, mode, readOnly }; +function item(onclick, text, mode = "all", readOnly = false, options = {}) { + return { onclick, text, mode, readOnly, ...options }; +} + +function getLabel(key, fallback) { + return globalThis.strings?.[key] || fallback; } diff --git a/src/main.scss b/src/main.scss index d49def88b5..5b04d56e9a 100644 --- a/src/main.scss +++ b/src/main.scss @@ -475,32 +475,61 @@ textarea { } .cursor-menu { + --cursor-menu-max-width: calc(100vw - 20px); + --cursor-menu-grid-max-height: min(40vh, 240px); position: absolute; top: 0; left: 0; + width: max-content; + max-width: var(--cursor-menu-max-width); height: 40px; + margin: 0; + padding: 0; + box-sizing: border-box; background-color: #ffffff; background-color: var(--secondary-color); display: flex; - border-radius: 4px; + flex-direction: column; + border-radius: var(--popup-border-radius); box-shadow: 0 0 8px rgba(0, 0, 0, 0.2); box-shadow: 0 0 8px var(--box-shadow-color); - border: none; border: solid 1px var(--popup-border-color); color: #252525; color: var(--secondary-text-color); transform-origin: left center; + isolation: isolate; + overflow: hidden; z-index: 4; - >span, - >div { + &__primary { + display: flex; + height: 100%; + align-items: stretch; + + &[hidden] { + visibility: hidden; + } + } + + &__action { + appearance: none; display: inline-flex; align-items: center; justify-content: center; + min-width: 50px; height: 100%; + margin: 0; + padding: 0; + border: 0; + border-radius: 0; + outline: none; + background: transparent; + font: inherit; font-size: 0.9em; - min-width: 50px; color: inherit; + cursor: pointer; + -webkit-tap-highlight-color: transparent; + touch-action: manipulation; user-select: none; white-space: nowrap; @@ -508,6 +537,120 @@ textarea { opacity: 0.6; pointer-events: none; } + + &:active { + background-color: rgba(0, 0, 0, 0.2); + } + + &.is-pressed { + background-color: rgba(0, 0, 0, 0.2); + } + + &:focus-visible { + outline: 1px solid currentColor; + outline-offset: -2px; + } + } + + &__more { + width: 50px; + padding: 0; + } + + &__overflow { + position: absolute; + inset: 0; + z-index: 1; + display: flex; + height: 100%; + min-width: 0; + color: inherit; + background-color: inherit; + border-radius: var(--popup-border-radius); + + &[hidden] { + visibility: hidden; + } + + &--grid { + inset: 0 auto auto 0; + display: grid; + grid-template-columns: repeat(auto-fill, minmax(50px, 1fr)); + grid-auto-rows: 40px; + align-content: start; + width: 100%; + height: max-content; + max-height: var(--cursor-menu-grid-max-height); + overflow-x: hidden; + overflow-y: auto; + overscroll-behavior-y: contain; + scrollbar-width: none; + touch-action: pan-y; + + &::-webkit-scrollbar { + display: none; + } + } + } + + &__back { + flex: 0 0 50px; + border-inline-end: solid 1px var(--border-color); + } + + &__overflow-actions { + display: flex; + min-width: 0; + flex: 1; + overflow-x: auto; + overflow-y: hidden; + overscroll-behavior-x: contain; + scrollbar-width: none; + touch-action: pan-x; + + &::-webkit-scrollbar { + display: none; + } + } + + &__overflow--grid &__overflow-actions { + display: contents; + } + + &__overflow--grid &__back { + position: sticky; + top: 0; + z-index: 1; + width: 50px; + height: 40px; + background-color: inherit; + } + + &__overflow--grid &__overflow-action { + height: 40px; + touch-action: pan-y; + } + + &__overflow-action { + flex: 0 0 50px; + justify-content: center; + width: 50px; + height: 100%; + padding: 0; + overflow: hidden; + text-overflow: ellipsis; + touch-action: pan-x; + + > .icon { + color: inherit; + } + + > :not(.icon) { + max-width: 46px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } } } @@ -759,4 +902,3 @@ input[type="search"]::-webkit-search-results-decoration { } } } - diff --git a/tests/unit/selectionMenuButton.test.ts b/tests/unit/selectionMenuButton.test.ts new file mode 100644 index 0000000000..47e0b26b1b --- /dev/null +++ b/tests/unit/selectionMenuButton.test.ts @@ -0,0 +1,89 @@ +// @vitest-environment happy-dom + +import { bindSelectionMenuButton } from "cm/selectionMenuUtils"; +import { describe, expect, it, vi } from "vitest"; + +function pointerEvent( + type: string, + pointerId = 7, + position: { x: number; y: number } = { x: 0, y: 0 }, +) { + return new PointerEvent(type, { + bubbles: true, + button: 0, + cancelable: true, + clientX: position.x, + clientY: position.y, + isPrimary: true, + pointerId, + pointerType: "touch", + }); +} + +describe("selection menu button interaction", () => { + it("preserves pointer-down and activates exactly once on release", () => { + const button = document.createElement("button"); + const activate = vi.fn(); + bindSelectionMenuButton(button, activate); + + const down = pointerEvent("pointerdown"); + button.dispatchEvent(down); + expect(down.defaultPrevented).toBe(true); + expect(button.classList.contains("is-pressed")).toBe(true); + expect(activate).not.toHaveBeenCalled(); + + button.dispatchEvent(pointerEvent("pointerup")); + button.dispatchEvent( + new MouseEvent("click", { bubbles: true, cancelable: true, detail: 1 }), + ); + + expect(button.classList.contains("is-pressed")).toBe(false); + expect(activate).toHaveBeenCalledTimes(1); + }); + + it("supports keyboard clicks and cancels interrupted presses", () => { + const button = document.createElement("button"); + const activate = vi.fn(); + bindSelectionMenuButton(button, activate); + + button.dispatchEvent(pointerEvent("pointerdown")); + button.dispatchEvent(pointerEvent("pointercancel")); + expect(activate).not.toHaveBeenCalled(); + + button.dispatchEvent( + new MouseEvent("click", { bubbles: true, cancelable: true, detail: 0 }), + ); + expect(activate).toHaveBeenCalledTimes(1); + }); + + it("does not activate an action when the pointer becomes a scroll gesture", () => { + const button = document.createElement("button"); + const activate = vi.fn(); + bindSelectionMenuButton(button, activate); + + button.dispatchEvent(pointerEvent("pointerdown", 7, { x: 10, y: 10 })); + button.dispatchEvent(pointerEvent("pointermove", 7, { x: 10, y: 30 })); + button.dispatchEvent(pointerEvent("pointerup", 7, { x: 10, y: 30 })); + button.dispatchEvent( + new MouseEvent("click", { bubbles: true, cancelable: true, detail: 1 }), + ); + + expect(button.classList.contains("is-pressed")).toBe(false); + expect(activate).not.toHaveBeenCalled(); + }); + + it("checks final pointer displacement when no move event is delivered", () => { + const button = document.createElement("button"); + const activate = vi.fn(); + bindSelectionMenuButton(button, activate); + + button.dispatchEvent(pointerEvent("pointerdown", 7, { x: 10, y: 10 })); + button.dispatchEvent(pointerEvent("pointerup", 7, { x: 30, y: 10 })); + button.dispatchEvent( + new MouseEvent("click", { bubbles: true, cancelable: true, detail: 1 }), + ); + + expect(button.classList.contains("is-pressed")).toBe(false); + expect(activate).not.toHaveBeenCalled(); + }); +}); diff --git a/tests/unit/selectionMenuUtils.test.ts b/tests/unit/selectionMenuUtils.test.ts index 962f912e94..360fafdc57 100644 --- a/tests/unit/selectionMenuUtils.test.ts +++ b/tests/unit/selectionMenuUtils.test.ts @@ -1,4 +1,7 @@ -import { filterSelectionMenuItems } from "cm/selectionMenuUtils"; +import { + filterSelectionMenuItems, + partitionSelectionMenuItems, +} from "cm/selectionMenuUtils"; import { describe, expect, it } from "vitest"; const items = [ @@ -41,3 +44,32 @@ describe("selection menu filtering", () => { ]); }); }); + +describe("selection menu hierarchy", () => { + it("keeps selection essentials in the compact toolbar", () => { + const pluginItem = { id: "plugin-action", mode: "all" } as const; + const { primary, overflow } = partitionSelectionMenuItems( + [...items, pluginItem], + { hasSelection: true }, + ); + + expect(primary.map((item) => item.id)).toEqual([ + "copy", + "cut", + "paste", + "select-all", + ]); + expect(overflow.map((item) => item.id)).toEqual(["plugin-action"]); + }); + + it("keeps caret actions concise and moves plugins into More", () => { + const pluginItem = { mode: "all" } as const; + const { primary, overflow } = partitionSelectionMenuItems( + [...items, pluginItem], + { hasSelection: false }, + ); + + expect(primary.map((item) => item.id)).toEqual(["paste", "select-all"]); + expect(overflow).toEqual([items[0], items[1], pluginItem]); + }); +}); From c7a9e347de11294efe55bf12981e89bbcc23dfd0 Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Sat, 29 Aug 2026 13:43:14 +0000 Subject: [PATCH 16/38] fix(search): include restored files in global search (#2830) * fix(search): include restored files in global search * fix --- src/sidebarApps/searchInFiles/index.js | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/sidebarApps/searchInFiles/index.js b/src/sidebarApps/searchInFiles/index.js index e0d66e97b2..6cfa938cef 100644 --- a/src/sidebarApps/searchInFiles/index.js +++ b/src/sidebarApps/searchInFiles/index.js @@ -693,9 +693,10 @@ async function readSearchFileContent(uri) { if (helpers.isBinary(uri)) return ""; const editorFile = editorManager.getFile(uri, "uri"); - if (editorFile?.session?.doc) { + const editorDocument = getSearchEditorDocument(editorFile); + if (editorDocument) { try { - return getDocText(editorFile.session.doc); + return getDocText(editorDocument); } catch (_) { return ""; } @@ -704,6 +705,17 @@ async function readSearchFileContent(uri) { return fsOperation(uri).readFile(settings.value.defaultFileEncoding); } +function getSearchEditorDocument(file) { + const document = file?.session?.doc; + if (!document) return null; + if (file.loaded) return document; + + // Remote files can expose non-empty unsaved recovery text while their source + // is still loading. An inactive restored tab instead has an empty placeholder. + if (file.loading && file.isUnsaved && document.length > 0) return document; + return null; +} + function supportsNativeSearch(url = "") { return ( fileIndex.supports(url) && @@ -819,9 +831,10 @@ function getOpenFileOverlays() { const overlays = {}; editorManager.files.forEach((file) => { if (!file.uri || !supportsNativeSearch(file.uri)) return; - if (!file.session?.doc) return; + const editorDocument = getSearchEditorDocument(file); + if (!editorDocument) return; try { - overlays[file.uri] = getDocText(file.session.doc); + overlays[file.uri] = getDocText(editorDocument); } catch (_) { // ignore invalid editor docs } From dbdb9680c97e35cbf745f9b9cf38723675be5878 Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Sat, 29 Aug 2026 19:29:46 +0530 Subject: [PATCH 17/38] chore: v1.13.2 --- CHANGELOG.md | 24 ++++++++++++++++++++++++ config.xml | 4 ++-- package-lock.json | 4 ++-- package.json | 2 +- readme.md | 2 ++ 5 files changed, 31 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 60ee76afad..bcaf913468 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,29 @@ # Change Log +## v1.13.2 + +* feat: stabilize SFTP and add secure SSH terminal integration by @bajrangCoder in https://github.com/Acode-Foundation/Acode/pull/2694 +* fix(lsp): correct workspace and document color capabilities and add tailwind lsp by @bajrangCoder in https://github.com/Acode-Foundation/Acode/pull/2736 +* refactor: Standardize DOM element dataset attributes across file browser component by @AuDevTist1C in https://github.com/Acode-Foundation/Acode/pull/2543 +* fix(lsp): preserve websocket clients across tab switches by @bajrangCoder in https://github.com/Acode-Foundation/Acode/pull/2764 +* feat(plugins): expose static CodeMirror highlighter by @bajrangCoder in https://github.com/Acode-Foundation/Acode/pull/2769 +* refactor(loader): Extract `tailSpin` SVG component and dynamic gradient logic by @AuDevTist1C in https://github.com/Acode-Foundation/Acode/pull/2776 +* fix(quick-tools): prevent scrollbars during editor gestures by @bajrangCoder in https://github.com/Acode-Foundation/Acode/pull/2777 +* fix: fall back to internal storage when external storage is unavailable by @ulite-Amr in https://github.com/Acode-Foundation/Acode/pull/2781 +* fix(theme): prevent freeze when switching to system theme by @bajrangCoder in https://github.com/Acode-Foundation/Acode/pull/2790 +* fix(sftp): cancel stalled connections and prevent delayed errors by @bajrangCoder in https://github.com/Acode-Foundation/Acode/pull/2791 +* fix: admob issues by @deadlyjack in https://github.com/Acode-Foundation/Acode/pull/2800 +* fix(android): avoid splash surface crash on realme Android 13 by @bajrangCoder in https://github.com/Acode-Foundation/Acode/pull/2805 +* fix(session): restore picker documents and skip intent files tab by @bajrangCoder in https://github.com/Acode-Foundation/Acode/pull/2809 +* feat(console): isolate execution and improve mobile REPL UX by @bajrangCoder in https://github.com/Acode-Foundation/Acode/pull/2808 +* feat(console): follow active Acode theme by @bajrangCoder in https://github.com/Acode-Foundation/Acode/pull/2814 +* chore: improve Indonesian (id) language translations by @MatrixTM26 in https://github.com/Acode-Foundation/Acode/pull/2798 +* fix: preserve MIME type for plugin icons on plugin details page by @bajrangCoder in https://github.com/Acode-Foundation/Acode/pull/2818 +* fix(console): run JavaScript files in isolated worker by @bajrangCoder in https://github.com/Acode-Foundation/Acode/pull/2819 +* feat: plugin review by @deadlyjack in https://github.com/Acode-Foundation/Acode/pull/2826 +* Improve selection menu UX and plugin action overflow by @bajrangCoder in https://github.com/Acode-Foundation/Acode/pull/2813 +* fix(search): include restored files in global search by @bajrangCoder in https://github.com/Acode-Foundation/Acode/pull/2830 + ## v1.12.9 * fix(admob): remove the policy-prohibited interstitial shown while exiting the app diff --git a/config.xml b/config.xml index 45f6f86385..cb49d5be3d 100644 --- a/config.xml +++ b/config.xml @@ -1,5 +1,5 @@ - @@ -90,4 +90,4 @@ - \ No newline at end of file + diff --git a/package-lock.json b/package-lock.json index ca419ccda3..85817b8fcd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "com.foxdebug.acode", - "version": "1.13.1", + "version": "1.13.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "com.foxdebug.acode", - "version": "1.13.1", + "version": "1.13.2", "license": "MIT", "dependencies": { "@codemirror/autocomplete": "^6.20.3", diff --git a/package.json b/package.json index c1cf55d0d7..992d2d2186 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "com.foxdebug.acode", "displayName": "Acode", - "version": "1.13.1", + "version": "1.13.2", "description": "Acode is a code editor for android", "scripts": { "lang": "node ./utils/lang.js", diff --git a/readme.md b/readme.md index f95dad8c33..ca69912401 100644 --- a/readme.md +++ b/readme.md @@ -15,6 +15,8 @@ Welcome to Acode Editor - a powerful and versatile code editing tool designed sp - Edit and create websites, and instantly preview them in a browser. - Seamlessly modify source files for various languages like Python, Java, JavaScript, and more. - Built-in javascript console +- S/FTP and SSH terminal integration +- Built-in terminal(Alpine) - Enjoy multi-language editing support with easy management tools. - Enjoy a large collections of community plugins to enhance your coding experience. From 7357c01f29cf399c5ca300c86c00f6df25e7af35 Mon Sep 17 00:00:00 2001 From: AuDevTist1C <114492072+AuDevTist1C@users.noreply.github.com> Date: Sat, 29 Aug 2026 14:34:04 +0000 Subject: [PATCH 18/38] refactor(file-browser): Convert directory cache to `Map` instance (#2831) Replace the plain object container used for cached directories with an ES6 `Map` to improve key management semantics. Update cached directory data structure (`src/pages/fileBrowser/fileBrowser.js`): - Re-initialize `cachedDir` variable as a `Map` - Replace object property lookups with `Map.prototype.has()` and `Map.prototype.get()` - Update cache writes to use `Map.prototype.set()` - Update directory deletion calls to use `Map.prototype.delete()` (AI generated commit message) --- src/pages/fileBrowser/fileBrowser.js | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/pages/fileBrowser/fileBrowser.js b/src/pages/fileBrowser/fileBrowser.js index ef9c59ce28..dcb53c4890 100644 --- a/src/pages/fileBrowser/fileBrowser.js +++ b/src/pages/fileBrowser/fileBrowser.js @@ -171,7 +171,7 @@ function FileBrowserInclude(mode, info, doesOpenLast = true) { $selectionMenuToggler.style.display = "none"; $pasteToggler.style.display = "none"; const progress = {}; - let cachedDir = {}; + let cachedDir = new Map(); let currentDir = { url: null, name: null, @@ -255,8 +255,6 @@ function FileBrowserInclude(mode, info, doesOpenLast = true) { } if (action === "reload") { - const { url } = currentDir; - if (url in cachedDir) delete cachedDir[url]; reload(); return; } @@ -731,7 +729,7 @@ function FileBrowserInclude(mode, info, doesOpenLast = true) { } recents.removeFile(url); openFolder.removeItem(url); - delete cachedDir[url]; + cachedDir.delete(url); } function updateSelectionCount($count) { @@ -1471,8 +1469,8 @@ function FileBrowserInclude(mode, info, doesOpenLast = true) { let list = []; let error = false; - if (url in cachedDir) { - return cachedDir[url]; + if (cachedDir.has(url)) { + return cachedDir.get(url); } else { if (url === "/") { list = await listAllStorages(); @@ -1807,8 +1805,8 @@ function FileBrowserInclude(mode, info, doesOpenLast = true) { const $oldList = $content.get("#list"); if ($oldList) { const { url } = currentDir; - if (url && cachedDir[url]) { - cachedDir[url].scroll = $oldList.scrollTop; + if (url && cachedDir.has(url)) { + cachedDir.get(url).scroll = $oldList.scrollTop; } $oldList.remove(); } @@ -1817,13 +1815,13 @@ function FileBrowserInclude(mode, info, doesOpenLast = true) { $list.focus(); currentDir = dir; - cachedDir[dir.url] = dir; + cachedDir.set(dir.url, dir); updatePasteToggler(); } function reload() { const { url, name } = currentDir; - delete cachedDir[url]; + cachedDir.delete(url); navigate(url, name); } From febb4f746c81db96d0ebace651b6186577ee6240 Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Sat, 29 Aug 2026 17:29:40 +0000 Subject: [PATCH 19/38] fix(editor): stabilize selection menu sizing and transitions (#2833) --- src/cm/touchSelectionMenu.js | 136 ++++++++++++++++++++++++++--------- src/main.scss | 30 ++++---- 2 files changed, 116 insertions(+), 50 deletions(-) diff --git a/src/cm/touchSelectionMenu.js b/src/cm/touchSelectionMenu.js index fc004d5327..c61b7bc060 100644 --- a/src/cm/touchSelectionMenu.js +++ b/src/cm/touchSelectionMenu.js @@ -174,6 +174,7 @@ class TouchSelectionMenuController { #menuAnchor = null; #menuAnimation = null; #viewAnimations = []; + #overflowExpanded = false; constructor(view, options = {}) { this.#view = view; @@ -680,7 +681,8 @@ class TouchSelectionMenuController { const menuKey = `${hasSelection}:${items .map((item) => item.id || this.#getItemLabel(item)) .join("|")}`; - if (menuKey !== this.#renderedMenuKey) { + const menuChanged = menuKey !== this.#renderedMenuKey; + if (menuChanged) { const groups = partitionSelectionMenuItems(items, { hasSelection }); this.#renderMenu(groups.primary, groups.overflow); this.#renderedMenuKey = menuKey; @@ -689,6 +691,8 @@ class TouchSelectionMenuController { if (!this.$menu.isConnected) { this.#container.append(this.$menu); } + this.$menu.style.removeProperty("width"); + this.$menu.style.removeProperty("height"); const isOpening = !this.#menuActive; this.#positionMenu(anchor); this.#menuActive = true; @@ -697,6 +701,11 @@ class TouchSelectionMenuController { } #renderMenu(primaryItems, overflowItems) { + for (const animation of this.#viewAnimations) animation.cancel?.(); + this.#viewAnimations = []; + this.#overflowExpanded = false; + this.$menu.style.removeProperty("width"); + this.$menu.style.removeProperty("height"); this.$menu.replaceChildren(); this.$menu.setAttribute("aria-label", "Text selection actions"); @@ -822,68 +831,121 @@ class TouchSelectionMenuController { } #setOverflowExpanded($primary, $overflow, expanded) { + if (expanded === this.#overflowExpanded) return; + const initialRect = this.$menu.getBoundingClientRect(); + this.#menuAnimation?.cancel?.(); + this.#menuAnimation = null; for (const animation of this.#viewAnimations) animation.cancel?.(); this.#viewAnimations = []; - const initialRect = this.$menu.getBoundingClientRect(); - const outgoing = expanded ? $primary : $overflow; + $primary.hidden = this.#overflowExpanded; + $overflow.hidden = !this.#overflowExpanded; + const outgoing = this.#overflowExpanded ? $overflow : $primary; const incoming = expanded ? $overflow : $primary; const direction = expanded ? 1 : -1; - this.$menu.style.width = `${this.$menu.getBoundingClientRect().width}px`; - incoming.hidden = false; - incoming.style.visibility = ""; - incoming.style.pointerEvents = "auto"; + for (const $view of [$primary, $overflow]) { + $view.style.opacity = ""; + $view.style.transform = ""; + $view.style.visibility = ""; + $view.style.position = ""; + $view.style.inset = ""; + $view.style.pointerEvents = ""; + $view.style.transformOrigin = ""; + } + this.#overflowExpanded = expanded; + outgoing.style.position = "absolute"; + outgoing.style.inset = "0 auto auto 0"; outgoing.style.pointerEvents = "none"; - - const usesGrid = $overflow.classList.contains( - "cursor-menu__overflow--grid", - ); - const targetHeight = - expanded && usesGrid ? $overflow.getBoundingClientRect().height : 40; - this.$menu.style.height = `${targetHeight}px`; - if (usesGrid && this.#menuAnchor) this.#positionMenu(this.#menuAnchor); + incoming.hidden = false; + this.$menu.style.removeProperty("width"); + this.$menu.style.removeProperty("height"); + this.$menu.style.transform = ""; + if (this.#menuAnchor) this.#positionMenu(this.#menuAnchor); const finalRect = this.$menu.getBoundingClientRect(); + const menuScaleX = finalRect.width + ? initialRect.width / finalRect.width + : 1; + const menuScaleY = finalRect.height + ? initialRect.height / finalRect.height + : 1; + const viewScaleX = menuScaleX ? 1 / menuScaleX : 1; + const viewScaleY = menuScaleY ? 1 / menuScaleY : 1; + this.$menu.style.transformOrigin = "left top"; + for (const $view of [outgoing, incoming]) { + $view.style.transformOrigin = "left top"; + } + const clearMenuGeometry = () => { + this.$menu.style.removeProperty("width"); + this.$menu.style.removeProperty("height"); + this.$menu.style.transform = ""; + this.$menu.style.transformOrigin = ""; + }; const finish = () => { outgoing.hidden = true; - outgoing.style.opacity = ""; - outgoing.style.transform = ""; - outgoing.style.visibility = ""; - incoming.style.opacity = ""; - incoming.style.transform = ""; - this.$menu.style.height = `${targetHeight}px`; - this.$menu.style.transform = ""; + for (const $view of [$primary, $overflow]) { + $view.style.opacity = ""; + $view.style.transform = ""; + $view.style.position = ""; + $view.style.inset = ""; + $view.style.pointerEvents = ""; + $view.style.transformOrigin = ""; + } + clearMenuGeometry(); this.#viewAnimations = []; }; + if (animationsDisabled()) { finish(); return; } - const outgoingAnimation = animate( outgoing, - { opacity: [1, 0], x: [0, -6 * direction] }, - { duration: 0.1, ease: "easeIn" }, + { + opacity: [1, 0], + x: [0, -6 * direction], + scaleX: [viewScaleX, 1], + scaleY: [viewScaleY, 1], + }, + { duration: 0.12, ease: "easeIn" }, ); const incomingAnimation = animate( incoming, - { opacity: [0, 1], x: [6 * direction, 0] }, - { duration: 0.14, ease: "easeOut" }, + { + opacity: [0, 1], + x: [6 * direction, 0], + scaleX: [viewScaleX, 1], + scaleY: [viewScaleY, 1], + }, + { duration: 0.18, ease: "easeOut" }, ); const animations = [outgoingAnimation, incomingAnimation]; - if (usesGrid && initialRect.height !== finalRect.height) { + if ( + initialRect.width !== finalRect.width || + initialRect.height !== finalRect.height || + initialRect.left !== finalRect.left || + initialRect.top !== finalRect.top + ) { animations.push( animate( this.$menu, { - height: [initialRect.height, finalRect.height], + x: [initialRect.left - finalRect.left, 0], y: [initialRect.top - finalRect.top, 0], + scaleX: [menuScaleX, 1], + scaleY: [menuScaleY, 1], + }, + { + duration: 0.18, + ease: [0.2, 0, 0, 1], + onComplete: clearMenuGeometry, }, - { duration: 0.16, ease: "easeOut" }, ), ); } this.#viewAnimations = animations; - Promise.allSettled(animations).then(() => { + Promise.allSettled( + animations.map((animation) => animation.finished ?? animation), + ).then(() => { if (this.#viewAnimations !== animations) return; finish(); }); @@ -1044,6 +1106,9 @@ class TouchSelectionMenuController { overflow.style.opacity = ""; overflow.style.transform = ""; overflow.style.pointerEvents = ""; + overflow.style.position = ""; + overflow.style.inset = ""; + overflow.style.transformOrigin = ""; } const primary = this.$menu.querySelector(".cursor-menu__primary"); if (primary) { @@ -1051,15 +1116,20 @@ class TouchSelectionMenuController { primary.style.opacity = ""; primary.style.transform = ""; primary.style.pointerEvents = ""; + primary.style.position = ""; + primary.style.inset = ""; + primary.style.transformOrigin = ""; } this.$menu.style.opacity = ""; this.$menu.style.transform = ""; - this.$menu.style.width = ""; - this.$menu.style.height = "40px"; + this.$menu.style.transformOrigin = ""; + this.$menu.style.removeProperty("width"); + this.$menu.style.removeProperty("height"); this.$menu .querySelector(".cursor-menu__more") ?.setAttribute("aria-expanded", "false"); this.#renderedMenuKey = ""; + this.#overflowExpanded = false; this.#menuAnchor = null; this.#menuActive = false; } diff --git a/src/main.scss b/src/main.scss index 5b04d56e9a..927445937b 100644 --- a/src/main.scss +++ b/src/main.scss @@ -482,7 +482,8 @@ textarea { left: 0; width: max-content; max-width: var(--cursor-menu-max-width); - height: 40px; + height: auto; + min-height: 40px; margin: 0; padding: 0; box-sizing: border-box; @@ -503,12 +504,8 @@ textarea { &__primary { display: flex; - height: 100%; + height: 40px; align-items: stretch; - - &[hidden] { - visibility: hidden; - } } &__action { @@ -558,27 +555,21 @@ textarea { } &__overflow { - position: absolute; - inset: 0; - z-index: 1; display: flex; - height: 100%; + width: max-content; + max-width: var(--cursor-menu-max-width); + height: 40px; min-width: 0; color: inherit; background-color: inherit; border-radius: var(--popup-border-radius); - &[hidden] { - visibility: hidden; - } - &--grid { - inset: 0 auto auto 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(50px, 1fr)); grid-auto-rows: 40px; align-content: start; - width: 100%; + width: min(250px, var(--cursor-menu-max-width)); height: max-content; max-height: var(--cursor-menu-grid-max-height); overflow-x: hidden; @@ -593,6 +584,11 @@ textarea { } } + &__primary[hidden], + &__overflow[hidden] { + display: none; + } + &__back { flex: 0 0 50px; border-inline-end: solid 1px var(--border-color); @@ -601,7 +597,7 @@ textarea { &__overflow-actions { display: flex; min-width: 0; - flex: 1; + flex: 0 1 auto; overflow-x: auto; overflow-y: hidden; overscroll-behavior-x: contain; From eac9b6ea8202d9a614583f06e43b5cdc5a61e863 Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Sat, 29 Aug 2026 17:45:10 +0000 Subject: [PATCH 20/38] fix(editor): keep fullscreen controls above bottom pane tabs (#2834) --- src/main.js | 14 ++------------ src/styles/page.scss | 45 -------------------------------------------- 2 files changed, 2 insertions(+), 57 deletions(-) diff --git a/src/main.js b/src/main.js index ebc2871227..381a48e1fe 100644 --- a/src/main.js +++ b/src/main.js @@ -629,12 +629,7 @@ async function loadApp() { $mainMenu.removeEventListener("click", handleMenu); $mainMenu.destroy(); } - const { openFileListPos, fullscreen } = settings.value; - if (openFileListPos === settings.OPEN_FILE_LIST_POS_BOTTOM && fullscreen) { - $mainMenu = createMainMenu({ bottom: "6px", toggler: $menuToggler }); - } else { - $mainMenu = createMainMenu({ top: "6px", toggler: $menuToggler }); - } + $mainMenu = createMainMenu({ top: "6px", toggler: $menuToggler }); $mainMenu.addEventListener("click", handleMenu); }; @@ -643,12 +638,7 @@ async function loadApp() { $fileMenu.removeEventListener("click", handleMenu); $fileMenu.destroy(); } - const { openFileListPos, fullscreen } = settings.value; - if (openFileListPos === settings.OPEN_FILE_LIST_POS_BOTTOM && fullscreen) { - $fileMenu = createFileMenu({ bottom: "6px", toggler: $editMenuToggler }); - } else { - $fileMenu = createFileMenu({ top: "6px", toggler: $editMenuToggler }); - } + $fileMenu = createFileMenu({ top: "6px", toggler: $editMenuToggler }); $fileMenu.addEventListener("click", handleMenu); }; diff --git a/src/styles/page.scss b/src/styles/page.scss index 62b2d5c204..e32740eef5 100644 --- a/src/styles/page.scss +++ b/src/styles/page.scss @@ -21,51 +21,6 @@ body { wc-page { &#root { - &[open-file-list-pos="bottom"] { - &[footer-height="1"] { - header { - bottom: 40px; - } - - #sidebar-toggler { - bottom: 40px; - } - } - - &[footer-height="2"] { - header { - bottom: 80px; - } - - #sidebar-toggler { - bottom: 80px; - } - } - - &[footer-height="3"] { - header { - bottom: 120px; - } - - #sidebar-toggler { - bottom: 120px; - } - } - - header { - bottom: 0; - top: auto !important; - z-index: 99; - } - - #sidebar-toggler { - bottom: 0; - top: auto !important; - z-index: 99; - transition: none !important; - } - } - &:not(.top-bar) { &.show-header { #header-toggler { From 31f8eb4e0484994db2de968c12183c0152aca753 Mon Sep 17 00:00:00 2001 From: Emmanuel Lobo <76094069+UnschooledGamer@users.noreply.github.com> Date: Sat, 29 Aug 2026 17:48:09 +0000 Subject: [PATCH 21/38] chore(community-release-notifier): Change sed parsing - TG release notes (#2832) * chore(community-release-notifier): Change sed parsing - TG release notes This commit fixes Release notes not being sed escaped properly leading towards Telegram notifier failing for Stable Releases as they were auto-generated by git. * Disable markdown format in community release notifier Commented out the markdown format option in the Telegram notifier. --- .github/workflows/community-release-notifier.yml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/.github/workflows/community-release-notifier.yml b/.github/workflows/community-release-notifier.yml index 1b08d7bee3..5dc9daa458 100644 --- a/.github/workflows/community-release-notifier.yml +++ b/.github/workflows/community-release-notifier.yml @@ -56,7 +56,7 @@ jobs: id: vars env: INPUT_TAG: ${{ github.event.release.tag_name || inputs.tag_name }} - INPUT_URL: ${{ github.event.release.url || inputs.url }} + INPUT_URL: ${{ github.event.release.html_url || inputs.url }} INPUT_BODY: ${{ github.event.release.body || inputs.body }} run: | TAG="$INPUT_TAG" @@ -68,7 +68,12 @@ jobs: # Escape problematic characters for MarkdownV2 (very conservative escaping) # We escape: _ * [ ] ( ) ~ ` > # + - = | { } . ! \ BODY_SAFE=$(printf '%s' "$INPUT_BODY" | \ - sed 's/[_*[\]()~`>#+=|{}.!\\-]/\\&/g') + sed -E \ + -e 's/^[[:space:]]*##[[:space:]]*//' \ + -e 's/^[[:space:]]*\*[[:space:]]+/- /' \ + -e 's/\*\*([^*]*)\*\*/\*\1\*/g' \ + -e 's/\\!/!/g' \ + -e 's/@([A-Za-z0-9-]+)/@\1/g') TAG_SAFE=$(printf '%s' "$TAG" | sed 's/[_*[\]()~`>#+=|{}.!\\-]/\\&/g') if [[ "$TAG" == *"-nightly"* ]]; then @@ -140,7 +145,8 @@ jobs: ${{ steps.vars.outputs.announce }} ${{ steps.vars.outputs.body_safe }} - format: markdown + # disabled for time being see https://github.com/Acode-Foundation/Acode/pull/2832#discussion_r3887130617 + #format: markdown disable_web_page_preview: true # Only needed for topic-enabled supergroups/channels message_thread_id: ${{ secrets.TELEGRAM_MESSAGE_THREAD_ID }} From 0981172ebc3b653ad2c4acc48ffccf8781f6af8f Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Sat, 29 Aug 2026 18:17:47 +0000 Subject: [PATCH 22/38] fix(editor): restore cursor state and prevent tab-switch flash (#2835) * fix(editor): restore cursor state and prevent tab-switch flash * fix --- src/lib/editorFile.js | 77 +++++++++++++++++++-------- src/lib/editorManager.js | 10 ++++ src/lib/restoreFiles.js | 47 ++++++++++------ src/lib/saveState.js | 13 +++-- tests/unit/restoreFiles.test.js | 70 ++++++++++++++++++++++++ tests/unit/sessionPersistence.test.js | 33 ++++++++++++ 6 files changed, 209 insertions(+), 41 deletions(-) create mode 100644 tests/unit/restoreFiles.test.js diff --git a/src/lib/editorFile.js b/src/lib/editorFile.js index df7abed821..e638cdb84b 100644 --- a/src/lib/editorFile.js +++ b/src/lib/editorFile.js @@ -1,17 +1,11 @@ import fsOperation from "fileSystem"; // CodeMirror imports for document state management -import { EditorState } from "@codemirror/state"; +import { EditorSelection, EditorState } from "@codemirror/state"; import { focusEditorIfEditable, reconfigureEditorReadOnly, } from "cm/editorReadOnly"; -import { - clearSelection, - getDocText, - restoreFolds, - restoreSelection, - setScrollPosition, -} from "cm/editorUtils"; +import { clearSelection, getDocText } from "cm/editorUtils"; import { getMode, getModeForPath } from "cm/modelist"; import quickTools from "components/quickTools"; import Sidebar from "components/sidebar"; @@ -37,6 +31,25 @@ import appSettings from "./settings"; let mainCSSStyleSheet = null; +function restoreSessionSelection(state, selection) { + if (!selection?.ranges?.length) return state; + + const docLength = state.doc.length; + const ranges = selection.ranges.map((range) => { + const from = Math.max(0, Math.min(docLength, range.from | 0)); + const to = Math.max(0, Math.min(docLength, range.to | 0)); + return EditorSelection.range(from, to); + }); + const mainIndex = + selection.mainIndex >= 0 && selection.mainIndex < ranges.length + ? selection.mainIndex + : 0; + + return state.update({ + selection: EditorSelection.create(ranges, mainIndex), + }).state; +} + function getMainCSSStyleSheet() { if (mainCSSStyleSheet) return mainCSSStyleSheet; for (const sheet of document.styleSheets) { @@ -446,6 +459,7 @@ export default class EditorFile { * contains information about cursor position, scroll left, scroll top, folds. */ #loadOptions; + #loadPromise = null; /** * Weather file is changed and needs to be saved * @type {boolean} @@ -502,6 +516,10 @@ export default class EditorFile { hasDiskConflict = false; isPanePlaceholder = false; persistInSession = true; + lastScrollTop = 0; + lastScrollLeft = 0; + restoredSelection = null; + restoredFolds = null; /** * @@ -702,6 +720,14 @@ export default class EditorFile { folds: options?.folds, editable, }; + this.lastScrollTop = Number.isFinite(options?.scrollTop) + ? options.scrollTop + : 0; + this.lastScrollLeft = Number.isFinite(options?.scrollLeft) + ? options.scrollLeft + : 0; + this.restoredSelection = options?.cursorPos || null; + this.restoredFolds = options?.folds || null; } this.#onFilePosChange = () => { @@ -1557,8 +1583,8 @@ export default class EditorFile { this.#tab.classList.add("active"); this.#tab.scrollIntoView(); - if (this.type === "editor" && !this.loaded && !this.loading) { - this.#loadText(); + if (this.type === "editor" && !this.loaded) { + void this.load(); } syncQuickToolsVisibility(this); @@ -1640,6 +1666,20 @@ export default class EditorFile { } } + /** + * Load this file's document into its stored editor session. + * Reuses an in-flight load so session restoration can safely preload tabs. + */ + load() { + if (this.type !== "editor" || this.loaded) return Promise.resolve(this); + if (this.#loadPromise) return this.#loadPromise; + + this.#loadPromise = this.#loadText().finally(() => { + this.#loadPromise = null; + }); + return this.#loadPromise; + } + /** * Add event listener * @param {string} event @@ -1781,9 +1821,7 @@ export default class EditorFile { const protocol = this.uri ? Url.getProtocol(this.uri) : ""; const isRemoteFile = protocol === "ftp:" || protocol === "sftp:"; - const { cursorPos, scrollLeft, scrollTop, folds, editable } = - this.#loadOptions; - const { editor } = editorManager; + const { cursorPos, editable } = this.#loadOptions; this.#loadOptions = null; @@ -1855,7 +1893,11 @@ export default class EditorFile { const isUnsaved = this.isUnsaved; this.markChanged = false; - this.session = EditorState.create({ doc: value }); + this.session = restoreSessionSelection( + EditorState.create({ doc: value }), + cursorPos, + ); + this.restoredSelection = null; this.__cmSessionReady = false; this.__cmLanguageReady = false; this.__cmLanguageSignature = null; @@ -1874,13 +1916,6 @@ export default class EditorFile { setTimeout(() => { this.#emit("load", createFileEvent(this)); - if (cursorPos) { - restoreSelection(editor, cursorPos); - } - if (scrollTop || scrollLeft) { - setScrollPosition(editor, scrollTop, scrollLeft); - } - restoreFolds(editor, folds); }, 0); } catch (error) { this.#emit("loaderror", createFileEvent(this)); diff --git a/src/lib/editorManager.js b/src/lib/editorManager.js index d719add426..d216b4b933 100644 --- a/src/lib/editorManager.js +++ b/src/lib/editorManager.js @@ -3018,9 +3018,19 @@ async function EditorManager($header, $body) { // Restore folds from previous state if available try { const folds = prevState ? getAllFolds(prevState) : []; + const canConsumeRestoredFolds = file.loaded && !file.loading; + if ( + !folds.length && + canConsumeRestoredFolds && + file.restoredFolds?.length + ) { + folds.push(...file.restoredFolds); + } if (folds && folds.length) { restoreFolds(editor, folds); + file.session = editor.state; } + if (canConsumeRestoredFolds) file.restoredFolds = null; } catch (error) { warnRecoverable( "Failed to restore folded regions from previous session state.", diff --git a/src/lib/restoreFiles.js b/src/lib/restoreFiles.js index 6f58c88285..4f844ac678 100644 --- a/src/lib/restoreFiles.js +++ b/src/lib/restoreFiles.js @@ -3,26 +3,39 @@ import EditorFile from "./editorFile"; /** * * @param {import('./editorFile').FileOptions[]} files - * @param {(count: number)=>void} callback */ export default async function restoreFiles(files) { - let rendered = false; + const hasRenderedFile = files.some((file) => file.render); + const localLoads = []; - await Promise.all( - files.map(async (file, i) => { - rendered ||= !!file.render; + files.forEach((file, index) => { + const render = + file.render || (!hasRenderedFile && index === files.length - 1); + const options = { + ...file, + render, + emitUpdate: false, + }; + const restoredFile = new EditorFile(file.filename, options); + const load = Promise.resolve(restoredFile.load?.()); - if (i === files.length - 1 && !rendered) { - file.render = true; - } + if (isRemoteUri(file.uri)) { + void load.catch((error) => { + console.warn(`Failed to preload restored file: ${file.uri}`, error); + }); + return; + } - const { filename, render = false } = file; - const options = { - ...file, - render, - emitUpdate: false, - }; - new EditorFile(filename, options); - }), - ); + localLoads.push(load); + }); + + // Finish restoring local documents before startup persistence is enabled. + // Otherwise the temporary empty sessions can overwrite saved cursor state, + // and the first visit to an inactive local tab visibly flashes a loading editor. + // Remote tabs keep preloading without blocking the rest of app startup. + await Promise.all(localLoads); +} + +function isRemoteUri(uri) { + return /^(?:https?|s?ftp):/i.test(uri || ""); } diff --git a/src/lib/saveState.js b/src/lib/saveState.js index 7e0ea6790b..5d31b37324 100644 --- a/src/lib/saveState.js +++ b/src/lib/saveState.js @@ -20,7 +20,9 @@ export default () => { // - Active file uses live EditorView selection // - Inactive files use their persisted EditorState selection let cursorPos; - if (activeFile?.id === file.id) { + if (!file.loaded && file.restoredSelection) { + cursorPos = file.restoredSelection; + } else if (activeFile?.id === file.id) { cursorPos = getSelection(editor); } else { const sel = file.session?.selection; @@ -39,7 +41,12 @@ export default () => { // - Active file uses live scroll from EditorView // - Inactive files use lastScrollTop/Left captured on tab switch let scrollTop, scrollLeft; - if (activeFile?.id === file.id) { + if (!file.loaded) { + scrollTop = + typeof file.lastScrollTop === "number" ? file.lastScrollTop : 0; + scrollLeft = + typeof file.lastScrollLeft === "number" ? file.lastScrollLeft : 0; + } else if (activeFile?.id === file.id) { const sp = getScrollPosition(editor); scrollTop = sp.scrollTop; scrollLeft = sp.scrollLeft; @@ -72,7 +79,7 @@ export default () => { editable: file.editable, encoding: file.encoding, render: activeFile?.id === file.id, - folds: getAllFolds(file.session), + folds: file.restoredFolds ?? getAllFolds(file.session), }; if (settings.rememberFiles || fileJson.isUnsaved) diff --git a/tests/unit/restoreFiles.test.js b/tests/unit/restoreFiles.test.js new file mode 100644 index 0000000000..339a347111 --- /dev/null +++ b/tests/unit/restoreFiles.test.js @@ -0,0 +1,70 @@ +import { beforeEach, describe, expect, it, vi } from "vitest"; + +const runtime = vi.hoisted(() => ({ + instances: [], +})); + +vi.mock("lib/editorFile", () => ({ + default: class MockEditorFile { + constructor(filename, options) { + this.filename = filename; + this.options = options; + this.loaded = new Promise((resolve) => { + this.resolveLoad = resolve; + }); + runtime.instances.push(this); + } + + load() { + return this.loaded; + } + }, +})); + +import restoreFiles from "lib/restoreFiles"; + +describe("restored file loading", () => { + beforeEach(() => { + runtime.instances.length = 0; + }); + + it("waits for every local tab and activates the last tab by default", async () => { + let completed = false; + const restoration = restoreFiles([ + { id: "one", filename: "one.js", uri: "file:///one.js" }, + { id: "two", filename: "two.js", uri: "file:///two.js" }, + ]).then(() => { + completed = true; + }); + + expect(runtime.instances).toHaveLength(2); + expect(runtime.instances.map((file) => file.options.render)).toEqual([ + false, + true, + ]); + expect(completed).toBe(false); + + runtime.instances[0].resolveLoad(); + await Promise.resolve(); + expect(completed).toBe(false); + + runtime.instances[1].resolveLoad(); + await restoration; + expect(completed).toBe(true); + }); + + it.each(["ftp", "sftp", "http", "https"])( + "does not block startup on an unresolved %s tab", + async (protocol) => { + await restoreFiles([ + { + id: "remote", + filename: "remote.js", + uri: `${protocol}://example.com/remote.js`, + }, + ]); + + expect(runtime.instances).toHaveLength(1); + }, + ); +}); diff --git a/tests/unit/sessionPersistence.test.js b/tests/unit/sessionPersistence.test.js index 938cc63a60..e096148b65 100644 --- a/tests/unit/sessionPersistence.test.js +++ b/tests/unit/sessionPersistence.test.js @@ -134,6 +134,39 @@ describe("file session persistence", () => { uri, ]); }); + + it("keeps restored folds until an inactive tab is first rendered", () => { + const file = createOpenFile("file:///restored.js", {}); + file.restoredFolds = [ + { fromLine: 2, fromCol: 0, toLine: 5, toCol: 1 }, + ]; + globalThis.editorManager.files.push(file); + + saveState(); + + expect(JSON.parse(localStorage.files)[0].folds).toEqual(file.restoredFolds); + }); + + it("keeps the restored cursor while a remote tab is still loading", () => { + const file = createOpenFile("sftp://example.com/restored.js", {}); + file.loaded = false; + file.loading = true; + file.restoredSelection = { + ranges: [{ from: 25, to: 25 }], + mainIndex: 0, + }; + file.lastScrollTop = 120; + file.lastScrollLeft = 8; + globalThis.editorManager.files.push(file); + globalThis.editorManager.activeFile = file; + + saveState(); + + const savedFile = JSON.parse(localStorage.files)[0]; + expect(savedFile.cursorPos).toEqual(file.restoredSelection); + expect(savedFile.scrollTop).toBe(120); + expect(savedFile.scrollLeft).toBe(8); + }); }); function createOpenFile(uri, options) { From 9d20f50a2d1e5d8e2fd935fbc0921b026a1300a5 Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Sun, 30 Aug 2026 04:21:31 +0000 Subject: [PATCH 23/38] feat(lsp): improve actions, navigation, and position handling (#2837) - advertise code action resolve support - clamp LSP positions beyond document bounds - support LocationLink and multiple navigation results - add LSP operations to the selection menu - fix navigation scrolling after switching files - use shared position and location normalization helpers --- src/cm/commandRegistry.js | 10 +- src/cm/lsp/clientManager.ts | 17 +- src/cm/lsp/codeActions.ts | 31 ++-- src/cm/lsp/definition.ts | 147 ++++++++++++++++++ src/cm/lsp/diagnostics.ts | 9 +- src/cm/lsp/documentColors.ts | 5 +- src/cm/lsp/index.ts | 10 ++ src/cm/lsp/inlayHints.ts | 3 +- src/cm/lsp/locationUtils.ts | 26 ++++ src/cm/lsp/positionUtils.ts | 16 ++ src/cm/lsp/references.ts | 4 +- src/cm/lsp/rename.ts | 47 ++++-- src/cm/lsp/tooltipExtensions.ts | 19 ++- src/cm/lsp/types.ts | 7 +- src/cm/touchSelectionMenu.js | 26 ++++ src/components/referencesPanel/utils.js | 29 ++-- src/lib/editorManager.js | 57 +++++-- src/lib/selectionMenu.js | 81 +++++++++- .../lspExternalWebSocketLifecycle.test.js | 18 +++ tests/unit/lspLocationUtils.test.ts | 38 +++++ tests/unit/lspPositionUtils.test.ts | 28 ++++ 21 files changed, 534 insertions(+), 94 deletions(-) create mode 100644 src/cm/lsp/definition.ts create mode 100644 src/cm/lsp/locationUtils.ts create mode 100644 src/cm/lsp/positionUtils.ts create mode 100644 tests/unit/lspLocationUtils.test.ts create mode 100644 tests/unit/lspPositionUtils.test.ts diff --git a/src/cm/commandRegistry.js b/src/cm/commandRegistry.js index 1446027cbb..5d53cb1747 100644 --- a/src/cm/commandRegistry.js +++ b/src/cm/commandRegistry.js @@ -63,13 +63,7 @@ import { } 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, } from "@codemirror/lsp-client"; import { Compartment, EditorSelection } from "@codemirror/state"; import { keymap } from "@codemirror/view"; @@ -91,6 +85,10 @@ import { renameSymbol as acodeRenameSymbol, clearDiagnosticsEffect, clientManager, + jumpToDeclaration as lspJumpToDeclaration, + jumpToDefinition as lspJumpToDefinition, + jumpToImplementation as lspJumpToImplementation, + jumpToTypeDefinition as lspJumpToTypeDefinition, nextSignature as lspNextSignature, prevSignature as lspPrevSignature, showSignatureHelp as lspShowSignatureHelp, diff --git a/src/cm/lsp/clientManager.ts b/src/cm/lsp/clientManager.ts index 11bb6f5401..efd9cb284d 100644 --- a/src/cm/lsp/clientManager.ts +++ b/src/cm/lsp/clientManager.ts @@ -24,6 +24,7 @@ import { supportsBuiltinFormatting } from "./formattingSupport"; import { documentColorsExtension } from "./documentColors"; import { inlayHintsExtension } from "./inlayHints"; import { addLspLog } from "./logs"; +import { safeLspPositionToOffset } from "./positionUtils"; import { selectRuntimeProvider } from "./runtimeProviders"; import serverRegistry from "./serverRegistry"; import { @@ -804,6 +805,14 @@ export class LspClientManager { configuration: true, workspaceFolders: true, }, + textDocument: { + codeAction: { + dataSupport: true, + resolveSupport: { + properties: ["edit"], + }, + }, + }, }, }; @@ -1436,12 +1445,8 @@ function applyTextEdits( if (!edit?.range) continue; let fromBase: number; let toBase: number; - try { - fromBase = plugin.fromPosition(edit.range.start, plugin.syncedDoc); - toBase = plugin.fromPosition(edit.range.end, plugin.syncedDoc); - } catch (_) { - continue; - } + fromBase = safeLspPositionToOffset(plugin.syncedDoc, edit.range.start); + toBase = safeLspPositionToOffset(plugin.syncedDoc, edit.range.end); const fromResult = plugin.unsyncedChanges.mapPos( fromBase, 1, diff --git a/src/cm/lsp/codeActions.ts b/src/cm/lsp/codeActions.ts index 89811ac560..7e8996e5ad 100644 --- a/src/cm/lsp/codeActions.ts +++ b/src/cm/lsp/codeActions.ts @@ -12,8 +12,9 @@ import type { Range as LspRange, WorkspaceEdit, } from "vscode-languageserver-types"; -import type { Position, Range } from "./types"; +import type { Range } from "./types"; import { addLspLogFor } from "./logs"; +import { safeLspPositionToOffset } from "./positionUtils"; import type AcodeWorkspace from "./workspace"; type CodeActionResponse = (CodeAction | Command)[] | null; @@ -62,13 +63,6 @@ function isCommand(item: CodeAction | Command): item is Command { ); } -function lspPositionToOffset( - doc: { line: (n: number) => { from: number } }, - pos: Position, -): number { - return doc.line(pos.line + 1).from + pos.character; -} - async function requestCodeActions( plugin: LSPPlugin, range: LspRange, @@ -157,7 +151,7 @@ async function applyChangesToFile( workspace: AcodeWorkspace, uri: string, changes: LspChange[], - mapping: { mapPosition: (uri: string, pos: Position) => number }, + mapping: { mapPos: (uri: string, pos: number, assoc?: number) => number }, ): Promise { const file = workspace.getFile(uri); if (file) { @@ -165,8 +159,16 @@ async function applyChangesToFile( if (view) { view.dispatch({ changes: changes.map((c) => ({ - from: mapping.mapPosition(uri, c.range.start), - to: mapping.mapPosition(uri, c.range.end), + from: mapping.mapPos( + uri, + safeLspPositionToOffset(file.doc, c.range.start), + 1, + ), + to: mapping.mapPos( + uri, + safeLspPositionToOffset(file.doc, c.range.end), + -1, + ), insert: c.newText, })), userEvent: "codeAction", @@ -188,8 +190,11 @@ async function applyChangesToFile( displayedView.dispatch({ changes: changes.map((c) => ({ - from: lspPositionToOffset(displayedView.state.doc, c.range.start), - to: lspPositionToOffset(displayedView.state.doc, c.range.end), + from: safeLspPositionToOffset( + displayedView.state.doc, + c.range.start, + ), + to: safeLspPositionToOffset(displayedView.state.doc, c.range.end), insert: c.newText, })), userEvent: "codeAction", diff --git a/src/cm/lsp/definition.ts b/src/cm/lsp/definition.ts new file mode 100644 index 0000000000..53d3726ed7 --- /dev/null +++ b/src/cm/lsp/definition.ts @@ -0,0 +1,147 @@ +import { LSPPlugin } from "@codemirror/lsp-client"; +import type { Command, EditorView } from "@codemirror/view"; +import { showReferencesPanel } from "components/referencesPanel"; +import { navigateToReference } from "components/referencesPanel/utils"; +import toast from "components/toast"; +import type { ServerCapabilities } from "vscode-languageserver-protocol"; +import { normalizeLocations, type LspLocationResult } from "./locationUtils"; +import { addLspLogFor } from "./logs"; +import { fetchLineText, getWordAtCursor } from "./references"; + +type DefinitionKind = + | "definition" + | "declaration" + | "implementation" + | "typeDefinition"; + +const CAPABILITY: Record = { + definition: "definitionProvider", + declaration: "declarationProvider", + implementation: "implementationProvider", + typeDefinition: "typeDefinitionProvider", +}; + +const LABEL: Record = { + definition: "definition", + declaration: "declaration", + implementation: "implementation", + typeDefinition: "type definition", +}; + +function locationKey(location: ReturnType[number]) { + const { start, end } = location.range; + return `${location.uri}:${start.line}:${start.character}:${end.line}:${end.character}`; +} + +async function fetchLocations( + view: EditorView, + kind: DefinitionKind, +): Promise | null> { + const plugins = LSPPlugin.getAll(view, kind).filter( + (plugin) => !!plugin.client.serverCapabilities?.[CAPABILITY[kind]], + ); + if (!plugins.length) { + toast(`Language server does not support go to ${LABEL[kind]}`); + return null; + } + + const position = view.state.selection.main.head; + const settled = await Promise.allSettled( + plugins.map(async (plugin) => { + plugin.client.sync(); + return plugin.client.request< + { + textDocument: { uri: string }; + position: { line: number; character: number }; + }, + LspLocationResult + >(`textDocument/${kind}`, { + textDocument: { uri: plugin.uri }, + position: plugin.toPosition(position), + }); + }), + ); + + const locations: ReturnType = []; + const seen = new Set(); + for (let index = 0; index < settled.length; index++) { + const result = settled[index]; + if (result.status === "rejected") { + addLspLogFor( + plugins[index], + "warn", + `Go to ${LABEL[kind]} failed`, + result.reason, + ); + continue; + } + for (const location of normalizeLocations(result.value)) { + const key = locationKey(location); + if (seen.has(key)) continue; + seen.add(key); + locations.push(location); + } + } + return locations; +} + +async function goTo(view: EditorView, kind: DefinitionKind): Promise { + try { + const locations = await fetchLocations(view, kind); + if (locations === null) return false; + if (!locations.length) { + toast(`No ${LABEL[kind]} found`); + return true; + } + + if (locations.length === 1) { + await navigateToReference(locations[0]); + return true; + } + + const symbolName = getWordAtCursor(view); + const panel = showReferencesPanel({ symbolName }); + panel.setReferences( + await Promise.all( + locations.map(async (location) => ({ + ...location, + lineText: await fetchLineText( + location.uri, + location.range.start.line, + ), + })), + ), + ); + return true; + } catch (error) { + console.error(`[LSP:Definition] Go to ${LABEL[kind]} failed:`, error); + return false; + } +} + +export const jumpToDefinition: Command = (view) => { + void goTo(view, "definition"); + return true; +}; + +export const jumpToDeclaration: Command = (view) => { + void goTo(view, "declaration"); + return true; +}; + +export const jumpToImplementation: Command = (view) => { + void goTo(view, "implementation"); + return true; +}; + +export const jumpToTypeDefinition: Command = (view) => { + void goTo(view, "typeDefinition"); + return true; +}; + +export const goToDefinition = (view: EditorView) => goTo(view, "definition"); +export const goToDeclaration = (view: EditorView) => goTo(view, "declaration"); +export const goToImplementation = (view: EditorView) => + goTo(view, "implementation"); +export const goToTypeDefinition = (view: EditorView) => + goTo(view, "typeDefinition"); diff --git a/src/cm/lsp/diagnostics.ts b/src/cm/lsp/diagnostics.ts index 906c505167..61e670ac73 100644 --- a/src/cm/lsp/diagnostics.ts +++ b/src/cm/lsp/diagnostics.ts @@ -10,6 +10,7 @@ import { } from "@codemirror/state"; import { type EditorView, ViewPlugin, type ViewUpdate } from "@codemirror/view"; import { addLspLogFor } from "./logs"; +import { safeLspPositionToOffset } from "./positionUtils"; import type { DocumentDiagnosticParams, DocumentDiagnosticReport, @@ -186,13 +187,13 @@ function collectLspDiagnostics( let from: number; let to: number; try { - const mappedFrom = plugin.fromPosition( - diagnostic.range.start, + const mappedFrom = safeLspPositionToOffset( plugin.syncedDoc, + diagnostic.range.start, ); - const mappedTo = plugin.fromPosition( - diagnostic.range.end, + const mappedTo = safeLspPositionToOffset( plugin.syncedDoc, + diagnostic.range.end, ); const fromResult = plugin.unsyncedChanges.mapPos(mappedFrom); const toResult = plugin.unsyncedChanges.mapPos(mappedTo); diff --git a/src/cm/lsp/documentColors.ts b/src/cm/lsp/documentColors.ts index 11496259fd..6c64c7540d 100644 --- a/src/cm/lsp/documentColors.ts +++ b/src/cm/lsp/documentColors.ts @@ -36,6 +36,7 @@ import { type ColorChipPayload, } from "../colorChip"; import type { LSPPluginAPI } from "./types"; +import { safeLspPositionToOffset } from "./positionUtils"; export interface DocumentColorsConfig { enabled?: boolean; @@ -178,8 +179,8 @@ function mapLspRange( let from: number; let to: number; try { - const fromBase = lsp.fromPosition(range.start, lsp.syncedDoc); - const toBase = lsp.fromPosition(range.end, lsp.syncedDoc); + const fromBase = safeLspPositionToOffset(lsp.syncedDoc, range.start); + const toBase = safeLspPositionToOffset(lsp.syncedDoc, range.end); const fromMapped = lsp.unsyncedChanges.mapPos( fromBase, 1, diff --git a/src/cm/lsp/index.ts b/src/cm/lsp/index.ts index f3a8b4d36a..e165f91b17 100644 --- a/src/cm/lsp/index.ts +++ b/src/cm/lsp/index.ts @@ -89,6 +89,16 @@ export { findAllReferences, findAllReferencesInTab, } from "./references"; +export { + goToDeclaration, + goToDefinition, + goToImplementation, + goToTypeDefinition, + jumpToDeclaration, + jumpToDefinition, + jumpToImplementation, + jumpToTypeDefinition, +} from "./definition"; export { acodeRenameExtension, acodeRenameKeymap, diff --git a/src/cm/lsp/inlayHints.ts b/src/cm/lsp/inlayHints.ts index 477c82d1b2..112ec3e5b3 100644 --- a/src/cm/lsp/inlayHints.ts +++ b/src/cm/lsp/inlayHints.ts @@ -22,6 +22,7 @@ import type { Position, } from "vscode-languageserver-types"; import type { LSPPluginAPI } from "./types"; +import { safeLspPositionToOffset } from "./positionUtils"; // ============================================================================ // Types @@ -238,7 +239,7 @@ function createPlugin(config: InlayHintsConfig) { let pos: number; try { - pos = lsp.fromPosition(h.position, lsp.syncedDoc); + pos = safeLspPositionToOffset(lsp.syncedDoc, h.position); const mapped = lsp.unsyncedChanges.mapPos(pos); if (mapped === null) continue; pos = mapped; diff --git a/src/cm/lsp/locationUtils.ts b/src/cm/lsp/locationUtils.ts new file mode 100644 index 0000000000..672c6a2744 --- /dev/null +++ b/src/cm/lsp/locationUtils.ts @@ -0,0 +1,26 @@ +import type { + Location, + LocationLink, +} from "vscode-languageserver-protocol"; + +export type LspLocationResult = + | Location + | Location[] + | LocationLink[] + | null; + +/** Normalize definition-style responses to the Location shape used by Acode. */ +export function normalizeLocations(result: LspLocationResult): Location[] { + if (!result) return []; + const locations = Array.isArray(result) ? result : [result]; + + return locations.map((location) => { + if ("targetUri" in location) { + return { + uri: location.targetUri, + range: location.targetSelectionRange ?? location.targetRange, + }; + } + return location; + }); +} diff --git a/src/cm/lsp/positionUtils.ts b/src/cm/lsp/positionUtils.ts new file mode 100644 index 0000000000..158afe188e --- /dev/null +++ b/src/cm/lsp/positionUtils.ts @@ -0,0 +1,16 @@ +import type { Text } from "@codemirror/state"; + +/** Convert an LSP position to an offset without reading outside the document. */ +export function safeLspPositionToOffset( + doc: Pick, + position: { line: number; character: number }, +): number { + if (position.line < 0) return 0; + if (position.line >= doc.lines) return doc.length; + + const line = doc.line(position.line + 1); + const character = Number.isFinite(position.character) + ? Math.max(0, Math.min(position.character, line.length)) + : 0; + return line.from + character; +} diff --git a/src/cm/lsp/references.ts b/src/cm/lsp/references.ts index def69288c3..cb02fe207d 100644 --- a/src/cm/lsp/references.ts +++ b/src/cm/lsp/references.ts @@ -33,7 +33,7 @@ interface ReferenceParams { context: { includeDeclaration: boolean }; } -async function fetchLineText(uri: string, line: number): Promise { +export async function fetchLineText(uri: string, line: number): Promise { try { interface EditorManagerLike { getFile?: (uri: string, type: string) => EditorFileLike | null; @@ -89,7 +89,7 @@ async function fetchLineText(uri: string, line: number): Promise { return ""; } -function getWordAtCursor(view: EditorView): string { +export function getWordAtCursor(view: EditorView): string { const { state } = view; const pos = state.selection.main.head; const word = state.wordAt(pos); diff --git a/src/cm/lsp/rename.ts b/src/cm/lsp/rename.ts index 75b89693cb..5e4c93b50b 100644 --- a/src/cm/lsp/rename.ts +++ b/src/cm/lsp/rename.ts @@ -8,6 +8,7 @@ import { import prompt from "dialogs/prompt"; import type * as lsp from "vscode-languageserver-protocol"; import { addLspLogFor } from "./logs"; +import { safeLspPositionToOffset } from "./positionUtils"; import type AcodeWorkspace from "./workspace"; interface RenameParams { @@ -99,12 +100,24 @@ async function performRename(view: EditorView): Promise { ) { initialValue = word; } else if ("start" in prepareResult && "end" in prepareResult) { - const from = plugin.fromPosition(prepareResult.start); - const to = plugin.fromPosition(prepareResult.end); + const from = safeLspPositionToOffset( + view.state.doc, + prepareResult.start, + ); + const to = safeLspPositionToOffset( + view.state.doc, + prepareResult.end, + ); initialValue = view.state.sliceDoc(from, to); } else if ("range" in prepareResult && prepareResult.range) { - const from = plugin.fromPosition(prepareResult.range.start); - const to = plugin.fromPosition(prepareResult.range.end); + const from = safeLspPositionToOffset( + view.state.doc, + prepareResult.range.start, + ); + const to = safeLspPositionToOffset( + view.state.doc, + prepareResult.range.end, + ); initialValue = view.state.sliceDoc(from, to); } } @@ -148,19 +161,11 @@ async function performRename(view: EditorView): Promise { return true; } -function lspPositionToOffset( - doc: { line: (n: number) => { from: number } }, - pos: lsp.Position, -): number { - const line = doc.line(pos.line + 1); - return line.from + pos.character; -} - async function applyChangesToFile( workspace: AcodeWorkspace, uri: string, lspChanges: LspChange[], - mapping: { mapPosition: (uri: string, pos: lsp.Position) => number }, + mapping: { mapPos: (uri: string, pos: number, assoc?: number) => number }, ): Promise { const file = workspace.getFile(uri); @@ -169,8 +174,16 @@ async function applyChangesToFile( if (view) { view.dispatch({ changes: lspChanges.map((change) => ({ - from: mapping.mapPosition(uri, change.range.start), - to: mapping.mapPosition(uri, change.range.end), + from: mapping.mapPos( + uri, + safeLspPositionToOffset(file.doc, change.range.start), + 1, + ), + to: mapping.mapPos( + uri, + safeLspPositionToOffset(file.doc, change.range.end), + -1, + ), insert: change.newText, })), userEvent: "rename", @@ -189,8 +202,8 @@ async function applyChangesToFile( const doc = displayedView.state.doc; displayedView.dispatch({ changes: lspChanges.map((change) => ({ - from: lspPositionToOffset(doc, change.range.start), - to: lspPositionToOffset(doc, change.range.end), + from: safeLspPositionToOffset(doc, change.range.start), + to: safeLspPositionToOffset(doc, change.range.end), insert: change.newText, })), userEvent: "rename", diff --git a/src/cm/lsp/tooltipExtensions.ts b/src/cm/lsp/tooltipExtensions.ts index 2a9a157ea0..7332d12a2c 100644 --- a/src/cm/lsp/tooltipExtensions.ts +++ b/src/cm/lsp/tooltipExtensions.ts @@ -40,6 +40,7 @@ import type { MarkupContent, } from "vscode-languageserver-types"; import { getMode, getModeForPath, type Mode } from "../modelist"; +import { safeLspPositionToOffset } from "./positionUtils"; interface LspClientInternals { config?: { @@ -258,14 +259,6 @@ async function loadHoverContentLanguages(contents: Hover["contents"]): Promise"']/g, (match) => { switch (match) { @@ -401,8 +394,14 @@ function lspTooltipSource( let to = pos; for (const { result } of results) { if (!result.range) continue; - from = Math.min(from, fromPosition(view.state.doc, result.range.start)); - to = Math.max(to, fromPosition(view.state.doc, result.range.end)); + from = Math.min( + from, + safeLspPositionToOffset(view.state.doc, result.range.start), + ); + to = Math.max( + to, + safeLspPositionToOffset(view.state.doc, result.range.end), + ); } return { diff --git a/src/cm/lsp/types.ts b/src/cm/lsp/types.ts index ad47e72df0..6f39038a42 100644 --- a/src/cm/lsp/types.ts +++ b/src/cm/lsp/types.ts @@ -631,13 +631,8 @@ export interface LSPPluginAPI { client: LSPClient & { sync: () => void; connected?: boolean }; /** Convert a document offset to an LSP Position */ toPosition: (offset: number) => { line: number; character: number }; - /** Convert an LSP Position to a document offset */ - fromPosition: ( - pos: { line: number; character: number }, - doc?: unknown, - ) => number; /** The currently synced document state */ - syncedDoc: { length: number }; + syncedDoc: Text; /** Pending changes that haven't been synced yet */ unsyncedChanges: { mapPos: (pos: number, assoc?: number, mode?: MapMode) => number | null; diff --git a/src/cm/touchSelectionMenu.js b/src/cm/touchSelectionMenu.js index c61b7bc060..b017acb1fb 100644 --- a/src/cm/touchSelectionMenu.js +++ b/src/cm/touchSelectionMenu.js @@ -140,6 +140,31 @@ function hasCodeActionProvider(view) { ); } +function hasLspActions(view) { + const capabilities = [ + ["definition", "definitionProvider"], + ["declaration", "declarationProvider"], + ["implementation", "implementationProvider"], + ["typeDefinition", "typeDefinitionProvider"], + ["references", "referencesProvider"], + ]; + if ( + capabilities.some(([feature, capability]) => + LSPPlugin.getAll(view, feature).some( + (plugin) => !!plugin.client.serverCapabilities?.[capability], + ), + ) + ) { + return true; + } + return ( + !view.state.readOnly && + LSPPlugin.getAll(view, "rename").some( + (plugin) => !!plugin.client.serverCapabilities?.renameProvider, + ) + ); +} + function animationsDisabled() { return ( document.body.classList.contains("no-animation") || @@ -665,6 +690,7 @@ class TouchSelectionMenuController { const items = filterSelectionMenuItems( selectionMenu({ codeActionsAvailable: hasCodeActionProvider(this.#view), + lspActionsAvailable: hasLspActions(this.#view), }), { readOnly: this.#isReadOnly(), diff --git a/src/components/referencesPanel/utils.js b/src/components/referencesPanel/utils.js index d88a9ca84f..d02de6ca54 100644 --- a/src/components/referencesPanel/utils.js +++ b/src/components/referencesPanel/utils.js @@ -1,5 +1,5 @@ -import { EditorView } from "@codemirror/view"; import { focusEditorIfEditable } from "cm/editorReadOnly"; +import { safeLspPositionToOffset } from "cm/lsp/positionUtils"; import Sidebar from "components/sidebar"; import DOMPurify from "dompurify"; import openFile from "lib/openFile"; @@ -117,19 +117,22 @@ export async function navigateToReference(ref) { if (!editor) return; const doc = editor.state.doc; - const startLine = doc.line(ref.range.start.line + 1); - const endLine = doc.line(ref.range.end.line + 1); - const from = Math.min( - startLine.from + ref.range.start.character, - startLine.to, - ); - const to = Math.min(endLine.from + ref.range.end.character, endLine.to); + const from = safeLspPositionToOffset(doc, ref.range.start); + const to = safeLspPositionToOffset(doc, ref.range.end); - editor.dispatch({ - selection: { anchor: from, head: to }, - effects: EditorView.scrollIntoView(from, { y: "center" }), - }); - focusEditorIfEditable(editor); + if (typeof editorManager.revealRange === "function") { + editorManager.revealRange(from, to, { + y: "center", + userEvent: "select.definition", + }); + } else { + editor.dispatch({ + selection: { anchor: from, head: to }, + scrollIntoView: true, + userEvent: "select.definition", + }); + focusEditorIfEditable(editor); + } } catch (error) { console.error("Failed to navigate to reference:", error); } diff --git a/src/lib/editorManager.js b/src/lib/editorManager.js index d216b4b933..3ce9068465 100644 --- a/src/lib/editorManager.js +++ b/src/lib/editorManager.js @@ -1850,13 +1850,7 @@ async function EditorManager($header, $body) { const col = Math.max(0, Math.min(targetColumn, docLine.length)); const pos = docLine.from + col; - // Move cursor and scroll into view - editor.dispatch({ - selection: { anchor: pos, head: pos }, - effects: EditorView.scrollIntoView(pos, { y: "center" }), - }); - focusEditorIfEditable(editor); - return true; + return revealEditorRange(editor, pos); } catch (error) { console.error("Error in gotoLine:", error); return false; @@ -2181,12 +2175,7 @@ async function EditorManager($header, $body) { const col = Math.max(0, Math.min(targetColumn, docLine.length)); const pos = docLine.from + col; - targetEditor.dispatch({ - selection: { anchor: pos, head: pos }, - effects: EditorView.scrollIntoView(pos, { y: "center" }), - }); - focusEditorIfEditable(targetEditor); - return true; + return revealEditorRange(targetEditor, pos); } catch (error) { console.error("Error in gotoLine:", error); return false; @@ -3192,6 +3181,9 @@ async function EditorManager($header, $body) { hasUnsavedFiles, getEditorHeight, getEditorWidth, + revealRange(from, to = from, options) { + return revealEditorRange(manager.editor, from, to, options); + }, header: $header, openPreviousEditorFromHistory, openNextEditorFromHistory, @@ -3452,6 +3444,45 @@ async function EditorManager($header, $body) { applyFileToEditor(file, { forceRecreate: true }); } + /** + * Reveal an editor range after a file switch. + * + * File activation restores the tab's saved viewport over two animation + * frames and a short timeout. Explicit navigation must cancel that work or + * it can overwrite CodeMirror's scrollIntoView effect while leaving the new + * selection in place. + */ + function revealEditorRange( + targetEditor, + from, + to = from, + { y = "center", userEvent = "select.reveal" } = {}, + ) { + if (!targetEditor) return false; + + try { + const length = targetEditor.state.doc.length; + const anchor = Math.max(0, Math.min(Number(from) || 0, length)); + const head = Math.max(0, Math.min(Number(to) || 0, length)); + + if (targetEditor === editor) { + cancelPendingScrollRestore(); + clearScrollbarScrollLock(); + } + + targetEditor.dispatch({ + selection: { anchor, head }, + effects: EditorView.scrollIntoView(anchor, { y }), + userEvent, + }); + focusEditorIfEditable(targetEditor); + return true; + } catch (error) { + console.error("Error revealing editor range:", error); + return false; + } + } + appSettings.on("update:tabSize", function () { updateEditorIndentationSettings(); }); diff --git a/src/lib/selectionMenu.js b/src/lib/selectionMenu.js index 333333fb8e..f071d62bd8 100644 --- a/src/lib/selectionMenu.js +++ b/src/lib/selectionMenu.js @@ -27,10 +27,78 @@ const showCodeActions = async () => { } }; +const showLspActions = async () => { + const { editor } = editorManager; + if (!editor) return; + + try { + const lsp = await import("cm/lsp"); + const { LSPPlugin } = await import("@codemirror/lsp-client"); + const hasCapability = (feature, capability) => + LSPPlugin.getAll(editor, feature).some( + (plugin) => !!plugin.client.serverCapabilities?.[capability], + ); + const editable = !editor.state.readOnly; + const actions = [ + hasCapability("definition", "definitionProvider") && { + value: "definition", + text: getLabel("go to definition", "Go to Definition"), + icon: "keyboard_arrow_right", + run: lsp.goToDefinition, + }, + hasCapability("declaration", "declarationProvider") && { + value: "declaration", + text: getLabel("go to declaration", "Go to Declaration"), + icon: "keyboard_arrow_right", + run: lsp.goToDeclaration, + }, + hasCapability("implementation", "implementationProvider") && { + value: "implementation", + text: getLabel("go to implementation", "Go to Implementation"), + icon: "keyboard_arrow_right", + run: lsp.goToImplementation, + }, + hasCapability("typeDefinition", "typeDefinitionProvider") && { + value: "type-definition", + text: getLabel("go to type definition", "Go to Type Definition"), + icon: "keyboard_arrow_right", + run: lsp.goToTypeDefinition, + }, + hasCapability("references", "referencesProvider") && { + value: "references", + text: getLabel("find references", "Find References"), + icon: "linkinsert_link", + run: lsp.findAllReferences, + }, + editable && + hasCapability("rename", "renameProvider") && { + value: "rename", + text: getLabel("rename symbol", "Rename Symbol"), + icon: "edit", + run: lsp.renameSymbol, + }, + ].filter(Boolean); + + if (!actions.length) return; + // Let the tap/click that opened this picker finish before its rows exist. + // Otherwise Android WebView can deliver that click to the first row. + await new Promise((resolve) => setTimeout(resolve, 0)); + const { default: select } = await import("dialogs/select"); + const selected = await select( + getLabel("lsp actions", "LSP Actions"), + actions, + ).catch(() => null); + const action = actions.find((item) => item.value === selected); + if (action) await action.run(editor); + } catch (error) { + console.warn("[SelectionMenu] LSP actions not available:", error); + } +}; + const items = []; export default function selectionMenu(options = {}) { - const { codeActionsAvailable = true } = options; + const { codeActionsAvailable = true, lspActionsAvailable = true } = options; return [ item( () => exec("copy"), @@ -92,6 +160,17 @@ export default function selectionMenu(options = {}) { label: getLabel("code actions", "Code Actions"), }, ), + lspActionsAvailable && + item( + () => showLspActions(), + , + "all", + true, + { + id: "lsp-actions", + label: getLabel("lsp actions", "LSP Actions"), + }, + ), ...items, ].filter(Boolean); } diff --git a/tests/unit/lspExternalWebSocketLifecycle.test.js b/tests/unit/lspExternalWebSocketLifecycle.test.js index 65b66dbcbc..227061a14d 100644 --- a/tests/unit/lspExternalWebSocketLifecycle.test.js +++ b/tests/unit/lspExternalWebSocketLifecycle.test.js @@ -197,6 +197,24 @@ afterEach(async () => { }); describe("LSP client idle lifecycle", () => { + it("advertises lazy code-action edit resolution", async () => { + manager = new LspClientManager(); + await manager.getExtensionsForFile({ + uri: "file:///workspace/main.rs", + rootUri: "file:///workspace", + languageId: LANGUAGE_ID, + view, + }); + + const initialize = TestWebSocket.instances[0].sent + .map((data) => JSON.parse(data)) + .find((message) => message.method === "initialize"); + expect(initialize.params.capabilities.textDocument.codeAction).toEqual({ + dataSupport: true, + resolveSupport: {properties: ["edit"]}, + }); + }); + it("reuses an external WebSocket client when a file attaches during the grace period", async () => { const onClientIdle = vi.fn(({dispose}) => void dispose()); manager = new LspClientManager({onClientIdle}); diff --git a/tests/unit/lspLocationUtils.test.ts b/tests/unit/lspLocationUtils.test.ts new file mode 100644 index 0000000000..8a006dd372 --- /dev/null +++ b/tests/unit/lspLocationUtils.test.ts @@ -0,0 +1,38 @@ +import { normalizeLocations } from "cm/lsp/locationUtils"; +import { describe, expect, it } from "vitest"; + +const targetRange = { + start: { line: 4, character: 1 }, + end: { line: 4, character: 8 }, +}; + +describe("normalizeLocations", () => { + it("keeps Location responses unchanged", () => { + const location = { uri: "file:///project/a.ts", range: targetRange }; + expect(normalizeLocations(location)).toEqual([location]); + }); + + it("uses a LocationLink target selection range when present", () => { + const selection = { + start: { line: 4, character: 3 }, + end: { line: 4, character: 6 }, + }; + expect( + normalizeLocations([ + { + targetUri: "file:///project/a.ts", + targetRange, + targetSelectionRange: selection, + }, + ]), + ).toEqual([{ uri: "file:///project/a.ts", range: selection }]); + }); + + it("falls back to the LocationLink target range", () => { + expect( + normalizeLocations([ + { targetUri: "file:///project/a.ts", targetRange }, + ]), + ).toEqual([{ uri: "file:///project/a.ts", range: targetRange }]); + }); +}); diff --git a/tests/unit/lspPositionUtils.test.ts b/tests/unit/lspPositionUtils.test.ts new file mode 100644 index 0000000000..789e4ff250 --- /dev/null +++ b/tests/unit/lspPositionUtils.test.ts @@ -0,0 +1,28 @@ +import { Text } from "@codemirror/state"; +import { safeLspPositionToOffset } from "cm/lsp/positionUtils"; +import { describe, expect, it } from "vitest"; + +describe("safeLspPositionToOffset", () => { + const doc = Text.of(["alpha", "beta"]); + + it("converts valid positions and clamps oversized characters", () => { + expect(safeLspPositionToOffset(doc, { line: 0, character: 2 })).toBe(2); + expect(safeLspPositionToOffset(doc, { line: 1, character: 99 })).toBe( + doc.length, + ); + }); + + it("accepts the exclusive one-past-EOF position used by LSP edits", () => { + expect( + safeLspPositionToOffset(doc, { line: doc.lines, character: 0 }), + ).toBe(doc.length); + expect( + safeLspPositionToOffset(doc, { line: doc.lines + 10, character: 4 }), + ).toBe(doc.length); + }); + + it("clamps negative lines and characters", () => { + expect(safeLspPositionToOffset(doc, { line: -1, character: 20 })).toBe(0); + expect(safeLspPositionToOffset(doc, { line: 1, character: -4 })).toBe(6); + }); +}); From 289de09744d6ce81150917bf4d318ed305585bd7 Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Sun, 30 Aug 2026 04:42:59 +0000 Subject: [PATCH 24/38] fix(editor): highlight all visible search matches (#2838) --- src/cm/mainEditorExtensions.ts | 5 +- src/cm/searchMatchHighlighter.ts | 140 +++++++++++++++++++ tests/unit/searchMatchHighlighter.test.ts | 161 ++++++++++++++++++++++ 3 files changed, 305 insertions(+), 1 deletion(-) create mode 100644 src/cm/searchMatchHighlighter.ts create mode 100644 tests/unit/searchMatchHighlighter.test.ts diff --git a/src/cm/mainEditorExtensions.ts b/src/cm/mainEditorExtensions.ts index e445bf9b40..f825898d4a 100644 --- a/src/cm/mainEditorExtensions.ts +++ b/src/cm/mainEditorExtensions.ts @@ -1,5 +1,6 @@ import type { Extension } from "@codemirror/state"; import { EditorView } from "@codemirror/view"; +import searchMatchHighlighter from "./searchMatchHighlighter"; interface MainEditorExtensionOptions { emmetExtensions?: Extension[]; @@ -51,7 +52,9 @@ export function createMainEditorExtensions( pushExtension(extensions, options.multiCursorSelectionExtension); pushExtension(extensions, options.touchSelectionUpdateExtension); pushExtension(extensions, options.quickToolsModifierInputExtension); - pushExtension(extensions, options.searchExtension); + if (options.searchExtension != null) { + extensions.push(options.searchExtension, searchMatchHighlighter); + } pushExtension(extensions, options.readOnlyExtension); if (options.optionExtensions?.length) { diff --git a/src/cm/searchMatchHighlighter.ts b/src/cm/searchMatchHighlighter.ts new file mode 100644 index 0000000000..70449c54ab --- /dev/null +++ b/src/cm/searchMatchHighlighter.ts @@ -0,0 +1,140 @@ +import { + getSearchQuery, + searchPanelOpen, + type SearchQuery, +} from "@codemirror/search"; +import { RangeSetBuilder, type EditorState } from "@codemirror/state"; +import type { DecorationSet, ViewUpdate } from "@codemirror/view"; +import { Decoration, EditorView, ViewPlugin } from "@codemirror/view"; + +interface DocRange { + from: number; + to: number; +} + +// Keep the same regular-expression look-around used by CodeMirror's built-in +// search highlighter. Literal searches only need enough context to catch a +// match that crosses a viewport boundary. +const REGEXP_SCAN_MARGIN = 250; + +const matchMark = Decoration.mark({ class: "cm-searchMatch" }); +const selectedMatchMark = Decoration.mark({ + class: "cm-searchMatch cm-searchMatch-selected", +}); + +function scanMargin(query: SearchQuery): number { + return query.regexp ? REGEXP_SCAN_MARGIN : query.search.length; +} + +function sameHighlightQuery(left: SearchQuery, right: SearchQuery): boolean { + return ( + left.search === right.search && + left.caseSensitive === right.caseSensitive && + left.literal === right.literal && + left.regexp === right.regexp && + left.wholeWord === right.wholeWord && + left.test === right.test + ); +} + +function scanRanges( + visibleRanges: readonly DocRange[], + margin: number, + docLength: number, +): DocRange[] { + const ranges: DocRange[] = []; + + for (const visible of visibleRanges) { + const from = Math.max(0, visible.from - margin); + const to = Math.min(docLength, visible.to + margin); + const previous = ranges[ranges.length - 1]; + + if (previous && from <= previous.to) { + previous.to = Math.max(previous.to, to); + } else { + ranges.push({ from, to }); + } + } + + return ranges; +} + +/** + * Builds search marks only around rendered document ranges. Keeping this + * separate from the view plugin makes the viewport-only behavior testable. + */ +export function buildSearchMatchDecorations( + state: EditorState, + visibleRanges: readonly DocRange[], +): DecorationSet { + const query = getSearchQuery(state); + if (!query.search || !query.valid || searchPanelOpen(state)) { + return Decoration.none; + } + + const builder = new RangeSetBuilder(); + const ranges = scanRanges(visibleRanges, scanMargin(query), state.doc.length); + const selectedRanges = new Map>(); + for (const range of state.selection.ranges) { + let ends = selectedRanges.get(range.from); + if (!ends) selectedRanges.set(range.from, (ends = new Set())); + ends.add(range.to); + } + + for (const { from, to } of ranges) { + const cursor = query.getCursor(state, from, to); + for (let result = cursor.next(); !result.done; result = cursor.next()) { + const match = result.value; + const selected = selectedRanges.get(match.from)?.has(match.to) === true; + builder.add( + match.from, + match.to, + selected ? selectedMatchMark : matchMark, + ); + } + } + + return builder.finish(); +} + +class SearchMatchHighlighterPlugin { + decorations: DecorationSet; + + constructor(view: EditorView) { + this.decorations = buildSearchMatchDecorations( + view.state, + view.visibleRanges, + ); + } + + update(update: ViewUpdate): void { + const queryChanged = !sameHighlightQuery( + getSearchQuery(update.state), + getSearchQuery(update.startState), + ); + const panelChanged = + searchPanelOpen(update.state) !== searchPanelOpen(update.startState); + + if ( + queryChanged || + panelChanged || + update.docChanged || + update.selectionSet || + update.viewportChanged + ) { + this.decorations = buildSearchMatchDecorations( + update.state, + update.view.visibleRanges, + ); + } + } +} + +export const searchMatchHighlighter = ViewPlugin.fromClass( + SearchMatchHighlighterPlugin, + { + decorations: (plugin) => plugin.decorations, + }, +); + +export default searchMatchHighlighter; diff --git a/tests/unit/searchMatchHighlighter.test.ts b/tests/unit/searchMatchHighlighter.test.ts new file mode 100644 index 0000000000..7b4fb5ac23 --- /dev/null +++ b/tests/unit/searchMatchHighlighter.test.ts @@ -0,0 +1,161 @@ +// @vitest-environment happy-dom + +import { + openSearchPanel, + search, + SearchQuery, + setSearchQuery, +} from "@codemirror/search"; +import { EditorSelection, EditorState } from "@codemirror/state"; +import { type DecorationSet, EditorView } from "@codemirror/view"; +import searchMatchHighlighter, { + buildSearchMatchDecorations, +} from "cm/searchMatchHighlighter"; +import { afterEach, describe, expect, it } from "vitest"; + +interface HighlightRange { + from: number; + to: number; + className: string; +} + +const views: EditorView[] = []; + +afterEach(() => { + while (views.length) views.pop()?.destroy(); + document.body.replaceChildren(); +}); + +function searchState( + doc: string, + searchText: string, + selection = EditorSelection.cursor(0), + options: Partial[0]> = {}, +): EditorState { + const state = EditorState.create({ + doc, + selection, + extensions: search(), + }); + return state.update({ + effects: setSearchQuery.of( + new SearchQuery({ search: searchText, ...options }), + ), + }).state; +} + +function highlightRanges( + state: EditorState, + visibleRanges: readonly { from: number; to: number }[], +): HighlightRange[] { + return decorationRanges( + buildSearchMatchDecorations(state, visibleRanges), + state.doc.length, + ); +} + +function decorationRanges( + decorations: DecorationSet, + docLength: number, +): HighlightRange[] { + const ranges: HighlightRange[] = []; + decorations.between(0, docLength, (from, to, decoration) => { + ranges.push({ + from, + to, + className: String(decoration.spec.class ?? ""), + }); + }); + return ranges; +} + +describe("custom search match highlighter", () => { + it("reacts to custom query and selection updates without a native panel", () => { + const view = new EditorView({ + state: EditorState.create({ + doc: "foo foo", + extensions: [search(), searchMatchHighlighter], + }), + parent: document.body, + }); + views.push(view); + + view.dispatch({ + effects: setSearchQuery.of(new SearchQuery({ search: "foo" })), + }); + view.dispatch({ selection: EditorSelection.range(4, 7) }); + + const plugin = view.plugin(searchMatchHighlighter); + expect(plugin).not.toBeNull(); + expect( + decorationRanges(plugin!.decorations, view.state.doc.length), + ).toEqual([ + { from: 0, to: 3, className: "cm-searchMatch" }, + { + from: 4, + to: 7, + className: "cm-searchMatch cm-searchMatch-selected", + }, + ]); + }); + + it("highlights every match in the rendered range and marks the selection", () => { + const state = searchState( + "foo foo foo", + "foo", + EditorSelection.range(4, 7), + ); + + expect(highlightRanges(state, [{ from: 0, to: state.doc.length }])).toEqual( + [ + { from: 0, to: 3, className: "cm-searchMatch" }, + { + from: 4, + to: 7, + className: "cm-searchMatch cm-searchMatch-selected", + }, + { from: 8, to: 11, className: "cm-searchMatch" }, + ], + ); + }); + + it("limits work to the viewport instead of scanning a large document", () => { + const padding = "x".repeat(100_000); + const doc = `needle${padding}needle${padding}needle`; + const middleMatch = 6 + padding.length; + const state = searchState(doc, "needle"); + + expect( + highlightRanges(state, [ + { from: middleMatch - 10, to: middleMatch + 16 }, + ]), + ).toEqual([ + { from: middleMatch, to: middleMatch + 6, className: "cm-searchMatch" }, + ]); + }); + + it("merges nearby viewport windows so matches are not decorated twice", () => { + const state = searchState("foo foo foo", "foo"); + + expect( + highlightRanges(state, [ + { from: 0, to: 5 }, + { from: 6, to: 11 }, + ]), + ).toHaveLength(3); + }); + + it("leaves highlighting to CodeMirror when its native panel is open", () => { + const view = new EditorView({ + state: searchState("foo foo", "foo"), + parent: document.body, + }); + views.push(view); + + openSearchPanel(view); + + expect( + highlightRanges(view.state, [{ from: 0, to: view.state.doc.length }]), + ).toEqual([]); + }); +}); From fd3e31a43126cefb1d2de913a7b78dd99c40533b Mon Sep 17 00:00:00 2001 From: summoner Date: Mon, 31 Aug 2026 06:08:32 +0000 Subject: [PATCH 25/38] Translation: Update hu-hu.json (#2828) * Translation: Update hu-hu.json Fixing AI-translated strings * Translation: Update hu-hu.json Fix typos --- src/lang/hu-hu.json | 54 ++++++++++++++++++++++----------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/src/lang/hu-hu.json b/src/lang/hu-hu.json index 061b674d7b..f8e76f3ac0 100644 --- a/src/lang/hu-hu.json +++ b/src/lang/hu-hu.json @@ -837,35 +837,35 @@ "horizontal scroll margin": "Vízszintes görgetési margó", "settings-info-horizontal-scroll-margin": "A leghosszabb sor után egy üres hely lesz hozzáadva a képernyő széléhez, ha a sorok tördelése ki van kapcsolva. Adjon meg egy nem negatív egész pixelértéket.", "plugin-review:dialog-label": "Bővítményértékelések", - "plugin-review:account-check-failed": "Nem sikerült ellenőrizni a fiókodat. Próbáld újra.", - "plugin-review:sign-in": "Jelentkezz be az értékeléshez", - "plugin-review:edit": "Értékelésed szerkesztése", - "plugin-review:add": "Értékelés hozzáadása…", - "plugin-review:placeholder": "Oszd meg a tapasztalataidat…", - "plugin-review:input-label": "Bővítmény értékelése", - "plugin-review:vote-group-label": "Szavazat", + "plugin-review:account-check-failed": "Nem sikerült ellenőrizni a fiókját. Próbálja újra.", + "plugin-review:sign-in": "Megjegyzés írásához be kell jelentkezni", + "plugin-review:edit": "Megjegyzés szerkesztése", + "plugin-review:add": "Megjegyzés hozzáadása…", + "plugin-review:placeholder": "Ossza meg a tapasztalatait…", + "plugin-review:input-label": "Megjegyzés hozzáadása", + "plugin-review:vote-group-label": "Szavazás", "plugin-review:thumbs-up": "Tetszik", "plugin-review:thumbs-down": "Nem tetszik", - "plugin-review:delete": "Értékelés törlése", - "plugin-review:load-failed": "Nem sikerült betölteni az értékeléseket.", + "plugin-review:delete": "Megjegyzés törlése", + "plugin-review:load-failed": "Nem sikerült betölteni a megjegyzéseket.", "plugin-review:retry": "Újrapróbálkozás", - "plugin-review:empty-title": "Még nincsenek értékelések", - "plugin-review:empty-description": "Oszd meg elsőként a tapasztalataidat.", - "plugin-review:yours": "Saját értékelésed", - "plugin-review:community": "Közösségi értékelések", - "plugin-review:no-other-reviews": "Még nincsenek további értékelések.", - "plugin-review:login-incomplete": "A bejelentkezés nem fejeződött be.", + "plugin-review:empty-title": "Még nincsenek megjegyzések", + "plugin-review:empty-description": "Ossza meg elsőként a tapasztalatait.", + "plugin-review:yours": "Saját megjegyzés", + "plugin-review:community": "Közösségi megjegyzések", + "plugin-review:no-other-reviews": "Még nincsenek további megjegyzések.", + "plugin-review:login-incomplete": "A bejelentkezési folyamat még nem fejeződött be.", "plugin-review:sign-in-failed": "Nem sikerült bejelentkezni.", - "plugin-review:session-expired-review": "A munkameneted lejárt. Jelentkezz be újra az értékeléshez.", - "plugin-review:save-failed": "Nem sikerült menteni az értékelést.", - "plugin-review:delete-confirmation": "Törlöd az értékelésedet? Ez nem vonható vissza.", - "plugin-review:session-expired-continue": "A munkameneted lejárt. Jelentkezz be újra a folytatáshoz.", - "plugin-review:delete-failed": "Nem sikerült törölni az értékelést.", - "plugin-review:you": "Te", - "plugin-review:edit-action": "Értékelés szerkesztése", - "plugin-review:recommended": "Ajánlja ezt a bővítményt", - "plugin-review:error-max-length": "Az értékelés legfeljebb {max} karakter lehet.", - "plugin-review:error-downvote-comment": "Írd meg a fejlesztőnek, min lehetne javítani.", - "plugin-review:error-empty": "Adj hozzá megjegyzést, vagy válaszd a Tetszik lehetőséget.", - "plugin-review:unrated": "Nincs értékelve" + "plugin-review:session-expired-review": "A munkamenet lejárt. Jelentkezzen be újra a megjegyzés írásához.", + "plugin-review:save-failed": "Nem sikerült menteni a megjegyzést.", + "plugin-review:delete-confirmation": "Biztosan törli a megjegyzést? Ez a művelet nem vonható vissza.", + "plugin-review:session-expired-continue": "A munkamenet lejárt. A folytatáshoz jelentkezzen be újra.", + "plugin-review:delete-failed": "Nem sikerült törölni a megjegyzést.", + "plugin-review:you": "Ön", + "plugin-review:edit-action": "Megjegyzés szerkesztése", + "plugin-review:recommended": "Bővítmény ajánlása", + "plugin-review:error-max-length": "A megjegyzés szövege legfeljebb {max} karakter lehet.", + "plugin-review:error-downvote-comment": "Írja meg a fejlesztőknek, hogy min lehetne javítani.", + "plugin-review:error-empty": "Adjon hozzá megjegyzést vagy válassza a „Tetszik” lehetőséget.", + "plugin-review:unrated": "Még nem értékelte senki" } From d3877473f3a1c72e60c8eb207cc3f329ca3eefec Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 Aug 2026 06:13:37 +0000 Subject: [PATCH 26/38] chore(deps): bump actions/setup-java from 5 to 6 (#2821) Bumps [actions/setup-java](https://github.com/actions/setup-java) from 5 to 6. - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](https://github.com/actions/setup-java/compare/v5...v6) --- updated-dependencies: - dependency-name: actions/setup-java dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/nightly-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nightly-build.yml b/.github/workflows/nightly-build.yml index b7812b4341..4323996a06 100644 --- a/.github/workflows/nightly-build.yml +++ b/.github/workflows/nightly-build.yml @@ -106,7 +106,7 @@ jobs: allow-unsafe-pr-checkout: ${{ !!(inputs.is_PR && inputs.PR_NUMBER && github.event.pull_request.head.sha) }} - name: Setup Java - uses: actions/setup-java@v5 + uses: actions/setup-java@v6 with: distribution: temurin java-version: "21" From 618a6fd7a145e830936d4f456e5a56b8558c3768 Mon Sep 17 00:00:00 2001 From: Rohit Kushvaha Date: Mon, 31 Aug 2026 07:08:49 +0000 Subject: [PATCH 27/38] feat: improved pluginContext (#2806) * feat: improved pluginContext * Update src/lib/pluginContext.js Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> * format * fix: holes * format * . --------- Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- package-lock.json | 5247 +---------------- src/lib/loadPlugin.js | 10 +- src/lib/pluginContext.js | 162 + src/plugins/pluginContext/plugin.xml | 5 - .../pluginContext/src/android/Tee.java | 160 +- .../pluginContext/www/PluginContext.js | 90 - 6 files changed, 383 insertions(+), 5291 deletions(-) create mode 100644 src/lib/pluginContext.js delete mode 100644 src/plugins/pluginContext/www/PluginContext.js diff --git a/package-lock.json b/package-lock.json index 85817b8fcd..db9891a999 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4151,13 +4151,6 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true, - "license": "MIT" - }, "node_modules/@iconify/types": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", @@ -4705,34 +4698,6 @@ "node": ">=10" } }, - "node_modules/@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "deprecated": "This functionality has been moved to @npmcli/fs", - "dev": true, - "license": "MIT", - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/move-file/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@npmcli/name-from-folder": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-4.0.0.tgz", @@ -5751,16 +5716,6 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/@sphinxxxx/color-conversion": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/@sphinxxxx/color-conversion/-/color-conversion-2.2.2.tgz", @@ -5774,29 +5729,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "defer-to-connect": "^1.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/@tufjs/canonical-json": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", @@ -6638,53 +6570,6 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/acorn": { "version": "8.18.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz", @@ -6706,33 +6591,6 @@ "node": ">= 14" } }, - "node_modules/agentkeepalive": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", - "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ajv": { "version": "8.20.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", @@ -6810,61 +6668,6 @@ "integrity": "sha512-iFY7JCgHbepc0b82yLaw4IMortylNb6wG4kL+4R0C3iv6i+RHGHux/yUX5BTiRvSX/shMnngjR1YyNMnXEFh5A==", "license": "MIT" }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-align/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-align/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-align/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", @@ -6875,16 +6678,6 @@ "node": ">=6" } }, - "node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/ansi-regex": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", @@ -6940,48 +6733,12 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true, - "license": "ISC" - }, - "node_modules/are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", - "deprecated": "This package is no longer supported.", - "dev": true, - "license": "ISC", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, "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==", "license": "Python-2.0" }, - "node_modules/array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true, - "license": "MIT" - }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -6991,16 +6748,6 @@ "node": ">=8" } }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, "node_modules/assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", @@ -7020,43 +6767,6 @@ "node": "*" } }, - "node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/atomically": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/atomically/-/atomically-1.7.0.tgz", - "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.12.0" - } - }, "node_modules/autoprefixer": { "version": "10.5.4", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.4.tgz", @@ -7100,23 +6810,6 @@ "integrity": "sha512-f86EjiUKE6Xvczc4ioP1JBlWG7FKrE13qe/DxBCpe8GCipCq2nFw73aO8QEBKHfSbYGDN5eB9jXWKen7tspDqQ==", "license": "MIT" }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", - "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", - "dev": true, - "license": "MIT" - }, "node_modules/babel-loader": { "version": "10.1.1", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-10.1.1.tgz", @@ -7202,16 +6895,6 @@ "node": ">=6.0.0" } }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, "node_modules/big-integer": { "version": "1.6.52", "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", @@ -7284,227 +6967,69 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/body-parser": { - "version": "1.20.5", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.5.tgz", - "integrity": "sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA==", - "dev": true, + "node_modules/bplist-parser": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz", + "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==", "license": "MIT", "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.1", - "iconv-lite": "~0.4.24", - "on-finished": "~2.4.1", - "qs": "~6.15.1", - "raw-body": "~2.5.3", - "type-is": "~1.6.18", - "unpipe": "~1.0.0" + "big-integer": "1.6.x" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">= 5.10.0" } }, - "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==", - "dev": true, + "node_modules/brace-expansion": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", "license": "MIT", "dependencies": { - "ms": "2.0.0" + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" } }, - "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==", - "dev": true, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "fill-range": "^7.1.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "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/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.15.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz", - "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==", + "node_modules/browserslist": { + "version": "4.28.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.8.tgz", + "integrity": "sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "es-define-property": "^1.0.1", - "side-channel": "^1.1.1" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/boxen/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/bplist-parser": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz", - "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==", - "license": "MIT", - "dependencies": { - "big-integer": "1.6.x" - }, - "engines": { - "node": ">= 5.10.0" - } - }, - "node_modules/brace-expansion": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", - "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true, - "license": "ISC" - }, - "node_modules/browserslist": { - "version": "4.28.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.8.tgz", - "integrity": "sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", "dependencies": { "baseline-browser-mapping": "^2.11.12", "caniuse-lite": "^1.0.30001809", @@ -7540,23 +7065,6 @@ "node": ">=4.0" } }, - "node_modules/builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/cacache": { "version": "20.0.4", "resolved": "https://registry.npmjs.org/cacache/-/cacache-20.0.4.tgz", @@ -7578,82 +7086,6 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -7697,13 +7129,6 @@ ], "license": "CC-BY-4.0" }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true, - "license": "Apache-2.0" - }, "node_modules/chai": { "version": "4.3.6", "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", @@ -7740,13 +7165,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true, - "license": "MIT" - }, "node_modules/check-error": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", @@ -7796,23 +7214,6 @@ "node": ">=6.0" } }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/cli": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", @@ -7827,39 +7228,6 @@ "node": ">=0.2.5" } }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true, - "license": "ISC" - }, "node_modules/cli/node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -7927,19 +7295,6 @@ "node": ">=20" } }, - "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/cmd-shim": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-8.0.0.tgz", @@ -7949,16 +7304,6 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/codemirror": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.2.tgz", @@ -8024,19 +7369,6 @@ "resolved": "src/plugins/pluginContext", "link": true }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/commander": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", @@ -8055,86 +7387,6 @@ "node": ">= 18" } }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "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==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -8142,60 +7394,6 @@ "dev": true, "license": "MIT" }, - "node_modules/conf": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/conf/-/conf-10.2.0.tgz", - "integrity": "sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conf/node_modules/semver": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", - "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/configstore": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", @@ -8222,57 +7420,6 @@ "date-now": "^0.1.4" } }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-disposition/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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "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", @@ -8280,23 +7427,6 @@ "dev": true, "license": "MIT" }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", - "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", - "dev": true, - "license": "MIT" - }, "node_modules/cordova": { "version": "13.0.0", "resolved": "https://registry.npmjs.org/cordova/-/cordova-13.0.0.tgz", @@ -8607,61 +7737,6 @@ "resolved": "src/plugins/websocket", "link": true }, - "node_modules/cordova-serve": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cordova-serve/-/cordova-serve-4.0.1.tgz", - "integrity": "sha512-YbfXaZ60yr5dkqmDFQgrU7TSKnzCqYsxHgIUzDeX8RggZb6mz1F9jMfUBbaYyaU7JjcuJ0aoRPYLvwSGQVhGkw==", - "dev": true, - "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/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cordova-serve/node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/cordova-serve/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/cordova/node_modules/semver": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", @@ -8867,19 +7942,6 @@ "node": ">=4" } }, - "node_modules/currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-find-index": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/cytoscape": { "version": "3.34.2", "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.34.2.tgz", @@ -9388,19 +8450,6 @@ "lodash-es": "^4.17.21" } }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "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", @@ -9413,32 +8462,6 @@ "integrity": "sha512-QDTCU0M0MxR3hQfnlDJfwekQiaanm1ubOD231u73WBckQ/fsamwRLiE2GBz6D3a/xF1NgfiDLJjXBa1hYOYTtQ==", "license": "MIT" }, - "node_modules/debounce-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-4.0.0.tgz", - "integrity": "sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", - "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -9469,19 +8492,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/dedent": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz", @@ -9510,23 +8520,6 @@ "node": ">=0.12" } }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true, - "license": "MIT" - }, "node_modules/delaunator": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.1.0.tgz", @@ -9536,73 +8529,13 @@ "robust-predicates": "^3.0.2" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, + "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": ">=0.4.0" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/dep-graph": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/dep-graph/-/dep-graph-1.1.0.tgz", - "integrity": "sha512-/6yUWlSH0Uevjj6HWvO86rDeFzuYfzbaKDqifTEemwfwEPyBrODTb3ox/jFzqmc2+UmgJ3IDMS88BKEBh1Nm2Q==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dev": true, - "dependencies": { - "underscore": "1.2.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/dep-graph/node_modules/underscore": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.2.1.tgz", - "integrity": "sha512-HRhh6FYh5I5/zTt7L9MnHRA/nlSFPiwymMCXEremmzT7tHR+8CNP0FXHPaUpafAPwvAlNrvZiH91kQwoo/CqUA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "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" + "node": ">=8" } }, "node_modules/detect-libc": { @@ -9727,52 +8660,12 @@ "node": ">=8" } }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/duplexer3": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", - "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, "node_modules/editor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/editor/-/editor-1.0.0.tgz", "integrity": "sha512-SoRmbGStwNYHgKfjOrX2L0mUvp9bUVv0uPppZSOMAntEbcFtoC3MKF5b3T6HQPXKIV+QGY3xPO3JK5it5lVkuw==", "license": "MIT" }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true, - "license": "MIT" - }, "node_modules/electron-to-chromium": { "version": "1.5.415", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.415.tgz", @@ -9834,37 +8727,6 @@ "node": ">=14" } }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "dev": true, - "license": "MIT", - "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==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, "node_modules/endent": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/endent/-/endent-2.1.0.tgz", @@ -9918,13 +8780,6 @@ "node": ">=6" } }, - "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==", - "dev": true, - "license": "MIT" - }, "node_modules/error-ex": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", @@ -9935,16 +8790,6 @@ "is-arrayish": "^0.2.1" } }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true, - "license": "MIT", - "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", @@ -9961,19 +8806,6 @@ "dev": true, "license": "MIT" }, - "node_modules/es-object-atoms": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", - "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/es-toolkit": { "version": "1.51.0", "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.51.0.tgz", @@ -9995,23 +8827,6 @@ "node": ">=6" } }, - "node_modules/escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "license": "MIT" - }, "node_modules/escape-string-regexp": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", @@ -10108,16 +8923,6 @@ "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", @@ -10177,156 +8982,6 @@ "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", "license": "Apache-2.0" }, - "node_modules/express": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.22.2.tgz", - "integrity": "sha512-IuL+Elrou2ZvCFHs18/CIzy2Nzvo25nZ1/D2eIZlz7c+QUayAcYoiM2BthCjs+EBHVpjYjcuLDAiCWgeIX3X1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "~1.20.5", - "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.15.1", - "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", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/express/node_modules/qs": { - "version": "6.15.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz", - "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "es-define-property": "^1.0.1", - "side-channel": "^1.1.1" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/express/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==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true, - "license": "MIT" - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "license": "MIT", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/external-editor/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==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/extsprintf": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", @@ -10415,29 +9070,6 @@ } } }, - "node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/filesize": { "version": "11.0.22", "resolved": "https://registry.npmjs.org/filesize/-/filesize-11.0.22.tgz", @@ -10459,42 +9091,6 @@ "node": ">=8" } }, - "node_modules/finalhandler": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", - "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", - "dev": true, - "license": "MIT", - "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.2", - "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==", - "dev": true, - "license": "MIT", - "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==", - "dev": true, - "license": "MIT" - }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -10522,64 +9118,6 @@ "flat": "cli.js" } }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "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-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/fraction.js": { "version": "5.3.4", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", @@ -10621,31 +9159,6 @@ } } }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/fs-minipass": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", @@ -10689,75 +9202,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", - "deprecated": "This package is no longer supported.", - "dev": true, - "license": "ISC", - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/gauge/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gauge/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gauge/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dev": true, - "license": "MIT", - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gauge/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -10799,45 +9243,6 @@ "node": "*" } }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -10850,16 +9255,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0" - } - }, "node_modules/glob": { "version": "13.0.6", "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", @@ -10889,32 +9284,6 @@ "node": ">= 6" } }, - "node_modules/global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-dirs/node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -10935,55 +9304,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/got/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -11038,55 +9358,6 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/har-validator/node_modules/ajv": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", - "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -11097,36 +9368,6 @@ "node": ">=8" } }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/hasown": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", @@ -11221,27 +9462,6 @@ "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", "license": "BSD-2-Clause" }, - "node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/http-proxy-agent": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", @@ -11255,22 +9475,6 @@ "node": ">= 14" } }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "dev": true, - "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_modules/https-proxy-agent": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", @@ -11293,16 +9497,6 @@ "node": ">=10.17.0" } }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "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", @@ -11378,16 +9572,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/import-meta-resolve": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", @@ -11407,23 +9591,6 @@ "node": ">=0.8.19" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true, - "license": "ISC" - }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -11451,346 +9618,22 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/init-package-json": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-2.0.5.tgz", - "integrity": "sha512-u1uGAtEFu3VA6HNl/yUWw57jmKEMx8SKOxHhxjGnOFUiIlFnohKDFg4ZrPpv9wWqk44nDxGJAtqjdQFm+9XXQA==", - "dev": true, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", "license": "ISC", - "dependencies": { - "npm-package-arg": "^8.1.5", - "promzard": "^0.3.0", - "read": "~1.0.1", - "read-package-json": "^4.1.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^3.0.0" - }, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/init-package-json/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "node_modules/ip-address": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz", + "integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==", + "license": "MIT", "engines": { - "node": ">=10" - } - }, - "node_modules/init-package-json/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/init-package-json/node_modules/npm-package-arg": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", - "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/init-package-json/node_modules/semver": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", - "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/init-package-json/node_modules/validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", - "dev": true, - "license": "ISC", - "dependencies": { - "builtins": "^1.0.3" - } - }, - "node_modules/inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/inquirer/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/inquirer/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "license": "MIT" - }, - "node_modules/inquirer/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/inquirer/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/string-width/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/inquirer/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/insight": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/insight/-/insight-0.11.1.tgz", - "integrity": "sha512-TBcZ0qC9dgdmcxL93OoqkY/RZXJtIi0i07phX/QyYk2ysmJtZex59dgTj4Doq50N9CG9dLRe/RIudc/5CCoFNw==", - "dev": true, - "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/tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/insight/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/insight/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", - "dev": true, - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/internmap": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", - "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/ip-address": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz", - "integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==", - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" + "node": ">= 12" } }, "node_modules/is-arrayish": { @@ -11813,19 +9656,6 @@ "node": ">=8" } }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, "node_modules/is-core-module": { "version": "2.16.2", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", @@ -11841,22 +9671,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -11888,43 +9702,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -11994,26 +9771,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "dev": true, - "license": "MIT" - }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -12038,13 +9795,6 @@ "node": ">=0.10.0" } }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true, - "license": "MIT" - }, "node_modules/jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", @@ -12118,13 +9868,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true, - "license": "MIT" - }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", @@ -12195,13 +9938,6 @@ "node": "*" } }, - "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", - "dev": true, - "license": "MIT" - }, "node_modules/json-parse-even-better-errors": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-5.0.0.tgz", @@ -12211,13 +9947,6 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true, - "license": "(AFL-2.1 OR BSD-3-Clause)" - }, "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -12225,13 +9954,6 @@ "dev": true, "license": "MIT" }, - "node_modules/json-schema-typed": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.3.tgz", - "integrity": "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==", - "dev": true, - "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", @@ -12241,13 +9963,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true, - "license": "ISC" - }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -12267,19 +9982,6 @@ "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", "license": "MIT" }, - "node_modules/jsonfile": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", - "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", - "dev": true, - "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", @@ -12289,32 +9991,6 @@ ], "license": "MIT" }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "license": "MIT" - }, "node_modules/jszip": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", @@ -12355,34 +10031,11 @@ "katex": "cli.js" } }, - "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.0" - } - }, "node_modules/khroma": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.1.0.tgz", "integrity": "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==" }, - "node_modules/latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dev": true, - "license": "MIT", - "dependencies": { - "package-json": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/layout-base": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", @@ -12752,20 +10405,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/loud-rejection": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-2.2.0.tgz", - "integrity": "sha512-S0FayMXku80toa5sZ6Ro4C+s+EtFDCsyJNG/AzFMfX3AxD5Si4dZsgzm/kKnbOxHl5Cv8jBlno8+3XYIh2pNjQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/loupe": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", @@ -12776,16 +10415,6 @@ "get-func-name": "^2.0.1" } }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/lru-cache": { "version": "11.5.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.1.tgz", @@ -12795,19 +10424,6 @@ "node": "20 || >=22" } }, - "node_modules/macos-release": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.1.tgz", - "integrity": "sha512-DXqXhEM7gW59OjZO8NIjBCz9AQ1BEMrfiOAl4AYByHCtVHRF4KoGNO8mqQeM8lRCtQe/UnJ4imO/d2HdkKsd+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/magic-string": { "version": "0.30.21", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", @@ -12941,55 +10557,12 @@ "node": ">= 18" } }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/md5-file": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-5.0.0.tgz", - "integrity": "sha512-xbEFXCYVWrSx/gEKS1VPlg84h/4L20znVIulKw6kMfmBUAZNAnF00eczz9ICMl+/hjQGo5KSXRxbL/47X3rmMw==", - "dev": true, - "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==", "license": "MIT" }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/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==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -13046,16 +10619,6 @@ "node": ">= 20" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -13081,19 +10644,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/mime-db": { "version": "1.54.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", @@ -13128,16 +10678,6 @@ "node": ">=6" } }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/mini-css-extract-plugin": { "version": "2.10.2", "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.10.2.tgz", @@ -13174,16 +10714,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/minimizer-webpack-plugin": { "version": "5.6.1", "resolved": "https://registry.npmjs.org/minimizer-webpack-plugin/-/minimizer-webpack-plugin-5.6.1.tgz", @@ -13325,30 +10855,6 @@ "node": ">=8" } }, - "node_modules/minipass-json-stream": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.2.tgz", - "integrity": "sha512-myxeeTm57lYs8pH2nxPzmEEg8DGIgW+9mv6D4JZD2pa81I/OBjeU7PtICXV6c9eRGTA5JMDsuIPUZRCyBMYNhg==", - "dev": true, - "license": "MIT", - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/minipass-json-stream/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/minipass-pipeline": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", @@ -13837,13 +11343,6 @@ "mustache": "bin/mustache" } }, - "node_modules/mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", - "dev": true, - "license": "ISC" - }, "node_modules/nanoid": { "version": "3.3.18", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", @@ -13948,61 +11447,6 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-package-data/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-package-data/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", - "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -14013,16 +11457,6 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/npm-bundled": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-5.0.0.tgz", @@ -14166,63 +11600,6 @@ "node": ">=8" } }, - "node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "deprecated": "This package is no longer supported.", - "dev": true, - "license": "ISC", - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/objectorarray": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.5.tgz", @@ -14243,29 +11620,6 @@ "node": ">=12.20.0" } }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -14291,78 +11645,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "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", - "resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.1.tgz", - "integrity": "sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" + "yocto-queue": "^0.1.0" }, "engines": { "node": ">=10" @@ -14399,32 +11689,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/package-manager-detector": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz", @@ -14520,16 +11784,6 @@ "dev": true, "license": "MIT" }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", @@ -14600,13 +11854,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/path-to-regexp": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz", - "integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==", - "dev": true, - "license": "MIT" - }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -14633,13 +11880,6 @@ "node": "*" } }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true, - "license": "MIT" - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -14659,95 +11899,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/plist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.1.tgz", @@ -14935,16 +12086,6 @@ "dev": true, "license": "MIT" }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/prettier": { "version": "3.8.3", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz", @@ -15016,37 +12157,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true, - "license": "ISC" - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/promzard": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", - "integrity": "sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw==", - "dev": true, - "license": "ISC", - "dependencies": { - "read": "1" - } - }, "node_modules/properties-parser": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/properties-parser/-/properties-parser-0.6.0.tgz", @@ -15057,44 +12167,6 @@ "node": ">= 0.3.1" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/psl": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", - "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "punycode": "^2.3.1" - }, - "funding": { - "url": "https://github.com/sponsors/lupomontero" - } - }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -15114,41 +12186,6 @@ "node": ">=6" } }, - "node_modules/pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-goat": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qs": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.5.tgz", - "integrity": "sha512-mzR4sElr1bfCaPJe7m8ilJ6ZXdDaGoObcYR0ZHSsktM/Lt21MVHj5De30GQH2eiZ1qGRTO7LCAzQsUeXTNexWQ==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.6" - } - }, "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -15185,45 +12222,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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", - "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/raw-loader": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", @@ -15298,187 +12296,15 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "license": "ISC" - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", - "dev": true, + "node_modules/read-cmd-shim": { + "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", - "dependencies": { - "mute-stream": "~0.0.4" - }, "engines": { - "node": ">=0.8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/read-chunk": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-3.2.0.tgz", - "integrity": "sha512-CEjy9LCzhmD7nUpJ1oVOE6s/hBkejlcJEgLQHVnQznOSilOPb+kpKktlLfFDK3/WP43+F80xkUTM2VOkYoSYvQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "pify": "^4.0.1", - "with-open-file": "^0.1.6" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/read-cmd-shim": { - "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": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/read-package-json": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-4.1.2.tgz", - "integrity": "sha512-Dqer4pqzamDE2O4M55xp1qZMuLPqi4ldk2ya648FOMHRjwMzFhuxVrG04wd0c38IsvkVdr3vgHI6z+QTPdAjrQ==", - "deprecated": "This package is no longer supported. Please use @npmcli/package-json instead.", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.1", - "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^3.0.0", - "npm-normalize-package-bin": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/read-package-json-fast/node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true, - "license": "ISC" - }, - "node_modules/read-package-json/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/read-package-json/node_modules/brace-expansion": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", - "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/read-package-json/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/read-package-json/node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/read-package-json/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/read-package-json/node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true, - "license": "ISC" - }, "node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -15546,32 +12372,6 @@ "node": ">=4" } }, - "node_modules/registry-auth-token": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", - "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", - "dev": true, - "license": "MIT", - "dependencies": { - "rc": "1.2.8" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, - "license": "MIT", - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/regjsgen": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", @@ -15592,73 +12392,6 @@ "regjsparser": "bin/parser" } }, - "node_modules/request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "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.0", - "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.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/request/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", - "dev": true, - "license": "MIT", - "bin": { - "uuid": "bin/uuid" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -15715,63 +12448,6 @@ "node": ">=4" } }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, "node_modules/reusify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", @@ -15782,76 +12458,6 @@ "node": ">=0.10.0" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", - "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/robust-predicates": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.3.tgz", @@ -15904,16 +12510,6 @@ "points-on-path": "^0.2.1" } }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -15943,26 +12539,6 @@ "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", "license": "BSD-3-Clause" }, - "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/rxjs/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -16102,61 +12678,6 @@ "semver": "bin/semver.js" } }, - "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/send": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", - "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.1", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "~2.4.1", - "range-parser": "~1.2.1", - "statuses": "~2.0.2" - }, - "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==", - "dev": true, - "license": "MIT", - "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==", - "dev": true, - "license": "MIT" - }, "node_modules/serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", @@ -16167,42 +12688,12 @@ "randombytes": "^2.1.0" } }, - "node_modules/serve-static": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", - "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "~0.19.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true, - "license": "ISC" - }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", "license": "MIT" }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true, - "license": "ISC" - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -16224,82 +12715,6 @@ "node": ">=8" } }, - "node_modules/side-channel": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", - "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.4", - "side-channel-list": "^1.0.1", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", - "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/siginfo": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", @@ -16420,28 +12835,6 @@ "node": ">=0.10.0" } }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-correct/node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, "node_modules/spdx-exceptions": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", @@ -16475,32 +12868,6 @@ "node": ">=0.2.4" } }, - "node_modules/sshpk": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", - "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", - "dev": true, - "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": "13.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.1.tgz", @@ -16520,16 +12887,6 @@ "dev": true, "license": "MIT" }, - "node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/std-env": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.2.0.tgz", @@ -16595,16 +12952,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -16786,13 +13133,6 @@ "license": "MIT", "peer": true }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true, - "license": "MIT" - }, "node_modules/tinybench": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", @@ -16844,16 +13184,6 @@ "node": ">=14.14" } }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -16866,37 +13196,6 @@ "node": ">=8.0" } }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tough-cookie/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true, - "license": "MIT" - }, "node_modules/treeverse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz", @@ -16960,26 +13259,6 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true, - "license": "Unlicense" - }, "node_modules/type-detect": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", @@ -16990,56 +13269,6 @@ "node": ">=4" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -17076,13 +13305,6 @@ "dev": true, "license": "MIT" }, - "node_modules/underscore": { - "version": "1.13.8", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.8.tgz", - "integrity": "sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ==", - "dev": true, - "license": "MIT" - }, "node_modules/undici": { "version": "6.27.0", "resolved": "https://registry.npmjs.org/undici/-/undici-6.27.0.tgz", @@ -17143,26 +13365,6 @@ "node": ">=4" } }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, "node_modules/unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -17175,26 +13377,6 @@ "node": ">=8" } }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/untildify": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", @@ -17236,52 +13418,10 @@ "browserslist": ">= 4.21.0" } }, - "node_modules/update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/semver": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", - "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -17298,35 +13438,12 @@ "requires-port": "^1.0.0" } }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "license": "MIT" }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/uuid": { "version": "11.1.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.1.tgz", @@ -17346,28 +13463,6 @@ "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==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, "node_modules/validate-npm-package-name": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-7.0.2.tgz", @@ -17386,38 +13481,6 @@ "@sphinxxxx/color-conversion": "^2.2.2" } }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true, - "license": "MIT" - }, "node_modules/vite": { "version": "8.2.2", "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.2.tgz", @@ -17794,200 +13857,6 @@ "node": ">=8" } }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/wide-align/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wide-align/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/wide-align/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wide-align/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "license": "MIT", - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/widest-line/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/widest-line/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/widest-line/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/widest-line/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/windows-release": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", - "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/with-open-file": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/with-open-file/-/with-open-file-0.1.7.tgz", - "integrity": "sha512-ecJS2/oHtESJ1t3ZfMI3B7KIDKyfN0O16miWxdn30zdh66Yd3LsRFebXZXq6GU4xfxLf6nVxp9kIqElb5fqczA==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-finally": "^1.0.0", - "p-try": "^2.1.0", - "pify": "^4.0.1" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/workerpool": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", @@ -18224,974 +14093,6 @@ "xml2js": "0.4.23" } }, - "src/plugins/cordova-plugin-advanced-http/node_modules/@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/@npmcli/git": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", - "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/promise-spawn": "^1.3.2", - "lru-cache": "^6.0.0", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^6.1.1", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/@npmcli/installed-package-contents": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "installed-package-contents": "index.js" - }, - "engines": { - "node": ">= 10" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/@npmcli/node-gyp": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz", - "integrity": "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==", - "dev": true, - "license": "ISC" - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/@npmcli/promise-spawn": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", - "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", - "dev": true, - "license": "ISC", - "dependencies": { - "infer-owner": "^1.0.4" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/@npmcli/run-script": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.6.tgz", - "integrity": "sha512-e42bVZnC6VluBZBAFEr3YrdqSspG3bgilyg4nSLBJ7TRGNCzxHa92XAHxQBLYg0BmgwO4b2mf3h/l5EkEWRn3g==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/node-gyp": "^1.0.2", - "@npmcli/promise-spawn": "^1.3.2", - "node-gyp": "^7.1.0", - "read-package-json-fast": "^2.0.1" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true, - "license": "ISC" - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/bplist-parser": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", - "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", - "dev": true, - "license": "MIT", - "dependencies": { - "big-integer": "^1.6.44" - }, - "engines": { - "node": ">= 5.10.0" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/brace-expansion": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", - "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": ">= 10" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/cordova": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/cordova/-/cordova-11.0.0.tgz", - "integrity": "sha512-Hu2YeT0naeP/1sEm/xfJYUsXN48XV6zagxbi1+4q0Ei9c5TKsIq8v4EWukvSHF4UO2pnh+9ViaDlGMcS1Wrnfg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "configstore": "^5.0.1", - "cordova-common": "^4.0.2", - "cordova-create": "^4.0.0", - "cordova-lib": "^11.0.0", - "editor": "^1.0.0", - "execa": "^5.1.1", - "fs-extra": "^10.0.0", - "insight": "^0.11.1", - "loud-rejection": "^2.2.0", - "nopt": "^5.0.0", - "semver": "^7.3.5", - "systeminformation": "^5.9.17", - "update-notifier": "^5.1.0" - }, - "bin": { - "cordova": "bin/cordova" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/cordova-app-hello-world": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cordova-app-hello-world/-/cordova-app-hello-world-6.0.0.tgz", - "integrity": "sha512-wPZsm+fzNUwdiTRODT+fQuPV410RNmd3Buiw63vT8BPxjC+cn6Bu8emrgwrDM4pbmU5sa5Unwu3xPcbQGQ3G3g==", - "dev": true, - "license": "Apache-2.0" - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/cordova-common": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-4.1.0.tgz", - "integrity": "sha512-sYfOSfpYGQOmUDlsARUbpT/EvVKT/E+GI3zwTXt+C6DjZ7xs6ZQVHs3umHKSidjf9yVM2LLmvGFpGrGX7aGxug==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@netflix/nerror": "^1.1.3", - "ansi": "^0.3.1", - "bplist-parser": "^0.2.0", - "cross-spawn": "^7.0.1", - "elementtree": "^0.1.7", - "endent": "^1.4.1", - "fast-glob": "^3.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "plist": "^3.0.1", - "q": "^1.5.1", - "read-chunk": "^3.2.0", - "strip-bom": "^4.0.0", - "underscore": "^1.9.2" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/cordova-common/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/cordova-create": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cordova-create/-/cordova-create-4.1.0.tgz", - "integrity": "sha512-8VQohB5w5WwuxurQJ+2L+lAFVhBr//kFvlxLOmF0P3SzTdfIU02pNalbOeLalC0DXD7rfBXJZOxJ+KSM5TOq+Q==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "cordova-app-hello-world": "^6.0.0", - "cordova-common": "^4.1.0", - "cordova-fetch": "^3.1.0", - "fs-extra": "^10.1.0", - "globby": "^11.1.0", - "import-fresh": "^3.3.0", - "isobject": "^4.0.0", - "npm-package-arg": "^8.1.5", - "path-is-inside": "^1.0.2", - "tmp": "^0.2.1", - "valid-identifier": "0.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/cordova-fetch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cordova-fetch/-/cordova-fetch-3.1.0.tgz", - "integrity": "sha512-qOT3HlNzVWbsCZVvbkZ6PdvAG1byiK8vWG+/Z+7s+8ZB76rOYKdzMvrmmMwrTTX6nglDnz5uJ/4XjQHJB770GQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "cordova-common": "^4.1.0", - "fs-extra": "^9.1.0", - "npm-package-arg": "^8.1.5", - "pacote": "^11.3.5", - "pify": "^5.0.0", - "resolve": "^1.22.1", - "semver": "^7.3.8", - "which": "^2.0.2" - }, - "engines": { - "node": ">= 10", - "npm": ">= 5.6.0" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/cordova-fetch/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/cordova-lib": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/cordova-lib/-/cordova-lib-11.1.0.tgz", - "integrity": "sha512-/XM+/wFag72bD4SNSxwX8b3OWatHNNlnmJpgb5pepp2Pobb957nWyR0GPwIkKyOyszdZesWM3Vv8uH9e2Z1k2w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "cordova-common": "^4.1.0", - "cordova-fetch": "^3.1.0", - "cordova-serve": "^4.0.0", - "dep-graph": "^1.1.0", - "detect-indent": "^6.1.0", - "detect-newline": "^3.1.0", - "elementtree": "^0.1.7", - "execa": "^5.1.1", - "fs-extra": "^10.1.0", - "globby": "^11.1.0", - "init-package-json": "^2.0.5", - "md5-file": "^5.0.0", - "pify": "^5.0.0", - "semver": "^7.3.8", - "stringify-package": "^1.0.1", - "write-file-atomic": "^3.0.3" - }, - "engines": { - "node": ">=12" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true, - "license": "MIT" - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/endent": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/endent/-/endent-1.4.1.tgz", - "integrity": "sha512-buHTb5c8AC9NshtP6dgmNLYkiT+olskbq1z6cEGvfGCF3Qphbu/1zz5Xu+yjTDln8RbxNhPoUyJ5H8MSrp1olQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "dedent": "^0.7.0", - "fast-json-parse": "^1.0.3", - "objectorarray": "^1.0.4" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/ignore-walk": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", - "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "minimatch": "^3.0.4" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", - "dev": true, - "license": "ISC", - "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "src/plugins/cordova-plugin-advanced-http/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==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "optionalDependencies": { - "encoding": "^0.1.12" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/node-gyp": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", - "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.3", - "nopt": "^5.0.0", - "npmlog": "^4.1.2", - "request": "^2.88.2", - "rimraf": "^3.0.2", - "semver": "^7.3.2", - "tar": "^6.0.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": ">= 10.12.0" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/npm-install-checks": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", - "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": ">=10" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true, - "license": "ISC" - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/npm-package-arg": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", - "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/npm-packlist": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", - "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.6", - "ignore-walk": "^3.0.3", - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "npm-packlist": "bin/index.js" - }, - "engines": { - "node": ">=10" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/npm-pick-manifest": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", - "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-install-checks": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^8.1.2", - "semver": "^7.3.4" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/npm-registry-fetch": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", - "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", - "dev": true, - "license": "ISC", - "dependencies": { - "make-fetch-happen": "^9.0.1", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/pacote": { - "version": "11.3.5", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.3.5.tgz", - "integrity": "sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^2.1.0", - "@npmcli/installed-package-contents": "^1.0.6", - "@npmcli/promise-spawn": "^1.2.0", - "@npmcli/run-script": "^1.8.2", - "cacache": "^15.0.5", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.3", - "mkdirp": "^1.0.3", - "npm-package-arg": "^8.0.1", - "npm-packlist": "^2.1.4", - "npm-pick-manifest": "^6.0.0", - "npm-registry-fetch": "^11.0.0", - "promise-retry": "^2.0.1", - "read-package-json-fast": "^2.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.1.0" - }, - "bin": { - "pacote": "lib/bin.js" - }, - "engines": { - "node": ">=10" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "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" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/semver": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", - "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/socks-proxy-agent": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", - "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" - } - }, - "src/plugins/cordova-plugin-advanced-http/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==", - "deprecated": "Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", - "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" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", - "dev": true, - "license": "MIT", - "bin": { - "uuid": "bin/uuid" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", - "dev": true, - "license": "ISC", - "dependencies": { - "builtins": "^1.0.3" - } - }, - "src/plugins/cordova-plugin-advanced-http/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "src/plugins/cordova-plugin-buildinfo": { "version": "4.0.0", "dev": true, diff --git a/src/lib/loadPlugin.js b/src/lib/loadPlugin.js index 75656082bf..2272163ec8 100644 --- a/src/lib/loadPlugin.js +++ b/src/lib/loadPlugin.js @@ -3,8 +3,16 @@ import Page from "components/page"; import helpers from "utils/helpers"; import Url from "utils/Url"; import actionStack from "./actionStack"; +import generatePluginContext, { connect } from "./pluginContext"; export default async function loadPlugin(pluginId, justInstalled = false) { + // Establish the trusted native session BEFORE any plugin script is appended + // and run. Plugin main.js runs as soon as its