-

+

+
diff --git a/android/KMAPro/kMAPro/src/main/assets/banner/keyman_banner_dark.png b/android/KMAPro/kMAPro/src/main/assets/banner/keyman_banner_dark.png
new file mode 100644
index 00000000000..644af21a2dc
Binary files /dev/null and b/android/KMAPro/kMAPro/src/main/assets/banner/keyman_banner_dark.png differ
diff --git a/android/KMAPro/kMAPro/src/main/java/com/keyman/android/BannerController.java b/android/KMAPro/kMAPro/src/main/java/com/keyman/android/BannerController.java
index f716faa9aab..5c5a16e5972 100644
--- a/android/KMAPro/kMAPro/src/main/java/com/keyman/android/BannerController.java
+++ b/android/KMAPro/kMAPro/src/main/java/com/keyman/android/BannerController.java
@@ -13,7 +13,7 @@ public class BannerController {
public static final String KM_BANNER_DIR = "banner";
public static final String KM_BANNER_THEME_KEYMAN = "banner.html";
- public static void setHTMLBanner(Context context, KMManager.KeyboardType keyboardType) {
+ public static void setHTMLBanner(Context context, KMManager.KeyboardType keyboardType, boolean isDarkMode) {
if (keyboardType == KMManager.KeyboardType.KEYBOARD_TYPE_UNDEFINED) {
return;
}
@@ -22,6 +22,9 @@ public static void setHTMLBanner(Context context, KMManager.KeyboardType keyboar
// Always use Keyman banner theme
String contents = FileUtils.readContents(context, KM_BANNER_THEME_KEYMAN);
+ if (isDarkMode) {
+ contents = contents.replace("class=\"keyman-banner\"", "class=\"keyman-banner dark\"");
+ }
KMManager.setHTMLBanner(keyboardType, contents);
KMManager.setBanner(keyboardType, KMManager.BannerType.HTML);
KMManager.showBanner(true);
diff --git a/android/KMAPro/kMAPro/src/main/java/com/keyman/android/SystemKeyboard.java b/android/KMAPro/kMAPro/src/main/java/com/keyman/android/SystemKeyboard.java
index 16330bfcdad..c3939c03f8d 100644
--- a/android/KMAPro/kMAPro/src/main/java/com/keyman/android/SystemKeyboard.java
+++ b/android/KMAPro/kMAPro/src/main/java/com/keyman/android/SystemKeyboard.java
@@ -7,7 +7,7 @@
import com.keyman.engine.util.DownloadFileUtils;
import com.tavultesoft.kmapro.BuildConfig;
import com.tavultesoft.kmapro.DefaultLanguageResource;
-import com.tavultesoft.kmapro.KeymanSettingsActivity;
+import com.tavultesoft.kmapro.KeymanSettingsKeys;
import com.tavultesoft.kmapro.PreferencesManager;
import com.keyman.engine.KMManager;
import com.keyman.engine.KMManager.KeyboardType;
@@ -76,13 +76,13 @@ public void onCreate() {
KMManager.setInputMethodService(this); // for HW interface
SharedPreferences prefs = context.getSharedPreferences(context.getString(R.string.kma_prefs_name), Context.MODE_PRIVATE);
- KMManager.SpacebarText spacebarText = KMManager.SpacebarText.fromString(prefs.getString(KeymanSettingsActivity.spacebarTextKey, KMManager.SpacebarText.LANGUAGE_KEYBOARD.toString()));
+ KMManager.SpacebarText spacebarText = KMManager.SpacebarText.fromString(prefs.getString(KeymanSettingsKeys.SPACEBAR_TEXT, KMManager.SpacebarText.LANGUAGE_KEYBOARD.toString()));
KMManager.setSpacebarText(spacebarText);
// Set the system keyboard HTML banner
- BannerController.setHTMLBanner(this, KeyboardType.KEYBOARD_TYPE_SYSTEM);
+ BannerController.setHTMLBanner(this, KeyboardType.KEYBOARD_TYPE_SYSTEM, isDarkMode());
- boolean mayHaveHapticFeedback = prefs.getBoolean(KeymanSettingsActivity.hapticFeedbackKey, false);
+ boolean mayHaveHapticFeedback = prefs.getBoolean(KeymanSettingsKeys.HAPTIC_FEEDBACK, false);
KMManager.setHapticFeedback(mayHaveHapticFeedback);
// Checking for updates should never be allowed to crash the keyboard.
@@ -176,7 +176,7 @@ public void onStartInput(EditorInfo attribute, boolean restarting) {
if (KMManager.getPredictionsSuspended(KeyboardType.KEYBOARD_TYPE_SYSTEM)) {
KMManager.setBannerOptions(false);
// Set the system keyboard HTML banner
- BannerController.setHTMLBanner(this, KeyboardType.KEYBOARD_TYPE_SYSTEM);
+ BannerController.setHTMLBanner(this, KeyboardType.KEYBOARD_TYPE_SYSTEM, isDarkMode());
} else if (KMManager.isKeyboardLoaded(KeyboardType.KEYBOARD_TYPE_SYSTEM)){
// Check if predictions needs to be re-enabled per Settings preference
Keyboard kbInfo = KMManager.getCurrentKeyboardInfo(appContext);
@@ -282,7 +282,7 @@ public void onKeyboardLoaded(KeyboardType keyboardType) {
@Override
public void onKeyboardChanged(String newKeyboard) {
// Refresh banner theme
- BannerController.setHTMLBanner(this, KeyboardType.KEYBOARD_TYPE_SYSTEM);
+ BannerController.setHTMLBanner(this, KeyboardType.KEYBOARD_TYPE_SYSTEM, isDarkMode());
KMManager.showSystemKeyboard();
sendCurrentFontName();
}
@@ -290,7 +290,7 @@ public void onKeyboardChanged(String newKeyboard) {
@Override
public void onKeyboardShown() {
// Refresh banner theme
- BannerController.setHTMLBanner(this, KeyboardType.KEYBOARD_TYPE_SYSTEM);
+ BannerController.setHTMLBanner(this, KeyboardType.KEYBOARD_TYPE_SYSTEM, isDarkMode());
}
@Override
@@ -309,7 +309,7 @@ public boolean onEvaluateInputViewShown() {
Context context = getApplicationContext();
SharedPreferences prefs = context.getSharedPreferences(PreferencesManager.kma_prefs_name, Context.MODE_PRIVATE);
- boolean showOSK = prefs.getBoolean(KeymanSettingsActivity.oskWithPhysicalKeyboardKey, false);
+ boolean showOSK = prefs.getBoolean(KeymanSettingsKeys.OSK_WITH_PHYSICAL_KEYBOARD, false);
return showOSK;
}
@@ -349,4 +349,8 @@ public boolean onKeyMultiple(int keyCode, int count, KeyEvent event) {
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
return interpreter.onKeyLongPress(keyCode, event);
}
+ private boolean isDarkMode() {
+ return (getResources().getConfiguration().uiMode &
+ Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES;
+ }
}
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/GetStartedActivity.java b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/GetStartedActivity.java
index 59558fdb1f3..2fc9e90d418 100644
--- a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/GetStartedActivity.java
+++ b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/GetStartedActivity.java
@@ -16,7 +16,7 @@
import android.provider.Settings;
import android.view.View;
import android.view.Window;
-import android.view.inputmethod.InputMethodInfo;
+
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.CheckBox;
@@ -24,7 +24,7 @@
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ImageButton;
import android.widget.ListView;
-import androidx.appcompat.app.AppCompatActivity;
+
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
@@ -36,14 +36,25 @@ public class GetStartedActivity extends BaseActivity {
private static ArrayList
> list = null;
private static KMListAdapter listAdapter = null;
protected static final String showGetStartedKey = "ShowGetStarted";
+ public static final String openDefaultKeyboardPickerOnlyKey = "OpenDefaultKeyboardPickerOnly";
private final String iconKey = "icon";
private final String textKey = "text";
private final String isEnabledKey = "isEnabled";
+ private boolean openDefaultKeyboardPickerOnly = false;
+ private boolean didAutoOpenDefaultKeyboardPicker = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
+ openDefaultKeyboardPickerOnly = getIntent().getBooleanExtra(openDefaultKeyboardPickerOnlyKey, false);
+
+ if (openDefaultKeyboardPickerOnly) {
+ // Picker-only mode: intentionally skip rendering Get Started UI.
+ KMManager.dontCloseParentAppOnShowKeyboardPicker();
+ return;
+ }
+
final Context context = this;
setContentView(R.layout.get_started_list_layout);
@@ -161,20 +172,40 @@ protected void onResume() {
super.onResume();
}
- @Override
- protected void onPause() {
- super.onPause();
- }
-
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
+ if (openDefaultKeyboardPickerOnly) {
+
+ // When the user taps 'Set Default Keyboard' from the drawer,
+ // GetStartedActivity is launched in picker-only mode. But you
+ // can't open the system keyboard picker directly from a menu
+ // tap — it requires a window with focus. So we use
+ // onWindowFocusChanged as the trigger point: first focus opens
+ // the picker, and when the user dismisses it and focus returns
+ // to this activity, we call finish() to close it. The activity
+ // is essentially just a invisible bridge to show the system
+ // picker.
+
+ if (!didAutoOpenDefaultKeyboardPicker) {
+ didAutoOpenDefaultKeyboardPicker = true;
+ InputMethodManager imManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+ if (imManager != null) {
+ imManager.showInputMethodPicker();
+ }
+ } else {
+ // Focus returned after the picker was dismissed, so close the host activity.
+ finish();
+ }
+ return;
+ }
+
// Enumerated steps are replaced with checkboxes when the user completes a step
String one = String.valueOf(R.drawable.ic_looks_one);
String two = String.valueOf(R.drawable.ic_looks_two);
String three = String.valueOf(R.drawable.ic_looks_three);
- String checkbox_on = String.valueOf(android.R.drawable.checkbox_on_background);
+ String checkbox_on = String.valueOf(R.drawable.ic_checkbox);
String info = String.valueOf(R.drawable.ic_info_outline);
List kbList = KMManager.getKeyboardsList(this);
@@ -208,4 +239,12 @@ public void onWindowFocusChanged(boolean hasFocus) {
uncheckGetStartedIfComplete();
}
}
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ if (openDefaultKeyboardPickerOnly && didAutoOpenDefaultKeyboardPicker) {
+ finish();
+ }
+ }
}
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KMPBrowserActivity.java b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KMPBrowserActivity.java
index 2a2b85a32d0..e6a2a597cf4 100644
--- a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KMPBrowserActivity.java
+++ b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KMPBrowserActivity.java
@@ -81,7 +81,7 @@ protected void onCreate(Bundle savedInstanceState) {
}
setupEdgeToEdge(R.id.kmp_browser_layout);
- setupStatusBarColors(R.color.complementary_5, android.R.color.white);
+ setupStatusBarColors(R.color.keyman_blue, android.R.color.white);
webView = (WebView) findViewById(R.id.kmpBrowserWebView);
webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL);
diff --git a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KeyboardSettingsActivity.java b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KeyboardSettingsActivity.java
index 689548a56ec..a41690b2546 100644
--- a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KeyboardSettingsActivity.java
+++ b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KeyboardSettingsActivity.java
@@ -96,7 +96,7 @@ public void onCreate(Bundle savedInstanceState) {
// Display notification to download update if available
if (kbd.hasUpdateAvailable()) {
hashMap.put(subtitleKey, context.getString(R.string.update_available, kbVersion));
- icon = String.valueOf(R.drawable.ic_cloud_download);
+ icon = String.valueOf(R.drawable.ic_cloud_download_mode);
}
hashMap.put(iconKey, icon);
infoList.add(hashMap);
@@ -105,7 +105,7 @@ public void onCreate(Bundle savedInstanceState) {
hashMap = new HashMap<>();
final String customHelpLink = kbd.getHelpLink();
// Check if app declared FileProvider
- icon = String.valueOf(R.drawable.ic_action_forward);
+ icon = String.valueOf(R.drawable.ic_action_forward_mode);
// Don't show help link arrow if File Provider unavailable, or custom help doesn't exist
if ( (customHelpLink != null && !FileProviderUtils.exists(context)) ||
(customHelpLink == null && !packageID.equals(KMManager.KMDefault_UndefinedPackageID)) ) {
diff --git a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KeymanApplication.java b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KeymanApplication.java
new file mode 100644
index 00000000000..3fb3588f5ad
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KeymanApplication.java
@@ -0,0 +1,25 @@
+/*
+ * Keyman is copyright (C) SIL Global. MIT License.
+ *
+ * Created by MengchouChey on 2026-06-10
+ * Internship Program, 9th Feb - 27th Apr 2026
+ *
+ * This file is the Application class for Keyman, which is used to set the default night mode based on user preferences when the application starts.
+ *
+ */
+package com.tavultesoft.kmapro;
+
+import android.app.Application;
+import android.content.SharedPreferences;
+
+import androidx.appcompat.app.AppCompatDelegate;
+
+public class KeymanApplication extends Application {
+ @Override
+ public void onCreate() {
+ SharedPreferences prefs = getSharedPreferences("settings", MODE_PRIVATE);
+ int mode = prefs.getInt("theme_mode", AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
+ AppCompatDelegate.setDefaultNightMode(mode);
+ super.onCreate();
+ }
+}
diff --git a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KeymanSettingsActivity.java b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KeymanSettingsActivity.java
deleted file mode 100644
index bda56856b26..00000000000
--- a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KeymanSettingsActivity.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.tavultesoft.kmapro;
-
-import android.os.Bundle;
-
-import com.keyman.engine.BaseActivity;
-import com.keyman.engine.KMManager;
-
-import androidx.appcompat.widget.Toolbar;
-
-public class KeymanSettingsActivity extends BaseActivity {
- protected static final String installedLanguagesKey = "InstalledLanguages";
- protected static final String installKeyboardOrDictionaryKey = "InstallKeyboardOrDictionary";
- protected static final String sendCrashReport = "SendCrashReport";
- public static final String spacebarTextKey = "SpacebarText";
- public static final String hapticFeedbackKey = "HapticFeedback";
- public static final String oskWithPhysicalKeyboardKey = "ShowOSK";
-
- protected KeymanSettingsFragment innerFragment;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- setContentView(R.layout.keyman_settings_layout);
-
- setupEdgeToEdge(R.id.keyman_settings_layout);
- setupStatusBarColors(R.color.keyman_blue, android.R.color.white);
-
- Toolbar toolbar = (Toolbar) findViewById(R.id.keyman_settings_toolbar);
- toolbar.setTitleTextColor(getResources().getColor(android.R.color.white));
- toolbar.setTitle(R.string.keyman_settings);
- setSupportActionBar(toolbar);
- if (getSupportActionBar() != null) {
- getSupportActionBar().setDisplayHomeAsUpEnabled(true);
- getSupportActionBar().setDisplayShowHomeEnabled(true);
- getSupportActionBar().setDisplayShowTitleEnabled(true);
- }
-
- innerFragment = (KeymanSettingsFragment) getSupportFragmentManager().findFragmentById(R.id.keyman_settings_fragment);
-
- // For Keyman sites, disable keyboard picker task flag so keyboard picker doesn't dismiss Keyman app
- KMManager.dontCloseParentAppOnShowKeyboardPicker();
- }
-
- @Override
- public void onWindowFocusChanged(boolean hasFocus) {
- super.onWindowFocusChanged(hasFocus);
-
- if(hasFocus) {
- innerFragment.update();
- }
- }
-}
diff --git a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KeymanSettingsFragment.java b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KeymanSettingsFragment.java
index 3aa149f477c..e1819dd97fb 100644
--- a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KeymanSettingsFragment.java
+++ b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KeymanSettingsFragment.java
@@ -44,7 +44,7 @@ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
getPreferenceManager().setSharedPreferencesName(getString(R.string.kma_prefs_name));
languagesPreference = new Preference(context);
- languagesPreference.setKey(KeymanSettingsActivity.installedLanguagesKey);
+ languagesPreference.setKey(KeymanSettingsKeys.INSTALLED_LANGUAGES);
languagesPreference.setTitle(getInstalledLanguagesText());
languagesPreference.setWidgetLayoutResource(R.layout.preference_icon_layout);
Intent languagesIntent = new Intent(context, LanguagesSettingsActivity.class);
@@ -52,7 +52,7 @@ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
languagesPreference.setIntent(languagesIntent);
installKeyboardOrDictionary = new Preference(context);
- installKeyboardOrDictionary.setKey(KeymanSettingsActivity.installKeyboardOrDictionaryKey);
+ installKeyboardOrDictionary.setKey(KeymanSettingsKeys.INSTALL_KEYBOARD_OR_DICTIONARY);
installKeyboardOrDictionary.setTitle(getString(R.string.install_keyboard_or_dictionary));
installKeyboardOrDictionary.setWidgetLayoutResource(R.layout.preference_add_icon_layout);
Intent installIntent = new Intent(context, KeymanSettingsInstallActivity.class);
@@ -75,7 +75,7 @@ public boolean onPreferenceChange(Preference preference, Object newValue) {
};
setSystemKeyboardPreference = new CheckBoxPreference(context);
- setSystemKeyboardPreference.setTitle(R.string.enable_system_keyboard);
+ setSystemKeyboardPreference.setTitle(R.string.system_keyboards);
setSystemKeyboardPreference.setSingleLineTitle(false);
setSystemKeyboardPreference.setDefaultValue(SystemIMESettings.isEnabledAsSystemKB(context));
setSystemKeyboardPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@@ -120,7 +120,7 @@ public boolean onPreferenceClick(Preference preference) {
/* Spacebar Caption Preference */
spacebarTextPreference = new ListPreference(context);
- spacebarTextPreference.setKey(KeymanSettingsActivity.spacebarTextKey);
+ spacebarTextPreference.setKey(KeymanSettingsKeys.SPACEBAR_TEXT);
spacebarTextPreference.setTitle(getString(R.string.spacebar_caption)); // getString(R.string.change_display_language));
@@ -161,7 +161,7 @@ public boolean onPreferenceChange(Preference preference, Object newValue) {
});
SwitchPreference oskWithPhysicalKeyboardPreference = new SwitchPreference(context);
- oskWithPhysicalKeyboardPreference.setKey(KeymanSettingsActivity.oskWithPhysicalKeyboardKey);
+ oskWithPhysicalKeyboardPreference.setKey(KeymanSettingsKeys.OSK_WITH_PHYSICAL_KEYBOARD);
oskWithPhysicalKeyboardPreference.setTitle(getString(R.string.show_osk));
oskWithPhysicalKeyboardPreference.setSummary(getString(R.string.show_osk_hint));
@@ -169,7 +169,7 @@ public boolean onPreferenceChange(Preference preference, Object newValue) {
PreferencesManager.kma_prefs_name, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
boolean showOSK = prefs.getBoolean(
- KeymanSettingsActivity.oskWithPhysicalKeyboardKey, false);
+ KeymanSettingsKeys.OSK_WITH_PHYSICAL_KEYBOARD, false);
oskWithPhysicalKeyboardPreference.setDefaultValue(showOSK);
oskWithPhysicalKeyboardPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@@ -179,14 +179,14 @@ public boolean onPreferenceChange(Preference preference, Object newValue) {
return false;
}
- editor.putBoolean(KeymanSettingsActivity.oskWithPhysicalKeyboardKey, (boolean)newValue);
+ editor.putBoolean(KeymanSettingsKeys.OSK_WITH_PHYSICAL_KEYBOARD, (boolean)newValue);
editor.commit();
return true;
}
});
SwitchPreference hapticFeedbackPreference = new SwitchPreference(context);
- hapticFeedbackPreference.setKey(KeymanSettingsActivity.hapticFeedbackKey);
+ hapticFeedbackPreference.setKey(KeymanSettingsKeys.HAPTIC_FEEDBACK);
hapticFeedbackPreference.setTitle(getString(R.string.haptic_feedback));
hapticFeedbackPreference.setDefaultValue(false);
hapticFeedbackPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@@ -212,7 +212,7 @@ as part of the default onClick() used by SwitchPreference.
getStartedPreference.setDefaultValue(true);
SwitchPreference sendCrashReportPreference = new SwitchPreference(context);
- sendCrashReportPreference.setKey(KeymanSettingsActivity.sendCrashReport);
+ sendCrashReportPreference.setKey(KeymanSettingsKeys.SEND_CRASH_REPORT);
sendCrashReportPreference.setTitle(getString(R.string.show_send_crash_report));
sendCrashReportPreference.setSummaryOn(getString(R.string.show_send_crash_report_on));
sendCrashReportPreference.setSummaryOff(getString(R.string.show_send_crash_report_off));
diff --git a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KeymanSettingsInstallActivity.java b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KeymanSettingsInstallActivity.java
index 3a7a9ce8a72..1775dd02676 100644
--- a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KeymanSettingsInstallActivity.java
+++ b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KeymanSettingsInstallActivity.java
@@ -21,7 +21,6 @@
import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.ListView;
-import android.os.Bundle;
import android.widget.SimpleAdapter;
import android.widget.TextView;
@@ -71,13 +70,13 @@ public void onCreate(Bundle savedInstanceState) {
final String noIcon = "0";
HashMap hashMap = new HashMap<>();
hashMap.put(titleKey, getString(R.string.install_from_keyman_dot_com));
- String icon = String.valueOf(R.drawable.ic_content_add);
+ String icon = String.valueOf(R.drawable.ic_content_add_mode);
hashMap.put(iconKey, icon);
installOptionList.add(hashMap);
hashMap = new HashMap<>();
hashMap.put(titleKey, getString(R.string.install_from_local_file));
- icon = String.valueOf(R.drawable.ic_folder_open);
+ icon = String.valueOf(R.drawable.ic_folder_open_mode);
hashMap.put(iconKey, icon);
hashMap.put(isEnabledKey, "true");
installOptionList.add(hashMap);
@@ -95,7 +94,7 @@ public void onCreate(Bundle savedInstanceState) {
hashMap = new HashMap<>();
hashMap.put(titleKey, getString(R.string.add_languages_to_installed_keyboard));
hashMap.put(subtitleKey, getString(R.string.add_language_subtext));
- icon = String.valueOf(R.drawable.ic_content_add);
+ icon = String.valueOf(R.drawable.ic_content_add_mode);
hashMap.put(iconKey, icon);
hashMap.put(isEnabledKey, "true");
installOptionList.add(hashMap);
diff --git a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KeymanSettingsKeys.java b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KeymanSettingsKeys.java
new file mode 100644
index 00000000000..9055307b6db
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KeymanSettingsKeys.java
@@ -0,0 +1,22 @@
+/*
+ * Keyman is copyright (C) SIL Global. MIT License.
+ *
+ * Created by MengchouChey on 2026-06-10
+ * Internship Program, 9th Feb - 27th Apr 2026
+ *
+ * These are the keys used to replace KeymanSettingsActivity and KeymanSettingsFragment
+ *
+ */
+package com.tavultesoft.kmapro;
+
+public final class KeymanSettingsKeys {
+ private KeymanSettingsKeys() {
+ }
+
+ public static final String INSTALLED_LANGUAGES = "InstalledLanguages";
+ public static final String INSTALL_KEYBOARD_OR_DICTIONARY = "InstallKeyboardOrDictionary";
+ public static final String SEND_CRASH_REPORT = "SendCrashReport";
+ public static final String SPACEBAR_TEXT = "SpacebarText";
+ public static final String HAPTIC_FEEDBACK = "HapticFeedback";
+ public static final String OSK_WITH_PHYSICAL_KEYBOARD = "ShowOSK";
+}
diff --git a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/LanguageSettingsActivity.java b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/LanguageSettingsActivity.java
index 9342a0b5285..887cfb7033c 100644
--- a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/LanguageSettingsActivity.java
+++ b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/LanguageSettingsActivity.java
@@ -153,7 +153,7 @@ public void onCheckedChanged(RadioGroup group, @IdRes int checkId) {
updateActiveLexicalModel();
ImageView imageView = (ImageView) layout.findViewById(R.id.image1);
- imageView.setImageResource(R.drawable.ic_action_forward);
+ imageView.setImageResource(R.drawable.ic_action_forward_mode);
layout.setEnabled(true);
layout.setOnClickListener(new View.OnClickListener() {
@Override
@@ -333,7 +333,7 @@ public View getView(int position, View convertView, ViewGroup parent) {
}
holder.text.setText(kbd.getResourceName());
- holder.img.setImageResource(R.drawable.ic_action_forward);
+ holder.img.setImageResource(R.drawable.ic_action_forward_mode);
return convertView;
}
diff --git a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/LanguagesSettingsActivity.java b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/LanguagesSettingsActivity.java
index 79c845fa6f5..3e3c6c785f8 100644
--- a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/LanguagesSettingsActivity.java
+++ b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/LanguagesSettingsActivity.java
@@ -205,7 +205,7 @@ public View getView(int position, View convertView, ViewGroup parent) {
}
holder.textLang.setText(data.name);
- holder.img.setImageResource(R.drawable.ic_action_forward);
+ holder.img.setImageResource(R.drawable.ic_action_forward_mode);
holder.textCount.setText(getContext().getResources().getQuantityString(R.plurals.keyboard_count, data.keyboards.size(), data.keyboards.size()));
diff --git a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/MainActivity.java b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/MainActivity.java
index 01f38a4a66a..044f21abbaf 100644
--- a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/MainActivity.java
+++ b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/MainActivity.java
@@ -6,6 +6,8 @@
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
+import com.google.android.material.navigation.NavigationView;
+import android.util.DisplayMetrics;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
@@ -26,6 +28,7 @@
import com.keyman.engine.KMKeyboardDownloaderActivity;
import com.keyman.engine.KMManager;
import com.keyman.engine.KMManager.KeyboardType;
+import com.keyman.engine.KeyboardEventHandler;
import com.keyman.engine.KmpInstallMode;
import com.keyman.engine.KMTextView;
import com.keyman.engine.KeyboardEventHandler.OnKeyboardDownloadEventListener;
@@ -36,7 +39,6 @@
import com.keyman.engine.data.CloudRepository;
import com.keyman.engine.data.Dataset;
import com.keyman.engine.data.Keyboard;
-import com.keyman.engine.data.LexicalModel;
import com.keyman.engine.util.FileUtils;
import com.keyman.engine.util.DownloadFileUtils;
import com.keyman.android.DownloadIntentService;
@@ -47,17 +49,15 @@
import com.keyman.engine.util.WebViewUtils.EngineWebViewVersionStatus;
import com.keyman.engine.util.WebViewUtils.SystemWebViewStatus;
-import android.Manifest;
import android.app.ProgressDialog;
import android.content.pm.PackageManager;
+import android.graphics.Color;
import android.net.Uri;
import android.net.Uri.Builder;
import android.os.Build;
import android.os.Bundle;
-import android.os.Environment;
import android.os.Handler;
import android.os.ParcelFileDescriptor;
-import android.os.Parcelable;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
@@ -65,7 +65,10 @@
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
+import androidx.appcompat.app.ActionBarDrawerToggle;
+import androidx.appcompat.app.AppCompatDelegate;
import androidx.appcompat.widget.Toolbar;
+import androidx.appcompat.widget.SwitchCompat;
import androidx.appcompat.app.AlertDialog;
import androidx.constraintlayout.widget.ConstraintLayout;
import android.content.ClipData;
@@ -73,11 +76,10 @@
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
-import android.content.pm.ResolveInfo;
+
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.Canvas;
-import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.Rect;
@@ -86,30 +88,61 @@
import android.graphics.drawable.Drawable;
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
+import androidx.core.view.MenuCompat;
+import androidx.core.view.WindowCompat;
+import androidx.core.view.WindowInsetsControllerCompat;
+import androidx.drawerlayout.widget.DrawerLayout;
+
+import androidx.recyclerview.widget.RecyclerView;
+
+import androidx.core.content.ContextCompat;
import android.provider.Settings;
import android.text.Html;
+import android.text.SpannableString;
+import android.text.Spanned;
+import android.text.style.ForegroundColorSpan;
+import android.text.style.RelativeSizeSpan;
import android.util.Log;
import android.util.TypedValue;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
+import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
+import android.view.Window;
+import android.view.WindowManager;
import android.widget.Button;
+import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
+import android.view.Gravity;
+import android.view.inputmethod.InputMethodManager;
+import androidx.drawerlayout.widget.DrawerLayout;
+import androidx.appcompat.app.ActionBarDrawerToggle;
+import com.google.android.material.navigation.NavigationView;
+import androidx.core.content.ContextCompat;
+import androidx.core.view.GravityCompat;
+import android.view.MenuItem;
+import androidx.appcompat.widget.AppCompatCheckBox;
+
import io.sentry.android.core.SentryAndroid;
+import io.sentry.Sentry;
public class MainActivity extends BaseActivity implements OnKeyboardEventListener, OnKeyboardDownloadEventListener,
ActivityCompat.OnRequestPermissionsResultCallback {
public static Context context;
+ private DrawerLayout drawerLayout;
+ private ActionBarDrawerToggle drawerToggle;
+ private NavigationView navigationView;
+
// Fields used for installing kmp packages
public static final int PERMISSION_REQUEST_STORAGE = 0;
public static final int READ_REQUEST_CODE = 42;
@@ -118,6 +151,10 @@ public class MainActivity extends BaseActivity implements OnKeyboardEventListene
private ConstraintLayout constraintLayout;
private KMTextView textView;
+ private View textPopupToggleButton;
+ private View keyboardToolbarContainer;
+ private boolean isKeyboardToolbarExpanded = false;
+ private boolean suppressOutsideCloseForCurrentTouch = false;
private final int minTextSize = 16;
private final int maxTextSize = 72;
private int textSize = minTextSize;
@@ -126,17 +163,31 @@ public class MainActivity extends BaseActivity implements OnKeyboardEventListene
private static final String userTextSizeKey = "UserTextSize";
private Toolbar toolbar;
private Menu menu;
+ private String lastCurrentKeyboardDrawerTitle = null;
+ private String lastKnownKeyboardId = null;
+ private static final boolean DEBUG_CURRENT_KEYBOARD_LOGS = false;
+ private static final boolean SHOW_CURRENT_KEYBOARD_ERROR_TOAST = false;
private static Dataset repo;
private boolean didExecuteParser = false;
DownloadResultReceiver resultReceiver;
private static ProgressDialog progressDialog;
+ private static final String PREFS_NAME = "settings";
+ private static final String KEY_THEME_MODE = "theme_mode";
@Override
protected void onCreate(Bundle savedInstanceState) {
- setTheme(R.style.AppTheme);
+ SharedPreferences theme_prefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
+ int savedMode = theme_prefs.getInt(KEY_THEME_MODE, AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
+ AppCompatDelegate.setDefaultNightMode(savedMode);
+ getDelegate().applyDayNight();
super.onCreate(savedInstanceState);
+ KMManager.initialize(getApplicationContext(), KeyboardType.KEYBOARD_TYPE_INAPP);
+ setContentView(R.layout.activity_main);
+ constraintLayout = (ConstraintLayout) findViewById(R.id.constraintLayout);
+
+ setupEdgeToEdge(R.id.constraintLayout);
context = this;
checkSendCrashReport();
@@ -154,24 +205,43 @@ protected void onCreate(Bundle savedInstanceState) {
KMManager.setDebugMode(true);
}
- // Verify WebView installed and enabled before attempting to initialize KMManager
- KMManager.initialize(getApplicationContext(), KeyboardType.KEYBOARD_TYPE_INAPP);
KMManager.executeResourceUpdate(this);
DefaultLanguageResource.install(context);
SharedPreferences prefs = getSharedPreferences(getString(R.string.kma_prefs_name), Context.MODE_PRIVATE);
- KMManager.SpacebarText spacebarText = KMManager.SpacebarText.fromString(prefs.getString(KeymanSettingsActivity.spacebarTextKey, KMManager.SpacebarText.LANGUAGE_KEYBOARD.toString()));
+ KMManager.SpacebarText spacebarText = KMManager.SpacebarText.fromString(prefs.getString(KeymanSettingsKeys.SPACEBAR_TEXT, KMManager.SpacebarText.LANGUAGE_KEYBOARD.toString()));
KMManager.setSpacebarText(spacebarText);
checkHapticFeedback();
- setContentView(R.layout.activity_main);
+ NavigationView navView = findViewById(R.id.nav_view);
+ DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
+ int width = (int) (displayMetrics.widthPixels * 0.80);
+ navView.getLayoutParams().width = width;
+ navView.requestLayout();
- constraintLayout = (ConstraintLayout)findViewById(R.id.constraintLayout);
- setupEdgeToEdge(R.id.constraintLayout);
- setupStatusBarColors(android.R.color.white, R.color.neutral_2);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ Window window = getWindow();
+ window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+ window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+
+ window.setStatusBarColor(ContextCompat.getColor(this, R.color.toolbarColor));
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ int flags = window.getDecorView().getSystemUiVisibility();
+
+ boolean isDarkMode = isDarkMode();
+
+ if (!isDarkMode) {
+ flags |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
+ } else {
+ flags &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
+ }
+ window.getDecorView().setSystemUiVisibility(flags);
+ }
+ }
toolbar = (Toolbar) findViewById(R.id.titlebar);
setSupportActionBar(toolbar);
@@ -180,14 +250,83 @@ protected void onCreate(Bundle savedInstanceState) {
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setLogo(R.drawable.keyman_logo);
getSupportActionBar().setDisplayShowTitleEnabled(false);
+ // For Darkmode - once switched to dark mode, the logo becomes white
+ getSupportActionBar().setLogo(R.drawable.keyman_logo_mode);
getSupportActionBar().setBackgroundDrawable(getActionBarDrawable(this));
+ drawerLayout = findViewById(R.id.drawer_layout);
+ drawerLayout.setScrimColor(Color.parseColor("#80000000"));
+ drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_open, R.string.drawer_close);
+ drawerLayout.addDrawerListener(drawerToggle);
+ drawerToggle.syncState();
+
+ navigationView = findViewById(R.id.nav_view);
+ navigationView.setItemMaxLines(4);
+ MenuCompat.setGroupDividerEnabled(navigationView.getMenu(), true);
+ navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
+ @Override
+ public boolean onNavigationItemSelected(@NonNull MenuItem item) {
+ int id = item.getItemId();
+ if (id == R.id.nav_toggle_show_osk || id == R.id.nav_toggle_send_crash_report) {
+ toggleDrawerSwitch(navigationView, id);
+ return true;
+ }
+
+ drawerLayout.closeDrawers();
+ return handleDrawerNavigationItemSelected(id);
+ }
+ });
+ updateCurrentKeyboardDrawerItemTitle(navigationView);
+ updateInstalledLanguagesDrawerTitle(navigationView);
+ initializeDrawerItemSubtitles(navigationView);
+ initializeDrawerToggleOptions(navigationView);
+
+ drawerLayout.addDrawerListener(new DrawerLayout.SimpleDrawerListener() {
+
+ @Override
+ public void onDrawerSlide(View drawerView, float slideOffset) {
+ KMManager.hideSystemKeyboard();
+ textView.dismissKeyboard();
+ }
+
+ @Override
+ public void onDrawerOpened(View drawerView) {
+ if (navigationView != null) {
+ updateCurrentKeyboardDrawerItemTitle(navigationView);
+ updateInstalledLanguagesDrawerTitle(navigationView);
+ initializeDrawerItemSubtitles(navigationView);
+ }
+ }
+
+ @Override
+ public void onDrawerClosed(View drawerView) {
+ textView.callOnClick();
+ if (navigationView != null) {
+ View menuView = navigationView.getChildAt(0);
+ if (menuView instanceof RecyclerView) {
+ ((RecyclerView) menuView).scrollToPosition(0);
+ }
+ }
+ }
+ });
+
+ drawerToggle.getDrawerArrowDrawable().setColor(Color.BLACK);
+ drawerToggle.getDrawerArrowDrawable().setBarThickness(10f);
+ drawerToggle.getDrawerArrowDrawable().setGapSize(10f);
+
textView = (KMTextView) findViewById(R.id.kmTextView);
textView.setText(prefs.getString(userTextKey, ""));
textSize = prefs.getInt(userTextSizeKey, minTextSize);
textView.setTextSize((float) textSize);
textView.setSelection(textView.getText().length());
+ initializeKeyboardToolbar();
+
+ textView.post(() -> {
+ KMManager.onConfigurationChanged(this.getResources().getConfiguration());
+ KMManager.getKeyboardHeight(this);
+ });
+
// Check WebView enabled and Chrome version
SystemWebViewStatus webViewStatus = WebViewUtils.getSystemWebViewStatus(context);
EngineWebViewVersionStatus chromeStatus = KMManager.getEngineWebViewVersionStatus();
@@ -197,6 +336,56 @@ protected void onCreate(Bundle savedInstanceState) {
checkGetStarted();
}
+ private void openThemeDialog() {
+ String[] options = {
+ getString(R.string.theme_dark_mode),
+ getString(R.string.theme_light_mode),
+ getString(R.string.theme_system_default)
+ };
+
+ SharedPreferences themePrefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
+ int currentMode = themePrefs.getInt(KEY_THEME_MODE, AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
+
+ int checkedItem;
+ if (currentMode == AppCompatDelegate.MODE_NIGHT_YES)
+ checkedItem = 0;
+ else if (currentMode == AppCompatDelegate.MODE_NIGHT_NO)
+ checkedItem = 1;
+ else
+ checkedItem = 2;
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle(getString(R.string.theme_choose));
+
+ builder.setSingleChoiceItems(options, checkedItem, (dialog, which) -> {
+ int modeToApply;
+ switch (which) {
+ case 0:
+ modeToApply = AppCompatDelegate.MODE_NIGHT_YES;
+ break;
+ case 1:
+ modeToApply = AppCompatDelegate.MODE_NIGHT_NO;
+ break;
+ default:
+ modeToApply = AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM;
+ break;
+ }
+ // Save the choice
+ themePrefs.edit().putInt(KEY_THEME_MODE, modeToApply).apply();
+
+ // Apply immediately
+ AppCompatDelegate.setDefaultNightMode(modeToApply);
+ getDelegate().applyDayNight(); // ensures current activity updates
+ if (navigationView != null) {
+ updateThemeDrawerSubtitle(navigationView);
+ }
+
+ dialog.dismiss();
+ });
+ builder.setNegativeButton(android.R.string.cancel, (dialog, which) -> dialog.dismiss());
+ builder.show();
+ }
+
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onActivityResult(int requestCode, int resultCode, Intent returnIntent) {
@@ -248,6 +437,12 @@ public void onActivityResult(int requestCode, int resultCode, Intent returnInten
protected void onResume() {
super.onResume();
+ if (navigationView != null) {
+ updateCurrentKeyboardDrawerItemTitle(navigationView);
+ updateInstalledLanguagesDrawerTitle(navigationView);
+ initializeDrawerItemSubtitles(navigationView);
+ }
+
if (textView != null) {
// Reset inAppPredictionsSuspendedForSensitiveInput flag
KMManager.setPredictionsSuspended(textView.getInputType(), KeyboardType.KEYBOARD_TYPE_INAPP);
@@ -366,31 +561,24 @@ public void onConfigurationChanged(Configuration newConfig) {
lastOrientation = newConfig.orientation;
}
- @SuppressLint("RestrictedApi")
- @Override
- public boolean onPrepareOptionsMenu(final Menu menu) {
- this.menu = menu;
- final MenuItem _overflowMenuItem = menu.findItem(R.id.action_overflow);
- if (_overflowMenuItem != null) {
- MenuItem updateKeyboards = this.menu.findItem(R.id.action_update_keyboards);
- updateUpdateCountIndicator(updateKeyboards,
- KMManager.getUpdateTool().getOpenUpdateCount(), true);
- }
- return super.onPrepareOptionsMenu(menu);
- }
-
private void updateUpdateCountIndicator(int anUpdateCount) {
if (menu == null) {
return;
}
- final MenuItem _overflowMenuItem = menu.findItem(R.id.action_overflow);
- if (_overflowMenuItem != null) {
- updateUpdateCountIndicator(_overflowMenuItem, anUpdateCount, false);
+ // 1. Update the Top Action Bar Menu
+ if (menu != null) {
+ final MenuItem toolbarUpdate = menu.findItem(R.id.action_update_keyboards);
+ if (toolbarUpdate != null) {
+ toolbarUpdate.setVisible(anUpdateCount > 0);
+ }
}
- final MenuItem _keyboardupdate = menu.findItem(R.id.action_update_keyboards);
- if (_keyboardupdate != null && anUpdateCount > 0) {
- _keyboardupdate.setVisible(true);
+ // 2. Update the Drawer/Sidebar Navigation Menu
+ if (navigationView != null) {
+ final MenuItem drawerUpdate = navigationView.getMenu().findItem(R.id.action_update_keyboards);
+ if (drawerUpdate != null) {
+ drawerUpdate.setVisible(anUpdateCount > 0);
+ }
}
}
@@ -432,8 +620,8 @@ public boolean onCreateOptionsMenu(Menu menu) {
public void propertyChange(PropertyChangeEvent evt) {
if(!evt.getPropertyName().equals("updateCount"))
return;
- updateUpdateCountIndicator(
- evt.getNewValue()==null?0:(Integer) evt.getNewValue());
+ int count = KMManager.getUpdateTool().getOpenUpdateCount();
+ updateUpdateCountIndicator(count);
}
}
);
@@ -470,11 +658,13 @@ public boolean onOptionsItemSelected(MenuItem item) {
KMManager.getUpdateTool().executeOpenUpdates();
// Dismiss icon - we intentionally hide the icon, even if the user cancels the update
updateUpdateCountIndicator(0);
- final MenuItem _keyboardupdate = menu.findItem(R.id.action_update_keyboards);
- if (_keyboardupdate != null && _keyboardupdate.isVisible()) {
- _keyboardupdate.setVisible(false);
+ return true;
+ } else if (item.getItemId() == R.id.action_sidebar) {
+ if (drawerLayout.isDrawerOpen(GravityCompat.END)) {
+ drawerLayout.closeDrawer(GravityCompat.END);
+ } else {
+ drawerLayout.openDrawer(GravityCompat.END);
}
-
return true;
} else {
return super.onOptionsItemSelected(item);
@@ -485,13 +675,51 @@ public boolean onOptionsItemSelected(MenuItem item) {
public boolean onKeyUp(int keycode, KeyEvent e) {
switch (keycode) {
case KeyEvent.KEYCODE_MENU:
- menu.performIdentifierAction(R.id.action_overflow, Menu.FLAG_PERFORM_NO_CLOSE);
+ if (drawerLayout.isDrawerOpen(GravityCompat.END)) {
+ drawerLayout.closeDrawer(GravityCompat.END);
+ } else {
+ drawerLayout.openDrawer(GravityCompat.END);
+ }
return true;
}
return super.onKeyUp(keycode, e);
}
+ @Override
+ public boolean dispatchTouchEvent(MotionEvent ev) {
+ int action = ev.getActionMasked();
+ // Collapse the keyboard toolbar when the user taps outside of it
+ if (action == MotionEvent.ACTION_DOWN && isKeyboardToolbarExpanded && !suppressOutsideCloseForCurrentTouch) {
+ boolean touchOnToggle = isTouchInsideView(ev, textPopupToggleButton);
+ if (touchOnToggle) {
+ return super.dispatchTouchEvent(ev);
+ }
+
+ boolean touchOnToolbar = isTouchInsideView(ev, keyboardToolbarContainer);
+ if (!touchOnToolbar && !touchOnToggle) {
+ setKeyboardToolbarExpanded(false, true);
+ }
+ } else if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
+ suppressOutsideCloseForCurrentTouch = false;
+ }
+ return super.dispatchTouchEvent(ev);
+ }
+
+ private boolean isTouchInsideView(MotionEvent ev, View view) {
+ if (view == null || view.getVisibility() != View.VISIBLE) {
+ return false;
+ }
+
+ Rect bounds = new Rect();
+ view.getGlobalVisibleRect(bounds);
+ return bounds.contains((int) ev.getRawX(), (int) ev.getRawY());
+ }
+ private boolean isDarkMode() {
+ return (getResources().getConfiguration().uiMode &
+ Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES;
+ }
+
@Override
public void onKeyboardLoaded(KeyboardType keyboardType) {
// Do nothing
@@ -499,25 +727,137 @@ public void onKeyboardLoaded(KeyboardType keyboardType) {
@Override
public void onKeyboardChanged(String newKeyboard) {
- textView.setTypeface(KMManager.getKeyboardTextFontTypeface(this));
+ if (newKeyboard != null && !newKeyboard.isEmpty()) {
+ lastKnownKeyboardId = newKeyboard;
+ textView.setTypeface(KMManager.getKeyboardTextFontTypeface(this));
+ }
}
@Override
public void onKeyboardShown() {
// Refresh banner theme
- BannerController.setHTMLBanner(this, KeyboardType.KEYBOARD_TYPE_INAPP);
+ boolean isDarkMode = isDarkMode();
+ BannerController.setHTMLBanner(this, KeyboardType.KEYBOARD_TYPE_INAPP, isDarkMode);
resizeTextView(true);
+ updateKeyboardToolbarPosition();
+ if (textPopupToggleButton != null) {
+ textPopupToggleButton.setVisibility(View.VISIBLE);
+ }
}
@Override
public void onKeyboardDismissed() {
resizeTextView(false);
+ setKeyboardToolbarExpanded(false, false);
+ if (textPopupToggleButton != null) {
+ textPopupToggleButton.setVisibility(View.GONE);
+ }
+ }
+
+ private void initializeKeyboardToolbar() {
+ textPopupToggleButton = findViewById(R.id.keyboardToolbarToggleButton);
+ keyboardToolbarContainer = findViewById(R.id.keyboardToolbarContainer);
+
+ if (textPopupToggleButton == null || keyboardToolbarContainer == null) {
+ reportKeyboardToolbarLayoutIssue("Keyboard toolbar layout is missing required views.");
+ return;
+ }
+
+ setKeyboardToolbarExpanded(false, false);
+ textPopupToggleButton.setOnTouchListener((v, event) -> {
+ int action = event.getActionMasked();
+ if (action == MotionEvent.ACTION_DOWN) {
+ suppressOutsideCloseForCurrentTouch = true;
+ } else if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
+ suppressOutsideCloseForCurrentTouch = false;
+ }
+ return false;
+ });
+ textPopupToggleButton.setOnClickListener(v -> setKeyboardToolbarExpanded(!isKeyboardToolbarExpanded, true));
+
+ View shareButton = findViewById(R.id.keyboardToolbarShareButton);
+ if (shareButton != null) {
+ shareButton.setOnClickListener(v -> {
+ showShareDialog();
+ setKeyboardToolbarExpanded(false, true);
+ });
+ } else {
+ reportKeyboardToolbarLayoutIssue("Keyboard toolbar share button is missing.");
+ }
+
+ View textSizeButton = findViewById(R.id.keyboardToolbarTextSizeButton);
+ if (textSizeButton != null) {
+ textSizeButton.setOnClickListener(v -> {
+ showTextSizeDialog();
+ setKeyboardToolbarExpanded(false, true);
+ });
+ } else {
+ reportKeyboardToolbarLayoutIssue("Keyboard toolbar text size button is missing.");
+ }
+
+ View clearButton = findViewById(R.id.keyboardToolbarClearButton);
+ if (clearButton != null) {
+ clearButton.setOnClickListener(v -> {
+ showClearTextDialog();
+ setKeyboardToolbarExpanded(false, true);
+ });
+ } else {
+ reportKeyboardToolbarLayoutIssue("Keyboard toolbar clear button is missing.");
+ }
+ }
+
+ private void reportKeyboardToolbarLayoutIssue(String message) {
+ KMLog.LogError(TAG, message);
+ if (Sentry.isEnabled()) {
+ Sentry.captureMessage(message);
+ }
+ }
+
+ private void setKeyboardToolbarExpanded(boolean expanded, boolean animateRotation) {
+ if (keyboardToolbarContainer == null || textPopupToggleButton == null) {
+ return;
+ }
+
+ isKeyboardToolbarExpanded = expanded;
+ keyboardToolbarContainer.setVisibility(expanded ? View.VISIBLE : View.GONE);
+
+ float targetRotation = expanded ? 0f : 180f;
+ if (animateRotation) {
+ textPopupToggleButton.animate().rotation(targetRotation).setDuration(180).start();
+ } else {
+ textPopupToggleButton.setRotation(targetRotation);
+ }
+ }
+
+ private void updateKeyboardToolbarPosition() {
+ int keyboardTopOffset = KMManager.getKeyboardHeight(this) + KMManager.getBannerHeight(this)
+ + getResources().getDimensionPixelSize(R.dimen.keyboard_toolbar_keyboard_gap);
+ updateBottomMargin(textPopupToggleButton, keyboardTopOffset);
+ updateBottomMargin(keyboardToolbarContainer,
+ getResources().getDimensionPixelSize(R.dimen.keyboard_toolbar_container_bottom_margin));
+ }
+
+ private void updateBottomMargin(View view, int bottomMargin) {
+ if (view == null) {
+ return;
+ }
+
+ ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
+ if (!(layoutParams instanceof ViewGroup.MarginLayoutParams)) {
+ return;
+ }
+
+ ViewGroup.MarginLayoutParams marginLayoutParams = (ViewGroup.MarginLayoutParams) layoutParams;
+ if (marginLayoutParams.bottomMargin != bottomMargin) {
+ marginLayoutParams.bottomMargin = bottomMargin;
+ view.setLayoutParams(marginLayoutParams);
+ }
}
public void downloadKMP(String packageId, String bcp47, KmpInstallMode installMode) {
Uri downloadUri = bcp47 == null ?
- Uri.parse(KMString.format("https://keyman.com/go/package/download/%s", new Object[]{packageId})) :
- Uri.parse(KMString.format("https://keyman.com/go/package/download/%s?bcp47=%s", new Object[]{packageId, bcp47}));
+ Uri.parse(KMString.format("https://keyman.com/go/package/download/%s", new Object[] { packageId })) :
+ Uri.parse(KMString.format("https://keyman.com/go/package/download/%s?bcp47=%s", new Object[] { packageId, bcp47 }));
downloadKMP(downloadUri, installMode);
}
@@ -672,7 +1012,7 @@ private void showTextSizeDialog() {
LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
final View textSizeController = inflater.inflate(R.layout.text_size_controller, null);
final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(MainActivity.this);
- dialogBuilder.setIcon(R.drawable.ic_light_action_textsize);
+ dialogBuilder.setIcon(R.drawable.ic_action_textsize_mode);
dialogBuilder.setTitle(getTextSizeString());
dialogBuilder.setView(textSizeController);
dialogBuilder.setPositiveButton(getString(R.string.label_ok), new DialogInterface.OnClickListener() {
@@ -684,6 +1024,7 @@ public void onClick(DialogInterface dialog, int which) {
final AlertDialog dialog = dialogBuilder.create();
dialog.show();
+ dialog.getWindow().setBackgroundDrawableResource(R.color.dialogBackground);
final SeekBar seekBar = (SeekBar) dialog.findViewById(R.id.seekBar);
seekBar.setProgress(textSize - minTextSize);
@@ -741,7 +1082,7 @@ private String getTextSizeString() {
private void showClearTextDialog() {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(MainActivity.this);
- dialogBuilder.setIcon(R.drawable.ic_light_action_trash);
+ dialogBuilder.setIcon(R.drawable.ic_action_trash_mode);
dialogBuilder.setTitle(getString(R.string.action_clear_text));
dialogBuilder.setMessage(getString(R.string.all_text_will_be_cleared));
dialogBuilder.setPositiveButton(getString(R.string.label_ok), new DialogInterface.OnClickListener() {
@@ -758,7 +1099,9 @@ public void onClick(DialogInterface dialog, int which) {
}
});
- dialogBuilder.show();
+ final AlertDialog dialog = dialogBuilder.create();
+ dialog.show();
+ dialog.getWindow().setBackgroundDrawableResource(R.color.dialogBackground);
}
private void checkGetStarted() {
@@ -783,13 +1126,13 @@ private void checkGetStarted() {
private void checkSendCrashReport() {
SharedPreferences prefs = getSharedPreferences(getString(R.string.kma_prefs_name), Context.MODE_PRIVATE);
- boolean maySendCrashReport = prefs.getBoolean(KeymanSettingsActivity.sendCrashReport, true);
+ boolean maySendCrashReport = prefs.getBoolean(KeymanSettingsKeys.SEND_CRASH_REPORT, true);
KMManager.setMaySendCrashReport(maySendCrashReport);
}
private void checkHapticFeedback() {
SharedPreferences prefs = getSharedPreferences(getString(R.string.kma_prefs_name), Context.MODE_PRIVATE);
- boolean mayHaveHapticFeedback = prefs.getBoolean(KeymanSettingsActivity.hapticFeedbackKey, false);
+ boolean mayHaveHapticFeedback = prefs.getBoolean(KeymanSettingsKeys.HAPTIC_FEEDBACK, false);
KMManager.setHapticFeedback(mayHaveHapticFeedback);
}
@@ -966,8 +1309,393 @@ private void showGetStarted() {
}
private void showSettings() {
- Intent settingsIntent = new Intent(this, KeymanSettingsActivity.class);
- startActivity(settingsIntent);
+ if (drawerLayout != null) {
+ drawerLayout.openDrawer(GravityCompat.END);
+ }
+ }
+
+ private boolean handleDrawerNavigationItemSelected(int id) {
+ if (id == R.id.system_keyboards) {
+ startActivity(new Intent(Settings.ACTION_INPUT_METHOD_SETTINGS));
+ } else if (id == R.id.action_update_keyboards) {
+ KMManager.getUpdateTool().executeOpenUpdates();
+ updateUpdateCountIndicator(0);
+ } else if (id == R.id.action_settings) {
+ showSettings();
+ } else if (id == R.id.nav_installed_languages) {
+ Intent intent = new Intent(context, LanguagesSettingsActivity.class);
+ intent.putExtra(KMManager.KMKey_DisplayKeyboardSwitcher, false);
+ startActivity(intent);
+ } else if (id == R.id.nav_install_keyboard) {
+ startActivity(new Intent(context, KeymanSettingsInstallActivity.class));
+ } else if (id == R.id.nav_display_language) {
+ startActivity(new Intent(context, KeymanSettingsLocalizeActivity.class));
+ } else if (id == R.id.action_get_started) {
+ startActivity(new Intent(context, GetStartedActivity.class));
+ } else if (id == R.id.nav_keyboard_height) {
+ startActivity(new Intent(context, AdjustKeyboardHeightActivity.class));
+ } else if (id == R.id.nav_longpress_delay) {
+ startActivity(new Intent(context, AdjustLongpressDelayActivity.class));
+ } else if (id == R.id.nav_spacebar_caption) {
+ showSpacebarCaptionDialog();
+ } else if (id == R.id.nav_help) {
+ startActivity(new Intent(context, InfoActivity.class));
+ } else if (id == R.id.nav_palette) {
+ openThemeDialog();
+ } else if (id == R.id.nav_about_current_keyboard) {
+ showCurrentKeyboardSettings();
+ }
+ return true;
+ }
+
+ private void showSpacebarCaptionDialog() {
+ CharSequence[] entries = {
+ getString(R.string.spacebar_caption_language),
+ getString(R.string.spacebar_caption_keyboard),
+ getString(R.string.spacebar_caption_language_keyboard),
+ getString(R.string.spacebar_caption_blank)
+ };
+
+ KMManager.SpacebarText[] values = {
+ KMManager.SpacebarText.LANGUAGE,
+ KMManager.SpacebarText.KEYBOARD,
+ KMManager.SpacebarText.LANGUAGE_KEYBOARD,
+ KMManager.SpacebarText.BLANK
+ };
+
+ KMManager.SpacebarText current = KMManager.getSpacebarText();
+ int currentIndex = Arrays.asList(values).indexOf(current);
+
+ new AlertDialog.Builder(context)
+ .setTitle(getString(R.string.spacebar_caption))
+ .setSingleChoiceItems(entries, currentIndex, (dialog, which) -> {
+ KMManager.setSpacebarText(values[which]);
+
+ SharedPreferences prefs = getSharedPreferences(
+ getString(R.string.kma_prefs_name), Context.MODE_PRIVATE);
+ prefs.edit()
+ .putString(KeymanSettingsKeys.SPACEBAR_TEXT, values[which].toString())
+ .apply();
+
+ dialog.dismiss();
+ })
+ .setNegativeButton(getString(R.string.label_cancel), null)
+ .show();
+ }
+
+ private void initializeDrawerToggleOptions(NavigationView navigationView) {
+ SharedPreferences prefs = getSharedPreferences(getString(R.string.kma_prefs_name), Context.MODE_PRIVATE);
+
+ bindDrawerSwitch(navigationView, R.id.nav_toggle_show_osk,
+ prefs.getBoolean(KeymanSettingsKeys.OSK_WITH_PHYSICAL_KEYBOARD, false),
+ new SwitchChangeHandler() {
+ @Override
+ public void onChanged(boolean isChecked) {
+ SharedPreferences.Editor editor = prefs.edit();
+ editor.putBoolean(KeymanSettingsKeys.OSK_WITH_PHYSICAL_KEYBOARD, isChecked);
+ editor.apply();
+ }
+ });
+
+ bindDrawerSwitch(navigationView, R.id.nav_toggle_send_crash_report,
+ prefs.getBoolean(KeymanSettingsKeys.SEND_CRASH_REPORT, true),
+ new SwitchChangeHandler() {
+ @Override
+ public void onChanged(boolean isChecked) {
+ SharedPreferences.Editor editor = prefs.edit();
+ editor.putBoolean(KeymanSettingsKeys.SEND_CRASH_REPORT, isChecked);
+ editor.apply();
+ KMManager.setMaySendCrashReport(isChecked);
+ }
+ });
+ }
+
+ private void initializeDrawerItemSubtitles(NavigationView navigationView) {
+ setDrawerItemSubtitle(navigationView, R.id.nav_spacebar_caption,
+ getString(R.string.drawer_subtitle_spacebar_caption));
+ setDrawerItemSubtitle(navigationView, R.id.nav_toggle_show_osk,
+ getString(R.string.drawer_subtitle_show_osk));
+ setDrawerItemSubtitle(navigationView, R.id.nav_toggle_send_crash_report,
+ getString(R.string.drawer_subtitle_send_crash_report));
+ setDrawerItemSubtitle(navigationView, R.id.nav_about_current_keyboard,
+ getString(R.string.drawer_subtitle_about_current_keyboard));
+ updateThemeDrawerSubtitle(navigationView);
+ updateCurrentKeyboardDrawerSubtitle(navigationView);
+ }
+
+ private void updateCurrentKeyboardDrawerItemTitle(NavigationView navigationView) {
+ MenuItem menuItem = navigationView.getMenu().findItem(R.id.nav_about_current_keyboard);
+ if (menuItem == null) {
+ return;
+ }
+
+ String newTitle = getString(R.string.drawer_about_current_keyboard);
+
+ if (!newTitle.equals(lastCurrentKeyboardDrawerTitle)) {
+ menuItem.setTitle(newTitle);
+ lastCurrentKeyboardDrawerTitle = newTitle;
+ }
+ }
+
+ private void updateCurrentKeyboardDrawerSubtitle(NavigationView navigationView) {
+ setDrawerItemSubtitle(navigationView, R.id.nav_about_current_keyboard, getCurrentKeyboardDisplayName());
+ }
+
+ private void updateThemeDrawerSubtitle(NavigationView navigationView) {
+ setDrawerItemSubtitle(
+ navigationView,
+ R.id.nav_palette,
+ getString(R.string.drawer_subtitle_theme, getThemeModeLabel())
+ );
+ }
+
+ private void updateInstalledLanguagesDrawerTitle(NavigationView navigationView) {
+ MenuItem menuItem = navigationView.getMenu().findItem(R.id.nav_installed_languages);
+ if (menuItem == null) {
+ return;
+ }
+
+ menuItem.setTitle(getInstalledLanguagesText());
+ }
+
+ private String getInstalledLanguagesText() {
+ Dataset installedDataset = KMManager.getInstalledDataset(context);
+ if (installedDataset == null) {
+ return getResources().getQuantityString(R.plurals.installed_languages, 0, 0);
+ }
+
+ int langCount = 0;
+ for (Dataset.LanguageDataset language : installedDataset.asList()) {
+ if (language.keyboards.size() > 0) {
+ langCount++;
+ }
+ }
+ return getResources().getQuantityString(R.plurals.installed_languages, langCount, langCount);
+ }
+
+ private String getCurrentKeyboardDisplayName() {
+ Keyboard currentKeyboard = getBestAvailableKeyboard();
+ if (currentKeyboard != null && currentKeyboard.getKeyboardName() != null
+ && !currentKeyboard.getKeyboardName().isEmpty()) {
+ return currentKeyboard.getKeyboardName();
+ }
+ return getString(R.string.drawer_about_no_active_keyboard);
+ }
+
+ private String getThemeModeLabel() {
+ SharedPreferences themePrefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
+ int currentMode = themePrefs.getInt(KEY_THEME_MODE, AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
+ if (currentMode == AppCompatDelegate.MODE_NIGHT_YES) {
+ return getString(R.string.theme_dark_mode);
+ }
+ if (currentMode == AppCompatDelegate.MODE_NIGHT_NO) {
+ return getString(R.string.theme_light_mode);
+ }
+ return getString(R.string.theme_system_default);
+ }
+
+ private void showCurrentKeyboardSettings() {
+ Keyboard currentKeyboard = getBestAvailableKeyboard();
+ if (currentKeyboard == null) {
+ if (BuildConfig.DEBUG && DEBUG_CURRENT_KEYBOARD_LOGS) {
+ KMLog.LogInfo(TAG, "Current keyboard unavailable; not opening KeyboardSettingsActivity.");
+ }
+ if (SHOW_CURRENT_KEYBOARD_ERROR_TOAST) {
+ Toast.makeText(this, getString(R.string.drawer_about_no_active_keyboard), Toast.LENGTH_SHORT).show();
+ }
+ return;
+ }
+
+ Intent intent = new Intent(this, KeyboardSettingsActivity.class);
+ Bundle bundle = new Bundle();
+ bundle.putSerializable(KMManager.KMKey_Keyboard, currentKeyboard);
+ intent.putExtras(bundle);
+ startActivity(intent);
+ }
+
+ private Keyboard getBestAvailableKeyboard() {
+ List keyboards = KMManager.getKeyboardsList(this);
+ if (keyboards == null || keyboards.isEmpty()) {
+ if (BuildConfig.DEBUG && DEBUG_CURRENT_KEYBOARD_LOGS) {
+ KMLog.LogInfo(TAG, "No installed keyboards available.");
+ }
+ return null;
+ }
+
+ if (keyboards.size() == 1) {
+ return keyboards.get(0);
+ }
+
+ if (lastKnownKeyboardId != null && !lastKnownKeyboardId.isEmpty()) {
+ for (Keyboard keyboard : keyboards) {
+ String keyboardId = keyboard.getKeyboardID();
+ if (keyboardId != null && (keyboardId.equals(lastKnownKeyboardId)
+ || lastKnownKeyboardId.contains(keyboardId)
+ || keyboardId.contains(lastKnownKeyboardId))) {
+ return keyboard;
+ }
+ }
+ }
+
+ if (BuildConfig.DEBUG && DEBUG_CURRENT_KEYBOARD_LOGS) {
+ KMLog.LogInfo(TAG, "Current keyboard id unavailable; falling back to first installed keyboard.");
+ }
+
+ return keyboards.get(0);
+ }
+
+ private void setDrawerItemSubtitle(NavigationView navigationView, int menuItemId, String subtitle) {
+ MenuItem menuItem = navigationView.getMenu().findItem(menuItemId);
+ if (menuItem == null || subtitle == null || subtitle.isEmpty()) {
+ return;
+ }
+
+ CharSequence currentTitle = menuItem.getTitle();
+ if (currentTitle == null || currentTitle.length() == 0) {
+ return;
+ }
+
+ String baseTitle = currentTitle.toString();
+ int newlineIndex = baseTitle.indexOf('\n');
+ if (newlineIndex >= 0) {
+ baseTitle = baseTitle.substring(0, newlineIndex);
+ }
+
+ SpannableString fullTitle = new SpannableString(baseTitle + "\n" + subtitle);
+ int subtitleStart = baseTitle.length() + 1;
+ fullTitle.setSpan(new RelativeSizeSpan(0.85f), subtitleStart, fullTitle.length(),
+ Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+
+ TypedValue typedValue = new TypedValue();
+ getTheme().resolveAttribute(android.R.attr.textColorSecondary, typedValue, true);
+ int subtitleColor = typedValue.resourceId != 0
+ ? ContextCompat.getColor(this, typedValue.resourceId)
+ : typedValue.data;
+ fullTitle.setSpan(new ForegroundColorSpan(subtitleColor), subtitleStart, fullTitle.length(),
+ Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+
+ menuItem.setTitle(fullTitle);
+ }
+
+ private void bindDrawerSwitch(NavigationView navigationView, int menuItemId, boolean defaultValue,
+ final SwitchChangeHandler switchChangeHandler) {
+ MenuItem menuItem = navigationView.getMenu().findItem(menuItemId);
+ if (menuItem == null) {
+ return;
+ }
+
+ menuItem.setCheckable(false);
+
+ View actionView = menuItem.getActionView();
+ if (actionView == null) {
+ return;
+ }
+
+ final SwitchCompat switchView;
+ if (actionView instanceof SwitchCompat) {
+ switchView = (SwitchCompat) actionView;
+ } else {
+ switchView = actionView.findViewById(R.id.nav_switch);
+ }
+
+ if (switchView == null) {
+ return;
+ }
+
+ switchView.setClickable(false);
+ switchView.setFocusable(false);
+ switchView.setLongClickable(false);
+
+ switchView.setChecked(defaultValue);
+ switchView.setOnCheckedChangeListener((buttonView, isChecked) -> switchChangeHandler.onChanged(isChecked));
+ }
+
+ private void toggleDrawerSwitch(NavigationView navigationView, int menuItemId) {
+ MenuItem menuItem = navigationView.getMenu().findItem(menuItemId);
+ if (menuItem == null) {
+ return;
+ }
+
+ View actionView = menuItem.getActionView();
+ if (actionView == null) {
+ return;
+ }
+
+ if (actionView instanceof SwitchCompat) {
+ ((SwitchCompat) actionView).toggle();
+ return;
+ }
+
+ SwitchCompat switchView = actionView.findViewById(R.id.nav_switch);
+ if (switchView != null) {
+ switchView.toggle();
+ }
+ }
+
+ private void bindDrawerCheckboxAction(NavigationView navigationView, int menuItemId,
+ final Runnable onActivate) {
+ MenuItem menuItem = navigationView.getMenu().findItem(menuItemId);
+ if (menuItem == null) {
+ return;
+ }
+
+ menuItem.setCheckable(false);
+
+ View actionView = menuItem.getActionView();
+ if (actionView == null) {
+ return;
+ }
+
+ final AppCompatCheckBox checkBox;
+ if (actionView instanceof AppCompatCheckBox) {
+ checkBox = (AppCompatCheckBox) actionView;
+ } else {
+ checkBox = actionView.findViewById(R.id.nav_checkbox);
+ }
+
+ if (checkBox == null) {
+ return;
+ }
+
+ checkBox.setClickable(true);
+ checkBox.setFocusable(false);
+ checkBox.setOnClickListener(v -> {
+ if (onActivate != null) {
+ onActivate.run();
+ }
+ });
+ actionView.setOnClickListener(v -> {
+ if (onActivate != null) {
+ onActivate.run();
+ }
+ });
+ }
+
+ private void setDrawerCheckboxState(NavigationView navigationView, int menuItemId, boolean isChecked) {
+ MenuItem menuItem = navigationView.getMenu().findItem(menuItemId);
+ if (menuItem == null) {
+ return;
+ }
+
+ View actionView = menuItem.getActionView();
+ if (actionView == null) {
+ return;
+ }
+
+ AppCompatCheckBox checkBox;
+ if (actionView instanceof AppCompatCheckBox) {
+ checkBox = (AppCompatCheckBox) actionView;
+ } else {
+ checkBox = actionView.findViewById(R.id.nav_checkbox);
+ }
+
+ if (checkBox != null) {
+ checkBox.setChecked(isChecked);
+ }
+ }
+
+ private interface SwitchChangeHandler {
+ void onChanged(boolean isChecked);
}
/**
@@ -999,7 +1727,7 @@ public static Drawable getActionBarDrawable(Context context) {
Paint p = new Paint();
p.setStyle(Paint.Style.FILL);
- p.setColor(Color.WHITE);
+ p.setColor(ContextCompat.getColor(context, R.color.toolbarColor));
canvas.drawRect(new Rect(0, 0, width, actionBarHeight), p);
p.setColor(context.getResources().getColor(R.color.keyman_orange));
diff --git a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/SelectLanguageFragment.java b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/SelectLanguageFragment.java
index 03d053e4699..71cdfbe6425 100644
--- a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/SelectLanguageFragment.java
+++ b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/SelectLanguageFragment.java
@@ -6,7 +6,7 @@
import android.content.Context;
import android.graphics.Typeface;
import android.os.Bundle;
-import android.os.Handler;
+
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -167,7 +167,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
if (!excludeInstalledLanguages && !isInstallingPackage && KeyboardController.getInstance().keyboardExists(
k.getPackageID(), k.getKeyboardID(), k.getLanguageID())) {
// If Activity is listing an installed keyboard package, mark installed keyboards with a check
- icon = String.valueOf(R.drawable.ic_check);
+ icon = String.valueOf(R.drawable.ic_check_mode);
enable = "false";
} else {
// Update title
diff --git a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/SelectPackageActivity.java b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/SelectPackageActivity.java
index 0b6a3ac9a70..c9bb86faca3 100644
--- a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/SelectPackageActivity.java
+++ b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/SelectPackageActivity.java
@@ -83,7 +83,7 @@ public void onCreate(Bundle savedInstanceState) {
HashMap hashMap = new HashMap<>();
hashMap.put(titleKey, keyboardName);
hashMap.put(subtitleKey, pkgID);
- String icon = String.valueOf(R.drawable.ic_action_forward);
+ String icon = String.valueOf(R.drawable.ic_action_forward_mode);
hashMap.put(iconKey, icon);
list.add(hashMap);
}
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable-hdpi/keyman_ic.png b/android/KMAPro/kMAPro/src/main/res/drawable-hdpi/keyman_ic.png
new file mode 100644
index 00000000000..cdd82a9eaf9
Binary files /dev/null and b/android/KMAPro/kMAPro/src/main/res/drawable-hdpi/keyman_ic.png differ
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable-hdpi/keyman_text.png b/android/KMAPro/kMAPro/src/main/res/drawable-hdpi/keyman_text.png
new file mode 100644
index 00000000000..48b555f559b
Binary files /dev/null and b/android/KMAPro/kMAPro/src/main/res/drawable-hdpi/keyman_text.png differ
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/bg_keyboard_toolbar_container.xml b/android/KMAPro/kMAPro/src/main/res/drawable/bg_keyboard_toolbar_container.xml
new file mode 100644
index 00000000000..1dfbf0c3455
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/drawable/bg_keyboard_toolbar_container.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/bg_keyboard_toolbar_toggle.xml b/android/KMAPro/kMAPro/src/main/res/drawable/bg_keyboard_toolbar_toggle.xml
new file mode 100644
index 00000000000..08f8c630b40
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/drawable/bg_keyboard_toolbar_toggle.xml
@@ -0,0 +1,5 @@
+
+
+
+
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/branded_logo.xml b/android/KMAPro/kMAPro/src/main/res/drawable/branded_logo.xml
index 2f5d1eca2b9..23720f7c57a 100644
--- a/android/KMAPro/kMAPro/src/main/res/drawable/branded_logo.xml
+++ b/android/KMAPro/kMAPro/src/main/res/drawable/branded_logo.xml
@@ -3,7 +3,7 @@
android:opacity="opaque">
-
+
-
-
+
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/branded_logo_dark_mode.xml b/android/KMAPro/kMAPro/src/main/res/drawable/branded_logo_dark_mode.xml
new file mode 100644
index 00000000000..5cb427161f5
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/drawable/branded_logo_dark_mode.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+ -
+
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_decrement.xml b/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_decrement.xml
index c3085bec5e9..7f67a424a87 100644
--- a/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_decrement.xml
+++ b/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_decrement.xml
@@ -1,5 +1,5 @@
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_forward_mode.xml b/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_forward_mode.xml
new file mode 100644
index 00000000000..e50c72fd487
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_forward_mode.xml
@@ -0,0 +1,4 @@
+
+
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_get_started_mode.xml b/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_get_started_mode.xml
new file mode 100644
index 00000000000..945b28f2f77
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_get_started_mode.xml
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_increment.xml b/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_increment.xml
index ea188f818f1..04d80ab840f 100644
--- a/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_increment.xml
+++ b/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_increment.xml
@@ -1,5 +1,5 @@
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_info_mode.xml b/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_info_mode.xml
new file mode 100644
index 00000000000..cde024c5df8
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_info_mode.xml
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_overflow_mode.png b/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_overflow_mode.png
new file mode 100644
index 00000000000..b78c32e85f8
Binary files /dev/null and b/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_overflow_mode.png differ
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_overflow_mode_small.xml b/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_overflow_mode_small.xml
new file mode 100644
index 00000000000..b9581eec2c9
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_overflow_mode_small.xml
@@ -0,0 +1,7 @@
+
+
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_overflow_mode_tinted.xml b/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_overflow_mode_tinted.xml
new file mode 100644
index 00000000000..7df2a0f1a57
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_overflow_mode_tinted.xml
@@ -0,0 +1,4 @@
+
+
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_share_mode.xml b/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_share_mode.xml
new file mode 100644
index 00000000000..094bccaf5fa
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_share_mode.xml
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_textsize_mode.xml b/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_textsize_mode.xml
new file mode 100644
index 00000000000..c9bce1b6445
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_textsize_mode.xml
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_timelapse.xml b/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_timelapse.xml
index 80dc29e33f9..c185c3bd11e 100644
--- a/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_timelapse.xml
+++ b/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_timelapse.xml
@@ -2,4 +2,4 @@
-
+
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_trash_mode.xml b/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_trash_mode.xml
new file mode 100644
index 00000000000..7ce6e6f02ec
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/drawable/ic_action_trash_mode.xml
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/ic_arrow_dropdown.xml b/android/KMAPro/kMAPro/src/main/res/drawable/ic_arrow_dropdown.xml
new file mode 100644
index 00000000000..38b4ddbe587
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/drawable/ic_arrow_dropdown.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/ic_check_mode.xml b/android/KMAPro/kMAPro/src/main/res/drawable/ic_check_mode.xml
new file mode 100644
index 00000000000..45126f7b913
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/drawable/ic_check_mode.xml
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/ic_checkbox.xml b/android/KMAPro/kMAPro/src/main/res/drawable/ic_checkbox.xml
new file mode 100644
index 00000000000..bd790eec598
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/drawable/ic_checkbox.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/ic_cloud_download_mode.xml b/android/KMAPro/kMAPro/src/main/res/drawable/ic_cloud_download_mode.xml
new file mode 100644
index 00000000000..dd95be3da21
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/drawable/ic_cloud_download_mode.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/ic_content_add_mode.xml b/android/KMAPro/kMAPro/src/main/res/drawable/ic_content_add_mode.xml
new file mode 100644
index 00000000000..9f14c6d6db6
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/drawable/ic_content_add_mode.xml
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/ic_folder_open_mode.xml b/android/KMAPro/kMAPro/src/main/res/drawable/ic_folder_open_mode.xml
new file mode 100644
index 00000000000..00896d44cb3
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/drawable/ic_folder_open_mode.xml
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/ic_keyboard_default.png b/android/KMAPro/kMAPro/src/main/res/drawable/ic_keyboard_default.png
new file mode 100644
index 00000000000..1f08b2e9e3b
Binary files /dev/null and b/android/KMAPro/kMAPro/src/main/res/drawable/ic_keyboard_default.png differ
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/ic_keyboard_on_screen.png b/android/KMAPro/kMAPro/src/main/res/drawable/ic_keyboard_on_screen.png
new file mode 100644
index 00000000000..c8707e943de
Binary files /dev/null and b/android/KMAPro/kMAPro/src/main/res/drawable/ic_keyboard_on_screen.png differ
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/ic_keyboard_physical.png b/android/KMAPro/kMAPro/src/main/res/drawable/ic_keyboard_physical.png
new file mode 100644
index 00000000000..4ef7ec9fe10
Binary files /dev/null and b/android/KMAPro/kMAPro/src/main/res/drawable/ic_keyboard_physical.png differ
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/ic_more_vert_24.xml b/android/KMAPro/kMAPro/src/main/res/drawable/ic_more_vert_24.xml
new file mode 100644
index 00000000000..f79e4779fae
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/drawable/ic_more_vert_24.xml
@@ -0,0 +1,10 @@
+
+
+
+
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/ic_palette.xml b/android/KMAPro/kMAPro/src/main/res/drawable/ic_palette.xml
new file mode 100644
index 00000000000..f701027ccf9
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/drawable/ic_palette.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/ic_rocket.png b/android/KMAPro/kMAPro/src/main/res/drawable/ic_rocket.png
new file mode 100644
index 00000000000..695eaac9706
Binary files /dev/null and b/android/KMAPro/kMAPro/src/main/res/drawable/ic_rocket.png differ
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/ic_settings_mode.xml b/android/KMAPro/kMAPro/src/main/res/drawable/ic_settings_mode.xml
new file mode 100644
index 00000000000..63dacb54368
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/drawable/ic_settings_mode.xml
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/ic_warning.xml b/android/KMAPro/kMAPro/src/main/res/drawable/ic_warning.xml
new file mode 100644
index 00000000000..7b9ff21539b
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/drawable/ic_warning.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/keyman_logo_mode.xml b/android/KMAPro/kMAPro/src/main/res/drawable/keyman_logo_mode.xml
new file mode 100644
index 00000000000..63182c6c533
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/drawable/keyman_logo_mode.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+ -
+
+
+
+
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/keyman_logo_splash_dark_mode.png b/android/KMAPro/kMAPro/src/main/res/drawable/keyman_logo_splash_dark_mode.png
new file mode 100644
index 00000000000..0ed8dd4e0d6
Binary files /dev/null and b/android/KMAPro/kMAPro/src/main/res/drawable/keyman_logo_splash_dark_mode.png differ
diff --git a/android/KMAPro/kMAPro/src/main/res/drawable/spacebar_key_bg.xml b/android/KMAPro/kMAPro/src/main/res/drawable/spacebar_key_bg.xml
new file mode 100644
index 00000000000..0b55d9e5934
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/drawable/spacebar_key_bg.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/res/layout/activity_adjust_keyboard_height.xml b/android/KMAPro/kMAPro/src/main/res/layout/activity_adjust_keyboard_height.xml
index 8541398a579..4c43d822694 100644
--- a/android/KMAPro/kMAPro/src/main/res/layout/activity_adjust_keyboard_height.xml
+++ b/android/KMAPro/kMAPro/src/main/res/layout/activity_adjust_keyboard_height.xml
@@ -7,7 +7,11 @@
android:layout_height="match_parent"
android:orientation="vertical">
-
+
+ app:tint="@color/iconColor"
+ />
+ app:layout_constraintEnd_toEndOf="parent"
+ app:tint="@color/iconColor"/>
diff --git a/android/KMAPro/kMAPro/src/main/res/layout/activity_main.xml b/android/KMAPro/kMAPro/src/main/res/layout/activity_main.xml
index ffcd4a2421f..7c3e004b0d2 100644
--- a/android/KMAPro/kMAPro/src/main/res/layout/activity_main.xml
+++ b/android/KMAPro/kMAPro/src/main/res/layout/activity_main.xml
@@ -1,42 +1,127 @@
-
-
-
-
-
+ android:fitsSystemWindows="true">
-
+ android:layout_height="match_parent"
+ android:layout_above="@+id/KMKeyboard"
+ android:orientation="vertical"
+ android:background="@color/toolbarColor"
+ tools:context=".MainActivity"
+ android:fitsSystemWindows="true">
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
diff --git a/android/KMAPro/kMAPro/src/main/res/layout/activity_splash_screen.xml b/android/KMAPro/kMAPro/src/main/res/layout/activity_splash_screen.xml
index c6cde0e2595..128cadc6e1a 100644
--- a/android/KMAPro/kMAPro/src/main/res/layout/activity_splash_screen.xml
+++ b/android/KMAPro/kMAPro/src/main/res/layout/activity_splash_screen.xml
@@ -1,19 +1,18 @@
-
-
+
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/res/layout/check_chrome_webview_layout.xml b/android/KMAPro/kMAPro/src/main/res/layout/check_chrome_webview_layout.xml
index ea5a9220d58..7ceb1bad593 100644
--- a/android/KMAPro/kMAPro/src/main/res/layout/check_chrome_webview_layout.xml
+++ b/android/KMAPro/kMAPro/src/main/res/layout/check_chrome_webview_layout.xml
@@ -3,20 +3,23 @@
android:id="@+id/checkWebViewChromeLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:background="@android:color/white"
+ android:paddingVertical="4dp"
+ android:background="?android:attr/windowBackground"
+ android:gravity="center_vertical"
android:orientation="horizontal">
diff --git a/android/KMAPro/kMAPro/src/main/res/layout/get_started_list_layout.xml b/android/KMAPro/kMAPro/src/main/res/layout/get_started_list_layout.xml
index 0965cef4224..3b3d3ed3442 100644
--- a/android/KMAPro/kMAPro/src/main/res/layout/get_started_list_layout.xml
+++ b/android/KMAPro/kMAPro/src/main/res/layout/get_started_list_layout.xml
@@ -11,7 +11,8 @@
+ android:layout_height="wrap_content"
+ android:padding="3dp"/>
+ style="?android:attr/actionButtonStyle"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/checkbox_margin"
+ android:layout_centerVertical="true"
+ android:contentDescription="@string/image_view"
+ app:tint="@color/iconColor"/>
+ android:layout_marginStart="@dimen/checkbox_margin_left"
+ android:src="@drawable/ic_action_get_started"
+ app:tint="@color/iconColor"/>
+ android:src="@drawable/ic_action_close"
+ app:tint="@color/iconColor"/>
diff --git a/android/KMAPro/kMAPro/src/main/res/layout/list_row_layout1.xml b/android/KMAPro/kMAPro/src/main/res/layout/list_row_layout1.xml
new file mode 100644
index 00000000000..0724afa8293
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/layout/list_row_layout1.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/KMAPro/kMAPro/src/main/res/layout/nav_checkbox_item.xml b/android/KMAPro/kMAPro/src/main/res/layout/nav_checkbox_item.xml
new file mode 100644
index 00000000000..5ec549a98bb
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/layout/nav_checkbox_item.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
diff --git a/android/KMAPro/kMAPro/src/main/res/layout/nav_divider.xml b/android/KMAPro/kMAPro/src/main/res/layout/nav_divider.xml
new file mode 100644
index 00000000000..192100c926b
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/layout/nav_divider.xml
@@ -0,0 +1,10 @@
+
+
diff --git a/android/KMAPro/kMAPro/src/main/res/layout/nav_header.xml b/android/KMAPro/kMAPro/src/main/res/layout/nav_header.xml
new file mode 100644
index 00000000000..093647f9ad3
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/layout/nav_header.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/res/layout/nav_right_icon_item.xml b/android/KMAPro/kMAPro/src/main/res/layout/nav_right_icon_item.xml
new file mode 100644
index 00000000000..312b033bfd1
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/layout/nav_right_icon_item.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/res/layout/nav_switch_item.xml b/android/KMAPro/kMAPro/src/main/res/layout/nav_switch_item.xml
new file mode 100644
index 00000000000..db85b1f0e44
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/layout/nav_switch_item.xml
@@ -0,0 +1,10 @@
+
+
diff --git a/android/KMAPro/kMAPro/src/main/res/layout/preference_add_icon_layout.xml b/android/KMAPro/kMAPro/src/main/res/layout/preference_add_icon_layout.xml
index 1a8b8af5ad4..3b8a9331119 100644
--- a/android/KMAPro/kMAPro/src/main/res/layout/preference_add_icon_layout.xml
+++ b/android/KMAPro/kMAPro/src/main/res/layout/preference_add_icon_layout.xml
@@ -1,5 +1,7 @@
+ android:src="@drawable/ic_content_add"
+ app:tint="@color/iconColor"/>
diff --git a/android/KMAPro/kMAPro/src/main/res/layout/preference_duration_icon_layout.xml b/android/KMAPro/kMAPro/src/main/res/layout/preference_duration_icon_layout.xml
index c8fd3a48f98..fff11ef2541 100644
--- a/android/KMAPro/kMAPro/src/main/res/layout/preference_duration_icon_layout.xml
+++ b/android/KMAPro/kMAPro/src/main/res/layout/preference_duration_icon_layout.xml
@@ -1,5 +1,7 @@
+ android:src="@drawable/ic_action_timelapse"
+ app:tint="@color/iconColor"/>
diff --git a/android/KMAPro/kMAPro/src/main/res/layout/preference_file_browser_layout.xml b/android/KMAPro/kMAPro/src/main/res/layout/preference_file_browser_layout.xml
index 9483748278a..e81b4fa1332 100644
--- a/android/KMAPro/kMAPro/src/main/res/layout/preference_file_browser_layout.xml
+++ b/android/KMAPro/kMAPro/src/main/res/layout/preference_file_browser_layout.xml
@@ -1,5 +1,7 @@
+ android:src="@drawable/ic_folder_open"
+ app:tint="@color/iconColor"/>
diff --git a/android/KMAPro/kMAPro/src/main/res/layout/preference_height_icon_layout.xml b/android/KMAPro/kMAPro/src/main/res/layout/preference_height_icon_layout.xml
index be0e7ac1558..fe2561723cd 100644
--- a/android/KMAPro/kMAPro/src/main/res/layout/preference_height_icon_layout.xml
+++ b/android/KMAPro/kMAPro/src/main/res/layout/preference_height_icon_layout.xml
@@ -1,14 +1,15 @@
+ android:src="@drawable/ic_height" app:tint="@color/iconColor"/>
+ android:src="@drawable/ic_keyboard" app:tint="@color/iconColor"/>
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/res/layout/preference_icon_layout.xml b/android/KMAPro/kMAPro/src/main/res/layout/preference_icon_layout.xml
index 7074c696de8..880989b6a03 100644
--- a/android/KMAPro/kMAPro/src/main/res/layout/preference_icon_layout.xml
+++ b/android/KMAPro/kMAPro/src/main/res/layout/preference_icon_layout.xml
@@ -1,5 +1,6 @@
+ android:src="@drawable/ic_action_forward" app:tint="@color/iconColor"/>
diff --git a/android/KMAPro/kMAPro/src/main/res/layout/preference_translate_icon_layout.xml b/android/KMAPro/kMAPro/src/main/res/layout/preference_translate_icon_layout.xml
index d66b445010d..0ad237e47f9 100644
--- a/android/KMAPro/kMAPro/src/main/res/layout/preference_translate_icon_layout.xml
+++ b/android/KMAPro/kMAPro/src/main/res/layout/preference_translate_icon_layout.xml
@@ -1,5 +1,7 @@
+ android:src="@drawable/ic_translate"
+ app:tint="@color/iconColor"/>
diff --git a/android/KMAPro/kMAPro/src/main/res/layout/text_size_controller.xml b/android/KMAPro/kMAPro/src/main/res/layout/text_size_controller.xml
index cfd36374deb..19a407e958e 100644
--- a/android/KMAPro/kMAPro/src/main/res/layout/text_size_controller.xml
+++ b/android/KMAPro/kMAPro/src/main/res/layout/text_size_controller.xml
@@ -1,11 +1,12 @@
+ android:paddingTop="25dp">
+ android:src="@drawable/textsize_decrease"
+ app:tint="@color/iconColor"/>
+ android:src="@drawable/textsize_increase"
+ app:tint="@color/iconColor"/>
diff --git a/android/KMAPro/kMAPro/src/main/res/menu/main.xml b/android/KMAPro/kMAPro/src/main/res/menu/main.xml
index 682d98179b4..6a74a945f5a 100644
--- a/android/KMAPro/kMAPro/src/main/res/menu/main.xml
+++ b/android/KMAPro/kMAPro/src/main/res/menu/main.xml
@@ -4,64 +4,10 @@
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/res/menu/nav_menu.xml b/android/KMAPro/kMAPro/src/main/res/menu/nav_menu.xml
new file mode 100644
index 00000000000..8c7c957f99b
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/menu/nav_menu.xml
@@ -0,0 +1,106 @@
+
+
diff --git a/android/KMAPro/kMAPro/src/main/res/values-b+es+419/strings.xml b/android/KMAPro/kMAPro/src/main/res/values-b+es+419/strings.xml
index 988c58f6485..bd728975d2c 100644
--- a/android/KMAPro/kMAPro/src/main/res/values-b+es+419/strings.xml
+++ b/android/KMAPro/kMAPro/src/main/res/values-b+es+419/strings.xml
@@ -3,8 +3,27 @@
Compartir
+ Abrir el cajón de navegación
+ Cerrar el cajón de navegación
+ Show sidebar menu
Navegador web
+
+ Teclados e idiomas
+ Preferencias
+ Ayuda
+
+ Mostrar nombre del teclado en la barra espaciadora
+ Cuando se conecta el teclado físico
+ Permitir que se envíen los informes de errores al equipo Keyman
+ Aprende cómo utilizar Keyman
+ No hay teclado activo
+ Acerca del teclado activo
+ No hay teclado activo
+ Configuración actual: %1$s
+ Aprende cómo utilizar el %1$s
+ Ayuda de %1$s
+ Ayuda de teclado activa
Tamaño del texto
@@ -19,8 +38,11 @@
Instalar actualizaciones
Versión: %1$s
-
- Keyman requiere Chrome versión 57 o posterior.
+
+
+ Keyman requiere Chrome versión 57 o posterior.
+
+ Keyman requiere Chrome versión %1$s o posterior.
Actualizar Chrome
@@ -42,6 +64,8 @@
Agrega un teclado para tu idioma
+ Teclados del sistema
+
Habilitar Keyman como teclado de sistema
Establecer teclado como teclado predeterminado
@@ -50,10 +74,13 @@
Mostrar \"%1$s\" al inicio
- Para instalar los paquetes del teclado, permite que Keyman acceda al almacenamiento externo.
+
+ Para instalar los paquetes del teclado, permite que Keyman acceda al almacenamiento externo.
- Se ha denegado la solicitud de permiso de almacenamiento. La instalación del paquete de teclado podría fallar
- Falló la solicitud de permiso de almacenamiento. Seleccione Configuración de Keyman - Instalar desde archivo local
+
+ Se ha denegado la solicitud de permiso de almacenamiento. La instalación del paquete de teclado podría fallar
+
+ Falló la solicitud de permiso de almacenamiento. Seleccione Configuración de Keyman - Instalar desde archivo local
Configuración
@@ -87,6 +114,10 @@
Idioma y teclado en la barra espaciadora
No mostrar leyenda en la barra espaciadora
+
+ Mostrar el teclado en pantalla
+
+ Cuando se conecta el teclado físico
Vibrar al escribir
@@ -96,11 +127,21 @@
Cuando está desactivado, solo se muestra cuando el texto predictivo está habilitado
- Permitir el envío de informes de fallas a través de la red
+ Informes de errores automáticos
- Cuando esté activado, se enviarán los informes de fallas
+ Permitir que se envíen los informes de errores al equipo Keyman
- Cuando esté desactivado, no se enviarán los informes de fallas
+ Los informes de error no se envían al equipo Keyman
+
+ Guía de usuario
+ Actualizar teclados
+ Idiomas instalados
+ Show "Get Started" on startup
+ Tema
+ Choose theme
+ Modo oscuro
+ Modo claro
+ Predeterminada del sistema
Instalar desde keyman.com
@@ -120,9 +161,11 @@
Ya están instalados todos los idiomas
- Arrastra el teclado para ajustar la altura. Rota el dispositivo para ajustar el modo vertical y horizontal.
+ Arrastre el teclado para ajustar la altura. Gire el dispositivo para ajustar el modo vertical y horizontal.
Restaurar valores predeterminados
+
+ %1$d%% Modo vertical | %2$d%% Modo horizontal
Tiempo de retraso: %1$.1f segundos
@@ -166,7 +209,10 @@
Metadatos inválidos/ausentes en el paquete
- El teclado requiere una versión más reciente de Keyman
+
+ El teclado requiere una versión más reciente de Keyman
No se puede iniciar el navegador web
+
+ Menú
diff --git a/android/KMAPro/kMAPro/src/main/res/values-night-v23/styles.xml b/android/KMAPro/kMAPro/src/main/res/values-night-v23/styles.xml
new file mode 100644
index 00000000000..eaeeaa087dc
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/values-night-v23/styles.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/res/values-night/colors.xml b/android/KMAPro/kMAPro/src/main/res/values-night/colors.xml
new file mode 100644
index 00000000000..ed19414c07f
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/values-night/colors.xml
@@ -0,0 +1,18 @@
+
+
+ #131313
+
+ #FFFFFF
+ @color/ms_black
+ #212121
+ @color/ms_black
+
+ #929396
+
+ #353535
+ @color/ms_black
+
+ @color/ms_black
+ #FFFFFF
+
+
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/res/values-night/styles.xml b/android/KMAPro/kMAPro/src/main/res/values-night/styles.xml
new file mode 100644
index 00000000000..d13099886e7
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/values-night/styles.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/res/values-v23/styles.xml b/android/KMAPro/kMAPro/src/main/res/values-v23/styles.xml
new file mode 100644
index 00000000000..0217445182d
--- /dev/null
+++ b/android/KMAPro/kMAPro/src/main/res/values-v23/styles.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/KMAPro/kMAPro/src/main/res/values/colors.xml b/android/KMAPro/kMAPro/src/main/res/values/colors.xml
index 2415183a565..c2e03b83732 100644
--- a/android/KMAPro/kMAPro/src/main/res/values/colors.xml
+++ b/android/KMAPro/kMAPro/src/main/res/values/colors.xml
@@ -13,17 +13,27 @@
#00735E
#0AB8A0
#79C3DA
- #000000
+ #FFFFFF
#6D6C6F
#929396
#C9CACA
#DADDDC
+
@color/analagous_5
@color/analagous_6
@color/complementary_6
+ #000
+ @color/neutral_1
+ @color/neutral_1
+ @color/neutral_2
#FFFFFFCF
+ @color/neutral_1
@color/complementary_1
+ #FFFFFF
+ @color/keyman_blue
+ #000000
+
diff --git a/android/KMAPro/kMAPro/src/main/res/values/dimens.xml b/android/KMAPro/kMAPro/src/main/res/values/dimens.xml
index 60e89def04b..d690612371c 100644
--- a/android/KMAPro/kMAPro/src/main/res/values/dimens.xml
+++ b/android/KMAPro/kMAPro/src/main/res/values/dimens.xml
@@ -18,10 +18,12 @@
350dp
8dp
8dp
- 15dp
+ 19dp
10dp
32dp
16dp
0dp
24sp
+ 12dp
+ 8dp
diff --git a/android/KMAPro/kMAPro/src/main/res/values/strings.xml b/android/KMAPro/kMAPro/src/main/res/values/strings.xml
index 0423bdc015f..4e16f9f7ef8 100644
--- a/android/KMAPro/kMAPro/src/main/res/values/strings.xml
+++ b/android/KMAPro/kMAPro/src/main/res/values/strings.xml
@@ -6,9 +6,34 @@
Share
+ Open navigation drawer
+ Close navigation drawer
+ Show sidebar menu
+
Web Browser
+
+ Keyboards and Languages
+ Preferences
+ Help
+
+
+
+ Show keyboard name on spacebar
+ When physical keyboard connected
+
+ Allow error reports to be sent to Keyman team
+
+ Learn how to use Keyman
+ No active keyboard
+ About active keyboard
+ No active keyboard
+ Current setting: %1$s
+ Learn how to use the %1$s
+ %1$s help
+ Active keyboard help
+
Text Size
@@ -73,6 +98,9 @@
Add a keyboard for your language
+
+ System keyboards
+
Enable Keyman as system-wide keyboard
@@ -102,12 +130,12 @@
- - Installed languages
+ - Installed languages (%1$d)
- Installed languages (%1$d)
- Install Keyboard or Dictionary
+ Install keyboard or dictionary
Display language
@@ -147,7 +175,7 @@
Do not show caption on spacebar
- Show On-Screen Keyboard
+ Show on-screen keyboard
When physical keyboard is connected
@@ -165,13 +193,24 @@
When off, only shown when predictive text is enabled
- Allow sending crash reports over network
+ Automatic error reporting
- When on, crash reports will be sent
+ Allow error reports to be sent to Keyman team
- When off, crash reports won\'t be sent
+ Error reports are not sent to Keyman team
+
+
+ User guide
+ Update keyboards
+ Installed languages
+ Show "Get Started" on startup
+ Theme
+ Choose theme
+ Dark mode
+ Light mode
+ System default
Install from keyman.com
@@ -278,4 +317,7 @@
Unable to launch web browser
+
+
+ Menu
diff --git a/android/KMAPro/kMAPro/src/main/res/values/styles.xml b/android/KMAPro/kMAPro/src/main/res/values/styles.xml
index ae386e02624..9366cd14419 100644
--- a/android/KMAPro/kMAPro/src/main/res/values/styles.xml
+++ b/android/KMAPro/kMAPro/src/main/res/values/styles.xml
@@ -6,7 +6,7 @@
Base application theme, dependent on API level. This theme is replaced
by AppTheme.Base from res/values-vXX/styles.xml on newer devices.
-->
-
-
+
+
+
+
@@ -36,6 +55,17 @@
- @android:color/white
- @android:color/black
- @android:color/black
+ - @color/toolbarColor
+
+ - true
+
-
+
+
+
\ No newline at end of file
diff --git a/android/KMEA/app/src/main/res/values-b+es+419/strings.xml b/android/KMEA/app/src/main/res/values-b+es+419/strings.xml
index 06413a82e22..d39720de8a7 100644
--- a/android/KMEA/app/src/main/res/values-b+es+419/strings.xml
+++ b/android/KMEA/app/src/main/res/values-b+es+419/strings.xml
@@ -61,7 +61,8 @@
%1$s (Actualización disponible)
- Actualizaciones disponibles para el teclado %1$s: %2$s
+
+ Actualizaciones disponibles para el teclado %1$s: %2$s
Actualizaciones disponibles para el diccionario %1$s: %2$s
@@ -73,24 +74,30 @@
[nuevo] %1$s
- Escanea este código par cargar este\nteclado en otro dispositivo
+
+ Escanea este código par cargar este\nteclado en otro dispositivo
Bienvenido a %1$s
- Se necesita la librería FileProvider para ver el archivo de ayuda: %1$s
-
- Error fatal del teclado con %1$s:%2$s para el idioma %3$s. Cargando teclado predeterminado.
+
+ Se necesita la librería FileProvider para ver el archivo de ayuda: %1$s
+
+
+ Keyman encountered an error and will restart
- Keyman requiere que WebView esté instalado.\"
+
+ Keyman requiere que WebView esté instalado.\"
- Keyman requiere que WebView esté habilitado.\"
+
+Keyman requiere que WebView esté habilitado.\"
Instalar WebView
Habilitar WebView
Buscando diccionario asociado para descargar
- No se pudo conectar al servidor de Keyman para buscar un diccionario asociado para descargar
+
+ No se pudo conectar al servidor de Keyman para buscar un diccionario asociado para descargar
¿Quieres descargar la última versión de este diccionario?
@@ -100,7 +107,8 @@
La actualización del catálogo inició en segundo plano
- El catálogo aún se está descargando; inténtalo de nuevo en un momento.
+
+ El catálogo aún se está descargando; inténtalo de nuevo en un momento.
Buscando recurso
diff --git a/android/Tests/KeyboardHarness/readme.md b/android/Tests/KeyboardHarness/readme.md
index 898d9926382..6d63e5d8831 100644
--- a/android/Tests/KeyboardHarness/readme.md
+++ b/android/Tests/KeyboardHarness/readme.md
@@ -13,15 +13,9 @@ and consists of these engineering keyboards:
test9469.kmp is another engineering keyboard to show non-printing characters on the OSK.
### Compiling From Command Line
-1. Launch a command prompt to the `android/` folder
-2. Compile KMEA. This will build and copy `keyman-engine.aar` to the Samples and Test projects
- ```
- cd KMEA
- ./build.sh
- ```
+1. Launch a command prompt to the `android/Tests/KeyboardHarness` folder
3. Compile KeyboardHarness
```
- cd ../Tests/KeyboardHarness
./build.sh
```
diff --git a/common/include/km_vkey.h b/common/include/km_vkey.h
new file mode 100644
index 00000000000..78096be75b3
--- /dev/null
+++ b/common/include/km_vkey.h
@@ -0,0 +1,155 @@
+/*
+ * Keyman is copyright (C) SIL International. MIT License.
+ * Create Date: 2 Jul 2026
+ * Author: Sabine Schmitt
+ * VKCodes for keyman
+ */
+
+#pragma once
+
+#define VK_LBUTTON 0x01
+#define VK_RBUTTON 0x02
+#define VK_CANCEL 0x03
+#define VK_MBUTTON 0x04
+
+#define VK_BACKSPACE 0x08
+#define VK_BACK 0x08
+#define VK_TAB 0x09
+
+#define VK_CLEAR 0x0C
+#define VK_RETURN 0x0D
+#define VK_ENTER 0x0D
+
+#define VK_SHIFT 0x10
+#define VK_CONTROL 0x11
+#define VK_MENU 0x12
+#define VK_PAUSE 0x13
+#define VK_CAPITAL 0x14
+#define VK_KANA 0x15
+#define VK_HANGEUL 0x15
+#define VK_HANGUL 0x15
+#define VK_IME_ON 0x16
+#define VK_JUNJA 0x17
+#define VK_FINAL 0x18
+#define VK_HANJA 0x19
+#define VK_KANJI 0x19
+#define VK_IME_OFF 0x1A
+#define VK_ESCAPE 0x1B
+#define VK_CONVERT 0x1C
+#define VK_NONCONVERT 0x1D
+#define VK_ACCEPT 0x1E
+#define VK_MODECHANGE 0x1F
+#define VK_SPACE 0x20
+#define VK_PRIOR 0x21
+#define VK_NEXT 0x22
+#define VK_END 0x23
+#define VK_HOME 0x24
+#define VK_LEFT 0x25
+#define VK_UP 0x26
+#define VK_RIGHT 0x27
+#define VK_DOWN 0x28
+#define VK_SELECT 0x29
+#define VK_PRINT 0x2A
+#define VK_EXECUTE 0x2B
+#define VK_SNAPSHOT 0x2C
+#define VK_INSERT 0x2D
+#define VK_DELETE 0x2E
+
+#define VK_KEY_0 0x30
+#define VK_KEY_1 0x31
+#define VK_KEY_2 0x32
+#define VK_KEY_3 0x33
+#define VK_KEY_4 0x34
+#define VK_KEY_5 0x35
+#define VK_KEY_6 0x36
+#define VK_KEY_7 0x37
+#define VK_KEY_8 0x38
+#define VK_KEY_9 0x39
+
+#define VK_KEY_A 0x41
+#define VK_KEY_B 0x42
+#define VK_KEY_C 0x43
+#define VK_KEY_D 0x44
+#define VK_KEY_E 0x45
+#define VK_KEY_F 0x46
+#define VK_KEY_G 0x47
+#define VK_KEY_H 0x48
+#define VK_KEY_I 0x49
+#define VK_KEY_J 0x4A
+#define VK_KEY_K 0x4B
+#define VK_KEY_L 0x4C
+#define VK_KEY_M 0x4D
+#define VK_KEY_N 0x4E
+#define VK_KEY_O 0x4F
+#define VK_KEY_P 0x50
+#define VK_KEY_Q 0x51
+#define VK_KEY_R 0x52
+#define VK_KEY_S 0x53
+#define VK_KEY_T 0x54
+#define VK_KEY_U 0x55
+#define VK_KEY_V 0x56
+#define VK_KEY_W 0x57
+#define VK_KEY_X 0x58
+#define VK_KEY_Y 0x59
+#define VK_KEY_Z 0x5A
+
+#define VK_NUMPAD0 0x60
+#define VK_NUMPAD1 0x61
+#define VK_NUMPAD2 0x62
+#define VK_NUMPAD3 0x63
+#define VK_NUMPAD4 0x64
+#define VK_NUMPAD5 0x65
+#define VK_NUMPAD6 0x66
+#define VK_NUMPAD7 0x67
+#define VK_NUMPAD8 0x68
+#define VK_NUMPAD9 0x69
+#define VK_NUMPAD_MULTIPLY 0x6A
+#define VK_NUMPAD_ADD 0x6B
+
+#define VK_NUMPAD_SUBTRACT 0x6D
+#define VK_NUMPAD_DECIMAL 0x6E
+#define VK_DECIMAL 0x6E
+#define VK_NUMPAD_DIVIDE 0x6F
+#define VK_DIVIDE 0x6F
+
+#define VK_NUMLOCK 0x90
+
+#define VK_LSHIFT 0xA0
+#define VK_RSHIFT 0xA1
+#define VK_LCONTROL 0xA2
+#define VK_RCONTROL 0xA3
+#define VK_LMENU 0xA4
+#define VK_RMENU 0xA5
+
+#define VK_OEM_1 0xBA
+#define VK_COLON 0xBA
+#define VK_SEMICOLON 0xBA
+#define VK_OEM_PLUS 0xBB
+#define VK_EQUAL 0xBB
+#define VK_OEM_COMMA 0xBC
+#define VK_COMMA 0xBC
+#define VK_OEM_MINUS 0xBD
+#define VK_HYPHEN 0xBD
+#define VK_MINUS 0xBD
+#define VK_OEM_PERIOD 0xBE
+#define VK_PERIOD 0xBE
+#define VK_OEM_2 0xBF
+#define VK_SLASH 0xBF
+#define VK_OEM_3 0xC0
+#define VK_ACCENT 0xC0
+#define VK_GRAVE 0xC0
+#define VK_LEFT_BRACKET 0xDB
+#define VK_LBRKT 0xDB
+#define VK_OEM_4 0xDB
+#define VK_BACKSLASH 0xDC
+#define VK_BKSLASH 0xDC
+#define VK_OEM_5 0xDC
+#define VK_RIGHT_BRACKET 0xDD
+#define VK_RBRKT 0xDD
+#define VK_OEM_6 0xDD
+#define VK_QUOTE 0xDE
+#define VK_OEM_7 0xDE
+#define VK_xDF 0xDF
+#define VK_OEM_8 0xDF
+#define VK_OEM_102 0xE2
+#define VK_OEM_CLEAR 0xFE
diff --git a/common/web/sentry-manager/src/index.ts b/common/web/sentry-manager/src/index.ts
index 92085e7869b..a87694e4e0e 100644
--- a/common/web/sentry-manager/src/index.ts
+++ b/common/web/sentry-manager/src/index.ts
@@ -42,8 +42,19 @@ export class KeymanSentryManager {
switch(location.protocol) {
case 'http:':
return 'http://' + location.host + '/' + filename;
+ case 'https:':
+ // Keyman for Android uses https://appassets.androidplatform.net
+ // to point to local files. See #16146.
+ if(this.keymanPlatform == 'android') {
+ return 'file:///' + filename;
+ } else {
+ return 'https://' + location.host + '/' + filename;
+ }
case 'file:':
return 'file:///' + filename;
+ // Used within the iOS Keyman engine. See #16136.
+ case 'keyman-engine:':
+ return 'file:///' + filename;
default:
return null;
}
diff --git a/core/src/action.cpp b/core/src/action.cpp
index ca6b0b30d8d..f76634ea0c4 100644
--- a/core/src/action.cpp
+++ b/core/src/action.cpp
@@ -103,6 +103,10 @@ bool km::core::action_item_list_to_actions_object(
break;
case KM_CORE_IT_PERSIST_OPT:
{
+ assert(action_items->option != nullptr);
+ if(action_items->option == nullptr) {
+ return false;
+ }
// TODO: lowpri: replace existing item if already present in options vector?
km::core::option opt(static_cast(action_items->option->scope),
action_items->option->key,
diff --git a/core/src/kmx/kmx_base.h b/core/src/kmx/kmx_base.h
index e798ff56b79..30b9ab5c75f 100644
--- a/core/src/kmx/kmx_base.h
+++ b/core/src/kmx/kmx_base.h
@@ -1,6 +1,7 @@
#pragma once
#include "keyman_core.h"
+#include "km_vkey.h"
#if defined(_WIN32) || defined(_WIN64)
#define snprintf _snprintf
diff --git a/core/src/kmx/kmx_conversion.h b/core/src/kmx/kmx_conversion.h
index 803033e100b..3ef4d0e4130 100644
--- a/core/src/kmx/kmx_conversion.h
+++ b/core/src/kmx/kmx_conversion.h
@@ -6,20 +6,6 @@ namespace km {
namespace core {
namespace kmx {
-#define VK_SPACE 0x20
-#define VK_COLON 0xBA
-#define VK_EQUAL 0xBB
-#define VK_COMMA 0xBC
-#define VK_HYPHEN 0xBD
-#define VK_PERIOD 0xBE
-#define VK_SLASH 0xBF
-#define VK_ACCENT 0xC0
-#define VK_LBRKT 0xDB
-#define VK_BKSLASH 0xDC
-#define VK_RBRKT 0xDD
-#define VK_QUOTE 0xDE
-#define VK_xDF 0xDF
-
/**
* This maps an ASCII character corresponding to a US EN key cap to a
* Virtual Key and correctly sets the Shift BIT in the ShiftFlag DWORD.
diff --git a/core/src/kmx/kmx_processor.cpp b/core/src/kmx/kmx_processor.cpp
index 7ce8fad6bab..b4280384caf 100644
--- a/core/src/kmx/kmx_processor.cpp
+++ b/core/src/kmx/kmx_processor.cpp
@@ -6,7 +6,6 @@
using namespace km::core;
using namespace kmx;
-
static KMX_BOOL ContextItemsFromAppContext(KMX_WCHAR *buf, km_core_context_item** outPtr)
{
assert(buf);
diff --git a/core/src/state.cpp b/core/src/state.cpp
index a07fd40a984..bebd9d5e90b 100644
--- a/core/src/state.cpp
+++ b/core/src/state.cpp
@@ -45,12 +45,8 @@ actions::actions(actions const &other)
size_t opt_index = 0;
for (auto &item : *this) {
if (item.type == KM_CORE_IT_PERSIST_OPT) {
- if (opt_index < _option_items_stack.size()) {
- item.option = &_option_items_stack[opt_index++];
- } else {
- // no matching item in the stack; clear pointer.
- item.option = nullptr;
- }
+ assert(opt_index < _option_items_stack.size());
+ item.option = &_option_items_stack[opt_index++];
}
}
}
diff --git a/core/tests/unit/api/state_api.tests.cpp b/core/tests/unit/api/state_api.tests.cpp
index 334f1b0e91f..0e300004b4e 100644
--- a/core/tests/unit/api/state_api.tests.cpp
+++ b/core/tests/unit/api/state_api.tests.cpp
@@ -364,7 +364,12 @@ TEST(StateApiTests, TestStateApi) {
if (test_clone_2->actions().back().type == KM_CORE_IT_END) {
test_clone_2->actions().pop_back();
}
- km_core_state_queue_action_items(test_clone_2, &action_clone);
+ km_core_action_item action_clone_queue[] = {
+ action_clone,
+ {KM_CORE_IT_END}
+ };
+
+ km_core_state_queue_action_items(test_clone_2, action_clone_queue);
test_clone_2->actions().commit();
km_core_action_item action_tp3 = {KM_CORE_IT_PERSIST_OPT, {0,}, };
diff --git a/developer/src/kmanalyze/kmanalyze.cpp b/developer/src/kmanalyze/kmanalyze.cpp
index 6ec751cd45a..fb12cae1bec 100644
--- a/developer/src/kmanalyze/kmanalyze.cpp
+++ b/developer/src/kmanalyze/kmanalyze.cpp
@@ -7,6 +7,7 @@
#include
#include
#include
+#include "../../../common/include/km_vkey.h"
BOOL LoadKeyboard(LPSTR fileName, LPKEYBOARD *lpKeyboard);
@@ -600,21 +601,6 @@ void PrintTree(LPKEYBOARD kbd, GROUPTREE *t, int depth) {
}
}
-
-// MapVirtualKeys is copied from syskbd.cpp (keyman32)
-#define VK_COLON 0xBA
-#define VK_EQUAL 0xBB
-#define VK_COMMA 0xBC
-#define VK_HYPHEN 0xBD
-#define VK_PERIOD 0xBE
-#define VK_SLASH 0xBF
-#define VK_ACCENT 0xC0
-#define VK_LBRKT 0xDB
-#define VK_BKSLASH 0xDC
-#define VK_RBRKT 0xDD
-#define VK_QUOTE 0xDE
-#define VK_xDF 0xDF
-
WCHAR MapVirtualKeys(WORD keyCode, UINT shiftFlags)
{
char shiftedDigit[] = ")!@#$%^&*(";
diff --git a/developer/src/kmc-model/package.json b/developer/src/kmc-model/package.json
index 52ef40c425b..3a3bafdb6c3 100644
--- a/developer/src/kmc-model/package.json
+++ b/developer/src/kmc-model/package.json
@@ -39,7 +39,7 @@
"@keymanapp/models-templates": "*",
"c8": "^7.12.0",
"chalk": "^2.4.2",
- "esbuild": "^0.25.0"
+ "esbuild": "^0.28.1"
},
"mocha": {
"spec": "build/test/**/*.tests.js",
diff --git a/developer/src/kmc/package.json b/developer/src/kmc/package.json
index 4f15f5e98ca..bd6c22159ae 100644
--- a/developer/src/kmc/package.json
+++ b/developer/src/kmc/package.json
@@ -54,7 +54,7 @@
"devDependencies": {
"@sentry/cli": "^2.31.0",
"c8": "^7.12.0",
- "esbuild": "^0.25.0",
+ "esbuild": "^0.28.1",
"typescript": "^5.4.5"
},
"mocha": {
diff --git a/developer/src/kmcmplib/src/CharToKeyConversion.cpp b/developer/src/kmcmplib/src/CharToKeyConversion.cpp
index 0c2b652d095..fe87d146e3d 100644
--- a/developer/src/kmcmplib/src/CharToKeyConversion.cpp
+++ b/developer/src/kmcmplib/src/CharToKeyConversion.cpp
@@ -1,26 +1,7 @@
#include "pch.h"
#include "CharToKeyConversion.h"
-
-/* Following VKeys come from Windows */
-
-#define VK_COLON 0xBA
-#define VK_EQUAL 0xBB
-#define VK_COMMA 0xBC
-#define VK_HYPHEN 0xBD
-#define VK_PERIOD 0xBE
-#define VK_SLASH 0xBF
-#define VK_ACCENT 0xC0
-#define VK_LBRKT 0xDB
-#define VK_BKSLASH 0xDC
-#define VK_RBRKT 0xDD
-#define VK_QUOTE 0xDE
-#define VK_xDF 0xDF
-
-#define VK_NUMPAD0 0x60
-#define VK_NUMPAD9 0x69
-#define VK_SPACE 0x20
-
+#include "km_vkey.h"
/* Following code lifted from syskbd.cpp and tweaked for compiler use. Todo: consolidate */
diff --git a/developer/src/kmcmplib/src/Compiler.cpp b/developer/src/kmcmplib/src/Compiler.cpp
index fb6817e57ba..f5c57a1d5a7 100644
--- a/developer/src/kmcmplib/src/Compiler.cpp
+++ b/developer/src/kmcmplib/src/Compiler.cpp
@@ -77,8 +77,9 @@
#include "cp1252.h"
#include "virtualcharkeys.h"
-#include "../../../../common/include/vkeys.h"
-#include "../../../../common/include/keymanversion.h"
+#include "km_vkey.h"
+#include "vkeys.h"
+#include "keymanversion.h"
#include "crc32.h"
#include "debugstore.h"
diff --git a/developer/src/kmdecomp/savekeyboard.cpp b/developer/src/kmdecomp/savekeyboard.cpp
index 00949d06300..25e06c646d0 100644
--- a/developer/src/kmdecomp/savekeyboard.cpp
+++ b/developer/src/kmdecomp/savekeyboard.cpp
@@ -33,6 +33,7 @@
#include "../../../common/include/kmx_file.h"
#include "../../../common/windows/cpp/include/legacy_kmx_memory.h"
#include "../../../common/include/vkeys.h"
+#include "../../../common/include/km_vkey.h"
#define SSN__PREFIX L"&"
diff --git a/ios/engine/KMEI/KeymanEngine/es-419.lproj/Localizable.strings b/ios/engine/KMEI/KeymanEngine/es-419.lproj/Localizable.strings
index 756eb0a49bb..045de26e425 100644
--- a/ios/engine/KMEI/KeymanEngine/es-419.lproj/Localizable.strings
+++ b/ios/engine/KMEI/KeymanEngine/es-419.lproj/Localizable.strings
@@ -173,7 +173,7 @@
"menu-picker-title" = "Teclados";
/* Primary text for the Settings menu option to report keyboard crashes */
-"menu-settings-error-report" = "Permitir reporte de errores";
+"menu-settings-error-report" = "Permitir el envío de informes de errores";
/* Secondary text for the Settings menu option to report keyboard crashes */
"menu-settings-error-report-description" = "Puede requerir \"acceso completo\"";
diff --git a/linux/keyman-config/locale/es_419.po b/linux/keyman-config/locale/es_419.po
index 89269a50038..5cbb8daaccd 100644
--- a/linux/keyman-config/locale/es_419.po
+++ b/linux/keyman-config/locale/es_419.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: keyman\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-08-19 19:17+0200\n"
-"PO-Revision-Date: 2023-06-19 17:25\n"
+"POT-Creation-Date: 2025-12-18 09:43+0700\n"
+"PO-Revision-Date: 2026-08-12 14:15\n"
"Last-Translator: \n"
"Language-Team: Spanish, Latin America\n"
"Language: es_419\n"
@@ -17,316 +17,425 @@ msgstr ""
"X-Crowdin-File: /master/linux/keyman-config.pot\n"
"X-Crowdin-File-ID: 504\n"
-#: keyman_config/__init__.py:68
-msgid "Neither sentry-sdk nor raven is available. Not enabling Sentry error reporting."
-msgstr "Ni sentry-sdk ni raven están disponibles. No se habilita la notificación de errores de Sentry."
-
-#: keyman_config/downloadkeyboard.py:23
+#: keyman_config/downloadkeyboard.py:24
msgid "Download Keyman keyboards"
msgstr "Descargar teclados de Keyman"
-#: keyman_config/downloadkeyboard.py:37 keyman_config/keyboard_details.py:49
-#: keyman_config/keyboard_details.py:340 keyman_config/view_installed.py:205
+#: keyman_config/downloadkeyboard.py:42
+msgid "_Back"
+msgstr ""
+
+#: keyman_config/downloadkeyboard.py:43
+msgid "Back to search"
+msgstr ""
+
+#: keyman_config/downloadkeyboard.py:48 keyman_config/keyboard_details.py:103
+#: keyman_config/keyboard_details.py:186 keyman_config/view_installed.py:174
msgid "_Close"
msgstr "Ce_rrar"
-#: keyman_config/install_kmp.py:99
+#: keyman_config/downloadkeyboard.py:49
+msgid "Close dialog"
+msgstr "Cerrar diálogo"
+
+#: keyman_config/downloadkeyboard.py:76
+msgid "Downloading kmp file failed"
+msgstr "Error al descargar el archivo kmp"
+
+#: keyman_config/downloadkeyboard.py:79
+msgid "Downloading keyboard file failed"
+msgstr "Error al descargar el archivo de teclado"
+
+#: keyman_config/get_kmp.py:34
+msgid "System"
+msgstr "Sistema"
+
+#: keyman_config/get_kmp.py:36
+msgid "Shared"
+msgstr "Compartido"
+
+#: keyman_config/get_kmp.py:38
+msgid "User"
+msgstr "Usuario"
+
+#: keyman_config/get_kmp.py:39
+msgid "Unknown"
+msgstr "Desconocido"
+
+#: keyman_config/install_kmp.py:87
msgid "You do not have permissions to install the keyboard files to the shared area /usr/local/share/keyman"
msgstr "No tienes permisos para instalar los archivos de teclado en el área compartida /usr/local/share/keyman"
-#: keyman_config/install_kmp.py:103
+#: keyman_config/install_kmp.py:91
msgid "You do not have permissions to install the documentation to the shared documentation area /usr/local/share/doc/keyman"
msgstr "No tienes permisos para instalar la documentación en el área compartida de documentación /usr/local/share/doc/keyman"
-#: keyman_config/install_kmp.py:107
+#: keyman_config/install_kmp.py:95
msgid "You do not have permissions to install the font files to the shared font area /usr/local/share/fonts"
msgstr "No tienes permisos para instalar los archivos de fuentes en el área compartida de fuentes /usr/local/share/fonts"
-#: keyman_config/install_kmp.py:179
+#: keyman_config/install_kmp.py:113
#, python-brace-format
-msgid "install_kmp.py: error: No kmp.json or kmp.inf found in {package}"
-msgstr "install_kmp.py: error: no se encontró ningún kmp.json o kmp.inf en {package}"
+msgid "File {kmpfile} doesn't exist"
+msgstr "El archivo {kmpfile} no existe"
-#: keyman_config/install_kmp.py:246
+#: keyman_config/install_kmp.py:132
#, python-brace-format
-msgid "install_kmp.py: error: No kmp.json or kmp.inf found in {packageFile}"
-msgstr "install_kmp.py: error: no se encontró ningún kmp.json o kmp.inf en {packageFile}"
+msgid "No kmp.json or kmp.inf found in {packageFile}"
+msgstr ""
+
+#: keyman_config/install_kmp.py:159
+#, python-brace-format
+msgid "{packageFile} requires Keyman {keymanVersion} or higher"
+msgstr ""
+
+#: keyman_config/install_kmp.py:307
+msgid "Please use fcitx5-configtool to add the keyboard to the desired group"
+msgstr ""
-#: keyman_config/install_window.py:54
+#: keyman_config/install_window.py:62
#, python-brace-format
msgid "Installing keyboard/package {keyboardid}"
msgstr "Instalando teclado/paquete {keyboardid}"
-#: keyman_config/install_window.py:72 keyman_config/install_window.py:93
-msgid "Keyboard is installed already"
-msgstr "El teclado ya está instalado"
+#: keyman_config/install_window.py:95
+msgid "Details"
+msgstr "Detalles"
-#: keyman_config/install_window.py:74
+#: keyman_config/install_window.py:98
+msgid "README"
+msgstr "LÉAME"
+
+#: keyman_config/install_window.py:125
#, python-brace-format
-msgid "The {name} keyboard is already installed at version {version}. Do you want to uninstall then reinstall it?"
-msgstr "El teclado {name} ya está instalado en la versión {version}. ¿Deseas desinstalarlo y luego reinstalarlo?"
+msgid "The file '{kmpfile}' is not a Keyman keyboard package!"
+msgstr ""
-#: keyman_config/install_window.py:95
+#. i18n: The words in braces (e.g. `{name}`) are placeholders. Don't translate them!
+#: keyman_config/install_window.py:141
#, python-brace-format
msgid "The {name} keyboard is already installed with a newer version {installedversion}. Do you want to uninstall it and install the older version {version}?"
msgstr "El teclado {name} ya está instalado en una versión más nueva {installedversion}. ¿Deseas desinstalarlo e instalar la versión más vieja {version}?"
-#: keyman_config/install_window.py:128
+#: keyman_config/install_window.py:161
+msgid "Keyboard is installed already"
+msgstr "El teclado ya está instalado"
+
+#: keyman_config/install_window.py:170
+msgid "_Install"
+msgstr "_Instalar"
+
+#: keyman_config/install_window.py:174
+msgid "_Cancel"
+msgstr "_Cancelar"
+
+#: keyman_config/install_window.py:230
msgid "Keyboard layouts: "
msgstr "Distribuciones de teclado: "
-#: keyman_config/install_window.py:147
+#: keyman_config/install_window.py:250
msgid "Fonts: "
msgstr "Fuentes: "
-#: keyman_config/install_window.py:167 keyman_config/keyboard_details.py:96
+#: keyman_config/install_window.py:272 keyman_config/keyboard_details.py:81
msgid "Package version: "
msgstr "Versión del paquete: "
-#: keyman_config/install_window.py:179
+#: keyman_config/install_window.py:288
msgid "Author: "
msgstr "Autor: "
-#: keyman_config/install_window.py:197
+#: keyman_config/install_window.py:306
msgid "Website: "
msgstr "Página web: "
-#: keyman_config/install_window.py:211
+#: keyman_config/install_window.py:321
msgid "Copyright: "
msgstr "Derechos de autor: "
-#: keyman_config/install_window.py:245
-msgid "Details"
-msgstr "Detalles"
-
-#: keyman_config/install_window.py:248
-msgid "README"
-msgstr "LÉAME"
-
-#: keyman_config/install_window.py:256 keyman_config/view_installed.py:200
-msgid "_Install"
-msgstr "_Instalar"
-
-#: keyman_config/install_window.py:260
-msgid "_Cancel"
-msgstr "_Cancelar"
-
-#: keyman_config/install_window.py:305
+#: keyman_config/install_window.py:384
#, python-brace-format
msgid "Keyboard {name} installed"
msgstr "Teclado {name} instalado"
-#: keyman_config/install_window.py:310 keyman_config/install_window.py:315
+#: keyman_config/install_window.py:397 keyman_config/install_window.py:402
#, python-brace-format
msgid "Keyboard {name} could not be installed."
msgstr "No se pudo instalar el teclado {name}."
-#: keyman_config/install_window.py:311
+#: keyman_config/install_window.py:398
msgid "Error Message:"
msgstr "Mensajes de error:"
-#: keyman_config/install_window.py:316
+#: keyman_config/install_window.py:403
msgid "Warning Message:"
msgstr "Mensaje de advertencia:"
-#: keyman_config/keyboard_details.py:37
+#: keyman_config/keyboard_details.py:44
#, python-brace-format
msgid "{name} keyboard"
msgstr "Teclado {name}"
-#: keyman_config/keyboard_details.py:53
-msgid "ERROR: Keyboard metadata is damaged.\n"
-"Please \"Uninstall\" and then \"Install\" the keyboard."
-msgstr "ERROR: Los metadatos del teclado están dañados.\n"
-"Por favor \"Desinstalar\" y luego \"Instalar\" el teclado."
-
-#: keyman_config/keyboard_details.py:74
+#: keyman_config/keyboard_details.py:77
msgid "Package name: "
msgstr "Nombre del paquete: "
-#: keyman_config/keyboard_details.py:85
+#: keyman_config/keyboard_details.py:79
msgid "Package id: "
msgstr "Nombre del paquete: "
-#: keyman_config/keyboard_details.py:108
+#: keyman_config/keyboard_details.py:84
msgid "Package description: "
msgstr "Descripción del paquete: "
-#: keyman_config/keyboard_details.py:121
+#: keyman_config/keyboard_details.py:87
msgid "Package author: "
msgstr "Autor del paquete: "
-#: keyman_config/keyboard_details.py:133
+#: keyman_config/keyboard_details.py:90
msgid "Package copyright: "
msgstr "Derechos de autor del paquete: "
-#: keyman_config/keyboard_details.py:174
+#: keyman_config/keyboard_details.py:131
msgid "Keyboard filename: "
msgstr "Nombre de archivo del teclado: "
-#: keyman_config/keyboard_details.py:187
+#: keyman_config/keyboard_details.py:139
msgid "Keyboard name: "
msgstr "Nombre del teclado: "
-#: keyman_config/keyboard_details.py:198
+#: keyman_config/keyboard_details.py:140
msgid "Keyboard id: "
msgstr "Nombre del teclado: "
-#: keyman_config/keyboard_details.py:209
+#: keyman_config/keyboard_details.py:141
msgid "Keyboard version: "
msgstr "Versión del teclado: "
-#: keyman_config/keyboard_details.py:221
+#: keyman_config/keyboard_details.py:143
msgid "Keyboard author: "
msgstr "Autor del teclado: "
-#: keyman_config/keyboard_details.py:232
+#: keyman_config/keyboard_details.py:146
msgid "Keyboard license: "
msgstr "Licencia del teclado: "
-#: keyman_config/keyboard_details.py:243
+#: keyman_config/keyboard_details.py:148
msgid "Keyboard description: "
msgstr "Descripción del teclado: "
-#: keyman_config/keyboard_details.py:334
+#: keyman_config/keyboard_details.py:191
+msgid "ERROR: Keyboard metadata is damaged.\n"
+"Please \"Uninstall\" and then \"Install\" the keyboard."
+msgstr "ERROR: Los metadatos del teclado están dañados.\n"
+"Por favor \"Desinstalar\" y luego \"Instalar\" el teclado."
+
+#: keyman_config/keyboard_details.py:220
#, python-brace-format
msgid "Scan this code to load this keyboard\n"
"on another device or share online"
msgstr "Escanea este código para cargar este teclado\n"
"en otro dispositivo o compártelo en línea"
-#: keyman_config/options.py:24
-#, python-brace-format
-msgid "{packageId} Settings"
-msgstr "Configuración de {packageId}"
-
-#: keyman_config/view_installed.py:30
-msgid "Keyman Configuration"
-msgstr "Configuración de Keyman"
-
-#: keyman_config/view_installed.py:60
-msgid "Choose a kmp file..."
-msgstr "Elige un archivo kmp..."
-
-#. i18n: file type in file selection dialog
-#: keyman_config/view_installed.py:65
-msgid "KMP files"
-msgstr "Archivos KMP"
-
#. i18n: column header in table displaying installed keyboards
-#: keyman_config/view_installed.py:141
+#: keyman_config/keyboard_layouts_widget.py:37
msgid "Icon"
msgstr "Ícono"
#. i18n: column header in table displaying installed keyboards
-#: keyman_config/view_installed.py:145
+#: keyman_config/keyboard_layouts_widget.py:41
msgid "Name"
msgstr "Nombre"
#. i18n: column header in table displaying installed keyboards
-#: keyman_config/view_installed.py:148
+#: keyman_config/keyboard_layouts_widget.py:44
msgid "Version"
msgstr "Versión"
-#: keyman_config/view_installed.py:161
+#. i18n: column header in table displaying installed keyboards
+#: keyman_config/keyboard_layouts_widget.py:47
+msgid "Area"
+msgstr ""
+
+#: keyman_config/keyboard_layouts_widget.py:65
msgid "_Uninstall"
msgstr "De_sinstalar"
-#: keyman_config/view_installed.py:162 keyman_config/view_installed.py:304
+#: keyman_config/keyboard_layouts_widget.py:66 keyman_config/keyboard_layouts_widget.py:125
msgid "Uninstall keyboard"
msgstr "Desinstalar teclado"
-#: keyman_config/view_installed.py:167
+#: keyman_config/keyboard_layouts_widget.py:71
msgid "_About"
msgstr "So_bre"
-#: keyman_config/view_installed.py:168 keyman_config/view_installed.py:306
+#: keyman_config/keyboard_layouts_widget.py:72 keyman_config/keyboard_layouts_widget.py:127
msgid "About keyboard"
msgstr "Sobre el teclado"
-#: keyman_config/view_installed.py:173
+#: keyman_config/keyboard_layouts_widget.py:77
msgid "_Help"
msgstr "A_yuda"
-#: keyman_config/view_installed.py:174 keyman_config/view_installed.py:305
+#: keyman_config/keyboard_layouts_widget.py:78 keyman_config/keyboard_layouts_widget.py:126
msgid "Help for keyboard"
msgstr "Ayuda para el teclado"
-#: keyman_config/view_installed.py:179
+#: keyman_config/keyboard_layouts_widget.py:83
msgid "_Options"
msgstr "_Opciones"
-#: keyman_config/view_installed.py:180 keyman_config/view_installed.py:307
+#: keyman_config/keyboard_layouts_widget.py:84 keyman_config/keyboard_layouts_widget.py:128
msgid "Settings for keyboard"
msgstr "Configuración del teclado"
-#: keyman_config/view_installed.py:190
-msgid "_Refresh"
-msgstr "Ac_tualizar"
-
-#: keyman_config/view_installed.py:191
-msgid "Refresh keyboard list"
-msgstr "Actualizar lista de teclados"
-
-#: keyman_config/view_installed.py:195
-msgid "_Download"
-msgstr "_Descargar"
-
-#: keyman_config/view_installed.py:196
-msgid "Download and install a keyboard from the Keyman website"
-msgstr "Descargar e instalar un teclado desde la página web de Keyman"
-
-#: keyman_config/view_installed.py:201
-msgid "Install a keyboard from a file"
-msgstr "Instalar un teclado desde un archivo"
-
-#: keyman_config/view_installed.py:206
-msgid "Close window"
-msgstr "Cerrar ventana"
-
-#: keyman_config/view_installed.py:278
+#: keyman_config/keyboard_layouts_widget.py:97
#, python-brace-format
msgid "Uninstall keyboard {package}"
msgstr "Desinstalar teclado {package}"
-#: keyman_config/view_installed.py:280
+#: keyman_config/keyboard_layouts_widget.py:99
#, python-brace-format
msgid "Help for keyboard {package}"
msgstr "Ayuda para el teclado {package}"
-#: keyman_config/view_installed.py:282
+#: keyman_config/keyboard_layouts_widget.py:101
#, python-brace-format
msgid "About keyboard {package}"
msgstr "Sobre el teclado {package}"
-#: keyman_config/view_installed.py:284
+#: keyman_config/keyboard_layouts_widget.py:103
#, python-brace-format
msgid "Settings for keyboard {package}"
msgstr "Configuración del teclado {package}"
-#: keyman_config/view_installed.py:349
+#: keyman_config/keyboard_layouts_widget.py:141
msgid "Uninstall keyboard package?"
msgstr "¿Desinstalar paquete del teclado?"
-#: keyman_config/view_installed.py:351
+#: keyman_config/keyboard_layouts_widget.py:142
+#, python-brace-format
+msgid "Are you sure that you want to uninstall the {keyboard} keyboard?"
+msgstr ""
+
+#: keyman_config/keyboard_layouts_widget.py:149
+msgid "The following fonts will also be uninstalled:\n"
+msgstr ""
+
+#: keyman_config/keyboard_layouts_widget.py:160
+msgid "Uninstalling keyboard failed.\n\n"
+"Error message: "
+msgstr ""
+
+#: keyman_config/keyboard_options_view.py:26
#, python-brace-format
-msgid "Are you sure that you want to uninstall the {keyboard} keyboard and its fonts?"
-msgstr "¿Estás seguro de que deseas desinstalar el teclado {keyboard} y sus fuentes?"
+msgid "{packageId} Settings"
+msgstr "Configuración de {packageId}"
+
+#: keyman_config/options_widget.py:16
+msgid "General"
+msgstr "General"
+
+#: keyman_config/options_widget.py:24
+msgid "Automatically report errors to keyman.com"
+msgstr "Reportar errores a keyman.com automáticamente"
+
+#: keyman_config/options_widget.py:39
+msgid "Simulate AltGr with Ctrl + Alt"
+msgstr ""
+
+#: keyman_config/sentry_handling.py:55 keyman_config/sentry_handling.py:58
+msgid "Neither sentry-sdk nor raven is available. Not enabling Sentry error reporting."
+msgstr "Ni sentry-sdk ni raven están disponibles. No se habilita los informes de errores de Sentry."
+
+#: keyman_config/uninstall_kmp.py:85
+#, python-format
+msgid "You do not have permission to uninstall the files in %s. You need to run this with `sudo`."
+msgstr ""
+
+#: keyman_config/uninstall_kmp.py:136
+msgid "Please use fcitx5-configtool to remove the keyboard from the group"
+msgstr ""
+
+#: keyman_config/view_installed.py:38
+msgid "Keyman Configuration"
+msgstr "Configuración de Keyman"
+
+#: keyman_config/view_installed.py:69
+msgid "Choose a kmp file..."
+msgstr "Elige un archivo kmp..."
+
+#. i18n: file type in file selection dialog
+#: keyman_config/view_installed.py:74
+msgid "KMP files"
+msgstr "Archivos KMP"
+
+#: keyman_config/view_installed.py:107
+msgid "ibus-daemon is not running. Try to start ibus-daemon now?"
+msgstr ""
+
+#: keyman_config/view_installed.py:109
+msgid "If you just recently installed Keyman you might have to reboot or logout and login again."
+msgstr ""
+
+#: keyman_config/view_installed.py:117
+msgid "Unable to start ibus-daemon. Please reboot or logout and login again."
+msgstr ""
+
+#: keyman_config/view_installed.py:151
+msgid "Keyboard Layouts"
+msgstr "Distribuciones de teclado"
+
+#: keyman_config/view_installed.py:152
+msgid "Options"
+msgstr "Opciones"
+
+#: keyman_config/view_installed.py:159
+msgid "_Install keyboard..."
+msgstr ""
+
+#: keyman_config/view_installed.py:160
+msgid "Install a keyboard from a file"
+msgstr "Instalar un teclado desde un archivo"
+
+#: keyman_config/view_installed.py:164
+msgid "_Download keyboard..."
+msgstr ""
+
+#: keyman_config/view_installed.py:165
+msgid "Download and install a keyboard from the Keyman website"
+msgstr "Descargar e instalar un teclado desde la página web de Keyman"
+
+#: keyman_config/view_installed.py:169
+msgid "_Refresh"
+msgstr "Ac_tualizar"
-#: keyman_config/welcome.py:22
+#: keyman_config/view_installed.py:170
+msgid "Refresh keyboard list"
+msgstr "Actualizar lista de teclados"
+
+#: keyman_config/view_installed.py:175
+msgid "Close window"
+msgstr "Cerrar ventana"
+
+#: keyman_config/welcome.py:25
#, python-brace-format
msgid "{name} installed"
msgstr "{name} instalado"
-#: keyman_config/welcome.py:40
+#: keyman_config/welcome.py:43
msgid "Open in _Web browser"
msgstr "Abrir en navegador _web"
-#: keyman_config/welcome.py:42
+#: keyman_config/welcome.py:45
msgid "Open in the default web browser to do things like printing"
msgstr "Abrir en el navegador web predeterminado para hacer cosas como imprimir"
-#: keyman_config/welcome.py:45
+#: keyman_config/welcome.py:48
msgid "_OK"
msgstr "_Aceptar"
+#: km-config:53
+msgid "Missing requirements. Please install python3-fonttools."
+msgstr "Requisitos faltantes. Por favor, instale python3-fonttools."
+
diff --git a/linux/mcompile/keymap/keymap.h b/linux/mcompile/keymap/keymap.h
index 74e67352b0a..f39d501d70f 100644
--- a/linux/mcompile/keymap/keymap.h
+++ b/linux/mcompile/keymap/keymap.h
@@ -15,6 +15,7 @@
#include
#include "km_u16.h"
#include
+#include "km_vkey.h"
enum ShiftState {
Base = 0, // 0
@@ -29,39 +30,6 @@ enum ShiftState {
ShftXxxx = Shft | Xxxx, // 9
};
-#define VK_SPACE 0x20
-#define VK_COLON 0xBA
-#define VK_EQUAL 0xBB
-#define VK_COMMA 0xBC
-#define VK_HYPHEN 0xBD
-#define VK_PERIOD 0xBE
-#define VK_SLASH 0xBF
-#define VK_ACCENT 0xC0
-#define VK_LBRKT 0xDB
-#define VK_BKSLASH 0xDC
-#define VK_RBRKT 0xDD
-#define VK_QUOTE 0xDE
-#define VK_xDF 0xDF
-#define VK_OEM_102 0xE2 // "<>" or "\|" on RT 102-key kbd.
-
-#define VK_DIVIDE 0x6F
-#define VK_CANCEL 3
-#define VK_DECIMAL 0x2E
-
-#define VK_OEM_CLEAR 0xFE
-#define VK_LSHIFT 0xA0
-#define VK_RSHIFT 0xA1
-#define VK_LCONTROL 0xA2
-#define VK_RCONTROL 0xA3
-#define VK_LMENU 0xA4
-#define VK_RMENU 0xA5
-
-#define VK_SHIFT 0x10
-#define VK_CONTROL 0x11
-#define VK_MENU 0x12
-#define VK_PAUSE 0x13
-#define VK_CAPITAL 0x14
-
typedef std::vector vec_string_1D;
typedef std::vector vec_dword_1D;
typedef std::vector > vec_dword_2D;
diff --git a/mac/Keyman4MacIM/Keyman4MacIM/es-419.lproj/Localizable.strings b/mac/Keyman4MacIM/Keyman4MacIM/es-419.lproj/Localizable.strings
index c6b546cb61b..4fcccc1115d 100644
--- a/mac/Keyman4MacIM/Keyman4MacIM/es-419.lproj/Localizable.strings
+++ b/mac/Keyman4MacIM/Keyman4MacIM/es-419.lproj/Localizable.strings
@@ -31,6 +31,9 @@
/* Message displayed in Configuration window when keyboard metadata cannot be loaded */
"message-error-unknown-metadata" = "desconocido";
+/* Configuration window section heading when keyboard has no package name */
+"unknown-package-name" = "Unnamed Keyboard Package";
+
/* Button text to acknowledge that .kmp file could not be read */
"button-keyboard-file-unreadable" = "Aceptar";
diff --git a/mac/mcompile/keymap.h b/mac/mcompile/keymap.h
index 99e563b4c01..d09645f747f 100644
--- a/mac/mcompile/keymap.h
+++ b/mac/mcompile/keymap.h
@@ -6,8 +6,8 @@
#include
#include
#include
-
#include "../../common/include/km_u16.h"
+#include "km_vkey.h"
enum ShiftState {
Base = 0, // 0
@@ -22,39 +22,6 @@ enum ShiftState {
ShftXxxx = Shft | Xxxx, // 9
};
-#define VK_SPACE 0x20
-#define VK_COLON 0xBA
-#define VK_EQUAL 0xBB
-#define VK_COMMA 0xBC
-#define VK_HYPHEN 0xBD
-#define VK_PERIOD 0xBE
-#define VK_SLASH 0xBF
-#define VK_ACCENT 0xC0
-#define VK_LBRKT 0xDB
-#define VK_BKSLASH 0xDC
-#define VK_RBRKT 0xDD
-#define VK_QUOTE 0xDE
-#define VK_xDF 0xDF
-#define VK_OEM_102 0xE2 // "<>" or "\|" on RT 102-key kbd.
-
-#define VK_DIVIDE 0x6F
-#define VK_CANCEL 3
-#define VK_DECIMAL 0x2E
-
-#define VK_OEM_CLEAR 0xFE
-#define VK_LSHIFT 0xA0
-#define VK_RSHIFT 0xA1
-#define VK_LCONTROL 0xA2
-#define VK_RCONTROL 0xA3
-#define VK_LMENU 0xA4
-#define VK_RMENU 0xA5
-
-#define VK_SHIFT 0x10
-#define VK_CONTROL 0x11
-#define VK_MENU 0x12
-#define VK_PAUSE 0x13
-#define VK_CAPITAL 0x14
-
typedef std::vector vec_string_1D;
typedef std::vector vec_dword_1D;
typedef std::vector > vec_dword_2D;
diff --git a/package-lock.json b/package-lock.json
index 5ac21c94d1d..f0e9ed18aac 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -58,7 +58,7 @@
"ajv-cli": "^5.0.0",
"ajv-formats": "^2.1.1",
"chai": "^5.1.0",
- "esbuild": "^0.25.0",
+ "esbuild": "^0.28.1",
"eslint": "^8.39.0",
"eslint-config-love": "^53.0.0",
"eslint-plugin-import": "^2.27.5",
@@ -345,7 +345,7 @@
"devDependencies": {
"@sentry/cli": "^2.31.0",
"c8": "^7.12.0",
- "esbuild": "^0.25.0",
+ "esbuild": "^0.28.1",
"typescript": "^5.4.5"
}
},
@@ -876,7 +876,7 @@
"@keymanapp/models-templates": "*",
"c8": "^7.12.0",
"chalk": "^2.4.2",
- "esbuild": "^0.25.0"
+ "esbuild": "^0.28.1"
}
},
"developer/src/kmc-model-info": {
@@ -1398,210 +1398,635 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@esbuild/netbsd-arm64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz",
- "integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==",
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz",
+ "integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==",
"cpu": [
- "arm64"
+ "ppc64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
- "netbsd"
+ "aix"
],
"engines": {
"node": ">=18"
}
},
- "node_modules/@eslint-community/eslint-utils": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
- "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz",
+ "integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==",
+ "cpu": [
+ "arm"
+ ],
"dev": true,
- "dependencies": {
- "eslint-visitor-keys": "^3.3.0"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ "node": ">=18"
}
},
- "node_modules/@eslint-community/regexpp": {
- "version": "4.10.1",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.1.tgz",
- "integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==",
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz",
+ "integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
"engines": {
- "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ "node": ">=18"
}
},
- "node_modules/@eslint/eslintrc": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
- "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz",
+ "integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "dependencies": {
- "ajv": "^6.12.4",
- "debug": "^4.3.2",
- "espree": "^9.6.0",
- "globals": "^13.19.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "minimatch": "^3.1.2",
- "strip-json-comments": "^3.1.1"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
+ "node": ">=18"
}
},
- "node_modules/@eslint/eslintrc/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz",
+ "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "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"
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/@eslint/eslintrc/node_modules/debug": {
- "version": "4.3.5",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
- "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz",
+ "integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "dependencies": {
- "ms": "2.1.2"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
"engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
+ "node": ">=18"
}
},
- "node_modules/@eslint/eslintrc/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
- },
- "node_modules/@eslint/js": {
- "version": "8.57.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
- "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz",
+ "integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": ">=18"
}
},
- "node_modules/@fastify/busboy": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz",
- "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==",
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz",
+ "integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
"license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
"engines": {
- "node": ">=14"
+ "node": ">=18"
}
},
- "node_modules/@humanwhocodes/config-array": {
- "version": "0.11.14",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
- "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
- "deprecated": "Use @eslint/config-array instead",
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz",
+ "integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==",
+ "cpu": [
+ "arm"
+ ],
"dev": true,
- "dependencies": {
- "@humanwhocodes/object-schema": "^2.0.2",
- "debug": "^4.3.1",
- "minimatch": "^3.0.5"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">=10.10.0"
+ "node": ">=18"
}
},
- "node_modules/@humanwhocodes/module-importer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
- "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz",
+ "integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">=12.22"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
+ "node": ">=18"
}
},
- "node_modules/@humanwhocodes/object-schema": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
- "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
- "deprecated": "Use @eslint/object-schema instead",
- "dev": true
- },
- "node_modules/@import-maps/resolve": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@import-maps/resolve/-/resolve-1.0.1.tgz",
- "integrity": "sha512-tWZNBIS1CoekcwlMuyG2mr0a1Wo5lb5lEHwwWvZo+5GLgr3e9LLDTtmgtCWEwBpXMkxn9D+2W9j2FY6eZQq0tA==",
- "dev": true
- },
- "node_modules/@isaacs/cliui": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
- "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz",
+ "integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==",
+ "cpu": [
+ "ia32"
+ ],
"dev": true,
- "dependencies": {
- "string-width": "^5.1.2",
- "string-width-cjs": "npm:string-width@^4.2.0",
- "strip-ansi": "^7.0.1",
- "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
- "wrap-ansi": "^8.1.0",
- "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
- "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz",
+ "integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==",
+ "cpu": [
+ "loong64"
+ ],
"dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ "node": ">=18"
}
},
- "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
- "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz",
+ "integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==",
+ "cpu": [
+ "mips64el"
+ ],
"dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "node": ">=18"
}
},
- "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz",
+ "integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz",
+ "integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz",
+ "integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz",
+ "integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz",
+ "integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz",
+ "integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz",
+ "integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz",
+ "integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openharmony-arm64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz",
+ "integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz",
+ "integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz",
+ "integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz",
+ "integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz",
+ "integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.1.tgz",
+ "integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+ "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.6.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "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/@eslint/eslintrc/node_modules/debug": {
+ "version": "4.3.5",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
+ "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@eslint/eslintrc/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
+ },
+ "node_modules/@eslint/js": {
+ "version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
+ "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@fastify/busboy": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz",
+ "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.11.14",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
+ "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
+ "deprecated": "Use @eslint/config-array instead",
+ "dev": true,
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^2.0.2",
+ "debug": "^4.3.1",
+ "minimatch": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
+ "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
+ "deprecated": "Use @eslint/object-schema instead",
+ "dev": true
+ },
+ "node_modules/@import-maps/resolve": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@import-maps/resolve/-/resolve-1.0.1.tgz",
+ "integrity": "sha512-tWZNBIS1CoekcwlMuyG2mr0a1Wo5lb5lEHwwWvZo+5GLgr3e9LLDTtmgtCWEwBpXMkxn9D+2W9j2FY6eZQq0tA==",
+ "dev": true
+ },
+ "node_modules/@isaacs/cliui": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
"version": "9.2.2",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
@@ -4309,2367 +4734,2524 @@
"node": ">=18.0.0"
}
},
- "node_modules/@web/dev-server-esbuild/node_modules/parse5": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
- "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
- "dev": true
- },
- "node_modules/@web/dev-server-import-maps": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/@web/dev-server-import-maps/-/dev-server-import-maps-0.2.1.tgz",
- "integrity": "sha512-iGM7s4qenmTDUWC2iV0HoQ1NR5lAyRxVHOpWzTsFH/TnUZzP+YuL6QIFtB2v2v7URfhGL2l2WPIibmliToITcg==",
- "dev": true,
- "dependencies": {
- "@import-maps/resolve": "^1.0.1",
- "@types/parse5": "^6.0.1",
- "@web/dev-server-core": "^0.7.2",
- "@web/parse5-utils": "^2.1.0",
- "parse5": "^6.0.1",
- "picomatch": "^2.2.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@web/dev-server-import-maps/node_modules/parse5": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
- "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
- "dev": true
- },
- "node_modules/@web/dev-server-rollup": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.6.3.tgz",
- "integrity": "sha512-dzMwQRBk9Rhpfoo7vvQGvRP18sDELejJCwxsMdt509aLouIB6fviv0i87DJQWbXH24hBeq6+jSILI3JTtVaPZQ==",
- "dev": true,
- "dependencies": {
- "@rollup/plugin-node-resolve": "^15.0.1",
- "@web/dev-server-core": "^0.7.2",
- "nanocolors": "^0.2.1",
- "parse5": "^6.0.1",
- "rollup": "^4.4.0",
- "whatwg-url": "^11.0.0"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@web/dev-server-rollup/node_modules/parse5": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
- "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
- "dev": true
- },
- "node_modules/@web/dev-server-rollup/node_modules/tr46": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
- "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
- "dev": true,
- "dependencies": {
- "punycode": "^2.1.1"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@web/dev-server-rollup/node_modules/webidl-conversions": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
- "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
+ "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/aix-ppc64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz",
+ "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==",
+ "cpu": [
+ "ppc64"
+ ],
"dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
- "node_modules/@web/dev-server-rollup/node_modules/whatwg-url": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
- "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
+ "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/android-arm": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz",
+ "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==",
+ "cpu": [
+ "arm"
+ ],
"dev": true,
- "dependencies": {
- "tr46": "^3.0.0",
- "webidl-conversions": "^7.0.0"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
- "node_modules/@web/parse5-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/@web/parse5-utils/-/parse5-utils-2.1.0.tgz",
- "integrity": "sha512-GzfK5disEJ6wEjoPwx8AVNwUe9gYIiwc+x//QYxYDAFKUp4Xb1OJAGLc2l2gVrSQmtPGLKrTRcW90Hv4pEq1qA==",
+ "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/android-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz",
+ "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "dependencies": {
- "@types/parse5": "^6.0.1",
- "parse5": "^6.0.1"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
"engines": {
- "node": ">=18.0.0"
+ "node": ">=18"
}
},
- "node_modules/@web/parse5-utils/node_modules/parse5": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
- "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
- "dev": true
- },
- "node_modules/@web/test-runner": {
- "version": "0.18.2",
- "resolved": "https://registry.npmjs.org/@web/test-runner/-/test-runner-0.18.2.tgz",
- "integrity": "sha512-jA+957ic31aG/f1mr1b+HYzf/uTu4QsvFhyVgTKi2s5YQYGBbtfzx9PnYi47MVC9K9OHRbW8cq2Urds9qwSU3w==",
+ "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/android-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz",
+ "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "dependencies": {
- "@web/browser-logs": "^0.4.0",
- "@web/config-loader": "^0.3.0",
- "@web/dev-server": "^0.4.0",
- "@web/test-runner-chrome": "^0.16.0",
- "@web/test-runner-commands": "^0.9.0",
- "@web/test-runner-core": "^0.13.0",
- "@web/test-runner-mocha": "^0.9.0",
- "camelcase": "^6.2.0",
- "command-line-args": "^5.1.1",
- "command-line-usage": "^7.0.1",
- "convert-source-map": "^2.0.0",
- "diff": "^5.0.0",
- "globby": "^11.0.1",
- "nanocolors": "^0.2.1",
- "portfinder": "^1.0.32",
- "source-map": "^0.7.3"
- },
- "bin": {
- "web-test-runner": "dist/bin.js",
- "wtr": "dist/bin.js"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
"engines": {
- "node": ">=18.0.0"
+ "node": ">=18"
}
},
- "node_modules/@web/test-runner-chrome": {
- "version": "0.16.0",
- "resolved": "https://registry.npmjs.org/@web/test-runner-chrome/-/test-runner-chrome-0.16.0.tgz",
- "integrity": "sha512-Edc6Y49aVB6k18S5IOj9OCX3rEf8F3jptIu0p95+imqxmcutFEh1GNmlAk2bQGnXS0U6uVY7Xbf61fiaXUQqhg==",
+ "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/darwin-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz",
+ "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "dependencies": {
- "@web/test-runner-core": "^0.13.0",
- "@web/test-runner-coverage-v8": "^0.8.0",
- "async-mutex": "0.4.0",
- "chrome-launcher": "^0.15.0",
- "puppeteer-core": "^22.0.0"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
"engines": {
- "node": ">=18.0.0"
+ "node": ">=18"
}
},
- "node_modules/@web/test-runner-commands": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/@web/test-runner-commands/-/test-runner-commands-0.9.0.tgz",
- "integrity": "sha512-zeLI6QdH0jzzJMDV5O42Pd8WLJtYqovgdt0JdytgHc0d1EpzXDsc7NTCJSImboc2NcayIsWAvvGGeRF69SMMYg==",
+ "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/darwin-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz",
+ "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "dependencies": {
- "@web/test-runner-core": "^0.13.0",
- "mkdirp": "^1.0.4"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
"engines": {
- "node": ">=18.0.0"
+ "node": ">=18"
}
},
- "node_modules/@web/test-runner-commands/node_modules/mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "bin": {
- "mkdirp": "bin/cmd.js"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
"engines": {
- "node": ">=10"
+ "node": ">=18"
}
},
- "node_modules/@web/test-runner-core": {
- "version": "0.13.4",
- "resolved": "https://registry.npmjs.org/@web/test-runner-core/-/test-runner-core-0.13.4.tgz",
- "integrity": "sha512-84E1025aUSjvZU1j17eCTwV7m5Zg3cZHErV3+CaJM9JPCesZwLraIa0ONIQ9w4KLgcDgJFw9UnJ0LbFf42h6tg==",
+ "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/freebsd-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz",
+ "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
"license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.12.11",
- "@types/babel__code-frame": "^7.0.2",
- "@types/co-body": "^6.1.0",
- "@types/convert-source-map": "^2.0.0",
- "@types/debounce": "^1.2.0",
- "@types/istanbul-lib-coverage": "^2.0.3",
- "@types/istanbul-reports": "^3.0.0",
- "@web/browser-logs": "^0.4.0",
- "@web/dev-server-core": "^0.7.3",
- "chokidar": "^4.0.1",
- "cli-cursor": "^3.1.0",
- "co-body": "^6.1.0",
- "convert-source-map": "^2.0.0",
- "debounce": "^1.2.0",
- "dependency-graph": "^0.11.0",
- "globby": "^11.0.1",
- "internal-ip": "^6.2.0",
- "istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-report": "^3.0.1",
- "istanbul-reports": "^3.0.2",
- "log-update": "^4.0.0",
- "nanocolors": "^0.2.1",
- "nanoid": "^3.1.25",
- "open": "^8.0.2",
- "picomatch": "^2.2.2",
- "source-map": "^0.7.3"
- },
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
"engines": {
- "node": ">=18.0.0"
+ "node": ">=18"
}
},
- "node_modules/@web/test-runner-core/node_modules/chokidar": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
- "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
+ "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/linux-arm": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz",
+ "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==",
+ "cpu": [
+ "arm"
+ ],
"dev": true,
"license": "MIT",
- "dependencies": {
- "readdirp": "^4.0.1"
- },
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">= 14.16.0"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
+ "node": ">=18"
}
},
- "node_modules/@web/test-runner-core/node_modules/convert-source-map": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
- "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
- "dev": true
+ "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/linux-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz",
+ "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
},
- "node_modules/@web/test-runner-core/node_modules/nanoid": {
- "version": "3.3.11",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
- "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+ "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/linux-ia32": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz",
+ "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==",
+ "cpu": [
+ "ia32"
+ ],
"dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/linux-loong64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz",
+ "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==",
+ "cpu": [
+ "loong64"
],
+ "dev": true,
"license": "MIT",
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ "node": ">=18"
}
},
- "node_modules/@web/test-runner-core/node_modules/readdirp": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
- "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
+ "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/linux-mips64el": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz",
+ "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==",
+ "cpu": [
+ "mips64el"
+ ],
"dev": true,
"license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">= 14.18.0"
- },
- "funding": {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
+ "node": ">=18"
}
},
- "node_modules/@web/test-runner-core/node_modules/source-map": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
- "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
+ "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/linux-ppc64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz",
+ "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==",
+ "cpu": [
+ "ppc64"
+ ],
"dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">= 8"
+ "node": ">=18"
}
},
- "node_modules/@web/test-runner-coverage-v8": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/@web/test-runner-coverage-v8/-/test-runner-coverage-v8-0.8.0.tgz",
- "integrity": "sha512-PskiucYpjUtgNfR2zF2AWqWwjXL7H3WW/SnCAYmzUrtob7X9o/+BjdyZ4wKbOxWWSbJO4lEdGIDLu+8X2Xw+lA==",
+ "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/linux-riscv64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz",
+ "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==",
+ "cpu": [
+ "riscv64"
+ ],
"dev": true,
- "dependencies": {
- "@web/test-runner-core": "^0.13.0",
- "istanbul-lib-coverage": "^3.0.0",
- "lru-cache": "^8.0.4",
- "picomatch": "^2.2.2",
- "v8-to-istanbul": "^9.0.1"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">=18.0.0"
+ "node": ">=18"
}
},
- "node_modules/@web/test-runner-coverage-v8/node_modules/lru-cache": {
- "version": "8.0.5",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz",
- "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==",
+ "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/linux-s390x": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz",
+ "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==",
+ "cpu": [
+ "s390x"
+ ],
"dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">=16.14"
+ "node": ">=18"
}
},
- "node_modules/@web/test-runner-mocha": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/@web/test-runner-mocha/-/test-runner-mocha-0.9.0.tgz",
- "integrity": "sha512-ZL9F6FXd0DBQvo/h/+mSfzFTSRVxzV9st/AHhpgABtUtV/AIpVE9to6+xdkpu6827kwjezdpuadPfg+PlrBWqQ==",
+ "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/linux-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz",
+ "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "dependencies": {
- "@web/test-runner-core": "^0.13.0"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">=18.0.0"
+ "node": ">=18"
}
},
- "node_modules/@web/test-runner-playwright": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/@web/test-runner-playwright/-/test-runner-playwright-0.11.0.tgz",
- "integrity": "sha512-s+f43DSAcssKYVOD9SuzueUcctJdHzq1by45gAnSCKa9FQcaTbuYe8CzmxA21g+NcL5+ayo4z+MA9PO4H+PssQ==",
+ "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "dependencies": {
- "@web/test-runner-core": "^0.13.0",
- "@web/test-runner-coverage-v8": "^0.8.0",
- "playwright": "^1.22.2"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
"engines": {
- "node": ">=18.0.0"
+ "node": ">=18"
}
},
- "node_modules/@web/test-runner/node_modules/convert-source-map": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
- "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
- "dev": true
- },
- "node_modules/@web/test-runner/node_modules/source-map": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
- "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
+ "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/netbsd-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz",
+ "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
"engines": {
- "node": ">= 8"
+ "node": ">=18"
}
},
- "node_modules/@zip.js/zip.js": {
- "version": "2.7.32",
- "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.7.32.tgz",
- "integrity": "sha512-9Ox1meDIvIKE23LLA7Fxd/ewJpKjj2KryH92doHRqx2406LmIzorsiMawL0qIK7dvwN9K+mfk47lauoIE0o1zQ==",
+ "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
"engines": {
- "bun": ">=0.7.0",
- "deno": ">=1.0.0",
- "node": ">=16.5.0"
+ "node": ">=18"
}
},
- "node_modules/abbrev": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz",
- "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==",
+ "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/openbsd-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz",
+ "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": ">=18"
}
},
- "node_modules/abnf": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/abnf/-/abnf-4.3.1.tgz",
- "integrity": "sha512-j4A8wWqKqkcSjx5xFESo9GtW2EUvlUZutcWB1knhxSP9kaXJ/YwL0g6dvMhHRjCPCNsIWwNGoKMHzPwemSpCvw==",
+ "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/openharmony-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz",
+ "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "commander": "^13.0.0",
- "peggy": "^4.2.0"
- },
- "bin": {
- "abnf_ast": "bin/abnf_ast.js",
- "abnf_check": "bin/abnf_check.js",
- "abnf_gen": "bin/abnf_gen.js",
- "abnf_test": "bin/abnf_test.js"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
"engines": {
"node": ">=18"
}
},
- "node_modules/abnf/node_modules/commander": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz",
- "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==",
+ "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/sunos-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz",
+ "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
"engines": {
"node": ">=18"
}
},
- "node_modules/accepts": {
- "version": "1.3.8",
+ "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/win32-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz",
+ "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
"license": "MIT",
- "dependencies": {
- "mime-types": "~2.1.34",
- "negotiator": "0.6.3"
- },
+ "optional": true,
+ "os": [
+ "win32"
+ ],
"engines": {
- "node": ">= 0.6"
+ "node": ">=18"
}
},
- "node_modules/acorn": {
- "version": "8.12.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz",
- "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==",
+ "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/win32-ia32": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz",
+ "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==",
+ "cpu": [
+ "ia32"
+ ],
"dev": true,
- "bin": {
- "acorn": "bin/acorn"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
"engines": {
- "node": ">=0.4.0"
+ "node": ">=18"
}
},
- "node_modules/acorn-jsx": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
- "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/win32-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz",
+ "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "peerDependencies": {
- "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/agent-base": {
- "version": "6.0.2",
+ "node_modules/@web/dev-server-esbuild/node_modules/esbuild": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz",
+ "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==",
"dev": true,
+ "hasInstallScript": true,
"license": "MIT",
- "dependencies": {
- "debug": "4"
+ "bin": {
+ "esbuild": "bin/esbuild"
},
"engines": {
- "node": ">= 6.0.0"
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.25.12",
+ "@esbuild/android-arm": "0.25.12",
+ "@esbuild/android-arm64": "0.25.12",
+ "@esbuild/android-x64": "0.25.12",
+ "@esbuild/darwin-arm64": "0.25.12",
+ "@esbuild/darwin-x64": "0.25.12",
+ "@esbuild/freebsd-arm64": "0.25.12",
+ "@esbuild/freebsd-x64": "0.25.12",
+ "@esbuild/linux-arm": "0.25.12",
+ "@esbuild/linux-arm64": "0.25.12",
+ "@esbuild/linux-ia32": "0.25.12",
+ "@esbuild/linux-loong64": "0.25.12",
+ "@esbuild/linux-mips64el": "0.25.12",
+ "@esbuild/linux-ppc64": "0.25.12",
+ "@esbuild/linux-riscv64": "0.25.12",
+ "@esbuild/linux-s390x": "0.25.12",
+ "@esbuild/linux-x64": "0.25.12",
+ "@esbuild/netbsd-arm64": "0.25.12",
+ "@esbuild/netbsd-x64": "0.25.12",
+ "@esbuild/openbsd-arm64": "0.25.12",
+ "@esbuild/openbsd-x64": "0.25.12",
+ "@esbuild/openharmony-arm64": "0.25.12",
+ "@esbuild/sunos-x64": "0.25.12",
+ "@esbuild/win32-arm64": "0.25.12",
+ "@esbuild/win32-ia32": "0.25.12",
+ "@esbuild/win32-x64": "0.25.12"
}
},
- "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==",
+ "node_modules/@web/dev-server-esbuild/node_modules/parse5": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
+ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
+ "dev": true
+ },
+ "node_modules/@web/dev-server-import-maps": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/@web/dev-server-import-maps/-/dev-server-import-maps-0.2.1.tgz",
+ "integrity": "sha512-iGM7s4qenmTDUWC2iV0HoQ1NR5lAyRxVHOpWzTsFH/TnUZzP+YuL6QIFtB2v2v7URfhGL2l2WPIibmliToITcg==",
"dev": true,
"dependencies": {
- "clean-stack": "^2.0.0",
- "indent-string": "^4.0.0"
+ "@import-maps/resolve": "^1.0.1",
+ "@types/parse5": "^6.0.1",
+ "@web/dev-server-core": "^0.7.2",
+ "@web/parse5-utils": "^2.1.0",
+ "parse5": "^6.0.1",
+ "picomatch": "^2.2.2"
},
"engines": {
- "node": ">=8"
+ "node": ">=18.0.0"
}
},
- "node_modules/ajv": {
- "version": "8.18.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz",
- "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==",
+ "node_modules/@web/dev-server-import-maps/node_modules/parse5": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
+ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
+ "dev": true
+ },
+ "node_modules/@web/dev-server-rollup": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.6.3.tgz",
+ "integrity": "sha512-dzMwQRBk9Rhpfoo7vvQGvRP18sDELejJCwxsMdt509aLouIB6fviv0i87DJQWbXH24hBeq6+jSILI3JTtVaPZQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
+ "@rollup/plugin-node-resolve": "^15.0.1",
+ "@web/dev-server-core": "^0.7.2",
+ "nanocolors": "^0.2.1",
+ "parse5": "^6.0.1",
+ "rollup": "^4.4.0",
+ "whatwg-url": "^11.0.0"
},
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
+ "engines": {
+ "node": ">=18.0.0"
}
},
- "node_modules/ajv-cli": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ajv-cli/-/ajv-cli-5.0.0.tgz",
- "integrity": "sha512-LY4m6dUv44HTyhV+u2z5uX4EhPYTM38Iv1jdgDJJJCyOOuqB8KtZEGjPZ2T+sh5ZIJrXUfgErYx/j3gLd3+PlQ==",
+ "node_modules/@web/dev-server-rollup/node_modules/parse5": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
+ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
+ "dev": true
+ },
+ "node_modules/@web/dev-server-rollup/node_modules/tr46": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
+ "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
"dev": true,
"dependencies": {
- "ajv": "^8.0.0",
- "fast-json-patch": "^2.0.0",
- "glob": "^7.1.0",
- "js-yaml": "^3.14.0",
- "json-schema-migrate": "^2.0.0",
- "json5": "^2.1.3",
- "minimist": "^1.2.0"
- },
- "bin": {
- "ajv": "dist/index.js"
- },
- "peerDependencies": {
- "ts-node": ">=9.0.0"
+ "punycode": "^2.1.1"
},
- "peerDependenciesMeta": {
- "ts-node": {
- "optional": true
- }
+ "engines": {
+ "node": ">=12"
}
},
- "node_modules/ajv-cli/node_modules/argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "node_modules/@web/dev-server-rollup/node_modules/webidl-conversions": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
+ "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
"dev": true,
- "dependencies": {
- "sprintf-js": "~1.0.2"
+ "engines": {
+ "node": ">=12"
}
},
- "node_modules/ajv-cli/node_modules/js-yaml": {
- "version": "3.14.2",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz",
- "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==",
+ "node_modules/@web/dev-server-rollup/node_modules/whatwg-url": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
+ "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
+ "tr46": "^3.0.0",
+ "webidl-conversions": "^7.0.0"
},
- "bin": {
- "js-yaml": "bin/js-yaml.js"
+ "engines": {
+ "node": ">=12"
}
},
- "node_modules/ajv-cli/node_modules/json5": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "node_modules/@web/parse5-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@web/parse5-utils/-/parse5-utils-2.1.0.tgz",
+ "integrity": "sha512-GzfK5disEJ6wEjoPwx8AVNwUe9gYIiwc+x//QYxYDAFKUp4Xb1OJAGLc2l2gVrSQmtPGLKrTRcW90Hv4pEq1qA==",
"dev": true,
- "bin": {
- "json5": "lib/cli.js"
+ "dependencies": {
+ "@types/parse5": "^6.0.1",
+ "parse5": "^6.0.1"
},
"engines": {
- "node": ">=6"
+ "node": ">=18.0.0"
}
},
- "node_modules/ajv-draft-04": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz",
- "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==",
+ "node_modules/@web/parse5-utils/node_modules/parse5": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
+ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
+ "dev": true
+ },
+ "node_modules/@web/test-runner": {
+ "version": "0.18.2",
+ "resolved": "https://registry.npmjs.org/@web/test-runner/-/test-runner-0.18.2.tgz",
+ "integrity": "sha512-jA+957ic31aG/f1mr1b+HYzf/uTu4QsvFhyVgTKi2s5YQYGBbtfzx9PnYi47MVC9K9OHRbW8cq2Urds9qwSU3w==",
"dev": true,
- "license": "MIT",
- "peerDependencies": {
- "ajv": "^8.5.0"
+ "dependencies": {
+ "@web/browser-logs": "^0.4.0",
+ "@web/config-loader": "^0.3.0",
+ "@web/dev-server": "^0.4.0",
+ "@web/test-runner-chrome": "^0.16.0",
+ "@web/test-runner-commands": "^0.9.0",
+ "@web/test-runner-core": "^0.13.0",
+ "@web/test-runner-mocha": "^0.9.0",
+ "camelcase": "^6.2.0",
+ "command-line-args": "^5.1.1",
+ "command-line-usage": "^7.0.1",
+ "convert-source-map": "^2.0.0",
+ "diff": "^5.0.0",
+ "globby": "^11.0.1",
+ "nanocolors": "^0.2.1",
+ "portfinder": "^1.0.32",
+ "source-map": "^0.7.3"
},
- "peerDependenciesMeta": {
- "ajv": {
- "optional": true
- }
+ "bin": {
+ "web-test-runner": "dist/bin.js",
+ "wtr": "dist/bin.js"
+ },
+ "engines": {
+ "node": ">=18.0.0"
}
},
- "node_modules/ajv-formats": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
- "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
+ "node_modules/@web/test-runner-chrome": {
+ "version": "0.16.0",
+ "resolved": "https://registry.npmjs.org/@web/test-runner-chrome/-/test-runner-chrome-0.16.0.tgz",
+ "integrity": "sha512-Edc6Y49aVB6k18S5IOj9OCX3rEf8F3jptIu0p95+imqxmcutFEh1GNmlAk2bQGnXS0U6uVY7Xbf61fiaXUQqhg==",
"dev": true,
"dependencies": {
- "ajv": "^8.0.0"
- },
- "peerDependencies": {
- "ajv": "^8.0.0"
+ "@web/test-runner-core": "^0.13.0",
+ "@web/test-runner-coverage-v8": "^0.8.0",
+ "async-mutex": "0.4.0",
+ "chrome-launcher": "^0.15.0",
+ "puppeteer-core": "^22.0.0"
},
- "peerDependenciesMeta": {
- "ajv": {
- "optional": true
- }
+ "engines": {
+ "node": ">=18.0.0"
}
},
- "node_modules/ansi-escapes": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
- "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "node_modules/@web/test-runner-commands": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/@web/test-runner-commands/-/test-runner-commands-0.9.0.tgz",
+ "integrity": "sha512-zeLI6QdH0jzzJMDV5O42Pd8WLJtYqovgdt0JdytgHc0d1EpzXDsc7NTCJSImboc2NcayIsWAvvGGeRF69SMMYg==",
"dev": true,
"dependencies": {
- "type-fest": "^0.21.3"
+ "@web/test-runner-core": "^0.13.0",
+ "mkdirp": "^1.0.4"
},
"engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=18.0.0"
}
},
- "node_modules/ansi-escapes/node_modules/type-fest": {
- "version": "0.21.3",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
- "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "node_modules/@web/test-runner-commands/node_modules/mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
"dev": true,
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ },
"engines": {
"node": ">=10"
+ }
+ },
+ "node_modules/@web/test-runner-core": {
+ "version": "0.13.4",
+ "resolved": "https://registry.npmjs.org/@web/test-runner-core/-/test-runner-core-0.13.4.tgz",
+ "integrity": "sha512-84E1025aUSjvZU1j17eCTwV7m5Zg3cZHErV3+CaJM9JPCesZwLraIa0ONIQ9w4KLgcDgJFw9UnJ0LbFf42h6tg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.12.11",
+ "@types/babel__code-frame": "^7.0.2",
+ "@types/co-body": "^6.1.0",
+ "@types/convert-source-map": "^2.0.0",
+ "@types/debounce": "^1.2.0",
+ "@types/istanbul-lib-coverage": "^2.0.3",
+ "@types/istanbul-reports": "^3.0.0",
+ "@web/browser-logs": "^0.4.0",
+ "@web/dev-server-core": "^0.7.3",
+ "chokidar": "^4.0.1",
+ "cli-cursor": "^3.1.0",
+ "co-body": "^6.1.0",
+ "convert-source-map": "^2.0.0",
+ "debounce": "^1.2.0",
+ "dependency-graph": "^0.11.0",
+ "globby": "^11.0.1",
+ "internal-ip": "^6.2.0",
+ "istanbul-lib-coverage": "^3.0.0",
+ "istanbul-lib-report": "^3.0.1",
+ "istanbul-reports": "^3.0.2",
+ "log-update": "^4.0.0",
+ "nanocolors": "^0.2.1",
+ "nanoid": "^3.1.25",
+ "open": "^8.0.2",
+ "picomatch": "^2.2.2",
+ "source-map": "^0.7.3"
},
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "engines": {
+ "node": ">=18.0.0"
}
},
- "node_modules/ansi-styles": {
- "version": "4.3.0",
+ "node_modules/@web/test-runner-core/node_modules/chokidar": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
+ "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "color-convert": "^2.0.1"
+ "readdirp": "^4.0.1"
},
"engines": {
- "node": ">=8"
+ "node": ">= 14.16.0"
},
"funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "url": "https://paulmillr.com/funding/"
}
},
- "node_modules/append-field": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz",
- "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==",
- "license": "MIT"
- },
- "node_modules/argparse": {
- "version": "2.0.1",
- "dev": true,
- "license": "Python-2.0"
+ "node_modules/@web/test-runner-core/node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true
},
- "node_modules/array-back": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz",
- "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==",
+ "node_modules/@web/test-runner-core/node_modules/nanoid": {
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
"dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
"engines": {
- "node": ">=6"
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
- "node_modules/array-buffer-byte-length": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz",
- "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==",
+ "node_modules/@web/test-runner-core/node_modules/readdirp": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
+ "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
"dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "is-array-buffer": "^3.0.1"
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14.18.0"
},
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
}
},
- "node_modules/array-flatten": {
- "version": "1.1.1",
- "license": "MIT"
+ "node_modules/@web/test-runner-core/node_modules/source-map": {
+ "version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
+ "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
},
- "node_modules/array-includes": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz",
- "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==",
+ "node_modules/@web/test-runner-coverage-v8": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/@web/test-runner-coverage-v8/-/test-runner-coverage-v8-0.8.0.tgz",
+ "integrity": "sha512-PskiucYpjUtgNfR2zF2AWqWwjXL7H3WW/SnCAYmzUrtob7X9o/+BjdyZ4wKbOxWWSbJO4lEdGIDLu+8X2Xw+lA==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
- "get-intrinsic": "^1.1.3",
- "is-string": "^1.0.7"
+ "@web/test-runner-core": "^0.13.0",
+ "istanbul-lib-coverage": "^3.0.0",
+ "lru-cache": "^8.0.4",
+ "picomatch": "^2.2.2",
+ "v8-to-istanbul": "^9.0.1"
},
"engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node": ">=18.0.0"
}
},
- "node_modules/array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "node_modules/@web/test-runner-coverage-v8/node_modules/lru-cache": {
+ "version": "8.0.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz",
+ "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==",
"dev": true,
"engines": {
- "node": ">=8"
+ "node": ">=16.14"
}
},
- "node_modules/array.prototype.flat": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz",
- "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==",
+ "node_modules/@web/test-runner-mocha": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/@web/test-runner-mocha/-/test-runner-mocha-0.9.0.tgz",
+ "integrity": "sha512-ZL9F6FXd0DBQvo/h/+mSfzFTSRVxzV9st/AHhpgABtUtV/AIpVE9to6+xdkpu6827kwjezdpuadPfg+PlrBWqQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
- "es-shim-unscopables": "^1.0.0"
+ "@web/test-runner-core": "^0.13.0"
},
"engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node": ">=18.0.0"
}
},
- "node_modules/array.prototype.flatmap": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz",
- "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==",
+ "node_modules/@web/test-runner-playwright": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@web/test-runner-playwright/-/test-runner-playwright-0.11.0.tgz",
+ "integrity": "sha512-s+f43DSAcssKYVOD9SuzueUcctJdHzq1by45gAnSCKa9FQcaTbuYe8CzmxA21g+NcL5+ayo4z+MA9PO4H+PssQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
- "es-shim-unscopables": "^1.0.0"
+ "@web/test-runner-core": "^0.13.0",
+ "@web/test-runner-coverage-v8": "^0.8.0",
+ "playwright": "^1.22.2"
},
"engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node": ">=18.0.0"
}
},
- "node_modules/ast-types": {
- "version": "0.13.4",
- "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz",
- "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==",
+ "node_modules/@web/test-runner/node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true
+ },
+ "node_modules/@web/test-runner/node_modules/source-map": {
+ "version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
+ "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "tslib": "^2.0.1"
- },
"engines": {
- "node": ">=4"
+ "node": ">= 8"
}
},
- "node_modules/astral-regex": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
- "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+ "node_modules/@zip.js/zip.js": {
+ "version": "2.7.32",
+ "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.7.32.tgz",
+ "integrity": "sha512-9Ox1meDIvIKE23LLA7Fxd/ewJpKjj2KryH92doHRqx2406LmIzorsiMawL0qIK7dvwN9K+mfk47lauoIE0o1zQ==",
"dev": true,
"engines": {
- "node": ">=8"
+ "bun": ">=0.7.0",
+ "deno": ">=1.0.0",
+ "node": ">=16.5.0"
}
},
- "node_modules/async": {
- "version": "2.6.4",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
- "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
+ "node_modules/abbrev": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz",
+ "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==",
"dev": true,
- "dependencies": {
- "lodash": "^4.17.14"
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
- "node_modules/async-mutex": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.4.0.tgz",
- "integrity": "sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==",
+ "node_modules/abnf": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/abnf/-/abnf-4.3.1.tgz",
+ "integrity": "sha512-j4A8wWqKqkcSjx5xFESo9GtW2EUvlUZutcWB1knhxSP9kaXJ/YwL0g6dvMhHRjCPCNsIWwNGoKMHzPwemSpCvw==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "tslib": "^2.4.0"
+ "commander": "^13.0.0",
+ "peggy": "^4.2.0"
+ },
+ "bin": {
+ "abnf_ast": "bin/abnf_ast.js",
+ "abnf_check": "bin/abnf_check.js",
+ "abnf_gen": "bin/abnf_gen.js",
+ "abnf_test": "bin/abnf_test.js"
+ },
+ "engines": {
+ "node": ">=18"
}
},
- "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
- },
- "node_modules/available-typed-arrays": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
- "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
+ "node_modules/abnf/node_modules/commander": {
+ "version": "13.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz",
+ "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==",
"dev": true,
"engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node": ">=18"
}
},
- "node_modules/b4a": {
- "version": "1.6.7",
- "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz",
- "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==",
- "dev": true,
- "license": "Apache-2.0"
+ "node_modules/accepts": {
+ "version": "1.3.8",
+ "license": "MIT",
+ "dependencies": {
+ "mime-types": "~2.1.34",
+ "negotiator": "0.6.3"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
},
- "node_modules/balanced-match": {
- "version": "1.0.0",
+ "node_modules/acorn": {
+ "version": "8.12.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz",
+ "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==",
"dev": true,
- "license": "MIT"
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
},
- "node_modules/bare-events": {
- "version": "2.5.4",
- "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz",
- "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==",
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
"dev": true,
- "license": "Apache-2.0",
- "optional": true
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
},
- "node_modules/bare-fs": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.1.2.tgz",
- "integrity": "sha512-8wSeOia5B7LwD4+h465y73KOdj5QHsbbuoUfPBi+pXgFJIPuG7SsiOdJuijWMyfid49eD+WivpfY7KT8gbAzBA==",
+ "node_modules/agent-base": {
+ "version": "6.0.2",
"dev": true,
- "license": "Apache-2.0",
- "optional": true,
+ "license": "MIT",
"dependencies": {
- "bare-events": "^2.5.4",
- "bare-path": "^3.0.0",
- "bare-stream": "^2.6.4"
+ "debug": "4"
},
"engines": {
- "bare": ">=1.16.0"
- },
- "peerDependencies": {
- "bare-buffer": "*"
- },
- "peerDependenciesMeta": {
- "bare-buffer": {
- "optional": true
- }
+ "node": ">= 6.0.0"
}
},
- "node_modules/bare-os": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.1.tgz",
- "integrity": "sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==",
+ "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": "Apache-2.0",
- "optional": true,
+ "dependencies": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ },
"engines": {
- "bare": ">=1.14.0"
+ "node": ">=8"
}
},
- "node_modules/bare-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz",
- "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==",
+ "node_modules/ajv": {
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz",
+ "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==",
"dev": true,
- "license": "Apache-2.0",
- "optional": true,
+ "license": "MIT",
"dependencies": {
- "bare-os": "^3.0.1"
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/bare-stream": {
- "version": "2.6.5",
- "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.5.tgz",
- "integrity": "sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==",
+ "node_modules/ajv-cli": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ajv-cli/-/ajv-cli-5.0.0.tgz",
+ "integrity": "sha512-LY4m6dUv44HTyhV+u2z5uX4EhPYTM38Iv1jdgDJJJCyOOuqB8KtZEGjPZ2T+sh5ZIJrXUfgErYx/j3gLd3+PlQ==",
"dev": true,
- "license": "Apache-2.0",
- "optional": true,
"dependencies": {
- "streamx": "^2.21.0"
+ "ajv": "^8.0.0",
+ "fast-json-patch": "^2.0.0",
+ "glob": "^7.1.0",
+ "js-yaml": "^3.14.0",
+ "json-schema-migrate": "^2.0.0",
+ "json5": "^2.1.3",
+ "minimist": "^1.2.0"
+ },
+ "bin": {
+ "ajv": "dist/index.js"
},
"peerDependencies": {
- "bare-buffer": "*",
- "bare-events": "*"
+ "ts-node": ">=9.0.0"
},
"peerDependenciesMeta": {
- "bare-buffer": {
- "optional": true
- },
- "bare-events": {
+ "ts-node": {
"optional": true
}
}
},
- "node_modules/base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "node_modules/ajv-cli/node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"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"
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
},
- "node_modules/basic-ftp": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.2.2.tgz",
- "integrity": "sha512-1tDrzKsdCg70WGvbFss/ulVAxupNauGnOlgpyjKzeQxzyllBLS0CGLV7tjIXTK3ZQA9/FBEm9qyFFN1bciA6pw==",
+ "node_modules/ajv-cli/node_modules/js-yaml": {
+ "version": "3.14.2",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz",
+ "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==",
"dev": true,
"license": "MIT",
- "engines": {
- "node": ">=10.0.0"
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
}
},
- "node_modules/before-after-hook": {
+ "node_modules/ajv-cli/node_modules/json5": {
"version": "2.2.3",
- "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz",
- "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==",
- "license": "Apache-2.0"
- },
- "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==",
- "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"
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true,
+ "bin": {
+ "json5": "lib/cli.js"
},
"engines": {
- "node": ">= 0.8",
- "npm": "1.2.8000 || >= 1.4.16"
- }
- },
- "node_modules/body-parser/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "license": "MIT",
- "dependencies": {
- "ms": "2.0.0"
+ "node": ">=6"
}
},
- "node_modules/body-parser/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==",
+ "node_modules/ajv-draft-04": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz",
+ "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==",
+ "dev": true,
"license": "MIT",
- "engines": {
- "node": ">= 0.8"
+ "peerDependencies": {
+ "ajv": "^8.5.0"
+ },
+ "peerDependenciesMeta": {
+ "ajv": {
+ "optional": true
+ }
}
},
- "node_modules/body-parser/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==",
- "license": "MIT",
+ "node_modules/ajv-formats": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
+ "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
+ "dev": true,
"dependencies": {
- "depd": "~2.0.0",
- "inherits": "~2.0.4",
- "setprototypeof": "~1.2.0",
- "statuses": "~2.0.2",
- "toidentifier": "~1.0.1"
+ "ajv": "^8.0.0"
},
- "engines": {
- "node": ">= 0.8"
+ "peerDependencies": {
+ "ajv": "^8.0.0"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/express"
+ "peerDependenciesMeta": {
+ "ajv": {
+ "optional": true
+ }
}
},
- "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==",
- "license": "MIT"
- },
- "node_modules/body-parser/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==",
- "license": "MIT",
+ "node_modules/ansi-escapes": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "dev": true,
"dependencies": {
- "bytes": "~3.1.2",
- "http-errors": "~2.0.1",
- "iconv-lite": "~0.4.24",
- "unpipe": "~1.0.0"
+ "type-fest": "^0.21.3"
},
"engines": {
- "node": ">= 0.8"
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/body-parser/node_modules/statuses": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
- "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
- "license": "MIT",
+ "node_modules/ansi-escapes/node_modules/type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "dev": true,
"engines": {
- "node": ">= 0.8"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
- "dev": true,
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
"license": "MIT",
"dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "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==",
- "dev": true,
- "dependencies": {
- "fill-range": "^7.1.1"
+ "color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/browser-stdout": {
- "version": "1.3.1",
+ "node_modules/append-field": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz",
+ "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==",
+ "license": "MIT"
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
"dev": true,
- "license": "ISC"
+ "license": "Python-2.0"
},
- "node_modules/buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "node_modules/array-back": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz",
+ "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==",
"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",
- "dependencies": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
+ "engines": {
+ "node": ">=6"
}
},
- "node_modules/buffer-crc32": {
- "version": "0.2.13",
+ "node_modules/array-buffer-byte-length": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz",
+ "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==",
"dev": true,
- "license": "MIT",
- "engines": {
- "node": "*"
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "is-array-buffer": "^3.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/buffer-from": {
+ "node_modules/array-flatten": {
"version": "1.1.1",
"license": "MIT"
},
- "node_modules/builtin-modules": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
- "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
+ "node_modules/array-includes": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz",
+ "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==",
"dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "get-intrinsic": "^1.1.3",
+ "is-string": "^1.0.7"
+ },
"engines": {
- "node": ">=6"
+ "node": ">= 0.4"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/builtins": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz",
- "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==",
+ "node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
"dev": true,
- "dependencies": {
- "semver": "^7.0.0"
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/busboy": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
- "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
+ "node_modules/array.prototype.flat": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz",
+ "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==",
+ "dev": true,
"dependencies": {
- "streamsearch": "^1.1.0"
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "es-shim-unscopables": "^1.0.0"
},
"engines": {
- "node": ">=10.16.0"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/bytes": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
- "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "node_modules/array.prototype.flatmap": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz",
+ "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "es-shim-unscopables": "^1.0.0"
+ },
"engines": {
- "node": ">= 0.8"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/c8": {
- "version": "7.12.0",
+ "node_modules/ast-types": {
+ "version": "0.13.4",
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz",
+ "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==",
"dev": true,
- "license": "ISC",
+ "license": "MIT",
"dependencies": {
- "@bcoe/v8-coverage": "^0.2.3",
- "@istanbuljs/schema": "^0.1.3",
- "find-up": "^5.0.0",
- "foreground-child": "^2.0.0",
- "istanbul-lib-coverage": "^3.2.0",
- "istanbul-lib-report": "^3.0.0",
- "istanbul-reports": "^3.1.4",
- "rimraf": "^3.0.2",
- "test-exclude": "^6.0.0",
- "v8-to-istanbul": "^9.0.0",
- "yargs": "^16.2.0",
- "yargs-parser": "^20.2.9"
- },
- "bin": {
- "c8": "bin/c8.js"
+ "tslib": "^2.0.1"
},
"engines": {
- "node": ">=10.12.0"
+ "node": ">=4"
}
},
- "node_modules/c8/node_modules/yargs-parser": {
- "version": "20.2.9",
+ "node_modules/astral-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
"dev": true,
- "license": "ISC",
"engines": {
- "node": ">=10"
+ "node": ">=8"
}
},
- "node_modules/cacache": {
- "version": "18.0.4",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz",
- "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==",
+ "node_modules/async": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
+ "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
"dev": true,
"dependencies": {
- "@npmcli/fs": "^3.1.0",
- "fs-minipass": "^3.0.0",
- "glob": "^10.2.2",
- "lru-cache": "^10.0.1",
- "minipass": "^7.0.3",
- "minipass-collect": "^2.0.1",
- "minipass-flush": "^1.0.5",
- "minipass-pipeline": "^1.2.4",
- "p-map": "^4.0.0",
- "ssri": "^10.0.0",
- "tar": "^6.1.11",
- "unique-filename": "^3.0.0"
- },
- "engines": {
- "node": "^16.14.0 || >=18.0.0"
+ "lodash": "^4.17.14"
}
},
- "node_modules/cacache/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "node_modules/async-mutex": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.4.0.tgz",
+ "integrity": "sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==",
"dev": true,
"dependencies": {
- "balanced-match": "^1.0.0"
+ "tslib": "^2.4.0"
}
},
- "node_modules/cacache/node_modules/foreground-child": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz",
- "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==",
+ "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
+ },
+ "node_modules/available-typed-arrays": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
+ "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
"dev": true,
- "dependencies": {
- "cross-spawn": "^7.0.0",
- "signal-exit": "^4.0.1"
- },
"engines": {
- "node": ">=14"
+ "node": ">= 0.4"
},
"funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/cacache/node_modules/glob": {
- "version": "10.4.5",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
- "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+ "node_modules/b4a": {
+ "version": "1.6.7",
+ "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz",
+ "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==",
"dev": true,
- "dependencies": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^3.1.2",
- "minimatch": "^9.0.4",
- "minipass": "^7.1.2",
- "package-json-from-dist": "^1.0.0",
- "path-scurry": "^1.11.1"
- },
- "bin": {
- "glob": "dist/esm/bin.mjs"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
+ "license": "Apache-2.0"
},
- "node_modules/cacache/node_modules/lru-cache": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
- "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
- "dev": true
+ "node_modules/balanced-match": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
},
- "node_modules/cacache/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "node_modules/bare-events": {
+ "version": "2.5.4",
+ "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz",
+ "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true
+ },
+ "node_modules/bare-fs": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.1.2.tgz",
+ "integrity": "sha512-8wSeOia5B7LwD4+h465y73KOdj5QHsbbuoUfPBi+pXgFJIPuG7SsiOdJuijWMyfid49eD+WivpfY7KT8gbAzBA==",
"dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
"dependencies": {
- "brace-expansion": "^2.0.1"
+ "bare-events": "^2.5.4",
+ "bare-path": "^3.0.0",
+ "bare-stream": "^2.6.4"
},
"engines": {
- "node": ">=16 || 14 >=14.17"
+ "bare": ">=1.16.0"
},
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "peerDependencies": {
+ "bare-buffer": "*"
+ },
+ "peerDependenciesMeta": {
+ "bare-buffer": {
+ "optional": true
+ }
}
},
- "node_modules/cacache/node_modules/signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "node_modules/bare-os": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.1.tgz",
+ "integrity": "sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==",
"dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
"engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "bare": ">=1.14.0"
+ }
+ },
+ "node_modules/bare-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz",
+ "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "bare-os": "^3.0.1"
}
},
- "node_modules/cache-content-type": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz",
- "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==",
+ "node_modules/bare-stream": {
+ "version": "2.6.5",
+ "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.5.tgz",
+ "integrity": "sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==",
"dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
"dependencies": {
- "mime-types": "^2.1.18",
- "ylru": "^1.2.0"
+ "streamx": "^2.21.0"
},
- "engines": {
- "node": ">= 6.0.0"
+ "peerDependencies": {
+ "bare-buffer": "*",
+ "bare-events": "*"
+ },
+ "peerDependenciesMeta": {
+ "bare-buffer": {
+ "optional": true
+ },
+ "bare-events": {
+ "optional": true
+ }
}
},
- "node_modules/call-bind": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
- "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
"dev": true,
- "dependencies": {
- "es-define-property": "^1.0.0",
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.4",
- "set-function-length": "^1.2.1"
- },
+ "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/basic-ftp": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.2.2.tgz",
+ "integrity": "sha512-1tDrzKsdCg70WGvbFss/ulVAxupNauGnOlgpyjKzeQxzyllBLS0CGLV7tjIXTK3ZQA9/FBEm9qyFFN1bciA6pw==",
+ "dev": true,
+ "license": "MIT",
"engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node": ">=10.0.0"
}
},
- "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==",
+ "node_modules/before-after-hook": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz",
+ "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==",
+ "license": "Apache-2.0"
+ },
+ "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==",
"license": "MIT",
"dependencies": {
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2"
+ "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"
},
"engines": {
- "node": ">= 0.4"
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
}
},
- "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==",
+ "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==",
"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"
+ "ms": "2.0.0"
}
},
- "node_modules/callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true,
+ "node_modules/body-parser/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==",
+ "license": "MIT",
"engines": {
- "node": ">=6"
+ "node": ">= 0.8"
}
},
- "node_modules/camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "dev": true,
+ "node_modules/body-parser/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==",
+ "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": ">=10"
+ "node": ">= 0.8"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
}
},
- "node_modules/chai": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.0.tgz",
- "integrity": "sha512-kDZ7MZyM6Q1DhR9jy7dalKohXQ2yrlXkk59CR52aRKxJrobmlBNqnFQxX9xOX8w+4mz8SYlKJa/7D7ddltFXCw==",
- "dev": true,
+ "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==",
+ "license": "MIT"
+ },
+ "node_modules/body-parser/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==",
+ "license": "MIT",
"dependencies": {
- "assertion-error": "^2.0.1",
- "check-error": "^2.0.0",
- "deep-eql": "^5.0.1",
- "loupe": "^3.1.0",
- "pathval": "^2.0.0"
+ "bytes": "~3.1.2",
+ "http-errors": "~2.0.1",
+ "iconv-lite": "~0.4.24",
+ "unpipe": "~1.0.0"
},
"engines": {
- "node": ">=12"
+ "node": ">= 0.8"
}
},
- "node_modules/chai/node_modules/assertion-error": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz",
- "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==",
- "dev": true,
+ "node_modules/body-parser/node_modules/statuses": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
+ "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
+ "license": "MIT",
"engines": {
- "node": ">=12"
+ "node": ">= 0.8"
}
},
- "node_modules/chai/node_modules/deep-eql": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.1.tgz",
- "integrity": "sha512-nwQCf6ne2gez3o1MxWifqkciwt0zhl0LO1/UwVu4uMBuPmflWM4oQ70XMqHqnBJA+nhzncaqL9HVL6KkHJ28lw==",
+ "node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
"dev": true,
- "engines": {
- "node": ">=6"
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
}
},
- "node_modules/chai/node_modules/pathval": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz",
- "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==",
+ "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==",
"dev": true,
- "engines": {
- "node": ">= 14.16"
- }
- },
- "node_modules/chalk": {
- "version": "4.1.2",
- "license": "MIT",
"dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "fill-range": "^7.1.1"
},
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "node": ">=8"
}
},
- "node_modules/chalk-template": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz",
- "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==",
+ "node_modules/browser-stdout": {
+ "version": "1.3.1",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
"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",
"dependencies": {
- "chalk": "^4.1.2"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk-template?sponsor=1"
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
}
},
- "node_modules/check-error": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz",
- "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==",
+ "node_modules/buffer-crc32": {
+ "version": "0.2.13",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">= 16"
- }
- },
- "node_modules/check-markdown": {
- "resolved": "resources/tools/check-markdown",
- "link": true
- },
- "node_modules/chownr": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
- "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
+ "node": "*"
}
},
- "node_modules/chrome-launcher": {
- "version": "0.15.2",
- "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz",
- "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==",
- "dev": true,
- "dependencies": {
- "@types/node": "*",
- "escape-string-regexp": "^4.0.0",
- "is-wsl": "^2.2.0",
- "lighthouse-logger": "^1.0.0"
- },
- "bin": {
- "print-chrome-path": "bin/print-chrome-path.js"
- },
- "engines": {
- "node": ">=12.13.0"
- }
+ "node_modules/buffer-from": {
+ "version": "1.1.1",
+ "license": "MIT"
},
- "node_modules/chrome-launcher/node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "node_modules/builtin-modules": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
+ "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
"dev": true,
"engines": {
- "node": ">=10"
+ "node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/chromium-bidi": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.6.3.tgz",
- "integrity": "sha512-qXlsCmpCZJAnoTYI83Iu6EdYQpMYdVkCfq08KDh2pmlVqK5t5IA9mGs4/LwCwp4fqisSOMXZxP3HIh8w8aRn0A==",
+ "node_modules/builtins": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz",
+ "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==",
"dev": true,
- "license": "Apache-2.0",
"dependencies": {
- "mitt": "3.0.1",
- "urlpattern-polyfill": "10.0.0",
- "zod": "3.23.8"
- },
- "peerDependencies": {
- "devtools-protocol": "*"
+ "semver": "^7.0.0"
}
},
- "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,
+ "node_modules/busboy": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
+ "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
+ "dependencies": {
+ "streamsearch": "^1.1.0"
+ },
"engines": {
- "node": ">=6"
+ "node": ">=10.16.0"
}
},
- "node_modules/cli-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
- "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
- "dev": true,
- "dependencies": {
- "restore-cursor": "^3.1.0"
- },
+ "node_modules/bytes": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
"engines": {
- "node": ">=8"
+ "node": ">= 0.8"
}
},
- "node_modules/cliui": {
- "version": "7.0.4",
+ "node_modules/c8": {
+ "version": "7.12.0",
"dev": true,
"license": "ISC",
"dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "node_modules/cliui/node_modules/ansi-regex": {
- "version": "5.0.1",
- "dev": true,
- "license": "MIT",
+ "@bcoe/v8-coverage": "^0.2.3",
+ "@istanbuljs/schema": "^0.1.3",
+ "find-up": "^5.0.0",
+ "foreground-child": "^2.0.0",
+ "istanbul-lib-coverage": "^3.2.0",
+ "istanbul-lib-report": "^3.0.0",
+ "istanbul-reports": "^3.1.4",
+ "rimraf": "^3.0.2",
+ "test-exclude": "^6.0.0",
+ "v8-to-istanbul": "^9.0.0",
+ "yargs": "^16.2.0",
+ "yargs-parser": "^20.2.9"
+ },
+ "bin": {
+ "c8": "bin/c8.js"
+ },
"engines": {
- "node": ">=8"
+ "node": ">=10.12.0"
}
},
- "node_modules/cliui/node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
+ "node_modules/c8/node_modules/yargs-parser": {
+ "version": "20.2.9",
"dev": true,
- "license": "MIT",
+ "license": "ISC",
"engines": {
- "node": ">=8"
+ "node": ">=10"
}
},
- "node_modules/cliui/node_modules/string-width": {
- "version": "4.2.2",
+ "node_modules/cacache": {
+ "version": "18.0.4",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz",
+ "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
+ "@npmcli/fs": "^3.1.0",
+ "fs-minipass": "^3.0.0",
+ "glob": "^10.2.2",
+ "lru-cache": "^10.0.1",
+ "minipass": "^7.0.3",
+ "minipass-collect": "^2.0.1",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.4",
+ "p-map": "^4.0.0",
+ "ssri": "^10.0.0",
+ "tar": "^6.1.11",
+ "unique-filename": "^3.0.0"
},
"engines": {
- "node": ">=8"
+ "node": "^16.14.0 || >=18.0.0"
}
},
- "node_modules/cliui/node_modules/strip-ansi": {
- "version": "6.0.0",
+ "node_modules/cacache/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "ansi-regex": "^5.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/clone": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
- "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
- "dev": true,
- "engines": {
- "node": ">=0.8"
+ "balanced-match": "^1.0.0"
}
},
- "node_modules/co": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
+ "node_modules/cacache/node_modules/foreground-child": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz",
+ "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==",
"dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.0",
+ "signal-exit": "^4.0.1"
+ },
"engines": {
- "iojs": ">= 1.0.0",
- "node": ">= 0.12.0"
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/co-body": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/co-body/-/co-body-6.1.0.tgz",
- "integrity": "sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ==",
+ "node_modules/cacache/node_modules/glob": {
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
"dev": true,
"dependencies": {
- "inflation": "^2.0.0",
- "qs": "^6.5.2",
- "raw-body": "^2.3.3",
- "type-is": "^1.6.16"
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/color-convert": {
- "version": "2.0.1",
- "license": "MIT",
+ "node_modules/cacache/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true
+ },
+ "node_modules/cacache/node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
"dependencies": {
- "color-name": "~1.1.4"
+ "brace-expansion": "^2.0.1"
},
"engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "license": "MIT"
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
},
- "node_modules/combine-source-map": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz",
- "integrity": "sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg==",
+ "node_modules/cacache/node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
"dev": true,
- "dependencies": {
- "convert-source-map": "~1.1.0",
- "inline-source-map": "~0.6.0",
- "lodash.memoize": "~3.0.3",
- "source-map": "~0.5.3"
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/combine-source-map/node_modules/convert-source-map": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz",
- "integrity": "sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==",
- "dev": true
- },
- "node_modules/combine-source-map/node_modules/source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
+ "node_modules/cache-content-type": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz",
+ "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==",
"dev": true,
+ "dependencies": {
+ "mime-types": "^2.1.18",
+ "ylru": "^1.2.0"
+ },
"engines": {
- "node": ">=0.10.0"
+ "node": ">= 6.0.0"
}
},
- "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==",
+ "node_modules/call-bind": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
"dev": true,
"dependencies": {
- "delayed-stream": "~1.0.0"
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
},
"engines": {
- "node": ">= 0.8"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/command-line-args": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz",
- "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==",
- "dev": true,
+ "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==",
+ "license": "MIT",
"dependencies": {
- "array-back": "^3.1.0",
- "find-replace": "^3.0.0",
- "lodash.camelcase": "^4.3.0",
- "typical": "^4.0.0"
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
},
"engines": {
- "node": ">=4.0.0"
+ "node": ">= 0.4"
}
},
- "node_modules/command-line-usage": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.1.tgz",
- "integrity": "sha512-NCyznE//MuTjwi3y84QVUGEOT+P5oto1e1Pk/jFPVdPPfsG03qpTIl3yw6etR+v73d0lXsoojRpvbru2sqePxQ==",
- "dev": true,
+ "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==",
+ "license": "MIT",
"dependencies": {
- "array-back": "^6.2.2",
- "chalk-template": "^0.4.0",
- "table-layout": "^3.0.0",
- "typical": "^7.1.1"
+ "call-bind-apply-helpers": "^1.0.2",
+ "get-intrinsic": "^1.3.0"
},
"engines": {
- "node": ">=12.20.0"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/command-line-usage/node_modules/array-back": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz",
- "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==",
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
"dev": true,
"engines": {
- "node": ">=12.17"
+ "node": ">=6"
}
},
- "node_modules/command-line-usage/node_modules/typical": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz",
- "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==",
+ "node_modules/camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
"dev": true,
"engines": {
- "node": ">=12.17"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/commander": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
- "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
+ "node_modules/chai": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.0.tgz",
+ "integrity": "sha512-kDZ7MZyM6Q1DhR9jy7dalKohXQ2yrlXkk59CR52aRKxJrobmlBNqnFQxX9xOX8w+4mz8SYlKJa/7D7ddltFXCw==",
+ "dev": true,
+ "dependencies": {
+ "assertion-error": "^2.0.1",
+ "check-error": "^2.0.0",
+ "deep-eql": "^5.0.1",
+ "loupe": "^3.1.0",
+ "pathval": "^2.0.0"
+ },
"engines": {
- "node": ">=14"
+ "node": ">=12"
}
},
- "node_modules/common-tags": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz",
- "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==",
+ "node_modules/chai/node_modules/assertion-error": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz",
+ "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==",
"dev": true,
- "license": "MIT",
"engines": {
- "node": ">=4.0.0"
+ "node": ">=12"
}
},
- "node_modules/concat-map": {
- "version": "0.0.1",
+ "node_modules/chai/node_modules/deep-eql": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.1.tgz",
+ "integrity": "sha512-nwQCf6ne2gez3o1MxWifqkciwt0zhl0LO1/UwVu4uMBuPmflWM4oQ70XMqHqnBJA+nhzncaqL9HVL6KkHJ28lw==",
"dev": true,
- "license": "MIT"
+ "engines": {
+ "node": ">=6"
+ }
},
- "node_modules/concat-stream": {
+ "node_modules/chai/node_modules/pathval": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz",
- "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==",
- "engines": [
- "node >= 6.0"
- ],
- "license": "MIT",
- "dependencies": {
- "buffer-from": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^3.0.2",
- "typedarray": "^0.0.6"
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz",
+ "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 14.16"
}
},
- "node_modules/concat-stream/node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "node_modules/chalk": {
+ "version": "4.1.2",
"license": "MIT",
"dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
},
"engines": {
- "node": ">= 6"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/content-disposition": {
- "version": "0.5.4",
- "license": "MIT",
+ "node_modules/chalk-template": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz",
+ "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==",
+ "dev": true,
"dependencies": {
- "safe-buffer": "5.2.1"
+ "chalk": "^4.1.2"
},
"engines": {
- "node": ">= 0.6"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk-template?sponsor=1"
}
},
- "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==",
+ "node_modules/check-error": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz",
+ "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==",
+ "dev": true,
+ "license": "MIT",
"engines": {
- "node": ">= 0.6"
+ "node": ">= 16"
}
},
- "node_modules/convert-source-map": {
- "version": "1.9.0",
- "dev": true,
- "license": "MIT"
+ "node_modules/check-markdown": {
+ "resolved": "resources/tools/check-markdown",
+ "link": true
},
- "node_modules/cookie": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
- "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
- "license": "MIT",
+ "node_modules/chownr": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+ "dev": true,
"engines": {
- "node": ">= 0.6"
+ "node": ">=10"
}
},
- "node_modules/cookie-signature": {
- "version": "1.0.6",
- "license": "MIT"
- },
- "node_modules/cookies": {
- "version": "0.9.1",
- "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.9.1.tgz",
- "integrity": "sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==",
+ "node_modules/chrome-launcher": {
+ "version": "0.15.2",
+ "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz",
+ "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==",
"dev": true,
"dependencies": {
- "depd": "~2.0.0",
- "keygrip": "~1.1.0"
+ "@types/node": "*",
+ "escape-string-regexp": "^4.0.0",
+ "is-wsl": "^2.2.0",
+ "lighthouse-logger": "^1.0.0"
+ },
+ "bin": {
+ "print-chrome-path": "bin/print-chrome-path.js"
},
"engines": {
- "node": ">= 0.8"
+ "node": ">=12.13.0"
}
},
- "node_modules/cookies/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==",
+ "node_modules/chrome-launcher/node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
"dev": true,
"engines": {
- "node": ">= 0.8"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/copyfiles": {
- "version": "2.4.1",
+ "node_modules/chromium-bidi": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.6.3.tgz",
+ "integrity": "sha512-qXlsCmpCZJAnoTYI83Iu6EdYQpMYdVkCfq08KDh2pmlVqK5t5IA9mGs4/LwCwp4fqisSOMXZxP3HIh8w8aRn0A==",
"dev": true,
- "license": "MIT",
+ "license": "Apache-2.0",
"dependencies": {
- "glob": "^7.0.5",
- "minimatch": "^3.0.3",
- "mkdirp": "^1.0.4",
- "noms": "0.0.0",
- "through2": "^2.0.1",
- "untildify": "^4.0.0",
- "yargs": "^16.1.0"
+ "mitt": "3.0.1",
+ "urlpattern-polyfill": "10.0.0",
+ "zod": "3.23.8"
},
- "bin": {
- "copyfiles": "copyfiles",
- "copyup": "copyfiles"
+ "peerDependencies": {
+ "devtools-protocol": "*"
}
},
- "node_modules/copyfiles/node_modules/mkdirp": {
- "version": "1.0.4",
+ "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",
- "bin": {
- "mkdirp": "bin/cmd.js"
- },
"engines": {
- "node": ">=10"
- }
- },
- "node_modules/core-js": {
- "version": "3.34.0",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.34.0.tgz",
- "integrity": "sha512-aDdvlDder8QmY91H88GzNi9EtQi2TjvQhpCX6B1v/dAZHU1AuLgHvRh54RiOerpEhEW46Tkf+vgAViB/CWC0ag==",
- "hasInstallScript": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/core-js"
+ "node": ">=6"
}
},
- "node_modules/core-util-is": {
- "version": "1.0.3",
- "license": "MIT"
- },
- "node_modules/cross-spawn": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
- "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "node_modules/cli-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
"dev": true,
"dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
+ "restore-cursor": "^3.1.0"
},
"engines": {
- "node": ">= 8"
+ "node": ">=8"
}
},
- "node_modules/cssstyle": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz",
- "integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==",
+ "node_modules/cliui": {
+ "version": "7.0.4",
"dev": true,
+ "license": "ISC",
"dependencies": {
- "rrweb-cssom": "^0.6.0"
- },
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "node_modules/cliui/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=14"
+ "node": ">=8"
}
},
- "node_modules/data-uri-to-buffer": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz",
- "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==",
+ "node_modules/cliui/node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">= 14"
+ "node": ">=8"
}
},
- "node_modules/data-urls": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
- "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==",
+ "node_modules/cliui/node_modules/string-width": {
+ "version": "4.2.2",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "whatwg-mimetype": "^4.0.0",
- "whatwg-url": "^14.0.0"
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
},
"engines": {
- "node": ">=18"
+ "node": ">=8"
}
},
- "node_modules/data-urls/node_modules/tr46": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz",
- "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==",
+ "node_modules/cliui/node_modules/strip-ansi": {
+ "version": "6.0.0",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "punycode": "^2.3.1"
+ "ansi-regex": "^5.0.0"
},
"engines": {
- "node": ">=18"
+ "node": ">=8"
}
},
- "node_modules/data-urls/node_modules/webidl-conversions": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
- "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
+ "node_modules/clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
"dev": true,
"engines": {
- "node": ">=12"
+ "node": ">=0.8"
}
},
- "node_modules/data-urls/node_modules/whatwg-url": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz",
- "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==",
+ "node_modules/co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
"dev": true,
- "dependencies": {
- "tr46": "^5.0.0",
- "webidl-conversions": "^7.0.0"
- },
"engines": {
- "node": ">=18"
+ "iojs": ">= 1.0.0",
+ "node": ">= 0.12.0"
}
},
- "node_modules/debounce": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz",
- "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==",
- "dev": true
- },
- "node_modules/debug": {
- "version": "4.3.1",
+ "node_modules/co-body": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/co-body/-/co-body-6.1.0.tgz",
+ "integrity": "sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ==",
"dev": true,
+ "dependencies": {
+ "inflation": "^2.0.0",
+ "qs": "^6.5.2",
+ "raw-body": "^2.3.3",
+ "type-is": "^1.6.16"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
"license": "MIT",
"dependencies": {
- "ms": "2.1.2"
+ "color-name": "~1.1.4"
},
"engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
+ "node": ">=7.0.0"
}
},
- "node_modules/decimal.js": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
- "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==",
- "dev": true
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "license": "MIT"
},
- "node_modules/deep-equal": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
- "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==",
- "dev": true
+ "node_modules/combine-source-map": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz",
+ "integrity": "sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg==",
+ "dev": true,
+ "dependencies": {
+ "convert-source-map": "~1.1.0",
+ "inline-source-map": "~0.6.0",
+ "lodash.memoize": "~3.0.3",
+ "source-map": "~0.5.3"
+ }
},
- "node_modules/deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "node_modules/combine-source-map/node_modules/convert-source-map": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz",
+ "integrity": "sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==",
"dev": true
},
- "node_modules/deepmerge": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
- "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+ "node_modules/combine-source-map/node_modules/source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
- "node_modules/default-gateway": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz",
- "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==",
+ "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": "BSD-2-Clause",
"dependencies": {
- "execa": "^5.0.0"
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/command-line-args": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz",
+ "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==",
+ "dev": true,
+ "dependencies": {
+ "array-back": "^3.1.0",
+ "find-replace": "^3.0.0",
+ "lodash.camelcase": "^4.3.0",
+ "typical": "^4.0.0"
},
"engines": {
- "node": ">= 10"
+ "node": ">=4.0.0"
}
},
- "node_modules/default-gateway/node_modules/execa": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
- "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+ "node_modules/command-line-usage": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.1.tgz",
+ "integrity": "sha512-NCyznE//MuTjwi3y84QVUGEOT+P5oto1e1Pk/jFPVdPPfsG03qpTIl3yw6etR+v73d0lXsoojRpvbru2sqePxQ==",
"dev": true,
- "license": "MIT",
"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"
+ "array-back": "^6.2.2",
+ "chalk-template": "^0.4.0",
+ "table-layout": "^3.0.0",
+ "typical": "^7.1.1"
},
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ "node": ">=12.20.0"
}
},
- "node_modules/default-gateway/node_modules/get-stream": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "node_modules/command-line-usage/node_modules/array-back": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz",
+ "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==",
"dev": true,
- "license": "MIT",
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=12.17"
}
},
- "node_modules/default-gateway/node_modules/is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "node_modules/command-line-usage/node_modules/typical": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz",
+ "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==",
"dev": true,
- "license": "MIT",
"engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=12.17"
}
},
- "node_modules/default-gateway/node_modules/npm-run-path": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "path-key": "^3.0.0"
- },
+ "node_modules/commander": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
+ "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
"engines": {
- "node": ">=8"
+ "node": ">=14"
}
},
- "node_modules/define-data-property": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
- "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+ "node_modules/common-tags": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz",
+ "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==",
"dev": true,
- "dependencies": {
- "es-define-property": "^1.0.0",
- "es-errors": "^1.3.0",
- "gopd": "^1.0.1"
- },
+ "license": "MIT",
"engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node": ">=4.0.0"
}
},
- "node_modules/define-lazy-prop": {
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/concat-stream": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz",
+ "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==",
+ "engines": [
+ "node >= 6.0"
+ ],
"license": "MIT",
- "engines": {
- "node": ">=8"
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.0.2",
+ "typedarray": "^0.0.6"
}
},
- "node_modules/define-properties": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
- "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
- "dev": true,
+ "node_modules/concat-stream/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "license": "MIT",
"dependencies": {
- "has-property-descriptors": "^1.0.0",
- "object-keys": "^1.1.1"
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
},
"engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node": ">= 6"
}
},
- "node_modules/degenerator": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz",
- "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==",
- "dev": true,
+ "node_modules/content-disposition": {
+ "version": "0.5.4",
"license": "MIT",
"dependencies": {
- "ast-types": "^0.13.4",
- "escodegen": "^2.1.0",
- "esprima": "^4.0.1"
+ "safe-buffer": "5.2.1"
},
"engines": {
- "node": ">= 14"
+ "node": ">= 0.6"
}
},
- "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/content-type": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
"engines": {
- "node": ">=0.4.0"
+ "node": ">= 0.6"
}
},
- "node_modules/delegates": {
- "version": "1.0.0",
+ "node_modules/convert-source-map": {
+ "version": "1.9.0",
"dev": true,
"license": "MIT"
},
- "node_modules/depd": {
- "version": "1.1.2",
- "dev": true,
+ "node_modules/cookie": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
+ "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
- "node_modules/dependency-graph": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz",
- "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==",
+ "node_modules/cookie-signature": {
+ "version": "1.0.6",
+ "license": "MIT"
+ },
+ "node_modules/cookies": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.9.1.tgz",
+ "integrity": "sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==",
"dev": true,
+ "dependencies": {
+ "depd": "~2.0.0",
+ "keygrip": "~1.1.0"
+ },
"engines": {
- "node": ">= 0.6.0"
+ "node": ">= 0.8"
}
},
- "node_modules/deprecation": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
- "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==",
- "license": "ISC"
- },
- "node_modules/destroy": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
- "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+ "node_modules/cookies/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,
"engines": {
- "node": ">= 0.8",
- "npm": "1.2.8000 || >= 1.4.16"
+ "node": ">= 0.8"
}
},
- "node_modules/devtools-protocol": {
- "version": "0.0.1312386",
- "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1312386.tgz",
- "integrity": "sha512-DPnhUXvmvKT2dFA/j7B+riVLUt9Q6RKJlcppojL5CoRywJJKLDYnRlw0gTFKfgDPHP5E04UoB71SxoJlVZy8FA==",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/diff": {
- "version": "5.0.0",
+ "node_modules/copyfiles": {
+ "version": "2.4.1",
"dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.3.1"
+ "license": "MIT",
+ "dependencies": {
+ "glob": "^7.0.5",
+ "minimatch": "^3.0.3",
+ "mkdirp": "^1.0.4",
+ "noms": "0.0.0",
+ "through2": "^2.0.1",
+ "untildify": "^4.0.0",
+ "yargs": "^16.1.0"
+ },
+ "bin": {
+ "copyfiles": "copyfiles",
+ "copyup": "copyfiles"
}
},
- "node_modules/dir-glob": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "node_modules/copyfiles/node_modules/mkdirp": {
+ "version": "1.0.4",
"dev": true,
- "dependencies": {
- "path-type": "^4.0.0"
+ "license": "MIT",
+ "bin": {
+ "mkdirp": "bin/cmd.js"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
}
},
- "node_modules/doctrine": {
- "version": "3.0.0",
+ "node_modules/core-js": {
+ "version": "3.34.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.34.0.tgz",
+ "integrity": "sha512-aDdvlDder8QmY91H88GzNi9EtQi2TjvQhpCX6B1v/dAZHU1AuLgHvRh54RiOerpEhEW46Tkf+vgAViB/CWC0ag==",
+ "hasInstallScript": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/core-js"
+ }
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.3",
+ "license": "MIT"
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dev": true,
- "license": "Apache-2.0",
"dependencies": {
- "esutils": "^2.0.2"
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
},
"engines": {
- "node": ">=6.0.0"
+ "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==",
- "license": "MIT",
+ "node_modules/cssstyle": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz",
+ "integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==",
+ "dev": true,
"dependencies": {
- "call-bind-apply-helpers": "^1.0.1",
- "es-errors": "^1.3.0",
- "gopd": "^1.2.0"
+ "rrweb-cssom": "^0.6.0"
},
"engines": {
- "node": ">= 0.4"
+ "node": ">=14"
}
},
- "node_modules/duplexer": {
- "version": "0.1.2",
+ "node_modules/data-uri-to-buffer": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz",
+ "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==",
"dev": true,
- "license": "MIT"
- },
- "node_modules/eastasianwidth": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
- "dev": true
- },
- "node_modules/ee-first": {
- "version": "1.1.1",
- "license": "MIT"
- },
- "node_modules/emoji-regex": {
- "version": "8.0.0",
- "license": "MIT"
- },
- "node_modules/encodeurl": {
- "version": "1.0.2",
"license": "MIT",
"engines": {
- "node": ">= 0.8"
+ "node": ">= 14"
}
},
- "node_modules/encoding": {
- "version": "0.1.13",
+ "node_modules/data-urls": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
+ "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==",
"dev": true,
- "license": "MIT",
- "optional": true,
"dependencies": {
- "iconv-lite": "^0.6.2"
+ "whatwg-mimetype": "^4.0.0",
+ "whatwg-url": "^14.0.0"
+ },
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/encoding/node_modules/iconv-lite": {
- "version": "0.6.3",
+ "node_modules/data-urls/node_modules/tr46": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz",
+ "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==",
"dev": true,
- "license": "MIT",
- "optional": true,
"dependencies": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
+ "punycode": "^2.3.1"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">=18"
}
},
- "node_modules/end-of-stream": {
- "version": "1.4.4",
+ "node_modules/data-urls/node_modules/webidl-conversions": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
+ "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "once": "^1.4.0"
+ "engines": {
+ "node": ">=12"
}
},
- "node_modules/enhanced-resolve": {
- "version": "5.17.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz",
- "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==",
+ "node_modules/data-urls/node_modules/whatwg-url": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz",
+ "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==",
"dev": true,
"dependencies": {
- "graceful-fs": "^4.2.4",
- "tapable": "^2.2.0"
+ "tr46": "^5.0.0",
+ "webidl-conversions": "^7.0.0"
},
"engines": {
- "node": ">=10.13.0"
+ "node": ">=18"
}
},
- "node_modules/env-paths": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
- "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
+ "node_modules/debounce": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz",
+ "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==",
+ "dev": true
+ },
+ "node_modules/debug": {
+ "version": "4.3.1",
"dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
"engines": {
- "node": ">=6"
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
}
},
- "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==",
+ "node_modules/decimal.js": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
+ "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==",
"dev": true
},
- "node_modules/errorstacks": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/errorstacks/-/errorstacks-2.4.1.tgz",
- "integrity": "sha512-jE4i0SMYevwu/xxAuzhly/KTwtj0xDhbzB6m1xPImxTkw8wcCbgarOQPfCVMi5JKVyW7in29pNJCCJrry3Ynnw==",
+ "node_modules/deep-equal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
+ "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==",
"dev": true
},
- "node_modules/es-abstract": {
- "version": "1.21.2",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz",
- "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==",
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "node_modules/deepmerge": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/default-gateway": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz",
+ "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
- "array-buffer-byte-length": "^1.0.0",
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.2",
- "es-set-tostringtag": "^2.0.1",
- "es-to-primitive": "^1.2.1",
- "function.prototype.name": "^1.1.5",
- "get-intrinsic": "^1.2.0",
- "get-symbol-description": "^1.0.0",
- "globalthis": "^1.0.3",
- "gopd": "^1.0.1",
- "has": "^1.0.3",
- "has-property-descriptors": "^1.0.0",
- "has-proto": "^1.0.1",
- "has-symbols": "^1.0.3",
- "internal-slot": "^1.0.5",
- "is-array-buffer": "^3.0.2",
- "is-callable": "^1.2.7",
- "is-negative-zero": "^2.0.2",
- "is-regex": "^1.1.4",
- "is-shared-array-buffer": "^1.0.2",
- "is-string": "^1.0.7",
- "is-typed-array": "^1.1.10",
- "is-weakref": "^1.0.2",
- "object-inspect": "^1.12.3",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.4",
- "regexp.prototype.flags": "^1.4.3",
- "safe-regex-test": "^1.0.0",
- "string.prototype.trim": "^1.2.7",
- "string.prototype.trimend": "^1.0.6",
- "string.prototype.trimstart": "^1.0.6",
- "typed-array-length": "^1.0.4",
- "unbox-primitive": "^1.0.2",
- "which-typed-array": "^1.1.9"
+ "execa": "^5.0.0"
},
"engines": {
- "node": ">= 0.4"
+ "node": ">= 10"
+ }
+ },
+ "node_modules/default-gateway/node_modules/execa": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.0",
+ "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"
+ },
+ "engines": {
+ "node": ">=10"
},
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "url": "https://github.com/sindresorhus/execa?sponsor=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==",
+ "node_modules/default-gateway/node_modules/get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true,
"license": "MIT",
"engines": {
- "node": ">= 0.4"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/es-errors": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
- "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "node_modules/default-gateway/node_modules/is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "dev": true,
+ "license": "MIT",
"engines": {
- "node": ">= 0.4"
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/es-module-lexer": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.0.tgz",
- "integrity": "sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==",
- "dev": true
- },
- "node_modules/es-object-atoms": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
- "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+ "node_modules/default-gateway/node_modules/npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "es-errors": "^1.3.0"
+ "path-key": "^3.0.0"
},
"engines": {
- "node": ">= 0.4"
+ "node": ">=8"
}
},
- "node_modules/es-set-tostringtag": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
- "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
"dev": true,
- "license": "MIT",
"dependencies": {
+ "es-define-property": "^1.0.0",
"es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6",
- "has-tostringtag": "^1.0.2",
- "hasown": "^2.0.2"
+ "gopd": "^1.0.1"
},
"engines": {
"node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/es-shim-unscopables": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
- "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
- "dev": true,
- "dependencies": {
- "has": "^1.0.3"
+ "node_modules/define-lazy-prop": {
+ "version": "2.0.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/es-to-primitive": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
- "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "node_modules/define-properties": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
+ "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
"dev": true,
"dependencies": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
},
"engines": {
"node": ">= 0.4"
@@ -6678,457 +7260,377 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/es6-shim": {
- "version": "0.35.6",
- "license": "MIT"
- },
- "node_modules/esbuild": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz",
- "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==",
+ "node_modules/degenerator": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz",
+ "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==",
"dev": true,
- "hasInstallScript": true,
"license": "MIT",
- "bin": {
- "esbuild": "bin/esbuild"
- },
- "engines": {
- "node": ">=18"
+ "dependencies": {
+ "ast-types": "^0.13.4",
+ "escodegen": "^2.1.0",
+ "esprima": "^4.0.1"
},
- "optionalDependencies": {
- "@esbuild/aix-ppc64": "0.25.0",
- "@esbuild/android-arm": "0.25.0",
- "@esbuild/android-arm64": "0.25.0",
- "@esbuild/android-x64": "0.25.0",
- "@esbuild/darwin-arm64": "0.25.0",
- "@esbuild/darwin-x64": "0.25.0",
- "@esbuild/freebsd-arm64": "0.25.0",
- "@esbuild/freebsd-x64": "0.25.0",
- "@esbuild/linux-arm": "0.25.0",
- "@esbuild/linux-arm64": "0.25.0",
- "@esbuild/linux-ia32": "0.25.0",
- "@esbuild/linux-loong64": "0.25.0",
- "@esbuild/linux-mips64el": "0.25.0",
- "@esbuild/linux-ppc64": "0.25.0",
- "@esbuild/linux-riscv64": "0.25.0",
- "@esbuild/linux-s390x": "0.25.0",
- "@esbuild/linux-x64": "0.25.0",
- "@esbuild/netbsd-arm64": "0.25.0",
- "@esbuild/netbsd-x64": "0.25.0",
- "@esbuild/openbsd-arm64": "0.25.0",
- "@esbuild/openbsd-x64": "0.25.0",
- "@esbuild/sunos-x64": "0.25.0",
- "@esbuild/win32-arm64": "0.25.0",
- "@esbuild/win32-ia32": "0.25.0",
- "@esbuild/win32-x64": "0.25.0"
- }
- },
- "node_modules/esbuild/node_modules/@esbuild/aix-ppc64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz",
- "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "aix"
- ],
"engines": {
- "node": ">=18"
+ "node": ">= 14"
}
},
- "node_modules/esbuild/node_modules/@esbuild/android-arm": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz",
- "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==",
- "cpu": [
- "arm"
- ],
+ "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,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
"engines": {
- "node": ">=18"
+ "node": ">=0.4.0"
}
},
- "node_modules/esbuild/node_modules/@esbuild/android-arm64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz",
- "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==",
- "cpu": [
- "arm64"
- ],
+ "node_modules/delegates": {
+ "version": "1.0.0",
"dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
+ "license": "MIT"
},
- "node_modules/esbuild/node_modules/@esbuild/android-x64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz",
- "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==",
- "cpu": [
- "x64"
- ],
+ "node_modules/depd": {
+ "version": "1.1.2",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
"engines": {
- "node": ">=18"
+ "node": ">= 0.6"
}
},
- "node_modules/esbuild/node_modules/@esbuild/darwin-arm64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz",
- "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==",
- "cpu": [
- "arm64"
- ],
+ "node_modules/dependency-graph": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz",
+ "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==",
"dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
"engines": {
- "node": ">=18"
+ "node": ">= 0.6.0"
}
},
- "node_modules/esbuild/node_modules/@esbuild/darwin-x64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz",
- "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
+ "node_modules/deprecation": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
+ "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==",
+ "license": "ISC"
+ },
+ "node_modules/destroy": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
"engines": {
- "node": ">=18"
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
}
},
- "node_modules/esbuild/node_modules/@esbuild/freebsd-arm64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz",
- "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==",
- "cpu": [
- "arm64"
- ],
+ "node_modules/devtools-protocol": {
+ "version": "0.0.1312386",
+ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1312386.tgz",
+ "integrity": "sha512-DPnhUXvmvKT2dFA/j7B+riVLUt9Q6RKJlcppojL5CoRywJJKLDYnRlw0gTFKfgDPHP5E04UoB71SxoJlVZy8FA==",
"dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/diff": {
+ "version": "5.0.0",
+ "dev": true,
+ "license": "BSD-3-Clause",
"engines": {
- "node": ">=18"
+ "node": ">=0.3.1"
}
},
- "node_modules/esbuild/node_modules/@esbuild/freebsd-x64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz",
- "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==",
- "cpu": [
- "x64"
- ],
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
"dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=8"
}
},
- "node_modules/esbuild/node_modules/@esbuild/linux-arm": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz",
- "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==",
- "cpu": [
- "arm"
- ],
+ "node_modules/doctrine": {
+ "version": "3.0.0",
"dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
+ "license": "Apache-2.0",
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.0.0"
}
},
- "node_modules/esbuild/node_modules/@esbuild/linux-arm64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz",
- "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
+ "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==",
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ },
"engines": {
- "node": ">=18"
+ "node": ">= 0.4"
}
},
- "node_modules/esbuild/node_modules/@esbuild/linux-ia32": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz",
- "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
+ "node_modules/duplexer": {
+ "version": "0.1.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "dev": true
+ },
+ "node_modules/ee-first": {
+ "version": "1.1.1",
+ "license": "MIT"
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "license": "MIT"
+ },
+ "node_modules/encodeurl": {
+ "version": "1.0.2",
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
"engines": {
- "node": ">=18"
+ "node": ">= 0.8"
}
},
- "node_modules/esbuild/node_modules/@esbuild/linux-loong64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz",
- "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==",
- "cpu": [
- "loong64"
- ],
+ "node_modules/encoding": {
+ "version": "0.1.13",
"dev": true,
"license": "MIT",
"optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
+ "dependencies": {
+ "iconv-lite": "^0.6.2"
}
},
- "node_modules/esbuild/node_modules/@esbuild/linux-mips64el": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz",
- "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==",
- "cpu": [
- "mips64el"
- ],
+ "node_modules/encoding/node_modules/iconv-lite": {
+ "version": "0.6.3",
"dev": true,
"license": "MIT",
"optional": true,
- "os": [
- "linux"
- ],
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=0.10.0"
}
},
- "node_modules/esbuild/node_modules/@esbuild/linux-ppc64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz",
- "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==",
- "cpu": [
- "ppc64"
- ],
+ "node_modules/end-of-stream": {
+ "version": "1.4.4",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
+ "dependencies": {
+ "once": "^1.4.0"
}
},
- "node_modules/esbuild/node_modules/@esbuild/linux-riscv64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz",
- "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==",
- "cpu": [
- "riscv64"
- ],
+ "node_modules/enhanced-resolve": {
+ "version": "5.17.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz",
+ "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==",
"dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=10.13.0"
}
},
- "node_modules/esbuild/node_modules/@esbuild/linux-s390x": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz",
- "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==",
- "cpu": [
- "s390x"
- ],
+ "node_modules/env-paths": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
+ "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
"dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
"engines": {
- "node": ">=18"
+ "node": ">=6"
}
},
- "node_modules/esbuild/node_modules/@esbuild/linux-x64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz",
- "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==",
- "cpu": [
- "x64"
- ],
+ "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
+ },
+ "node_modules/errorstacks": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/errorstacks/-/errorstacks-2.4.1.tgz",
+ "integrity": "sha512-jE4i0SMYevwu/xxAuzhly/KTwtj0xDhbzB6m1xPImxTkw8wcCbgarOQPfCVMi5JKVyW7in29pNJCCJrry3Ynnw==",
+ "dev": true
+ },
+ "node_modules/es-abstract": {
+ "version": "1.21.2",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz",
+ "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==",
"dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.0",
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "es-set-tostringtag": "^2.0.1",
+ "es-to-primitive": "^1.2.1",
+ "function.prototype.name": "^1.1.5",
+ "get-intrinsic": "^1.2.0",
+ "get-symbol-description": "^1.0.0",
+ "globalthis": "^1.0.3",
+ "gopd": "^1.0.1",
+ "has": "^1.0.3",
+ "has-property-descriptors": "^1.0.0",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.5",
+ "is-array-buffer": "^3.0.2",
+ "is-callable": "^1.2.7",
+ "is-negative-zero": "^2.0.2",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "is-string": "^1.0.7",
+ "is-typed-array": "^1.1.10",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.12.3",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.4",
+ "regexp.prototype.flags": "^1.4.3",
+ "safe-regex-test": "^1.0.0",
+ "string.prototype.trim": "^1.2.7",
+ "string.prototype.trimend": "^1.0.6",
+ "string.prototype.trimstart": "^1.0.6",
+ "typed-array-length": "^1.0.4",
+ "unbox-primitive": "^1.0.2",
+ "which-typed-array": "^1.1.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/esbuild/node_modules/@esbuild/netbsd-x64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz",
- "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
+ "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==",
"license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
"engines": {
- "node": ">=18"
+ "node": ">= 0.4"
}
},
- "node_modules/esbuild/node_modules/@esbuild/openbsd-arm64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz",
- "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
"engines": {
- "node": ">=18"
+ "node": ">= 0.4"
}
},
- "node_modules/esbuild/node_modules/@esbuild/openbsd-x64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz",
- "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
+ "node_modules/es-module-lexer": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.0.tgz",
+ "integrity": "sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==",
+ "dev": true
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
"license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
"engines": {
- "node": ">=18"
+ "node": ">= 0.4"
}
},
- "node_modules/esbuild/node_modules/@esbuild/sunos-x64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz",
- "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==",
- "cpu": [
- "x64"
- ],
+ "node_modules/es-set-tostringtag": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+ "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "sunos"
- ],
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ },
"engines": {
- "node": ">=18"
+ "node": ">= 0.4"
}
},
- "node_modules/esbuild/node_modules/@esbuild/win32-arm64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz",
- "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==",
- "cpu": [
- "arm64"
- ],
+ "node_modules/es-shim-unscopables": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
+ "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
"dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
+ "dependencies": {
+ "has": "^1.0.3"
}
},
- "node_modules/esbuild/node_modules/@esbuild/win32-ia32": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz",
- "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==",
- "cpu": [
- "ia32"
- ],
+ "node_modules/es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
"dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
+ "dependencies": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ },
"engines": {
- "node": ">=18"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/esbuild/node_modules/@esbuild/win32-x64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz",
- "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==",
- "cpu": [
- "x64"
- ],
+ "node_modules/es6-shim": {
+ "version": "0.35.6",
+ "license": "MIT"
+ },
+ "node_modules/esbuild": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz",
+ "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==",
"dev": true,
+ "hasInstallScript": true,
"license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
"engines": {
"node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.28.1",
+ "@esbuild/android-arm": "0.28.1",
+ "@esbuild/android-arm64": "0.28.1",
+ "@esbuild/android-x64": "0.28.1",
+ "@esbuild/darwin-arm64": "0.28.1",
+ "@esbuild/darwin-x64": "0.28.1",
+ "@esbuild/freebsd-arm64": "0.28.1",
+ "@esbuild/freebsd-x64": "0.28.1",
+ "@esbuild/linux-arm": "0.28.1",
+ "@esbuild/linux-arm64": "0.28.1",
+ "@esbuild/linux-ia32": "0.28.1",
+ "@esbuild/linux-loong64": "0.28.1",
+ "@esbuild/linux-mips64el": "0.28.1",
+ "@esbuild/linux-ppc64": "0.28.1",
+ "@esbuild/linux-riscv64": "0.28.1",
+ "@esbuild/linux-s390x": "0.28.1",
+ "@esbuild/linux-x64": "0.28.1",
+ "@esbuild/netbsd-arm64": "0.28.1",
+ "@esbuild/netbsd-x64": "0.28.1",
+ "@esbuild/openbsd-arm64": "0.28.1",
+ "@esbuild/openbsd-x64": "0.28.1",
+ "@esbuild/openharmony-arm64": "0.28.1",
+ "@esbuild/sunos-x64": "0.28.1",
+ "@esbuild/win32-arm64": "0.28.1",
+ "@esbuild/win32-ia32": "0.28.1",
+ "@esbuild/win32-x64": "0.28.1"
}
},
"node_modules/escalade": {
@@ -12415,24 +12917,254 @@
"node": ">=8"
}
},
- "node_modules/slice-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
- "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+ "node_modules/slice-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
+ "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/slice-ansi?sponsor=1"
+ }
+ },
+ "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/smart-buffer": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
+ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6.0.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/socks": {
+ "version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.8.tgz",
+ "integrity": "sha512-NlGELfPrgX2f1TAAcz0WawlLn+0r3FyhhCRpFFK2CemXenPYvzMWWZINv3eDNo9ucdwme7oCHRY0Jnbs4aIkog==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ip-address": "^10.1.1",
+ "smart-buffer": "^4.2.0"
+ },
+ "engines": {
+ "node": ">= 10.0.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/socks-proxy-agent": {
+ "version": "8.0.5",
+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz",
+ "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.2",
+ "debug": "^4.3.4",
+ "socks": "^2.8.3"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/socks-proxy-agent/node_modules/agent-base": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
+ "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/socks-proxy-agent/node_modules/debug": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
+ "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/socks-proxy-agent/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-generator": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/source-map-generator/-/source-map-generator-0.8.0.tgz",
+ "integrity": "sha512-psgxdGMwl5MZM9S3FWee4EgsEaIjahYV5AzGnwUvPhWeITz/j6rKpysQHlQ4USdxvINlb8lKfWGIXwfkrgtqkA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+ "dev": true,
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/split": {
+ "version": "0.3.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "through": "2"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
+ "dev": true
+ },
+ "node_modules/ssri": {
+ "version": "10.0.6",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz",
+ "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==",
+ "dev": true,
+ "dependencies": {
+ "minipass": "^7.0.3"
+ },
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/statuses": {
+ "version": "1.5.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/stream-combiner": {
+ "version": "0.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "duplexer": "~0.1.1"
+ }
+ },
+ "node_modules/stream-read-all": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/stream-read-all/-/stream-read-all-3.0.1.tgz",
+ "integrity": "sha512-EWZT9XOceBPlVJRrYcykW8jyRSZYbkb/0ZK36uLEmoWVO5gxBOnntNTseNzfREsqxqdfEGQrD8SXQ3QWbBmq8A==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/streamsearch": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
+ "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/streamx": {
+ "version": "2.22.0",
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz",
+ "integrity": "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-fifo": "^1.3.2",
+ "text-decoder": "^1.1.0"
+ },
+ "optionalDependencies": {
+ "bare-events": "^2.2.0"
+ }
+ },
+ "node_modules/string_decoder": {
+ "version": "1.1.1",
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/string_decoder/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "license": "MIT"
+ },
+ "node_modules/string-argv": {
+ "version": "0.1.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.6.19"
+ }
+ },
+ "node_modules/string-width-cjs": {
+ "name": "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,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs/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,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "astral-regex": "^2.0.0",
- "is-fullwidth-code-point": "^3.0.0"
- },
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/slice-ansi?sponsor=1"
+ "node": ">=8"
}
},
- "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": {
+ "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
@@ -12441,708 +13173,962 @@
"node": ">=8"
}
},
- "node_modules/smart-buffer": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
- "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
+ "node_modules/string-width-cjs/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,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
"engines": {
- "node": ">= 6.0.0",
- "npm": ">= 3.0.0"
+ "node": ">=8"
}
},
- "node_modules/socks": {
- "version": "2.8.8",
- "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.8.tgz",
- "integrity": "sha512-NlGELfPrgX2f1TAAcz0WawlLn+0r3FyhhCRpFFK2CemXenPYvzMWWZINv3eDNo9ucdwme7oCHRY0Jnbs4aIkog==",
+ "node_modules/string.prototype.codepointat": {
+ "version": "0.2.1",
+ "license": "MIT"
+ },
+ "node_modules/string.prototype.startswith": {
+ "version": "0.2.0"
+ },
+ "node_modules/string.prototype.trim": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz",
+ "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "ip-address": "^10.1.1",
- "smart-buffer": "^4.2.0"
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
},
"engines": {
- "node": ">= 10.0.0",
- "npm": ">= 3.0.0"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/socks-proxy-agent": {
- "version": "8.0.5",
- "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz",
- "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==",
+ "node_modules/string.prototype.trimend": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
+ "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "agent-base": "^7.1.2",
- "debug": "^4.3.4",
- "socks": "^2.8.3"
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
},
- "engines": {
- "node": ">= 14"
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/socks-proxy-agent/node_modules/agent-base": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
- "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==",
+ "node_modules/string.prototype.trimstart": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
+ "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
"dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 14"
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/socks-proxy-agent/node_modules/debug": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
- "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
+ "node_modules/strip-ansi-cjs": {
+ "name": "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": {
- "ms": "^2.1.3"
+ "ansi-regex": "^5.0.1"
},
"engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
+ "node": ">=8"
}
},
- "node_modules/socks-proxy-agent/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "node_modules/strip-ansi-cjs/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/source-map": {
- "version": "0.6.1",
+ "node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
"dev": true,
- "license": "BSD-3-Clause",
"engines": {
- "node": ">=0.10.0"
+ "node": ">=4"
}
},
- "node_modules/source-map-generator": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/source-map-generator/-/source-map-generator-0.8.0.tgz",
- "integrity": "sha512-psgxdGMwl5MZM9S3FWee4EgsEaIjahYV5AzGnwUvPhWeITz/j6rKpysQHlQ4USdxvINlb8lKfWGIXwfkrgtqkA==",
+ "node_modules/strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": ">= 10"
+ "node": ">=6"
}
},
- "node_modules/source-map-support": {
- "version": "0.5.21",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
- "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
"dev": true,
- "dependencies": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/split": {
- "version": "0.3.3",
- "dev": true,
+ "node_modules/stripemoji": {
+ "resolved": "resources/tools/strip-emoji",
+ "link": true
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
"license": "MIT",
"dependencies": {
- "through": "2"
+ "has-flag": "^4.0.0"
},
"engines": {
- "node": "*"
+ "node": ">=8"
}
},
- "node_modules/sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/symbol-tree": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
+ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
"dev": true
},
- "node_modules/ssri": {
- "version": "10.0.6",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz",
- "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==",
+ "node_modules/table-layout": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-3.0.2.tgz",
+ "integrity": "sha512-rpyNZYRw+/C+dYkcQ3Pr+rLxW4CfHpXjPDnG7lYhdRoUcZTUt+KEsX+94RGp/aVp/MQU35JCITv2T/beY4m+hw==",
"dev": true,
"dependencies": {
- "minipass": "^7.0.3"
+ "@75lb/deep-merge": "^1.1.1",
+ "array-back": "^6.2.2",
+ "command-line-args": "^5.2.1",
+ "command-line-usage": "^7.0.0",
+ "stream-read-all": "^3.0.1",
+ "typical": "^7.1.1",
+ "wordwrapjs": "^5.1.0"
+ },
+ "bin": {
+ "table-layout": "bin/cli.js"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": ">=12.17"
}
},
- "node_modules/statuses": {
- "version": "1.5.0",
+ "node_modules/table-layout/node_modules/array-back": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz",
+ "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==",
"dev": true,
- "license": "MIT",
"engines": {
- "node": ">= 0.6"
+ "node": ">=12.17"
}
},
- "node_modules/stream-combiner": {
- "version": "0.0.4",
+ "node_modules/table-layout/node_modules/typical": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz",
+ "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "duplexer": "~0.1.1"
+ "engines": {
+ "node": ">=12.17"
}
},
- "node_modules/stream-read-all": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/stream-read-all/-/stream-read-all-3.0.1.tgz",
- "integrity": "sha512-EWZT9XOceBPlVJRrYcykW8jyRSZYbkb/0ZK36uLEmoWVO5gxBOnntNTseNzfREsqxqdfEGQrD8SXQ3QWbBmq8A==",
+ "node_modules/tapable": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/tar": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
+ "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
"dev": true,
+ "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"
}
},
- "node_modules/streamsearch": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
- "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/streamx": {
- "version": "2.22.0",
- "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz",
- "integrity": "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==",
+ "node_modules/tar-fs": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.1.tgz",
+ "integrity": "sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "fast-fifo": "^1.3.2",
- "text-decoder": "^1.1.0"
+ "pump": "^3.0.0",
+ "tar-stream": "^3.1.5"
},
"optionalDependencies": {
- "bare-events": "^2.2.0"
+ "bare-fs": "^4.0.1",
+ "bare-path": "^3.0.0"
}
},
- "node_modules/string_decoder": {
- "version": "1.1.1",
+ "node_modules/tar-stream": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz",
+ "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "safe-buffer": "~5.1.0"
+ "b4a": "^1.6.4",
+ "fast-fifo": "^1.2.0",
+ "streamx": "^2.15.0"
}
},
- "node_modules/string_decoder/node_modules/safe-buffer": {
- "version": "5.1.2",
- "license": "MIT"
- },
- "node_modules/string-argv": {
- "version": "0.1.2",
+ "node_modules/tar/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": "MIT",
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
"engines": {
- "node": ">=0.6.19"
+ "node": ">= 8"
}
},
- "node_modules/string-width-cjs": {
- "name": "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==",
+ "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
"dev": true,
"dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
+ "yallist": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
- "node_modules/string-width-cjs/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==",
+ "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,
"engines": {
"node": ">=8"
}
},
- "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "node_modules/tar/node_modules/mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
"dev": true,
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ },
"engines": {
- "node": ">=8"
+ "node": ">=10"
}
},
- "node_modules/string-width-cjs/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==",
+ "node_modules/test-exclude": {
+ "version": "6.0.0",
"dev": true,
+ "license": "ISC",
"dependencies": {
- "ansi-regex": "^5.0.1"
+ "@istanbuljs/schema": "^0.1.2",
+ "glob": "^7.1.4",
+ "minimatch": "^3.0.4"
},
"engines": {
"node": ">=8"
}
},
- "node_modules/string.prototype.codepointat": {
- "version": "0.2.1",
- "license": "MIT"
- },
- "node_modules/string.prototype.startswith": {
- "version": "0.2.0"
- },
- "node_modules/string.prototype.trim": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz",
- "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==",
+ "node_modules/text-decoder": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz",
+ "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "b4a": "^1.6.4"
}
},
- "node_modules/string.prototype.trimend": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
- "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true
+ },
+ "node_modules/through": {
+ "version": "2.3.8",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/through2": {
+ "version": "2.0.5",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
}
},
- "node_modules/string.prototype.trimstart": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
- "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
+ "is-number": "^7.0.0"
},
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "engines": {
+ "node": ">=8.0"
}
},
- "node_modules/strip-ansi-cjs": {
- "name": "strip-ansi",
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "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==",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/tough-cookie": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
+ "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
"dev": true,
"dependencies": {
- "ansi-regex": "^5.0.1"
+ "psl": "^1.1.33",
+ "punycode": "^2.1.1",
+ "universalify": "^0.2.0",
+ "url-parse": "^1.5.3"
},
"engines": {
- "node": ">=8"
+ "node": ">=6"
}
},
- "node_modules/strip-ansi-cjs/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==",
+ "node_modules/tough-cookie/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,
"engines": {
- "node": ">=8"
+ "node": ">= 4.0.0"
}
},
- "node_modules/strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "node_modules/tr46": {
+ "version": "0.0.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/ts-api-utils": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
+ "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==",
"dev": true,
"engines": {
- "node": ">=4"
+ "node": ">=16"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.2.0"
}
},
- "node_modules/strip-final-newline": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
- "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "node_modules/tsc-watch": {
+ "version": "4.6.2",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "node-cleanup": "^2.1.2",
+ "ps-tree": "^1.2.0",
+ "string-argv": "^0.1.1",
+ "strip-ansi": "^6.0.0"
+ },
+ "bin": {
+ "tsc-watch": "index.js"
+ },
"engines": {
- "node": ">=6"
+ "node": ">=8.17.0"
+ },
+ "peerDependencies": {
+ "typescript": "*"
}
},
- "node_modules/strip-json-comments": {
- "version": "3.1.1",
+ "node_modules/tsc-watch/node_modules/ansi-regex": {
+ "version": "5.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/stripemoji": {
- "resolved": "resources/tools/strip-emoji",
- "link": true
- },
- "node_modules/supports-color": {
- "version": "7.2.0",
+ "node_modules/tsc-watch/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "has-flag": "^4.0.0"
+ "ansi-regex": "^5.0.1"
},
"engines": {
"node": ">=8"
}
},
- "node_modules/supports-preserve-symlinks-flag": {
- "version": "1.0.0",
+ "node_modules/tsconfig-paths": {
+ "version": "3.14.2",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz",
+ "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==",
"dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "dependencies": {
+ "@types/json5": "^0.0.29",
+ "json5": "^1.0.2",
+ "minimist": "^1.2.6",
+ "strip-bom": "^3.0.0"
}
},
- "node_modules/symbol-tree": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
- "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
- "dev": true
+ "node_modules/tslib": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz",
+ "integrity": "sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA=="
},
- "node_modules/table-layout": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-3.0.2.tgz",
- "integrity": "sha512-rpyNZYRw+/C+dYkcQ3Pr+rLxW4CfHpXjPDnG7lYhdRoUcZTUt+KEsX+94RGp/aVp/MQU35JCITv2T/beY4m+hw==",
+ "node_modules/tsscmp": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz",
+ "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.6.x"
+ }
+ },
+ "node_modules/tsx": {
+ "version": "4.19.4",
+ "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.4.tgz",
+ "integrity": "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@75lb/deep-merge": "^1.1.1",
- "array-back": "^6.2.2",
- "command-line-args": "^5.2.1",
- "command-line-usage": "^7.0.0",
- "stream-read-all": "^3.0.1",
- "typical": "^7.1.1",
- "wordwrapjs": "^5.1.0"
+ "esbuild": "~0.25.0",
+ "get-tsconfig": "^4.7.5"
},
"bin": {
- "table-layout": "bin/cli.js"
+ "tsx": "dist/cli.mjs"
},
"engines": {
- "node": ">=12.17"
+ "node": ">=18.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
}
},
- "node_modules/table-layout/node_modules/array-back": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz",
- "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==",
+ "node_modules/tsx/node_modules/@esbuild/aix-ppc64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz",
+ "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==",
+ "cpu": [
+ "ppc64"
+ ],
"dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
"engines": {
- "node": ">=12.17"
+ "node": ">=18"
}
},
- "node_modules/table-layout/node_modules/typical": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz",
- "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==",
+ "node_modules/tsx/node_modules/@esbuild/android-arm": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz",
+ "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==",
+ "cpu": [
+ "arm"
+ ],
"dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
"engines": {
- "node": ">=12.17"
+ "node": ">=18"
}
},
- "node_modules/tapable": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
- "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+ "node_modules/tsx/node_modules/@esbuild/android-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz",
+ "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
"engines": {
- "node": ">=6"
+ "node": ">=18"
}
},
- "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==",
+ "node_modules/tsx/node_modules/@esbuild/android-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz",
+ "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "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"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
"engines": {
- "node": ">=10"
+ "node": ">=18"
}
},
- "node_modules/tar-fs": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.1.tgz",
- "integrity": "sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==",
+ "node_modules/tsx/node_modules/@esbuild/darwin-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz",
+ "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
"license": "MIT",
- "dependencies": {
- "pump": "^3.0.0",
- "tar-stream": "^3.1.5"
- },
- "optionalDependencies": {
- "bare-fs": "^4.0.1",
- "bare-path": "^3.0.0"
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/tar-stream": {
- "version": "3.1.7",
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz",
- "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==",
+ "node_modules/tsx/node_modules/@esbuild/darwin-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz",
+ "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
"license": "MIT",
- "dependencies": {
- "b4a": "^1.6.4",
- "fast-fifo": "^1.2.0",
- "streamx": "^2.15.0"
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/tar/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==",
+ "node_modules/tsx/node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "dependencies": {
- "minipass": "^3.0.0"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
"engines": {
- "node": ">= 8"
+ "node": ">=18"
}
},
- "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
- "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "node_modules/tsx/node_modules/@esbuild/freebsd-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz",
+ "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
"engines": {
- "node": ">=8"
+ "node": ">=18"
}
},
- "node_modules/tar/node_modules/minipass": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
- "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
+ "node_modules/tsx/node_modules/@esbuild/linux-arm": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz",
+ "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==",
+ "cpu": [
+ "arm"
+ ],
"dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">=8"
+ "node": ">=18"
}
},
- "node_modules/tar/node_modules/mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "node_modules/tsx/node_modules/@esbuild/linux-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz",
+ "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "bin": {
- "mkdirp": "bin/cmd.js"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">=10"
+ "node": ">=18"
}
},
- "node_modules/test-exclude": {
- "version": "6.0.0",
+ "node_modules/tsx/node_modules/@esbuild/linux-ia32": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz",
+ "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==",
+ "cpu": [
+ "ia32"
+ ],
"dev": true,
- "license": "ISC",
- "dependencies": {
- "@istanbuljs/schema": "^0.1.2",
- "glob": "^7.1.4",
- "minimatch": "^3.0.4"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/linux-loong64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz",
+ "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">=8"
+ "node": ">=18"
}
},
- "node_modules/text-decoder": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz",
- "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==",
+ "node_modules/tsx/node_modules/@esbuild/linux-mips64el": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz",
+ "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==",
+ "cpu": [
+ "mips64el"
+ ],
"dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "b4a": "^1.6.4"
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
- "dev": true
- },
- "node_modules/through": {
- "version": "2.3.8",
+ "node_modules/tsx/node_modules/@esbuild/linux-ppc64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz",
+ "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==",
+ "cpu": [
+ "ppc64"
+ ],
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
},
- "node_modules/through2": {
- "version": "2.0.5",
+ "node_modules/tsx/node_modules/@esbuild/linux-riscv64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz",
+ "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==",
+ "cpu": [
+ "riscv64"
+ ],
"dev": true,
"license": "MIT",
- "dependencies": {
- "readable-stream": "~2.3.6",
- "xtend": "~4.0.1"
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "node_modules/tsx/node_modules/@esbuild/linux-s390x": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz",
+ "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==",
+ "cpu": [
+ "s390x"
+ ],
"dev": true,
- "dependencies": {
- "is-number": "^7.0.0"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">=8.0"
+ "node": ">=18"
}
},
- "node_modules/toidentifier": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
- "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "node_modules/tsx/node_modules/@esbuild/linux-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz",
+ "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">=0.6"
+ "node": ">=18"
}
},
- "node_modules/tough-cookie": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
- "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
+ "node_modules/tsx/node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "dependencies": {
- "psl": "^1.1.33",
- "punycode": "^2.1.1",
- "universalify": "^0.2.0",
- "url-parse": "^1.5.3"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
"engines": {
- "node": ">=6"
+ "node": ">=18"
}
},
- "node_modules/tough-cookie/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==",
+ "node_modules/tsx/node_modules/@esbuild/netbsd-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz",
+ "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
"engines": {
- "node": ">= 4.0.0"
+ "node": ">=18"
}
},
- "node_modules/tr46": {
- "version": "0.0.3",
+ "node_modules/tsx/node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
},
- "node_modules/ts-api-utils": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
- "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==",
+ "node_modules/tsx/node_modules/@esbuild/openbsd-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz",
+ "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
"engines": {
- "node": ">=16"
- },
- "peerDependencies": {
- "typescript": ">=4.2.0"
+ "node": ">=18"
}
},
- "node_modules/tsc-watch": {
- "version": "4.6.2",
+ "node_modules/tsx/node_modules/@esbuild/openharmony-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz",
+ "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
"license": "MIT",
- "dependencies": {
- "cross-spawn": "^7.0.3",
- "node-cleanup": "^2.1.2",
- "ps-tree": "^1.2.0",
- "string-argv": "^0.1.1",
- "strip-ansi": "^6.0.0"
- },
- "bin": {
- "tsc-watch": "index.js"
- },
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
"engines": {
- "node": ">=8.17.0"
- },
- "peerDependencies": {
- "typescript": "*"
+ "node": ">=18"
}
},
- "node_modules/tsc-watch/node_modules/ansi-regex": {
- "version": "5.0.1",
+ "node_modules/tsx/node_modules/@esbuild/sunos-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz",
+ "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
"license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
"engines": {
- "node": ">=8"
+ "node": ">=18"
}
},
- "node_modules/tsc-watch/node_modules/strip-ansi": {
- "version": "6.0.1",
+ "node_modules/tsx/node_modules/@esbuild/win32-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz",
+ "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
"license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
+ "optional": true,
+ "os": [
+ "win32"
+ ],
"engines": {
- "node": ">=8"
+ "node": ">=18"
}
},
- "node_modules/tsconfig-paths": {
- "version": "3.14.2",
- "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz",
- "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==",
+ "node_modules/tsx/node_modules/@esbuild/win32-ia32": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz",
+ "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==",
+ "cpu": [
+ "ia32"
+ ],
"dev": true,
- "dependencies": {
- "@types/json5": "^0.0.29",
- "json5": "^1.0.2",
- "minimist": "^1.2.6",
- "strip-bom": "^3.0.0"
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/tslib": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz",
- "integrity": "sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA=="
- },
- "node_modules/tsscmp": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz",
- "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==",
+ "node_modules/tsx/node_modules/@esbuild/win32-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz",
+ "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
"engines": {
- "node": ">=0.6.x"
+ "node": ">=18"
}
},
- "node_modules/tsx": {
- "version": "4.19.4",
- "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.4.tgz",
- "integrity": "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==",
+ "node_modules/tsx/node_modules/esbuild": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz",
+ "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==",
"dev": true,
+ "hasInstallScript": true,
"license": "MIT",
- "dependencies": {
- "esbuild": "~0.25.0",
- "get-tsconfig": "^4.7.5"
- },
"bin": {
- "tsx": "dist/cli.mjs"
+ "esbuild": "bin/esbuild"
},
"engines": {
- "node": ">=18.0.0"
+ "node": ">=18"
},
"optionalDependencies": {
- "fsevents": "~2.3.3"
+ "@esbuild/aix-ppc64": "0.25.12",
+ "@esbuild/android-arm": "0.25.12",
+ "@esbuild/android-arm64": "0.25.12",
+ "@esbuild/android-x64": "0.25.12",
+ "@esbuild/darwin-arm64": "0.25.12",
+ "@esbuild/darwin-x64": "0.25.12",
+ "@esbuild/freebsd-arm64": "0.25.12",
+ "@esbuild/freebsd-x64": "0.25.12",
+ "@esbuild/linux-arm": "0.25.12",
+ "@esbuild/linux-arm64": "0.25.12",
+ "@esbuild/linux-ia32": "0.25.12",
+ "@esbuild/linux-loong64": "0.25.12",
+ "@esbuild/linux-mips64el": "0.25.12",
+ "@esbuild/linux-ppc64": "0.25.12",
+ "@esbuild/linux-riscv64": "0.25.12",
+ "@esbuild/linux-s390x": "0.25.12",
+ "@esbuild/linux-x64": "0.25.12",
+ "@esbuild/netbsd-arm64": "0.25.12",
+ "@esbuild/netbsd-x64": "0.25.12",
+ "@esbuild/openbsd-arm64": "0.25.12",
+ "@esbuild/openbsd-x64": "0.25.12",
+ "@esbuild/openharmony-arm64": "0.25.12",
+ "@esbuild/sunos-x64": "0.25.12",
+ "@esbuild/win32-arm64": "0.25.12",
+ "@esbuild/win32-ia32": "0.25.12",
+ "@esbuild/win32-x64": "0.25.12"
}
},
"node_modules/tsx/node_modules/fsevents": {
diff --git a/package.json b/package.json
index 9982c65a33d..bee01779802 100644
--- a/package.json
+++ b/package.json
@@ -16,7 +16,7 @@
"ajv-cli": "^5.0.0",
"ajv-formats": "^2.1.1",
"chai": "^5.1.0",
- "esbuild": "^0.25.0",
+ "esbuild": "^0.28.1",
"eslint": "^8.39.0",
"eslint-config-love": "^53.0.0",
"eslint-plugin-import": "^2.27.5",
diff --git a/web/docs/engine/guide/adding-keyboards.md b/web/docs/engine/guide/adding-keyboards.md
index 957df80270c..f294bee24b7 100644
--- a/web/docs/engine/guide/adding-keyboards.md
+++ b/web/docs/engine/guide/adding-keyboards.md
@@ -8,7 +8,7 @@ There are multiple ways to add and install keyboards into your KeymanWeb install
The most efficient way to utilize a keyboard is to obtain a local copy of it and place this copy in a static location on your website. Once this is done, it can be directly linked into KeymanWeb as follows.
-```typescript
+```js
await keyman.addKeyboards({
id:'us', // The keyboard's unique identification code.
name:'English', // The keyboard's user-readable name.
@@ -22,7 +22,7 @@ await keyman.addKeyboards({
Custom fonts may also be utilized via the `language.font` property. For example:
-```typescript
+```js
font:{
family:'LaoWeb',
source:['../font/saysettha_web.ttf','../font/saysettha_web.woff','../font/saysettha_web.eot']
@@ -33,7 +33,7 @@ font:{
To obtain the default Keyman keyboard for a given language, call the following function.
-```typescript
+```js
await keyman.addKeyboardsForLanguage('Dzongkha');
```
@@ -41,7 +41,7 @@ This example would find the default keyboard for the Dzongkha language. This met
Alternatively, languages may be looked up via their BCP 47 language code as follows:
-```typescript
+```js
await keyman.addKeyboards('@he');
```
@@ -51,7 +51,7 @@ The `@` prefix indicates the use of the BCP 47 language code, which in this case
To obtain a specific keyboard by name or by keyboard name and language code as a pair, see the following:
-```typescript
+```js
await keyman.addKeyboards('french', 'sil_euro_latin@sv', 'sil_euro_latin@no');
```
diff --git a/web/docs/engine/guide/examples/control-by-control.md b/web/docs/engine/guide/examples/control-by-control.md
index b3b0b9b3a5e..af41cf0ceeb 100644
--- a/web/docs/engine/guide/examples/control-by-control.md
+++ b/web/docs/engine/guide/examples/control-by-control.md
@@ -11,7 +11,7 @@ to open the test page.
Include the following script in the HEAD of your page:
-```js
+```html