diff --git a/.lingma/rules/rules.md b/.lingma/rules/rules.md new file mode 100644 index 0000000..202659c --- /dev/null +++ b/.lingma/rules/rules.md @@ -0,0 +1,8 @@ +--- +trigger: always_on +--- + +1.每次完成任务之前必须跑一遍测试(比如说npm系的typecheck/lint) +2.每次完成任务之前必须跑一遍格式化(比如说npm系的prettier) +3.任务完成时详细输出你所做的事情和需要用户确认的问题(如有) +4.每次规划任务必须按照步骤来,每个步骤结束后遵循第三条规定。 \ No newline at end of file diff --git a/old-ss/.editorconfig b/old-ss/.editorconfig deleted file mode 100644 index 3dce414..0000000 --- a/old-ss/.editorconfig +++ /dev/null @@ -1,9 +0,0 @@ -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true \ No newline at end of file diff --git a/old-ss/.gitattributes b/old-ss/.gitattributes deleted file mode 100644 index 94f480d..0000000 --- a/old-ss/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -* text=auto eol=lf \ No newline at end of file diff --git a/old-ss/.gitignore b/old-ss/.gitignore deleted file mode 100644 index 1759106..0000000 --- a/old-ss/.gitignore +++ /dev/null @@ -1,20 +0,0 @@ -node_modules -dist -out -.DS_Store -.eslintcache -*.log* -logs -docs -configs - -build/* -!build/entitlements.mac.plist -db.sqlite -*.local -.env.local -.env.*.local -.vscode -!.vscode/extensions.json -!.vscode/launch.json -!.vscode/settings.json diff --git a/old-ss/.npmrc b/old-ss/.npmrc deleted file mode 100644 index 2ced952..0000000 --- a/old-ss/.npmrc +++ /dev/null @@ -1,3 +0,0 @@ -electron_mirror=https://npmmirror.com/mirrors/electron/ -electron_builder_binaries_mirror=https://npmmirror.com/mirrors/electron-builder-binaries/ -shamefully-hoist=true diff --git a/old-ss/.prettierignore b/old-ss/.prettierignore deleted file mode 100644 index 9c6b791..0000000 --- a/old-ss/.prettierignore +++ /dev/null @@ -1,6 +0,0 @@ -out -dist -pnpm-lock.yaml -LICENSE.md -tsconfig.json -tsconfig.*.json diff --git a/old-ss/.prettierrc.yaml b/old-ss/.prettierrc.yaml deleted file mode 100644 index 35893b3..0000000 --- a/old-ss/.prettierrc.yaml +++ /dev/null @@ -1,4 +0,0 @@ -singleQuote: true -semi: false -printWidth: 100 -trailingComma: none diff --git a/old-ss/android/.gitignore b/old-ss/android/.gitignore deleted file mode 100644 index 48354a3..0000000 --- a/old-ss/android/.gitignore +++ /dev/null @@ -1,101 +0,0 @@ -# Using Android gitignore template: https://github.com/github/gitignore/blob/HEAD/Android.gitignore - -# Built application files -*.apk -*.aar -*.ap_ -*.aab - -# Files for the ART/Dalvik VM -*.dex - -# Java class files -*.class - -# Generated files -bin/ -gen/ -out/ -# Uncomment the following line in case you need and you don't have the release build type files in your app -# release/ - -# Gradle files -.gradle/ -build/ - -# Local configuration file (sdk path, etc) -local.properties - -# Proguard folder generated by Eclipse -proguard/ - -# Log Files -*.log - -# Android Studio Navigation editor temp files -.navigation/ - -# Android Studio captures folder -captures/ - -# IntelliJ -*.iml -.idea/workspace.xml -.idea/tasks.xml -.idea/gradle.xml -.idea/assetWizardSettings.xml -.idea/dictionaries -.idea/libraries -# Android Studio 3 in .gitignore file. -.idea/caches -.idea/modules.xml -# Comment next line if keeping position of elements in Navigation Editor is relevant for you -.idea/navEditor.xml - -# Keystore files -# Uncomment the following lines if you do not want to check your keystore files in. -#*.jks -#*.keystore - -# External native build folder generated in Android Studio 2.2 and later -.externalNativeBuild -.cxx/ - -# Google Services (e.g. APIs or Firebase) -# google-services.json - -# Freeline -freeline.py -freeline/ -freeline_project_description.json - -# fastlane -fastlane/report.xml -fastlane/Preview.html -fastlane/screenshots -fastlane/test_output -fastlane/readme.md - -# Version control -vcs.xml - -# lint -lint/intermediates/ -lint/generated/ -lint/outputs/ -lint/tmp/ -# lint/reports/ - -# Android Profiling -*.hprof - -# Cordova plugins for Capacitor -capacitor-cordova-android-plugins - -# Copied web assets -app/src/main/assets/public - -# Generated Config files -app/src/main/assets/capacitor.config.json -app/src/main/assets/capacitor.plugins.json -app/src/main/res/xml/config.xml diff --git a/old-ss/android/app/.gitignore b/old-ss/android/app/.gitignore deleted file mode 100644 index 043df80..0000000 --- a/old-ss/android/app/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/build/* -!/build/.npmkeep diff --git a/old-ss/android/app/build.gradle b/old-ss/android/app/build.gradle deleted file mode 100644 index dcf9784..0000000 --- a/old-ss/android/app/build.gradle +++ /dev/null @@ -1,54 +0,0 @@ -apply plugin: 'com.android.application' - -android { - namespace = "com.sectl.secscore" - compileSdk = rootProject.ext.compileSdkVersion - defaultConfig { - applicationId "com.sectl.secscore" - minSdkVersion rootProject.ext.minSdkVersion - targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 1 - versionName "1.0" - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - aaptOptions { - // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps. - // Default: https://android.googlesource.com/platform/frameworks/base/+/282e181b58cf72b6ca770dc7ca5f91f135444502/tools/aapt/AaptAssets.cpp#61 - ignoreAssetsPattern = '!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~' - } - } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - } -} - -repositories { - flatDir{ - dirs '../capacitor-cordova-android-plugins/src/main/libs', 'libs' - } -} - -dependencies { - implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion" - implementation "androidx.coordinatorlayout:coordinatorlayout:$androidxCoordinatorLayoutVersion" - implementation "androidx.core:core-splashscreen:$coreSplashScreenVersion" - implementation project(':capacitor-android') - testImplementation "junit:junit:$junitVersion" - androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion" - androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion" - implementation project(':capacitor-cordova-android-plugins') -} - -apply from: 'capacitor.build.gradle' - -try { - def servicesJSON = file('google-services.json') - if (servicesJSON.text) { - apply plugin: 'com.google.gms.google-services' - } -} catch(Exception e) { - logger.info("google-services.json not found, google-services plugin not applied. Push Notifications won't work") -} diff --git a/old-ss/android/app/capacitor.build.gradle b/old-ss/android/app/capacitor.build.gradle deleted file mode 100644 index adabd97..0000000 --- a/old-ss/android/app/capacitor.build.gradle +++ /dev/null @@ -1,19 +0,0 @@ -// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN - -android { - compileOptions { - sourceCompatibility JavaVersion.VERSION_21 - targetCompatibility JavaVersion.VERSION_21 - } -} - -apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle" -dependencies { - implementation project(':capacitor-preferences') - -} - - -if (hasProperty('postBuildExtras')) { - postBuildExtras() -} diff --git a/old-ss/android/app/proguard-rules.pro b/old-ss/android/app/proguard-rules.pro deleted file mode 100644 index f1b4245..0000000 --- a/old-ss/android/app/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile diff --git a/old-ss/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java b/old-ss/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java deleted file mode 100644 index f2c2217..0000000 --- a/old-ss/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.getcapacitor.myapp; - -import static org.junit.Assert.*; - -import android.content.Context; -import androidx.test.ext.junit.runners.AndroidJUnit4; -import androidx.test.platform.app.InstrumentationRegistry; -import org.junit.Test; -import org.junit.runner.RunWith; - -/** - * Instrumented test, which will execute on an Android device. - * - * @see Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - - @Test - public void useAppContext() throws Exception { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - - assertEquals("com.getcapacitor.app", appContext.getPackageName()); - } -} diff --git a/old-ss/android/app/src/main/AndroidManifest.xml b/old-ss/android/app/src/main/AndroidManifest.xml deleted file mode 100644 index b06ddbf..0000000 --- a/old-ss/android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/old-ss/android/app/src/main/java/com/sectl/secscore/MainActivity.java b/old-ss/android/app/src/main/java/com/sectl/secscore/MainActivity.java deleted file mode 100644 index 97b24e1..0000000 --- a/old-ss/android/app/src/main/java/com/sectl/secscore/MainActivity.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.sectl.secscore; - -import com.getcapacitor.BridgeActivity; - -public class MainActivity extends BridgeActivity {} diff --git a/old-ss/android/app/src/main/res/drawable-land-hdpi/splash.png b/old-ss/android/app/src/main/res/drawable-land-hdpi/splash.png deleted file mode 100644 index e31573b..0000000 Binary files a/old-ss/android/app/src/main/res/drawable-land-hdpi/splash.png and /dev/null differ diff --git a/old-ss/android/app/src/main/res/drawable-land-mdpi/splash.png b/old-ss/android/app/src/main/res/drawable-land-mdpi/splash.png deleted file mode 100644 index f7a6492..0000000 Binary files a/old-ss/android/app/src/main/res/drawable-land-mdpi/splash.png and /dev/null differ diff --git a/old-ss/android/app/src/main/res/drawable-land-xhdpi/splash.png b/old-ss/android/app/src/main/res/drawable-land-xhdpi/splash.png deleted file mode 100644 index 8077255..0000000 Binary files a/old-ss/android/app/src/main/res/drawable-land-xhdpi/splash.png and /dev/null differ diff --git a/old-ss/android/app/src/main/res/drawable-land-xxhdpi/splash.png b/old-ss/android/app/src/main/res/drawable-land-xxhdpi/splash.png deleted file mode 100644 index 14c6c8f..0000000 Binary files a/old-ss/android/app/src/main/res/drawable-land-xxhdpi/splash.png and /dev/null differ diff --git a/old-ss/android/app/src/main/res/drawable-land-xxxhdpi/splash.png b/old-ss/android/app/src/main/res/drawable-land-xxxhdpi/splash.png deleted file mode 100644 index 244ca25..0000000 Binary files a/old-ss/android/app/src/main/res/drawable-land-xxxhdpi/splash.png and /dev/null differ diff --git a/old-ss/android/app/src/main/res/drawable-port-hdpi/splash.png b/old-ss/android/app/src/main/res/drawable-port-hdpi/splash.png deleted file mode 100644 index 74faaa5..0000000 Binary files a/old-ss/android/app/src/main/res/drawable-port-hdpi/splash.png and /dev/null differ diff --git a/old-ss/android/app/src/main/res/drawable-port-mdpi/splash.png b/old-ss/android/app/src/main/res/drawable-port-mdpi/splash.png deleted file mode 100644 index e944f4a..0000000 Binary files a/old-ss/android/app/src/main/res/drawable-port-mdpi/splash.png and /dev/null differ diff --git a/old-ss/android/app/src/main/res/drawable-port-xhdpi/splash.png b/old-ss/android/app/src/main/res/drawable-port-xhdpi/splash.png deleted file mode 100644 index 564a82f..0000000 Binary files a/old-ss/android/app/src/main/res/drawable-port-xhdpi/splash.png and /dev/null differ diff --git a/old-ss/android/app/src/main/res/drawable-port-xxhdpi/splash.png b/old-ss/android/app/src/main/res/drawable-port-xxhdpi/splash.png deleted file mode 100644 index bfabe68..0000000 Binary files a/old-ss/android/app/src/main/res/drawable-port-xxhdpi/splash.png and /dev/null differ diff --git a/old-ss/android/app/src/main/res/drawable-port-xxxhdpi/splash.png b/old-ss/android/app/src/main/res/drawable-port-xxxhdpi/splash.png deleted file mode 100644 index 6929071..0000000 Binary files a/old-ss/android/app/src/main/res/drawable-port-xxxhdpi/splash.png and /dev/null differ diff --git a/old-ss/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/old-ss/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml deleted file mode 100644 index c7bd21d..0000000 --- a/old-ss/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - diff --git a/old-ss/android/app/src/main/res/drawable/ic_launcher_background.xml b/old-ss/android/app/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index d5fccc5..0000000 --- a/old-ss/android/app/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/old-ss/android/app/src/main/res/drawable/splash.png b/old-ss/android/app/src/main/res/drawable/splash.png deleted file mode 100644 index f7a6492..0000000 Binary files a/old-ss/android/app/src/main/res/drawable/splash.png and /dev/null differ diff --git a/old-ss/android/app/src/main/res/layout/activity_main.xml b/old-ss/android/app/src/main/res/layout/activity_main.xml deleted file mode 100644 index b5ad138..0000000 --- a/old-ss/android/app/src/main/res/layout/activity_main.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - diff --git a/old-ss/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/old-ss/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml deleted file mode 100644 index 036d09b..0000000 --- a/old-ss/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/old-ss/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/old-ss/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml deleted file mode 100644 index 036d09b..0000000 --- a/old-ss/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/old-ss/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/old-ss/android/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index c023e50..0000000 Binary files a/old-ss/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/old-ss/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/old-ss/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png deleted file mode 100644 index 2127973..0000000 Binary files a/old-ss/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png and /dev/null differ diff --git a/old-ss/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/old-ss/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png deleted file mode 100644 index b441f37..0000000 Binary files a/old-ss/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png and /dev/null differ diff --git a/old-ss/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/old-ss/android/app/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 72905b8..0000000 Binary files a/old-ss/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/old-ss/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/old-ss/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png deleted file mode 100644 index 8ed0605..0000000 Binary files a/old-ss/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png and /dev/null differ diff --git a/old-ss/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/old-ss/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png deleted file mode 100644 index 9502e47..0000000 Binary files a/old-ss/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png and /dev/null differ diff --git a/old-ss/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/old-ss/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 4d1e077..0000000 Binary files a/old-ss/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/old-ss/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/old-ss/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png deleted file mode 100644 index df0f158..0000000 Binary files a/old-ss/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png and /dev/null differ diff --git a/old-ss/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/old-ss/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png deleted file mode 100644 index 853db04..0000000 Binary files a/old-ss/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and /dev/null differ diff --git a/old-ss/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/old-ss/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 6cdf97c..0000000 Binary files a/old-ss/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/old-ss/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/old-ss/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png deleted file mode 100644 index 2960cbb..0000000 Binary files a/old-ss/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png and /dev/null differ diff --git a/old-ss/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/old-ss/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png deleted file mode 100644 index 8e3093a..0000000 Binary files a/old-ss/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/old-ss/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/old-ss/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 46de6e2..0000000 Binary files a/old-ss/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/old-ss/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/old-ss/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png deleted file mode 100644 index d2ea9ab..0000000 Binary files a/old-ss/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png and /dev/null differ diff --git a/old-ss/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/old-ss/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png deleted file mode 100644 index a40d73e..0000000 Binary files a/old-ss/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/old-ss/android/app/src/main/res/values/ic_launcher_background.xml b/old-ss/android/app/src/main/res/values/ic_launcher_background.xml deleted file mode 100644 index c5d5899..0000000 --- a/old-ss/android/app/src/main/res/values/ic_launcher_background.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - #FFFFFF - \ No newline at end of file diff --git a/old-ss/android/app/src/main/res/values/strings.xml b/old-ss/android/app/src/main/res/values/strings.xml deleted file mode 100644 index 8a48c0d..0000000 --- a/old-ss/android/app/src/main/res/values/strings.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - SecScore - SecScore - com.sectl.secscore - com.sectl.secscore - diff --git a/old-ss/android/app/src/main/res/values/styles.xml b/old-ss/android/app/src/main/res/values/styles.xml deleted file mode 100644 index be874e5..0000000 --- a/old-ss/android/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/old-ss/android/app/src/main/res/xml/file_paths.xml b/old-ss/android/app/src/main/res/xml/file_paths.xml deleted file mode 100644 index bd0c4d8..0000000 --- a/old-ss/android/app/src/main/res/xml/file_paths.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/old-ss/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java b/old-ss/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java deleted file mode 100644 index 0297327..0000000 --- a/old-ss/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.getcapacitor.myapp; - -import static org.junit.Assert.*; - -import org.junit.Test; - -/** - * Example local unit test, which will execute on the development machine (host). - * - * @see Testing documentation - */ -public class ExampleUnitTest { - - @Test - public void addition_isCorrect() throws Exception { - assertEquals(4, 2 + 2); - } -} diff --git a/old-ss/android/build.gradle b/old-ss/android/build.gradle deleted file mode 100644 index f8f0e43..0000000 --- a/old-ss/android/build.gradle +++ /dev/null @@ -1,29 +0,0 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. - -buildscript { - - repositories { - google() - mavenCentral() - } - dependencies { - classpath 'com.android.tools.build:gradle:8.13.0' - classpath 'com.google.gms:google-services:4.4.4' - - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files - } -} - -apply from: "variables.gradle" - -allprojects { - repositories { - google() - mavenCentral() - } -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/old-ss/android/capacitor.settings.gradle b/old-ss/android/capacitor.settings.gradle deleted file mode 100644 index 04bb42f..0000000 --- a/old-ss/android/capacitor.settings.gradle +++ /dev/null @@ -1,6 +0,0 @@ -// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN -include ':capacitor-android' -project(':capacitor-android').projectDir = new File('../node_modules/.pnpm/@capacitor+android@8.1.0_@capacitor+core@8.1.0/node_modules/@capacitor/android/capacitor') - -include ':capacitor-preferences' -project(':capacitor-preferences').projectDir = new File('../node_modules/.pnpm/@capacitor+preferences@8.0.1_@capacitor+core@8.1.0/node_modules/@capacitor/preferences/android') diff --git a/old-ss/android/gradle.properties b/old-ss/android/gradle.properties deleted file mode 100644 index 2e87c52..0000000 --- a/old-ss/android/gradle.properties +++ /dev/null @@ -1,22 +0,0 @@ -# Project-wide Gradle settings. - -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. - -# For more details on how to configure your build environment visit -# http://www.gradle.org/docs/current/userguide/build_environment.html - -# Specifies the JVM arguments used for the daemon process. -# The setting is particularly useful for tweaking memory settings. -org.gradle.jvmargs=-Xmx1536m - -# When configured, Gradle will run in incubating parallel mode. -# This option should only be used with decoupled projects. More details, visit -# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true - -# AndroidX package structure to make it clearer which packages are bundled with the -# Android operating system, and which are packaged with your app's APK -# https://developer.android.com/topic/libraries/support-library/androidx-rn -android.useAndroidX=true diff --git a/old-ss/android/gradle/wrapper/gradle-wrapper.jar b/old-ss/android/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 1b33c55..0000000 Binary files a/old-ss/android/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/old-ss/android/gradle/wrapper/gradle-wrapper.properties b/old-ss/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 7705927..0000000 --- a/old-ss/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,7 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-all.zip -networkTimeout=10000 -validateDistributionUrl=true -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/old-ss/android/gradlew b/old-ss/android/gradlew deleted file mode 100644 index 23d15a9..0000000 --- a/old-ss/android/gradlew +++ /dev/null @@ -1,251 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH="\\\"\\\"" - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - if ! command -v java >/dev/null 2>&1 - then - die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, -# and any embedded shellness will be escaped. -# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be -# treated as '${Hostname}' itself on the command line. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/old-ss/android/gradlew.bat b/old-ss/android/gradlew.bat deleted file mode 100644 index db3a6ac..0000000 --- a/old-ss/android/gradlew.bat +++ /dev/null @@ -1,94 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem -@rem SPDX-License-Identifier: Apache-2.0 -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH= - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/old-ss/android/settings.gradle b/old-ss/android/settings.gradle deleted file mode 100644 index 3b4431d..0000000 --- a/old-ss/android/settings.gradle +++ /dev/null @@ -1,5 +0,0 @@ -include ':app' -include ':capacitor-cordova-android-plugins' -project(':capacitor-cordova-android-plugins').projectDir = new File('./capacitor-cordova-android-plugins/') - -apply from: 'capacitor.settings.gradle' \ No newline at end of file diff --git a/old-ss/android/variables.gradle b/old-ss/android/variables.gradle deleted file mode 100644 index ee4ba41..0000000 --- a/old-ss/android/variables.gradle +++ /dev/null @@ -1,16 +0,0 @@ -ext { - minSdkVersion = 24 - compileSdkVersion = 36 - targetSdkVersion = 36 - androidxActivityVersion = '1.11.0' - androidxAppCompatVersion = '1.7.1' - androidxCoordinatorLayoutVersion = '1.3.0' - androidxCoreVersion = '1.17.0' - androidxFragmentVersion = '1.8.9' - coreSplashScreenVersion = '1.2.0' - androidxWebkitVersion = '1.14.0' - junitVersion = '4.13.2' - androidxJunitVersion = '1.3.0' - androidxEspressoCoreVersion = '3.7.0' - cordovaAndroidVersion = '14.0.1' -} \ No newline at end of file diff --git a/old-ss/capacitor.config.ts b/old-ss/capacitor.config.ts deleted file mode 100644 index 0a207f6..0000000 --- a/old-ss/capacitor.config.ts +++ /dev/null @@ -1,26 +0,0 @@ -import type { CapacitorConfig } from '@capacitor/cli' - -const config: CapacitorConfig = { - appId: 'com.sectl.secscore', - appName: 'SecScore', - webDir: 'out', - server: { - androidScheme: 'https' - }, - plugins: { - Preferences: { - group: 'SecScore' - } - }, - android: { - buildOptions: { - keystorePath: undefined, - keystorePassword: undefined, - keystoreAlias: undefined, - keystoreAliasPassword: undefined, - signingType: 'apksigner' - } - } -} - -export default config diff --git a/old-ss/electron-builder.yml b/old-ss/electron-builder.yml deleted file mode 100644 index 2b61864..0000000 --- a/old-ss/electron-builder.yml +++ /dev/null @@ -1,75 +0,0 @@ -appId: com.secscore.app -productName: SecScore -directories: - buildResources: build -protocols: - - name: SecScore URL Protocol - schemes: - - secscore - role: Viewer -files: - - '**/*' - - '!**/.vscode/*' - - '!src/*' - - '!electron.vite.config.{js,ts,mjs,cjs}' - - '!{.eslintcache,eslint.config.mjs,.prettierignore,.prettierrc.yaml,dev-app-update.yml,CHANGELOG.md,README.md}' - - '!{.env,.env.*,.npmrc,pnpm-lock.yaml}' - - '!{tsconfig.json,tsconfig.node.json,tsconfig.web.json}' - - '!**/node_modules/get-intrinsic/**' - - '!**/node_modules/dunder-proto/**' - - '!**/node_modules/call-bind/**' - - '!**/node_modules/define-data-property/**' - - '!**/node_modules/has-property-descriptors/**' - - '!**/node_modules/gopd/**' -asarUnpack: - - resources/** -extraFiles: - - from: themes - to: themes - - from: node_modules/get-intrinsic - to: node_modules/get-intrinsic - - from: node_modules/dunder-proto - to: node_modules/dunder-proto - - from: node_modules/call-bind - to: node_modules/call-bind - - from: node_modules/define-data-property - to: node_modules/define-data-property - - from: node_modules/has-property-descriptors - to: node_modules/has-property-descriptors - - from: node_modules/gopd - to: node_modules/gopd -extraResources: - - from: resources - to: assets -win: - target: - - zip - executableName: SecScore - icon: resources/SecScore_logo.ico -nsis: - artifactName: ${name}-${version}-setup.${ext} - shortcutName: ${productName} - uninstallDisplayName: ${productName} - createDesktopShortcut: always - allowToChangeInstallationDirectory: true -mac: - entitlementsInherit: build/entitlements.mac.plist - extendInfo: - - NSCameraUsageDescription: Application requests access to the device's camera. - - NSMicrophoneUsageDescription: Application requests access to the device's microphone. - - NSDocumentsFolderUsageDescription: Application requests access to the user's Documents folder. - - NSDownloadsFolderUsageDescription: Application requests access to the user's Downloads folder. - notarize: false -dmg: - artifactName: ${name}-${version}.${ext} -linux: - target: - - AppImage - - deb - maintainer: electronjs.org - category: Utility -appImage: - artifactName: ${name}-${version}.${ext} -npmRebuild: false -electronDownload: - mirror: https://npmmirror.com/mirrors/electron/ diff --git a/old-ss/electron.vite.config.ts b/old-ss/electron.vite.config.ts deleted file mode 100644 index def98fe..0000000 --- a/old-ss/electron.vite.config.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { resolve } from 'path' -import { defineConfig } from 'electron-vite' -import react from '@vitejs/plugin-react' - -export default defineConfig({ - main: { - build: { - rollupOptions: { - external: [] - } - } - }, - preload: {}, - renderer: { - resolve: { - alias: { - '@renderer': resolve('src/renderer/src') - } - }, - plugins: [react()] - } -}) diff --git a/old-ss/eslint.config.mjs b/old-ss/eslint.config.mjs deleted file mode 100644 index e4fc897..0000000 --- a/old-ss/eslint.config.mjs +++ /dev/null @@ -1,40 +0,0 @@ -import { defineConfig } from 'eslint/config' -import tseslint from '@electron-toolkit/eslint-config-ts' -import eslintConfigPrettier from '@electron-toolkit/eslint-config-prettier' -import eslintPluginReact from 'eslint-plugin-react' -import eslintPluginReactHooks from 'eslint-plugin-react-hooks' -import eslintPluginReactRefresh from 'eslint-plugin-react-refresh' - -export default defineConfig( - { ignores: ['**/node_modules', '**/dist', '**/out', 'scripts/**', 'secrandom_ipc_send_url.js'] }, - tseslint.configs.recommended, - eslintPluginReact.configs.flat.recommended, - eslintPluginReact.configs.flat['jsx-runtime'], - { - settings: { - react: { - version: 'detect' - } - } - }, - { - files: ['**/*.{ts,tsx}'], - plugins: { - 'react-hooks': eslintPluginReactHooks, - 'react-refresh': eslintPluginReactRefresh - }, - rules: { - ...eslintPluginReactHooks.configs.recommended.rules, - ...eslintPluginReactRefresh.configs.vite.rules, - '@typescript-eslint/explicit-function-return-type': 'off', - '@typescript-eslint/no-explicit-any': 'off', - 'react-refresh/only-export-components': 'off', - 'react-hooks/exhaustive-deps': 'warn', - 'react-hooks/set-state-in-effect': 'off', - '@typescript-eslint/no-require-imports': 'off', - // we use TypeScript types instead of PropTypes in React components - 'react/prop-types': 'off' - } - }, - eslintConfigPrettier -) diff --git a/old-ss/package.json b/old-ss/package.json deleted file mode 100644 index b416888..0000000 --- a/old-ss/package.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "name": "secscore", - "version": "1.0.0", - "description": "SecScore – Your Education Points Management Expert", - "main": "./out/main/index.js", - "author": "example.com", - "homepage": "https://example.org", - "scripts": { - "format": "prettier --write .", - "lint": "eslint --cache .", - "lint:fix": "eslint --cache . --fix", - "typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false", - "typecheck:web": "tsc --noEmit -p tsconfig.web.json --composite false", - "typecheck": "pnpm -s typecheck:node && pnpm -s typecheck:web", - "start": "electron-vite preview", - "dev": "electron-vite dev", - "build": "node scripts/clean-db.mjs && pnpm -s typecheck && electron-vite build", - "postinstall": "electron-builder install-app-deps", - "build:unpack": "pnpm -s build && electron-builder --dir --publish never", - "build:win": "pnpm -s build && electron-builder --win --publish never", - "build:mac": "electron-vite build && electron-builder --mac --publish never", - "build:linux": "electron-vite build && electron-builder --linux --publish never", - "build:mobile": "vite build --config vite.mobile.config.ts", - "cap:sync": "npx cap sync", - "cap:open:android": "npx cap open android", - "mobile:build": "pnpm build:mobile && pnpm cap:sync", - "mobile:android": "pnpm mobile:build && npx cap open android" - }, - "dependencies": { - "@ant-design/icons": "^6.1.0", - "@capacitor/android": "^8.1.0", - "@capacitor/cli": "^8.1.0", - "@capacitor/core": "^8.1.0", - "@capacitor/preferences": "^8.0.1", - "@electron-toolkit/preload": "^3.0.2", - "@electron-toolkit/utils": "^4.0.0", - "@react-querybuilder/antd": "^8.14.0", - "@react-querybuilder/dnd": "^8.14.0", - "antd": "^6.3.1", - "antd-mobile": "^5.42.3", - "better-sqlite3": "^12.6.0", - "chokidar": "^5.0.0", - "dayjs": "^1.11.20", - "es-object-atoms": "^1.1.1", - "express": "^5.2.1", - "i18next": "^25.8.14", - "json-rules-engine": "^7.3.1", - "math-intrinsics": "^1.1.0", - "mica-electron": "^1.5.16", - "os": "^0.1.2", - "pg": "^8.19.0", - "pinyin-pro": "^3.27.0", - "react-dnd": "^16.0.1", - "react-dnd-html5-backend": "^16.0.1", - "react-dnd-touch-backend": "^16.0.1", - "react-i18next": "^16.5.6", - "react-querybuilder": "^8.14.0", - "react-router-dom": "^6.28.0", - "reflect-metadata": "^0.2.2", - "typeorm": "^0.3.27", - "uuid": "^13.0.0", - "winston": "^3.19.0", - "winston-daily-rotate-file": "^5.0.0", - "xlsx": "^0.18.5" - }, - "devDependencies": { - "@electron-toolkit/eslint-config-prettier": "^3.0.0", - "@electron-toolkit/eslint-config-ts": "^3.1.0", - "@electron-toolkit/tsconfig": "^2.0.0", - "@types/better-sqlite3": "^7.6.13", - "@types/node": "^22.19.1", - "@types/pg": "^8.18.0", - "@types/react": "^19.2.7", - "@types/react-dom": "^19.2.3", - "@types/uuid": "^11.0.0", - "@vitejs/plugin-react": "^5.1.1", - "electron": "^39.2.6", - "electron-builder": "^26.0.12", - "electron-vite": "^5.0.0", - "eslint": "^9.39.1", - "eslint-plugin-react": "^7.37.5", - "eslint-plugin-react-hooks": "^7.0.1", - "eslint-plugin-react-refresh": "^0.4.24", - "prettier": "^3.7.4", - "react": "^19.2.1", - "react-dom": "^19.2.1", - "terser": "^5.46.0", - "typescript": "^5.9.3", - "vite": "^7.2.6" - }, - "pnpm": { - "onlyBuiltDependencies": [ - "electron", - "electron-winstaller", - "esbuild" - ] - } -} diff --git a/old-ss/pnpm-lock.yaml b/old-ss/pnpm-lock.yaml deleted file mode 100644 index 49fed07..0000000 --- a/old-ss/pnpm-lock.yaml +++ /dev/null @@ -1,9058 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - '@ant-design/icons': - specifier: ^6.1.0 - version: 6.1.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@capacitor/android': - specifier: ^8.1.0 - version: 8.1.0(@capacitor/core@8.1.0) - '@capacitor/cli': - specifier: ^8.1.0 - version: 8.1.0 - '@capacitor/core': - specifier: ^8.1.0 - version: 8.1.0 - '@capacitor/preferences': - specifier: ^8.0.1 - version: 8.0.1(@capacitor/core@8.1.0) - '@electron-toolkit/preload': - specifier: ^3.0.2 - version: 3.0.2(electron@39.2.7) - '@electron-toolkit/utils': - specifier: ^4.0.0 - version: 4.0.0(electron@39.2.7) - '@react-querybuilder/antd': - specifier: ^8.14.0 - version: 8.14.0(@ant-design/icons@6.1.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(antd@6.3.1(moment@2.30.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(dayjs@1.11.20)(react-querybuilder@8.14.0(@types/react@19.2.8)(react@19.2.3)(redux@5.0.1))(react@19.2.3) - '@react-querybuilder/dnd': - specifier: ^8.14.0 - version: 8.14.0(react-dnd-html5-backend@16.0.1)(react-dnd-touch-backend@16.0.1)(react-dnd@16.0.1(@types/node@22.19.5)(@types/react@19.2.8)(react@19.2.3))(react-querybuilder@8.14.0(@types/react@19.2.8)(react@19.2.3)(redux@5.0.1))(react@19.2.3) - antd: - specifier: ^6.3.1 - version: 6.3.1(moment@2.30.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - antd-mobile: - specifier: ^5.42.3 - version: 5.42.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - better-sqlite3: - specifier: ^12.6.0 - version: 12.6.0 - chokidar: - specifier: ^5.0.0 - version: 5.0.0 - dayjs: - specifier: ^1.11.20 - version: 1.11.20 - es-object-atoms: - specifier: ^1.1.1 - version: 1.1.1 - express: - specifier: ^5.2.1 - version: 5.2.1 - i18next: - specifier: ^25.8.14 - version: 25.8.14(typescript@5.9.3) - json-rules-engine: - specifier: ^7.3.1 - version: 7.3.1 - math-intrinsics: - specifier: ^1.1.0 - version: 1.1.0 - mica-electron: - specifier: ^1.5.16 - version: 1.5.16 - os: {specifier: ^0.1.2, version: 0.1.2} - pg: - specifier: ^8.19.0 - version: 8.19.0 - pinyin-pro: - specifier: ^3.27.0 - version: 3.27.0 - react-dnd: - specifier: ^16.0.1 - version: 16.0.1(@types/node@22.19.5)(@types/react@19.2.8)(react@19.2.3) - react-dnd-html5-backend: - specifier: ^16.0.1 - version: 16.0.1 - react-dnd-touch-backend: - specifier: ^16.0.1 - version: 16.0.1 - react-i18next: - specifier: ^16.5.6 - version: 16.5.6(i18next@25.8.14(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) - react-querybuilder: - specifier: ^8.14.0 - version: 8.14.0(@types/react@19.2.8)(react@19.2.3)(redux@5.0.1) - react-router-dom: - specifier: ^6.28.0 - version: 6.30.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - reflect-metadata: - specifier: ^0.2.2 - version: 0.2.2 - typeorm: - specifier: ^0.3.27 - version: 0.3.28(better-sqlite3@12.6.0)(pg@8.19.0) - uuid: - specifier: ^13.0.0 - version: 13.0.0 - winston: - specifier: ^3.19.0 - version: 3.19.0 - winston-daily-rotate-file: - specifier: ^5.0.0 - version: 5.0.0(winston@3.19.0) - xlsx: - specifier: ^0.18.5 - version: 0.18.5 - devDependencies: - '@electron-toolkit/eslint-config-prettier': - specifier: ^3.0.0 - version: 3.0.0(eslint@9.39.2(jiti@2.6.1))(prettier@3.7.4) - '@electron-toolkit/eslint-config-ts': - specifier: ^3.1.0 - version: 3.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@electron-toolkit/tsconfig': - specifier: ^2.0.0 - version: 2.0.0(@types/node@22.19.5) - '@types/better-sqlite3': - specifier: ^7.6.13 - version: 7.6.13 - '@types/node': - specifier: ^22.19.1 - version: 22.19.5 - '@types/pg': - specifier: ^8.18.0 - version: 8.18.0 - '@types/react': - specifier: ^19.2.7 - version: 19.2.8 - '@types/react-dom': - specifier: ^19.2.3 - version: 19.2.3(@types/react@19.2.8) - '@types/uuid': - specifier: ^11.0.0 - version: 11.0.0 - '@vitejs/plugin-react': - specifier: ^5.1.1 - version: 5.1.2(vite@7.3.1(@types/node@22.19.5)(jiti@2.6.1)(terser@5.46.0)) - electron: - specifier: ^39.2.6 - version: 39.2.7 - electron-builder: - specifier: ^26.0.12 - version: 26.4.0(electron-builder-squirrel-windows@26.4.0) - electron-vite: - specifier: ^5.0.0 - version: 5.0.0(vite@7.3.1(@types/node@22.19.5)(jiti@2.6.1)(terser@5.46.0)) - eslint: - specifier: ^9.39.1 - version: 9.39.2(jiti@2.6.1) - eslint-plugin-react: - specifier: ^7.37.5 - version: 7.37.5(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-react-hooks: - specifier: ^7.0.1 - version: 7.0.1(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-react-refresh: - specifier: ^0.4.24 - version: 0.4.26(eslint@9.39.2(jiti@2.6.1)) - prettier: - specifier: ^3.7.4 - version: 3.7.4 - react: - specifier: ^19.2.1 - version: 19.2.3 - react-dom: - specifier: ^19.2.1 - version: 19.2.3(react@19.2.3) - terser: - specifier: ^5.46.0 - version: 5.46.0 - typescript: - specifier: ^5.9.3 - version: 5.9.3 - vite: - specifier: ^7.2.6 - version: 7.3.1(@types/node@22.19.5)(jiti@2.6.1)(terser@5.46.0) - -packages: - - 7zip-bin@5.2.0: - resolution: {integrity: sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==} - - '@ant-design/colors@8.0.1': - resolution: {integrity: sha512-foPVl0+SWIslGUtD/xBr1p9U4AKzPhNYEseXYRRo5QSzGACYZrQbe11AYJbYfAWnWSpGBx6JjBmSeugUsD9vqQ==} - - '@ant-design/cssinjs-utils@2.1.1': - resolution: {integrity: sha512-RKxkj5pGFB+FkPJ5NGhoX3DK3xsv0pMltha7Ei1AnY3tILeq38L7tuhaWDPQI/5nlPxOog44wvqpNyyGcUsNMg==} - peerDependencies: - react: '>=18' - react-dom: '>=18' - - '@ant-design/cssinjs@2.1.0': - resolution: {integrity: sha512-eZFrPCnrYrF3XtL7qA4L75P0qA3TtZta8H3Yggy7UYFh8gZgu5bSMNF+v4UVCzGxzYmx8ZvPdgOce0BJ6PsW9g==} - peerDependencies: - react: '>=16.0.0' - react-dom: '>=16.0.0' - - '@ant-design/fast-color@3.0.1': - resolution: {integrity: sha512-esKJegpW4nckh0o6kV3Tkb7NPIZYbPnnFxmQDUmL08ukXZAvV85TZBr70eGuke/CIArLaP6aw8lt9KILjnWuOw==} - engines: {node: '>=8.x'} - - '@ant-design/icons-svg@4.4.2': - resolution: {integrity: sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==} - - '@ant-design/icons@6.1.0': - resolution: {integrity: sha512-KrWMu1fIg3w/1F2zfn+JlfNDU8dDqILfA5Tg85iqs1lf8ooyGlbkA+TkwfOKKgqpUmAiRY1PTFpuOU2DAIgSUg==} - engines: {node: '>=8'} - peerDependencies: - react: '>=16.0.0' - react-dom: '>=16.0.0' - - '@ant-design/react-slick@2.0.0': - resolution: {integrity: sha512-HMS9sRoEmZey8LsE/Yo6+klhlzU12PisjrVcydW3So7RdklyEd2qehyU6a7Yp+OYN72mgsYs3NFCyP2lCPFVqg==} - peerDependencies: - react: ^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - '@babel/code-frame@7.27.1': - resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.28.5': - resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.28.5': - resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.28.5': - resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.27.2': - resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-globals@7.28.0': - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.27.1': - resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.28.3': - resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-plugin-utils@7.27.1': - resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.28.5': - resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.27.1': - resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.28.4': - resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.28.5': - resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/plugin-transform-arrow-functions@7.27.1': - resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx-self@7.27.1': - resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx-source@7.27.1': - resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/runtime@7.28.6': - resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==} - engines: {node: '>=6.9.0'} - - '@babel/template@7.27.2': - resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.28.5': - resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.28.5': - resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} - engines: {node: '>=6.9.0'} - - '@capacitor/android@8.1.0': - resolution: {integrity: sha512-z0acTPxj5DCy/U2FU7w+GA93oC+wdyKnsOcRg5rutDmSYa8Do1tzYqApKgf+hnuTNPbtrCTHp0Zy1cLiK/4MEw==} - peerDependencies: - '@capacitor/core': ^8.1.0 - - '@capacitor/cli@8.1.0': - resolution: {integrity: sha512-JAzA/ckPgTCjZz6YumBLV2dNCFEVXAuR1oOKLD7AJ4LAI5pF5RtRZrf5FoaxvJVb0S4CouZT5cD+7NwsNJX/nw==} - engines: {node: '>=22.0.0'} - hasBin: true - - '@capacitor/core@8.1.0': - resolution: {integrity: sha512-UfMBMWc1v7J+14AhH03QmeNwV3HZx3qnOWhpwnHfzALEwAwlV/itQOQqcasMQYhOHWL0tiymc5ByaLTn7KKQxw==} - - '@capacitor/preferences@8.0.1': - resolution: {integrity: sha512-T6no3ebi79XJCk91U3Jp/liJUwgBdvHR+s6vhvPkPxSuch7z3zx5Rv1bdWM6sWruNx+pViuEGqZvbfCdyBvcHQ==} - peerDependencies: - '@capacitor/core': '>=8.0.0' - - '@colors/colors@1.6.0': - resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} - engines: {node: '>=0.1.90'} - - '@dabh/diagnostics@2.0.8': - resolution: {integrity: sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==} - - '@develar/schema-utils@2.6.5': - resolution: {integrity: sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==} - engines: {node: '>= 8.9.0'} - - '@electron-toolkit/eslint-config-prettier@3.0.0': - resolution: {integrity: sha512-YapmIOVkbYdHLuTa+ad1SAVtcqYL9A/SJsc7cxQokmhcwAwonGevNom37jBf9slXegcZ/Slh01I/JARG1yhNFw==} - peerDependencies: - eslint: '>= 9.0.0' - prettier: '>= 3.0.0' - - '@electron-toolkit/eslint-config-ts@3.1.0': - resolution: {integrity: sha512-MowZQKd3yxXSDLack5QvjQwYHhpOJFoWBGBwJ/k+DCd7NUSendplECbQGFp86tPQYPUrPBPceR/hdsSAnaY5ZQ==} - peerDependencies: - eslint: '>=9.0.0' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@electron-toolkit/preload@3.0.2': - resolution: {integrity: sha512-TWWPToXd8qPRfSXwzf5KVhpXMfONaUuRAZJHsKthKgZR/+LqX1dZVSSClQ8OTAEduvLGdecljCsoT2jSshfoUg==} - peerDependencies: - electron: '>=13.0.0' - - '@electron-toolkit/tsconfig@2.0.0': - resolution: {integrity: sha512-AdPsP770WhW7b260h13SHMdmjEEHJL6xFtgi3jwgdsSQbJOkJLeNnnpZW9qxTPCvmRI6vmdzWz5K3gibFS6SNg==} - peerDependencies: - '@types/node': '*' - - '@electron-toolkit/utils@4.0.0': - resolution: {integrity: sha512-qXSntwEzluSzKl4z5yFNBknmPGjPa3zFhE4mp9+h0cgokY5ornAeP+CJQDBhKsL1S58aOQfcwkD3NwLZCl+64g==} - peerDependencies: - electron: '>=13.0.0' - - '@electron/asar@3.4.1': - resolution: {integrity: sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==} - engines: {node: '>=10.12.0'} - hasBin: true - - '@electron/fuses@1.8.0': - resolution: {integrity: sha512-zx0EIq78WlY/lBb1uXlziZmDZI4ubcCXIMJ4uGjXzZW0nS19TjSPeXPAjzzTmKQlJUZm0SbmZhPKP7tuQ1SsEw==} - hasBin: true - - '@electron/get@2.0.3': - resolution: {integrity: sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==} - engines: {node: '>=12'} - - '@electron/notarize@2.5.0': - resolution: {integrity: sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==} - engines: {node: '>= 10.0.0'} - - '@electron/osx-sign@1.3.3': - resolution: {integrity: sha512-KZ8mhXvWv2rIEgMbWZ4y33bDHyUKMXnx4M0sTyPNK/vcB81ImdeY9Ggdqy0SWbMDgmbqyQ+phgejh6V3R2QuSg==} - engines: {node: '>=12.0.0'} - hasBin: true - - '@electron/rebuild@4.0.1': - resolution: {integrity: sha512-iMGXb6Ib7H/Q3v+BKZJoETgF9g6KMNZVbsO4b7Dmpgb5qTFqyFTzqW9F3TOSHdybv2vKYKzSS9OiZL+dcJb+1Q==} - engines: {node: '>=22.12.0'} - hasBin: true - - '@electron/universal@2.0.3': - resolution: {integrity: sha512-Wn9sPYIVFRFl5HmwMJkARCCf7rqK/EurkfQ/rJZ14mHP3iYTjZSIOSVonEAnhWeAXwtw7zOekGRlc6yTtZ0t+g==} - engines: {node: '>=16.4'} - - '@electron/windows-sign@1.2.2': - resolution: {integrity: sha512-dfZeox66AvdPtb2lD8OsIIQh12Tp0GNCRUDfBHIKGpbmopZto2/A8nSpYYLoedPIHpqkeblZ/k8OV0Gy7PYuyQ==} - engines: {node: '>=14.14'} - hasBin: true - - '@emotion/hash@0.8.0': - resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==} - - '@emotion/unitless@0.7.5': - resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==} - - '@esbuild/aix-ppc64@0.25.12': - resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/aix-ppc64@0.27.2': - resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.25.12': - resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.27.2': - resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.25.12': - resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.27.2': - resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.25.12': - resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/android-x64@0.27.2': - resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.25.12': - resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-arm64@0.27.2': - resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.25.12': - resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/darwin-x64@0.27.2': - resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.25.12': - resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-arm64@0.27.2': - resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.25.12': - resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.27.2': - resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.25.12': - resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm64@0.27.2': - resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.25.12': - resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-arm@0.27.2': - resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.25.12': - resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-ia32@0.27.2': - resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.25.12': - resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-loong64@0.27.2': - resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.25.12': - resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-mips64el@0.27.2': - resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.25.12': - resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-ppc64@0.27.2': - resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.25.12': - resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-riscv64@0.27.2': - resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.25.12': - resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-s390x@0.27.2': - resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.25.12': - resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/linux-x64@0.27.2': - resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-arm64@0.25.12': - resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-arm64@0.27.2': - resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.25.12': - resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.27.2': - resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.25.12': - resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-arm64@0.27.2': - resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.25.12': - resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.27.2': - resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openharmony-arm64@0.25.12': - resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/openharmony-arm64@0.27.2': - resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/sunos-x64@0.25.12': - resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/sunos-x64@0.27.2': - resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.25.12': - resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-arm64@0.27.2': - resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.25.12': - resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-ia32@0.27.2': - resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.25.12': - resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@esbuild/win32-x64@0.27.2': - resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@eslint-community/eslint-utils@4.9.1': - resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/regexpp@4.12.2': - resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/config-array@0.21.1': - resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/config-helpers@0.4.2': - resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/core@0.17.0': - resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/eslintrc@3.3.3': - resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/js@9.39.2': - resolution: {integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/object-schema@2.1.7': - resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/plugin-kit@0.4.1': - resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@floating-ui/core@1.7.4': - resolution: {integrity: sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==} - - '@floating-ui/dom@1.7.5': - resolution: {integrity: sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==} - - '@floating-ui/utils@0.2.10': - resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} - - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} - engines: {node: '>=18.18.0'} - - '@humanfs/node@0.16.7': - resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} - engines: {node: '>=18.18.0'} - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/retry@0.4.3': - resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} - engines: {node: '>=18.18'} - - '@ionic/cli-framework-output@2.2.8': - resolution: {integrity: sha512-TshtaFQsovB4NWRBydbNFawql6yul7d5bMiW1WYYf17hd99V6xdDdk3vtF51bw6sLkxON3bDQpWsnUc9/hVo3g==} - engines: {node: '>=16.0.0'} - - '@ionic/utils-array@2.1.6': - resolution: {integrity: sha512-0JZ1Zkp3wURnv8oq6Qt7fMPo5MpjbLoUoa9Bu2Q4PJuSDWM8H8gwF3dQO7VTeUj3/0o1IB1wGkFWZZYgUXZMUg==} - engines: {node: '>=16.0.0'} - - '@ionic/utils-fs@3.1.7': - resolution: {integrity: sha512-2EknRvMVfhnyhL1VhFkSLa5gOcycK91VnjfrTB0kbqkTFCOXyXgVLI5whzq7SLrgD9t1aqos3lMMQyVzaQ5gVA==} - engines: {node: '>=16.0.0'} - - '@ionic/utils-object@2.1.6': - resolution: {integrity: sha512-vCl7sl6JjBHFw99CuAqHljYJpcE88YaH2ZW4ELiC/Zwxl5tiwn4kbdP/gxi2OT3MQb1vOtgAmSNRtusvgxI8ww==} - engines: {node: '>=16.0.0'} - - '@ionic/utils-process@2.1.12': - resolution: {integrity: sha512-Jqkgyq7zBs/v/J3YvKtQQiIcxfJyplPgECMWgdO0E1fKrrH8EF0QGHNJ9mJCn6PYe2UtHNS8JJf5G21e09DfYg==} - engines: {node: '>=16.0.0'} - - '@ionic/utils-stream@3.1.7': - resolution: {integrity: sha512-eSELBE7NWNFIHTbTC2jiMvh1ABKGIpGdUIvARsNPMNQhxJB3wpwdiVnoBoTYp+5a6UUIww4Kpg7v6S7iTctH1w==} - engines: {node: '>=16.0.0'} - - '@ionic/utils-subprocess@3.0.1': - resolution: {integrity: sha512-cT4te3AQQPeIM9WCwIg8ohroJ8TjsYaMb2G4ZEgv9YzeDqHZ4JpeIKqG2SoaA3GmVQ3sOfhPM6Ox9sxphV/d1A==} - engines: {node: '>=16.0.0'} - - '@ionic/utils-terminal@2.3.5': - resolution: {integrity: sha512-3cKScz9Jx2/Pr9ijj1OzGlBDfcmx7OMVBt4+P1uRR0SSW4cm1/y3Mo4OY3lfkuaYifMNBW8Wz6lQHbs1bihr7A==} - engines: {node: '>=16.0.0'} - - '@isaacs/balanced-match@4.0.1': - resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} - engines: {node: 20 || >=22} - - '@isaacs/brace-expansion@5.0.0': - resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} - engines: {node: 20 || >=22} - - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - - '@isaacs/fs-minipass@4.0.1': - resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} - engines: {node: '>=18.0.0'} - - '@jridgewell/gen-mapping@0.3.13': - resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} - - '@jridgewell/remapping@2.3.5': - resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/source-map@0.3.11': - resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} - - '@jridgewell/sourcemap-codec@1.5.5': - resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - - '@jridgewell/trace-mapping@0.3.31': - resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - - '@jsep-plugin/assignment@1.3.0': - resolution: {integrity: sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==} - engines: {node: '>= 10.16.0'} - peerDependencies: - jsep: ^0.4.0||^1.0.0 - - '@jsep-plugin/regex@1.0.4': - resolution: {integrity: sha512-q7qL4Mgjs1vByCaTnDFcBnV9HS7GVPJX5vyVoCgZHNSC9rjwIlmbXG5sUuorR5ndfHAIlJ8pVStxvjXHbNvtUg==} - engines: {node: '>= 10.16.0'} - peerDependencies: - jsep: ^0.4.0||^1.0.0 - - '@malept/cross-spawn-promise@2.0.0': - resolution: {integrity: sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==} - engines: {node: '>= 12.13.0'} - - '@malept/flatpak-bundler@0.4.0': - resolution: {integrity: sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==} - engines: {node: '>= 10.0.0'} - - '@npmcli/agent@3.0.0': - resolution: {integrity: sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==} - engines: {node: ^18.17.0 || >=20.5.0} - - '@npmcli/fs@4.0.0': - resolution: {integrity: sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==} - engines: {node: ^18.17.0 || >=20.5.0} - - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - - '@pkgr/core@0.2.9': - resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - - '@rc-component/async-validator@5.1.0': - resolution: {integrity: sha512-n4HcR5siNUXRX23nDizbZBQPO0ZM/5oTtmKZ6/eqL0L2bo747cklFdZGRN2f+c9qWGICwDzrhW0H7tE9PptdcA==} - engines: {node: '>=14.x'} - - '@rc-component/cascader@1.14.0': - resolution: {integrity: sha512-Ip9356xwZUR2nbW5PRVGif4B/bDve4pLa/N+PGbvBaTnjbvmN4PFMBGQSmlDlzKP1ovxaYMvwF/dI9lXNLT4iQ==} - peerDependencies: - react: '>=18.0.0' - react-dom: '>=18.0.0' - - '@rc-component/checkbox@2.0.0': - resolution: {integrity: sha512-3CXGPpAR9gsPKeO2N78HAPOzU30UdemD6HGJoWVJOpa6WleaGB5kzZj3v6bdTZab31YuWgY/RxV3VKPctn0DwQ==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@rc-component/collapse@1.2.0': - resolution: {integrity: sha512-ZRYSKSS39qsFx93p26bde7JUZJshsUBEQRlRXPuJYlAiNX0vyYlF5TsAm8JZN3LcF8XvKikdzPbgAtXSbkLUkw==} - peerDependencies: - react: '>=18.0.0' - react-dom: '>=18.0.0' - - '@rc-component/color-picker@3.1.1': - resolution: {integrity: sha512-OHaCHLHszCegdXmIq2ZRIZBN/EtpT6Wm8SG/gpzLATHbVKc/avvuKi+zlOuk05FTWvgaMmpxAko44uRJ3M+2pg==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@rc-component/context@2.0.1': - resolution: {integrity: sha512-HyZbYm47s/YqtP6pKXNMjPEMaukyg7P0qVfgMLzr7YiFNMHbK2fKTAGzms9ykfGHSfyf75nBbgWw+hHkp+VImw==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@rc-component/dialog@1.8.4': - resolution: {integrity: sha512-Ay6PM7phkTkquplG8fWfUGFZ2GTLx9diTl4f0d8Eqxd7W1u1KjE9AQooFQHOHnhZf0Ya3z51+5EKCWHmt/dNEw==} - peerDependencies: - react: '>=18.0.0' - react-dom: '>=18.0.0' - - '@rc-component/drawer@1.4.2': - resolution: {integrity: sha512-1ib+fZEp6FBu+YvcIktm+nCQ+Q+qIpwpoaJH6opGr4ofh2QMq+qdr5DLC4oCf5qf3pcWX9lUWPYX652k4ini8Q==} - peerDependencies: - react: '>=18.0.0' - react-dom: '>=18.0.0' - - '@rc-component/dropdown@1.0.2': - resolution: {integrity: sha512-6PY2ecUSYhDPhkNHHb4wfeAya04WhpmUSKzdR60G+kMNVUCX2vjT/AgTS0Lz0I/K6xrPMJ3enQbwVpeN3sHCgg==} - peerDependencies: - react: '>=16.11.0' - react-dom: '>=16.11.0' - - '@rc-component/form@1.6.2': - resolution: {integrity: sha512-OgIn2RAoaSBqaIgzJf/X6iflIa9LpTozci1lagLBdURDFhGA370v0+T0tXxOi8YShMjTha531sFhwtnrv+EJaQ==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@rc-component/image@1.6.0': - resolution: {integrity: sha512-tSfn2ZE/oP082g4QIOxeehkmgnXB7R+5AFj/lIFr4k7pEuxHBdyGIq9axoCY9qea8NN0DY6p4IB/F07tLqaT5A==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@rc-component/input-number@1.6.2': - resolution: {integrity: sha512-Gjcq7meZlCOiWN1t1xCC+7/s85humHVokTBI7PJgTfoyw5OWF74y3e6P8PHX104g9+b54jsodFIzyaj6p8LI9w==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@rc-component/input@1.1.2': - resolution: {integrity: sha512-Q61IMR47piUBudgixJ30CciKIy9b1H95qe7GgEKOmSJVJXvFRWJllJfQry9tif+MX2cWFXWJf/RXz4kaCeq/Fg==} - peerDependencies: - react: '>=16.0.0' - react-dom: '>=16.0.0' - - '@rc-component/mentions@1.6.0': - resolution: {integrity: sha512-KIkQNP6habNuTsLhUv0UGEOwG67tlmE7KNIJoQZZNggEZl5lQJTytFDb69sl5CK3TDdISCTjKP3nGEBKgT61CQ==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@rc-component/menu@1.2.0': - resolution: {integrity: sha512-VWwDuhvYHSnTGj4n6bV3ISrLACcPAzdPOq3d0BzkeiM5cve8BEYfvkEhNoM0PLzv51jpcejeyrLXeMVIJ+QJlg==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@rc-component/mini-decimal@1.1.0': - resolution: {integrity: sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==} - engines: {node: '>=8.x'} - - '@rc-component/motion@1.3.1': - resolution: {integrity: sha512-Wo1mkd0tCcHtvYvpPOmlYJz546z16qlsiwaygmW7NPJpOZOF9GBjhGzdzZSsC2lEJ1IUkWLF4gMHlRA1aSA+Yw==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@rc-component/mutate-observer@2.0.1': - resolution: {integrity: sha512-AyarjoLU5YlxuValRi+w8JRH2Z84TBbFO2RoGWz9d8bSu0FqT8DtugH3xC3BV7mUwlmROFauyWuXFuq4IFbH+w==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@rc-component/notification@1.2.0': - resolution: {integrity: sha512-OX3J+zVU7rvoJCikjrfW7qOUp7zlDeFBK2eA3SFbGSkDqo63Sl4Ss8A04kFP+fxHSxMDIS9jYVEZtU1FNCFuBA==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@rc-component/overflow@1.0.0': - resolution: {integrity: sha512-GSlBeoE0XTBi5cf3zl8Qh7Uqhn7v8RrlJ8ajeVpEkNe94HWy5l5BQ0Mwn2TVUq9gdgbfEMUmTX7tJFAg7mz0Rw==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@rc-component/pagination@1.2.0': - resolution: {integrity: sha512-YcpUFE8dMLfSo6OARJlK6DbHHvrxz7pMGPGmC/caZSJJz6HRKHC1RPP001PRHCvG9Z/veD039uOQmazVuLJzlw==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@rc-component/picker@1.9.0': - resolution: {integrity: sha512-OLisdk8AWVCG9goBU1dWzuH5QlBQk8jktmQ6p0/IyBFwdKGwyIZOSjnBYo8hooHiTdl0lU+wGf/OfMtVBw02KQ==} - engines: {node: '>=12.x'} - peerDependencies: - date-fns: '>= 2.x' - dayjs: '>= 1.x' - luxon: '>= 3.x' - moment: '>= 2.x' - react: '>=16.9.0' - react-dom: '>=16.9.0' - peerDependenciesMeta: - date-fns: - optional: true - dayjs: - optional: true - luxon: - optional: true - moment: - optional: true - - '@rc-component/portal@2.2.0': - resolution: {integrity: sha512-oc6FlA+uXCMiwArHsJyHcIkX4q6uKyndrPol2eWX8YPkAnztHOPsFIRtmWG4BMlGE5h7YIRE3NiaJ5VS8Lb1QQ==} - engines: {node: '>=12.x'} - peerDependencies: - react: '>=18.0.0' - react-dom: '>=18.0.0' - - '@rc-component/progress@1.0.2': - resolution: {integrity: sha512-WZUnH9eGxH1+xodZKqdrHke59uyGZSWgj5HBM5Kwk5BrTMuAORO7VJ2IP5Qbm9aH3n9x3IcesqHHR0NWPBC7fQ==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@rc-component/qrcode@1.1.1': - resolution: {integrity: sha512-LfLGNymzKdUPjXUbRP+xOhIWY4jQ+YMj5MmWAcgcAq1Ij8XP7tRmAXqyuv96XvLUBE/5cA8hLFl9eO1JQMujrA==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@rc-component/rate@1.0.1': - resolution: {integrity: sha512-bkXxeBqDpl5IOC7yL7GcSYjQx9G8H+6kLYQnNZWeBYq2OYIv1MONd6mqKTjnnJYpV0cQIU2z3atdW0j1kttpTw==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@rc-component/resize-observer@1.1.1': - resolution: {integrity: sha512-NfXXMmiR+SmUuKE1NwJESzEUYUFWIDUn2uXpxCTOLwiRUUakd62DRNFjRJArgzyFW8S5rsL4aX5XlyIXyC/vRA==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@rc-component/segmented@1.3.0': - resolution: {integrity: sha512-5J/bJ01mbDnoA6P/FW8SxUvKn+OgUSTZJPzCNnTBntG50tzoP7DydGhqxp7ggZXZls7me3mc2EQDXakU3iTVFg==} - peerDependencies: - react: '>=16.0.0' - react-dom: '>=16.0.0' - - '@rc-component/select@1.6.13': - resolution: {integrity: sha512-Rz5tWhicICyKEu3Z9OakYAMHmHgRAvtSG3OHNZILdw1rEo+3wAAbM2cH/kwXq1jTA36etU1te++oZOm94rmzYw==} - engines: {node: '>=8.x'} - peerDependencies: - react: '*' - react-dom: '*' - - '@rc-component/slider@1.0.1': - resolution: {integrity: sha512-uDhEPU1z3WDfCJhaL9jfd2ha/Eqpdfxsn0Zb0Xcq1NGQAman0TWaR37OWp2vVXEOdV2y0njSILTMpTfPV1454g==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@rc-component/steps@1.2.2': - resolution: {integrity: sha512-/yVIZ00gDYYPHSY0JP+M+s3ZvuXLu2f9rEjQqiUDs7EcYsUYrpJ/1bLj9aI9R7MBR3fu/NGh6RM9u2qGfqp+Nw==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@rc-component/switch@1.0.3': - resolution: {integrity: sha512-Jgi+EbOBquje/XNdofr7xbJQZPYJP+BlPfR0h+WN4zFkdtB2EWqEfvkXJWeipflwjWip0/17rNbxEAqs8hVHfw==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@rc-component/table@1.9.1': - resolution: {integrity: sha512-FVI5ZS/GdB3BcgexfCYKi3iHhZS3Fr59EtsxORszYGrfpH1eWr33eDNSYkVfLI6tfJ7vftJDd9D5apfFWqkdJg==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=18.0.0' - react-dom: '>=18.0.0' - - '@rc-component/tabs@1.7.0': - resolution: {integrity: sha512-J48cs2iBi7Ho3nptBxxIqizEliUC+ExE23faspUQKGQ550vaBlv3aGF8Epv/UB1vFWeoJDTW/dNzgIU0Qj5i/w==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@rc-component/textarea@1.1.2': - resolution: {integrity: sha512-9rMUEODWZDMovfScIEHXWlVZuPljZ2pd1LKNjslJVitn4SldEzq5vO1CL3yy3Dnib6zZal2r2DPtjy84VVpF6A==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@rc-component/tooltip@1.4.0': - resolution: {integrity: sha512-8Rx5DCctIlLI4raR0I0xHjVTf1aF48+gKCNeAAo5bmF5VoR5YED+A/XEqzXv9KKqrJDRcd3Wndpxh2hyzrTtSg==} - peerDependencies: - react: '>=18.0.0' - react-dom: '>=18.0.0' - - '@rc-component/tour@2.3.0': - resolution: {integrity: sha512-K04K9r32kUC+auBSQfr+Fss4SpSIS9JGe56oq/ALAX0p+i2ylYOI1MgR83yBY7v96eO6ZFXcM/igCQmubps0Ow==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@rc-component/tree-select@1.8.0': - resolution: {integrity: sha512-iYsPq3nuLYvGqdvFAW+l+I9ASRIOVbMXyA8FGZg2lGym/GwkaWeJGzI4eJ7c9IOEhRj0oyfIN4S92Fl3J05mjQ==} - peerDependencies: - react: '*' - react-dom: '*' - - '@rc-component/tree@1.2.3': - resolution: {integrity: sha512-mG8hF2ogQcKaEpfyxzPvMWqqkptofd7Sf+YiXOpPzuXLTLwNKfLDJtysc1/oybopbnzxNqWh2Vgwi+GYwNIb7w==} - engines: {node: '>=10.x'} - peerDependencies: - react: '*' - react-dom: '*' - - '@rc-component/trigger@3.9.0': - resolution: {integrity: sha512-X8btpwfrT27AgrZVOz4swclhEHTZcqaHeQMXXBgveagOiakTa36uObXbdwerXffgV8G9dH1fAAE0DHtVQs8EHg==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=18.0.0' - react-dom: '>=18.0.0' - - '@rc-component/upload@1.1.0': - resolution: {integrity: sha512-LIBV90mAnUE6VK5N4QvForoxZc4XqEYZimcp7fk+lkE4XwHHyJWxpIXQQwMU8hJM+YwBbsoZkGksL1sISWHQxw==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@rc-component/util@1.9.0': - resolution: {integrity: sha512-5uW6AfhIigCWeEQDthTozlxiT4Prn6xYQWeO0xokjcaa186OtwPRHBZJ2o0T0FhbjGhZ3vXdbkv0sx3gAYW7Vg==} - peerDependencies: - react: '>=18.0.0' - react-dom: '>=18.0.0' - - '@rc-component/virtual-list@1.0.2': - resolution: {integrity: sha512-uvTol/mH74FYsn5loDGJxo+7kjkO4i+y4j87Re1pxJBs0FaeuMuLRzQRGaXwnMcV1CxpZLi2Z56Rerj2M00fjQ==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@react-dnd/asap@5.0.2': - resolution: {integrity: sha512-WLyfoHvxhs0V9U+GTsGilGgf2QsPl6ZZ44fnv0/b8T3nQyvzxidxsg/ZltbWssbsRDlYW8UKSQMTGotuTotZ6A==} - - '@react-dnd/invariant@4.0.2': - resolution: {integrity: sha512-xKCTqAK/FFauOM9Ta2pswIyT3D8AQlfrYdOi/toTPEhqCuAs1v5tcJ3Y08Izh1cJ5Jchwy9SeAXmMg6zrKs2iw==} - - '@react-dnd/shallowequal@4.0.2': - resolution: {integrity: sha512-/RVXdLvJxLg4QKvMoM5WlwNR9ViO9z8B/qPcc+C0Sa/teJY7QG7kJ441DwzOjMYEY7GmU4dj5EcGHIkKZiQZCA==} - - '@react-querybuilder/antd@8.14.0': - resolution: {integrity: sha512-H6SMCmKtciOIJyXo29oLMMDIG1+ydE7eoIqAIhItsvJN7iLcAPhvKd5+CuHyOWj9tokEAHGpdm4BP+KPFAxTNw==} - peerDependencies: - '@ant-design/icons': '>=5' - antd: '>=5.11.0' - dayjs: '>=1' - react: '>=18' - react-querybuilder: 8.14.0 - - '@react-querybuilder/core@8.14.0': - resolution: {integrity: sha512-j1pIY0Yyn/dXu9ZST/DVY7TqRmIO1hY/mZ8653DaeHaDzUF37tOdkm/NQDU9RfM0KXIWsJY5zlvYAR1DypZ+7g==} - peerDependencies: - drizzle-orm: '>=0.38.0' - json-logic-js: '>=2' - sequelize: '>=6' - peerDependenciesMeta: - drizzle-orm: - optional: true - json-logic-js: - optional: true - sequelize: - optional: true - - '@react-querybuilder/dnd@8.14.0': - resolution: {integrity: sha512-g0BHs9Vtbm7OhnhIq1pxJNY3JXNmSbA7NVTlOuqoAfFl0D46rZfGInVzoBfpwVpoLtQIXPO25Y5N/1/LcWuSNg==} - peerDependencies: - react: '>=18' - react-dnd: '>=14.0.0' - react-dnd-html5-backend: '>=14.0.0' - react-dnd-touch-backend: '>=14.0.0' - react-querybuilder: 8.14.0 - peerDependenciesMeta: - react-dnd-html5-backend: - optional: true - react-dnd-touch-backend: - optional: true - - '@react-spring/animated@9.6.1': - resolution: {integrity: sha512-ls/rJBrAqiAYozjLo5EPPLLOb1LM0lNVQcXODTC1SMtS6DbuBCPaKco5svFUQFMP2dso3O+qcC4k9FsKc0KxMQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - - '@react-spring/core@9.6.1': - resolution: {integrity: sha512-3HAAinAyCPessyQNNXe5W0OHzRfa8Yo5P748paPcmMowZ/4sMfaZ2ZB6e5x5khQI8NusOHj8nquoutd6FRY5WQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - - '@react-spring/rafz@9.6.1': - resolution: {integrity: sha512-v6qbgNRpztJFFfSE3e2W1Uz+g8KnIBs6SmzCzcVVF61GdGfGOuBrbjIcp+nUz301awVmREKi4eMQb2Ab2gGgyQ==} - - '@react-spring/shared@9.6.1': - resolution: {integrity: sha512-PBFBXabxFEuF8enNLkVqMC9h5uLRBo6GQhRMQT/nRTnemVENimgRd+0ZT4yFnAQ0AxWNiJfX3qux+bW2LbG6Bw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - - '@react-spring/types@9.6.1': - resolution: {integrity: sha512-POu8Mk0hIU3lRXB3bGIGe4VHIwwDsQyoD1F394OK7STTiX9w4dG3cTLljjYswkQN+hDSHRrj4O36kuVa7KPU8Q==} - - '@react-spring/web@9.6.1': - resolution: {integrity: sha512-X2zR6q2Z+FjsWfGAmAXlQaoUHbPmfuCaXpuM6TcwXPpLE1ZD4A1eys/wpXboFQmDkjnrlTmKvpVna1MjWpZ5Hw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - - '@reduxjs/toolkit@2.11.2': - resolution: {integrity: sha512-Kd6kAHTA6/nUpp8mySPqj3en3dm0tdMIgbttnQ1xFMVpufoj+ADi8pXLBsd4xzTRHQa7t/Jv8W5UnCuW4kuWMQ==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18 || ^19 - react-redux: ^7.2.1 || ^8.1.3 || ^9.0.0 - peerDependenciesMeta: - react: - optional: true - react-redux: - optional: true - - '@remix-run/router@1.23.2': - resolution: {integrity: sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w==} - engines: {node: '>=14.0.0'} - - '@rolldown/pluginutils@1.0.0-beta.53': - resolution: {integrity: sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==} - - '@rollup/rollup-android-arm-eabi@4.55.1': - resolution: {integrity: sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.55.1': - resolution: {integrity: sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.55.1': - resolution: {integrity: sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.55.1': - resolution: {integrity: sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-freebsd-arm64@4.55.1': - resolution: {integrity: sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.55.1': - resolution: {integrity: sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==} - cpu: [x64] - os: [freebsd] - - '@rollup/rollup-linux-arm-gnueabihf@4.55.1': - resolution: {integrity: sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-arm-musleabihf@4.55.1': - resolution: {integrity: sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==} - cpu: [arm] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-arm64-gnu@4.55.1': - resolution: {integrity: sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-arm64-musl@4.55.1': - resolution: {integrity: sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-loong64-gnu@4.55.1': - resolution: {integrity: sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==} - cpu: [loong64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-loong64-musl@4.55.1': - resolution: {integrity: sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==} - cpu: [loong64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-ppc64-gnu@4.55.1': - resolution: {integrity: sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-ppc64-musl@4.55.1': - resolution: {integrity: sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==} - cpu: [ppc64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-riscv64-gnu@4.55.1': - resolution: {integrity: sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==} - cpu: [riscv64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-riscv64-musl@4.55.1': - resolution: {integrity: sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==} - cpu: [riscv64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-s390x-gnu@4.55.1': - resolution: {integrity: sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-x64-gnu@4.55.1': - resolution: {integrity: sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-x64-musl@4.55.1': - resolution: {integrity: sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==} - cpu: [x64] - os: [linux] - libc: [musl] - - '@rollup/rollup-openbsd-x64@4.55.1': - resolution: {integrity: sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==} - cpu: [x64] - os: [openbsd] - - '@rollup/rollup-openharmony-arm64@4.55.1': - resolution: {integrity: sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==} - cpu: [arm64] - os: [openharmony] - - '@rollup/rollup-win32-arm64-msvc@4.55.1': - resolution: {integrity: sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.55.1': - resolution: {integrity: sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-gnu@4.55.1': - resolution: {integrity: sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==} - cpu: [x64] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.55.1': - resolution: {integrity: sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==} - cpu: [x64] - os: [win32] - - '@sindresorhus/is@4.6.0': - resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} - engines: {node: '>=10'} - - '@so-ric/colorspace@1.1.6': - resolution: {integrity: sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==} - - '@sqltools/formatter@1.2.5': - resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==} - - '@standard-schema/spec@1.1.0': - resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - - '@standard-schema/utils@0.3.0': - resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} - - '@szmarczak/http-timer@4.0.6': - resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} - engines: {node: '>=10'} - - '@ts-jison/common@0.4.1-alpha.1': - resolution: {integrity: sha512-SDbHzq+UMD+V3ciKVBHwCEgVqSeyQPTCjOsd/ZNTGySUVg4x3EauR9ZcEfdVFAsYRR38XWgDI+spq5LDY46KvQ==} - - '@ts-jison/lexer@0.4.1-alpha.1': - resolution: {integrity: sha512-5C1Wr+wixAzn2MOFtgy7KbT6N6j9mhmbjAtyvOqZKsikKtNOQj22MM5HxT+ooRexG2NbtxnDSXYdhHR1Lg58ow==} - - '@ts-jison/parser@0.4.1-alpha.1': - resolution: {integrity: sha512-xNj+qOez/7dju44LlYiTlCjxMzW5oek9EckUAElfln/GBK9vgMSk0swWcnacMr0TYbGjUQuXvL2wEgmDf5WajQ==} - - '@types/babel__core@7.20.5': - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - - '@types/babel__generator@7.27.0': - resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} - - '@types/babel__template@7.4.4': - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - - '@types/babel__traverse@7.28.0': - resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} - - '@types/better-sqlite3@7.6.13': - resolution: {integrity: sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA==} - - '@types/cacheable-request@6.0.3': - resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} - - '@types/debug@4.1.12': - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - - '@types/fs-extra@8.1.5': - resolution: {integrity: sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==} - - '@types/fs-extra@9.0.13': - resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} - - '@types/http-cache-semantics@4.0.4': - resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} - - '@types/js-cookie@3.0.6': - resolution: {integrity: sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==} - - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - - '@types/keyv@3.1.4': - resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} - - '@types/ms@2.1.0': - resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - - '@types/node@22.19.5': - resolution: {integrity: sha512-HfF8+mYcHPcPypui3w3mvzuIErlNOh2OAG+BCeBZCEwyiD5ls2SiCwEyT47OELtf7M3nHxBdu0FsmzdKxkN52Q==} - - '@types/pg@8.18.0': - resolution: {integrity: sha512-gT+oueVQkqnj6ajGJXblFR4iavIXWsGAFCk3dP4Kki5+a9R4NMt0JARdk6s8cUKcfUoqP5dAtDSLU8xYUTFV+Q==} - - '@types/plist@3.0.5': - resolution: {integrity: sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==} - - '@types/react-dom@19.2.3': - resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} - peerDependencies: - '@types/react': ^19.2.0 - - '@types/react@19.2.8': - resolution: {integrity: sha512-3MbSL37jEchWZz2p2mjntRZtPt837ij10ApxKfgmXCTuHWagYg7iA5bqPw6C8BMPfwidlvfPI/fxOc42HLhcyg==} - - '@types/responselike@1.0.3': - resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} - - '@types/slice-ansi@4.0.0': - resolution: {integrity: sha512-+OpjSaq85gvlZAYINyzKpLeiFkSC4EsC6IIiT6v6TLSU5k5U83fHGj9Lel8oKEXM0HqgrMVCjXPDPVICtxF7EQ==} - - '@types/triple-beam@1.3.5': - resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} - - '@types/use-sync-external-store@0.0.6': - resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} - - '@types/uuid@11.0.0': - resolution: {integrity: sha512-HVyk8nj2m+jcFRNazzqyVKiZezyhDKrGUA3jlEcg/nZ6Ms+qHwocba1Y/AaVaznJTAM9xpdFSh+ptbNrhOGvZA==} - deprecated: This is a stub types definition. uuid provides its own type definitions, so you do not need this installed. - - '@types/verror@1.10.11': - resolution: {integrity: sha512-RlDm9K7+o5stv0Co8i8ZRGxDbrTxhJtgjqjFyVh/tXQyl/rYtTKlnTvZ88oSTeYREWurwx20Js4kTuKCsFkUtg==} - - '@types/yauzl@2.10.3': - resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - - '@typescript-eslint/eslint-plugin@8.52.0': - resolution: {integrity: sha512-okqtOgqu2qmZJ5iN4TWlgfF171dZmx2FzdOv2K/ixL2LZWDStL8+JgQerI2sa8eAEfoydG9+0V96m7V+P8yE1Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.52.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/parser@8.52.0': - resolution: {integrity: sha512-iIACsx8pxRnguSYhHiMn2PvhvfpopO9FXHyn1mG5txZIsAaB6F0KwbFnUQN3KCiG3Jcuad/Cao2FAs1Wp7vAyg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/project-service@8.52.0': - resolution: {integrity: sha512-xD0MfdSdEmeFa3OmVqonHi+Cciab96ls1UhIF/qX/O/gPu5KXD0bY9lu33jj04fjzrXHcuvjBcBC+D3SNSadaw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/scope-manager@8.52.0': - resolution: {integrity: sha512-ixxqmmCcc1Nf8S0mS0TkJ/3LKcC8mruYJPOU6Ia2F/zUUR4pApW7LzrpU3JmtePbRUTes9bEqRc1Gg4iyRnDzA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/tsconfig-utils@8.52.0': - resolution: {integrity: sha512-jl+8fzr/SdzdxWJznq5nvoI7qn2tNYV/ZBAEcaFMVXf+K6jmXvAFrgo/+5rxgnL152f//pDEAYAhhBAZGrVfwg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/type-utils@8.52.0': - resolution: {integrity: sha512-JD3wKBRWglYRQkAtsyGz1AewDu3mTc7NtRjR/ceTyGoPqmdS5oCdx/oZMWD5Zuqmo6/MpsYs0wp6axNt88/2EQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/types@8.52.0': - resolution: {integrity: sha512-LWQV1V4q9V4cT4H5JCIx3481iIFxH1UkVk+ZkGGAV1ZGcjGI9IoFOfg3O6ywz8QqCDEp7Inlg6kovMofsNRaGg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/typescript-estree@8.52.0': - resolution: {integrity: sha512-XP3LClsCc0FsTK5/frGjolyADTh3QmsLp6nKd476xNI9CsSsLnmn4f0jrzNoAulmxlmNIpeXuHYeEQv61Q6qeQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/utils@8.52.0': - resolution: {integrity: sha512-wYndVMWkweqHpEpwPhwqE2lnD2DxC6WVLupU/DOt/0/v+/+iQbbzO3jOHjmBMnhu0DgLULvOaU4h4pwHYi2oRQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/visitor-keys@8.52.0': - resolution: {integrity: sha512-ink3/Zofus34nmBsPjow63FP5M7IGff0RKAgqR6+CFpdk22M7aLwC9gOcLGYqr7MczLPzZVERW9hRog3O4n1sQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@use-gesture/core@10.3.0': - resolution: {integrity: sha512-rh+6MND31zfHcy9VU3dOZCqGY511lvGcfyJenN4cWZe0u1BH6brBpBddLVXhF2r4BMqWbvxfsbL7D287thJU2A==} - - '@use-gesture/react@10.3.0': - resolution: {integrity: sha512-3zc+Ve99z4usVP6l9knYVbVnZgfqhKah7sIG+PS2w+vpig2v2OLct05vs+ZXMzwxdNCMka8B+8WlOo0z6Pn6DA==} - peerDependencies: - react: '>= 16.8.0' - - '@vitejs/plugin-react@5.1.2': - resolution: {integrity: sha512-EcA07pHJouywpzsoTUqNh5NwGayl2PPVEJKUSinGGSxFGYn+shYbqMGBg6FXDqgXum9Ou/ecb+411ssw8HImJQ==} - engines: {node: ^20.19.0 || >=22.12.0} - peerDependencies: - vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - - '@xmldom/xmldom@0.8.11': - resolution: {integrity: sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==} - engines: {node: '>=10.0.0'} - - abbrev@3.0.1: - resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==} - engines: {node: ^18.17.0 || >=20.5.0} - - accepts@2.0.0: - resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} - engines: {node: '>= 0.6'} - - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - acorn@8.15.0: - resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} - engines: {node: '>=0.4.0'} - hasBin: true - - adler-32@1.3.1: - resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} - engines: {node: '>=0.8'} - - agent-base@7.1.4: - resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} - engines: {node: '>= 14'} - - ahooks@3.9.6: - resolution: {integrity: sha512-Mr7f05swd5SmKlR9SZo5U6M0LsL4ErweLzpdgXjA1JPmnZ78Vr6wzx0jUtvoxrcqGKYnX0Yjc02iEASVxHFPjQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - ajv-keywords@3.5.2: - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} - peerDependencies: - ajv: ^6.9.1 - - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-regex@6.2.2: - resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} - engines: {node: '>=12'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - ansi-styles@6.2.3: - resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} - engines: {node: '>=12'} - - ansis@4.2.0: - resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} - engines: {node: '>=14'} - - antd-mobile-icons@0.3.0: - resolution: {integrity: sha512-rqINQpJWZWrva9moCd1Ye695MZYWmqLPE+bY8d2xLRy7iSQwPsinCdZYjpUPp2zL/LnKYSyXxP2ut2A+DC+whQ==} - - antd-mobile-v5-count@1.0.1: - resolution: {integrity: sha512-YGsiEDCPUDz3SzfXi6gLZn/HpeSMW+jgPc4qiYUr1fSopg3hkUie2TnooJdExgfiETHefH3Ggs58He0OVfegLA==} - - antd-mobile@5.42.3: - resolution: {integrity: sha512-HLykA0Cr2am7dgEch/TRUnr4GHgTOM59rA9CVjgBJVVJ8dk2w8uUBz//Bji19sRH2leiUObWY7KQZpsWF+WQeg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - antd@6.3.1: - resolution: {integrity: sha512-8pRjvxitZFyrYAtgwml93Km7fCXjw9IeqlmzpIsusRsmO3eWFVrOMum6+0TsGCtR/WrXVnPwfsgrFg3ChzGCeA==} - peerDependencies: - react: '>=18.0.0' - react-dom: '>=18.0.0' - - app-builder-bin@5.0.0-alpha.12: - resolution: {integrity: sha512-j87o0j6LqPL3QRr8yid6c+Tt5gC7xNfYo6uQIQkorAC6MpeayVMZrEDzKmJJ/Hlv7EnOQpaRm53k6ktDYZyB6w==} - - app-builder-lib@26.4.0: - resolution: {integrity: sha512-Uas6hNe99KzP3xPWxh5LGlH8kWIVjZixzmMJHNB9+6hPyDpjc7NQMkVgi16rQDdpCFy22ZU5sp8ow7tvjeMgYQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - dmg-builder: 26.4.0 - electron-builder-squirrel-windows: 26.4.0 - - app-root-path@3.1.0: - resolution: {integrity: sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==} - engines: {node: '>= 6.0.0'} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - array-buffer-byte-length@1.0.2: - resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} - engines: {node: '>= 0.4'} - - array-includes@3.1.9: - resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} - engines: {node: '>= 0.4'} - - array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} - - array.prototype.flat@1.3.3: - resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} - engines: {node: '>= 0.4'} - - array.prototype.flatmap@1.3.3: - resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} - engines: {node: '>= 0.4'} - - array.prototype.tosorted@1.1.4: - resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} - engines: {node: '>= 0.4'} - - assert-plus@1.0.0: - resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} - engines: {node: '>=0.8'} - - astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} - - async-exit-hook@2.0.1: - resolution: {integrity: sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==} - engines: {node: '>=0.12.0'} - - async-function@1.0.0: - resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} - engines: {node: '>= 0.4'} - - async-validator@4.2.5: - resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} - - async@3.2.6: - resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} - - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - - at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} - - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - balanced-match@4.0.4: - resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} - engines: {node: 18 || 20 || >=22} - - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - - baseline-browser-mapping@2.9.14: - resolution: {integrity: sha512-B0xUquLkiGLgHhpPBqvl7GWegWBUNuujQ6kXd/r1U38ElPT6Ok8KZ8e+FpUGEc2ZoRQUzq/aUnaKFc/svWUGSg==} - hasBin: true - - better-sqlite3@12.6.0: - resolution: {integrity: sha512-FXI191x+D6UPWSze5IzZjhz+i9MK9nsuHsmTX9bXVl52k06AfZ2xql0lrgIUuzsMsJ7Vgl5kIptvDgBLIV3ZSQ==} - engines: {node: 20.x || 22.x || 23.x || 24.x || 25.x} - - big-integer@1.6.52: - resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} - engines: {node: '>=0.6'} - - bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} - - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - - body-parser@2.2.2: - resolution: {integrity: sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==} - engines: {node: '>=18'} - - boolean@3.2.0: - resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - - bplist-parser@0.3.2: - resolution: {integrity: sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==} - engines: {node: '>= 5.10.0'} - - brace-expansion@1.1.12: - resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} - - brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} - - brace-expansion@5.0.4: - resolution: {integrity: sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==} - engines: {node: 18 || 20 || >=22} - - browserslist@4.28.1: - resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - - buffer@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - - builder-util-runtime@9.5.1: - resolution: {integrity: sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ==} - engines: {node: '>=12.0.0'} - - builder-util@26.3.4: - resolution: {integrity: sha512-aRn88mYMktHxzdqDMF6Ayj0rKoX+ZogJ75Ck7RrIqbY/ad0HBvnS2xA4uHfzrGr5D2aLL3vU6OBEH4p0KMV2XQ==} - - bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - - cacache@19.0.1: - resolution: {integrity: sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - cacheable-lookup@5.0.4: - resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} - engines: {node: '>=10.6.0'} - - cacheable-request@7.0.4: - resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} - engines: {node: '>=8'} - - call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} - - call-bind@1.0.8: - resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} - engines: {node: '>= 0.4'} - - call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - caniuse-lite@1.0.30001764: - resolution: {integrity: sha512-9JGuzl2M+vPL+pz70gtMF9sHdMFbY9FJaQBi186cHKH3pSzDvzoUJUPV6fqiKIMyXbud9ZLg4F3Yza1vJ1+93g==} - - cfb@1.2.2: - resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} - engines: {node: '>=0.8'} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - chokidar@5.0.0: - resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} - engines: {node: '>= 20.19.0'} - - chownr@1.1.4: - resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - - chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} - - chownr@3.0.0: - resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} - engines: {node: '>=18'} - - chromium-pickle-js@0.2.0: - resolution: {integrity: sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==} - - ci-info@4.3.1: - resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==} - engines: {node: '>=8'} - - classnames@2.5.1: - resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} - - cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - - cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} - - cli-truncate@2.1.0: - resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} - engines: {node: '>=8'} - - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - - clone-response@1.0.3: - resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} - - clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - - clone@2.1.2: - resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} - engines: {node: '>=0.8'} - - clsx@2.1.1: - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} - engines: {node: '>=6'} - - codepage@1.15.0: - resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} - engines: {node: '>=0.8'} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-convert@3.1.3: - resolution: {integrity: sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==} - engines: {node: '>=14.6'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - color-name@2.1.0: - resolution: {integrity: sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==} - engines: {node: '>=12.20'} - - color-string@2.1.4: - resolution: {integrity: sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==} - engines: {node: '>=18'} - - color@5.0.3: - resolution: {integrity: sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==} - engines: {node: '>=18'} - - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - - commander@12.1.0: - resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} - engines: {node: '>=18'} - - commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - - commander@5.1.0: - resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} - engines: {node: '>= 6'} - - commander@9.5.0: - resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} - engines: {node: ^12.20.0 || >=14} - - compare-version@0.1.2: - resolution: {integrity: sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==} - engines: {node: '>=0.10.0'} - - compute-scroll-into-view@3.1.1: - resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - content-disposition@1.0.1: - resolution: {integrity: sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==} - engines: {node: '>=18'} - - content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - - cookie-signature@1.2.2: - resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} - engines: {node: '>=6.6.0'} - - cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} - - core-util-is@1.0.2: - resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} - - crc-32@1.2.2: - resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} - engines: {node: '>=0.8'} - hasBin: true - - crc@3.8.0: - resolution: {integrity: sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==} - - cross-dirname@0.1.0: - resolution: {integrity: sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==} - - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} - - csstype@3.2.3: - resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} - - data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} - engines: {node: '>= 0.4'} - - data-view-byte-length@1.0.2: - resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} - engines: {node: '>= 0.4'} - - data-view-byte-offset@1.0.1: - resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} - engines: {node: '>= 0.4'} - - dayjs@1.11.20: - resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==} - - debug@4.4.3: - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} - - dedent@1.7.1: - resolution: {integrity: sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==} - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - - deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - - defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - - defer-to-connect@2.0.1: - resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} - engines: {node: '>=10'} - - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - - depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - - detect-libc@2.1.2: - resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} - engines: {node: '>=8'} - - detect-node@2.1.0: - resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - - dir-compare@4.2.0: - resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==} - - dmg-builder@26.4.0: - resolution: {integrity: sha512-ce4Ogns4VMeisIuCSK0C62umG0lFy012jd8LMZ6w/veHUeX4fqfDrGe+HTWALAEwK6JwKP+dhPvizhArSOsFbg==} - - dmg-license@1.0.11: - resolution: {integrity: sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==} - engines: {node: '>=8'} - os: [darwin] - hasBin: true - - dnd-core@16.0.1: - resolution: {integrity: sha512-HK294sl7tbw6F6IeuK16YSBUoorvHpY8RHO+9yFfaJyCDVb6n7PRcezrOEOa2SBCqiYpemh5Jx20ZcjKdFAVng==} - - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - - dotenv-expand@11.0.7: - resolution: {integrity: sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==} - engines: {node: '>=12'} - - dotenv@16.6.1: - resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} - engines: {node: '>=12'} - - dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} - - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - - ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - - ejs@3.1.10: - resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} - engines: {node: '>=0.10.0'} - hasBin: true - - electron-builder-squirrel-windows@26.4.0: - resolution: {integrity: sha512-7dvalY38xBzWNaoOJ4sqy2aGIEpl2S1gLPkkB0MHu1Hu5xKQ82il1mKSFlXs6fLpXUso/NmyjdHGlSHDRoG8/w==} - - electron-builder@26.4.0: - resolution: {integrity: sha512-FCUqvdq2AULL+Db2SUGgjOYTbrgkPxZtCjqIZGnjH9p29pTWyesQqBIfvQBKa6ewqde87aWl49n/WyI/NyUBog==} - engines: {node: '>=14.0.0'} - hasBin: true - - electron-publish@26.3.4: - resolution: {integrity: sha512-5/ouDPb73SkKuay2EXisPG60LTFTMNHWo2WLrK5GDphnWK9UC+yzYrzVeydj078Yk4WUXi0+TaaZsNd6Zt5k/A==} - - electron-to-chromium@1.5.267: - resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==} - - electron-vite@5.0.0: - resolution: {integrity: sha512-OHp/vjdlubNlhNkPkL/+3JD34ii5ov7M0GpuXEVdQeqdQ3ulvVR7Dg/rNBLfS5XPIFwgoBLDf9sjjrL+CuDyRQ==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - peerDependencies: - '@swc/core': ^1.0.0 - vite: ^5.0.0 || ^6.0.0 || ^7.0.0 - peerDependenciesMeta: - '@swc/core': - optional: true - - electron-winstaller@5.4.0: - resolution: {integrity: sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==} - engines: {node: '>=8.0.0'} - - electron@39.2.7: - resolution: {integrity: sha512-KU0uFS6LSTh4aOIC3miolcbizOFP7N1M46VTYVfqIgFiuA2ilfNaOHLDS9tCMvwwHRowAsvqBrh9NgMXcTOHCQ==} - engines: {node: '>= 12.20.55'} - hasBin: true - - elementtree@0.1.7: - resolution: {integrity: sha512-wkgGT6kugeQk/P6VZ/f4T+4HB41BVgNBq5CDIZVbQ02nvTVqAiVTbskxxu3eA/X96lMlfYOwnLQpN2v5E1zDEg==} - engines: {node: '>= 0.4.0'} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - - enabled@2.0.0: - resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} - - encodeurl@2.0.0: - resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} - engines: {node: '>= 0.8'} - - encoding@0.1.13: - resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} - - end-of-stream@1.4.5: - resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} - - env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} - - err-code@2.0.3: - resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - - es-abstract@1.24.1: - resolution: {integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==} - engines: {node: '>= 0.4'} - - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-iterator-helpers@1.2.2: - resolution: {integrity: sha512-BrUQ0cPTB/IwXj23HtwHjS9n7O4h9FX94b4xc5zlTHxeLgTAdzYUDyy6KdExAl9lbN5rtfe44xpjpmj9grxs5w==} - engines: {node: '>= 0.4'} - - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} - - es-shim-unscopables@1.1.0: - resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} - engines: {node: '>= 0.4'} - - es-to-primitive@1.3.0: - resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} - engines: {node: '>= 0.4'} - - es6-error@4.1.1: - resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} - - esbuild@0.25.12: - resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} - engines: {node: '>=18'} - hasBin: true - - esbuild@0.27.2: - resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} - engines: {node: '>=18'} - hasBin: true - - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - - escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - eslint-config-prettier@10.1.8: - resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - - eslint-plugin-prettier@5.5.4: - resolution: {integrity: sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - '@types/eslint': '>=8.0.0' - eslint: '>=8.0.0' - eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' - prettier: '>=3.0.0' - peerDependenciesMeta: - '@types/eslint': - optional: true - eslint-config-prettier: - optional: true - - eslint-plugin-react-hooks@7.0.1: - resolution: {integrity: sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==} - engines: {node: '>=18'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - - eslint-plugin-react-refresh@0.4.26: - resolution: {integrity: sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==} - peerDependencies: - eslint: '>=8.40' - - eslint-plugin-react@7.37.5: - resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - - eslint-scope@8.4.0: - resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@4.2.1: - resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint@9.39.2: - resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - hasBin: true - peerDependencies: - jiti: '*' - peerDependenciesMeta: - jiti: - optional: true - - espree@10.4.0: - resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - esquery@1.7.0: - resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} - engines: {node: '>=0.10'} - - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - - eventemitter2@6.4.9: - resolution: {integrity: sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==} - - expand-template@2.0.3: - resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} - engines: {node: '>=6'} - - exponential-backoff@3.1.3: - resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==} - - express@5.2.1: - resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} - engines: {node: '>= 18'} - - extract-zip@2.0.1: - resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} - engines: {node: '>= 10.17.0'} - hasBin: true - - extsprintf@1.4.1: - resolution: {integrity: sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==} - engines: {'0': node >=0.6.0} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - - fd-slicer@1.1.0: - resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} - - fdir@6.5.0: - resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} - engines: {node: '>=12.0.0'} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - - fecha@4.2.3: - resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} - - file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} - engines: {node: '>=16.0.0'} - - file-stream-rotator@0.6.1: - resolution: {integrity: sha512-u+dBid4PvZw17PmDeRcNOtCP9CCK/9lRN2w+r1xIS7yOL9JFrIBKTvrYsxT4P0pGtThYTn++QS5ChHaUov3+zQ==} - - file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - - filelist@1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} - - finalhandler@2.1.1: - resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==} - engines: {node: '>= 18.0.0'} - - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - - flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} - engines: {node: '>=16'} - - flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} - - fn.name@1.1.0: - resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} - - for-each@0.3.5: - resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} - engines: {node: '>= 0.4'} - - foreground-child@3.3.1: - resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} - engines: {node: '>=14'} - - form-data@4.0.5: - resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} - engines: {node: '>= 6'} - - forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - - frac@1.1.2: - resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} - engines: {node: '>=0.8'} - - fresh@2.0.0: - resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} - engines: {node: '>= 0.8'} - - fs-constants@1.0.0: - resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - - fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} - - fs-extra@11.3.3: - resolution: {integrity: sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==} - engines: {node: '>=14.14'} - - fs-extra@7.0.1: - resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} - engines: {node: '>=6 <7 || >=8'} - - fs-extra@8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} - engines: {node: '>=6 <7 || >=8'} - - fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} - - fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} - - fs-minipass@3.0.3: - resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - function.prototype.name@1.1.8: - resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - - generator-function@2.0.1: - resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} - engines: {node: '>= 0.4'} - - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - - get-intrinsic@1.3.0: - resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} - engines: {node: '>= 0.4'} - - get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} - - get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} - - get-symbol-description@1.1.0: - resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} - engines: {node: '>= 0.4'} - - github-from-package@0.0.0: - resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} - - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - - glob@10.5.0: - resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} - hasBin: true - - glob@13.0.6: - resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} - engines: {node: 18 || 20 || >=22} - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - - global-agent@3.0.0: - resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} - engines: {node: '>=10.0'} - - globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} - engines: {node: '>=18'} - - globals@16.5.0: - resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} - engines: {node: '>=18'} - - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - - gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} - - got@11.8.6: - resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} - engines: {node: '>=10.19.0'} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - has-bigints@1.1.0: - resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} - engines: {node: '>= 0.4'} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} - - has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - hash-it@6.0.1: - resolution: {integrity: sha512-qhl8+l4Zwi1eLlL3lja5ywmDQnBzLEJxd0QJoAVIgZpgQbdtVZrN5ypB0y3VHwBlvAalpcbM2/A6x7oUks5zNg==} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - hermes-estree@0.25.1: - resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} - - hermes-parser@0.25.1: - resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} - - hoist-non-react-statics@3.3.2: - resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} - - hosted-git-info@4.1.0: - resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} - engines: {node: '>=10'} - - html-parse-stringify@3.0.1: - resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==} - - http-cache-semantics@4.2.0: - resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} - - http-errors@2.0.1: - resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} - engines: {node: '>= 0.8'} - - http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} - - http2-wrapper@1.0.3: - resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} - engines: {node: '>=10.19.0'} - - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} - - i18next@25.8.14: - resolution: {integrity: sha512-paMUYkfWJMsWPeE/Hejcw+XLhHrQPehem+4wMo+uELnvIwvCG019L9sAIljwjCmEMtFQQO3YeitJY8Kctei3iA==} - peerDependencies: - typescript: ^5 - peerDependenciesMeta: - typescript: - optional: true - - iconv-corefoundation@1.1.7: - resolution: {integrity: sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==} - engines: {node: ^8.11.2 || >=10} - os: [darwin] - - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - - iconv-lite@0.7.2: - resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} - engines: {node: '>=0.10.0'} - - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - - ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} - - ignore@7.0.5: - resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} - engines: {node: '>= 4'} - - immer@11.1.4: - resolution: {integrity: sha512-XREFCPo6ksxVzP4E0ekD5aMdf8WMwmdNaz6vuvxgI40UaEiu6q3p8X52aU6GdyvLY3XXX/8R7JOTXStz/nBbRw==} - - import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} - - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - - ini@4.1.3: - resolution: {integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - internal-slot@1.1.0: - resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} - engines: {node: '>= 0.4'} - - intersection-observer@0.12.2: - resolution: {integrity: sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==} - deprecated: The Intersection Observer polyfill is no longer needed and can safely be removed. Intersection Observer has been Baseline since 2019. - - ip-address@10.1.0: - resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} - engines: {node: '>= 12'} - - ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - - is-array-buffer@3.0.5: - resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} - engines: {node: '>= 0.4'} - - is-async-function@2.1.1: - resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} - engines: {node: '>= 0.4'} - - is-bigint@1.1.0: - resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} - engines: {node: '>= 0.4'} - - is-boolean-object@1.2.2: - resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} - engines: {node: '>= 0.4'} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} - - is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} - engines: {node: '>= 0.4'} - - is-date-object@1.1.0: - resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} - engines: {node: '>= 0.4'} - - is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-finalizationregistry@1.1.1: - resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} - engines: {node: '>= 0.4'} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-generator-function@1.1.2: - resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} - engines: {node: '>= 0.4'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - - is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - - is-mobile@5.0.0: - resolution: {integrity: sha512-Tz/yndySvLAEXh+Uk8liFCxOwVH6YutuR74utvOcu7I9Di+DwM0mtdPVZNaVvvBUM2OXxne/NhOs1zAO7riusQ==} - - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - - is-number-object@1.1.1: - resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} - engines: {node: '>= 0.4'} - - is-promise@4.0.0: - resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} - - is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} - - is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} - - is-shared-array-buffer@1.0.4: - resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} - engines: {node: '>= 0.4'} - - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - - is-string@1.1.1: - resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} - engines: {node: '>= 0.4'} - - is-symbol@1.1.1: - resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} - engines: {node: '>= 0.4'} - - is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - - is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - - is-weakref@1.1.1: - resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} - engines: {node: '>= 0.4'} - - is-weakset@2.0.4: - resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} - engines: {node: '>= 0.4'} - - is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - - isbinaryfile@4.0.10: - resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} - engines: {node: '>= 8.0.0'} - - isbinaryfile@5.0.7: - resolution: {integrity: sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ==} - engines: {node: '>= 18.0.0'} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - isexe@3.1.1: - resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} - engines: {node: '>=16'} - - iterator.prototype@1.1.5: - resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} - engines: {node: '>= 0.4'} - - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - - jake@10.9.4: - resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==} - engines: {node: '>=10'} - hasBin: true - - jiti@2.6.1: - resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} - hasBin: true - - js-cookie@3.0.5: - resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} - engines: {node: '>=14'} - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-yaml@4.1.1: - resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} - hasBin: true - - jsep@1.4.0: - resolution: {integrity: sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==} - engines: {node: '>= 10.16.0'} - - jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} - hasBin: true - - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - - json-rules-engine@7.3.1: - resolution: {integrity: sha512-NyRTQZllvAt7AQ3g9P7/t4nIwlEB+EyZV7y8/WgXfZWSlpcDryt1UH9CsoU+Z+MDvj8umN9qqEcbE6qnk9JAHw==} - engines: {node: '>=18.0.0'} - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - - json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - - json2mq@0.2.0: - resolution: {integrity: sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==} - - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - - jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} - - jsonfile@6.2.0: - resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} - - jsonpath-plus@10.4.0: - resolution: {integrity: sha512-T92WWatJXmhBbKsgH/0hl+jxjdXrifi5IKeMY02DWggRxX0UElcbVzPlmgLTbvsPeW1PasQ6xE2Q75stkhGbsA==} - engines: {node: '>=18.0.0'} - hasBin: true - - jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} - - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - - kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - - kleur@4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} - engines: {node: '>=6'} - - kuler@2.0.0: - resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} - - lazy-val@1.0.5: - resolution: {integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==} - - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} - - logform@2.7.0: - resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} - engines: {node: '>= 12.0.0'} - - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - - lowercase-keys@2.0.0: - resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} - engines: {node: '>=8'} - - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - - lru-cache@11.2.6: - resolution: {integrity: sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==} - engines: {node: 20 || >=22} - - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - - magic-string@0.30.21: - resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - - make-fetch-happen@14.0.3: - resolution: {integrity: sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - matcher@3.0.0: - resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} - engines: {node: '>=10'} - - math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} - - media-typer@1.1.0: - resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} - engines: {node: '>= 0.8'} - - merge-descriptors@2.0.0: - resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} - engines: {node: '>=18'} - - mica-electron@1.5.16: - resolution: {integrity: sha512-08/o9vv4cr4ozltO2U4/37R70Y6hqAjH2nr7GzpDLAdqCWkeAAge5ZPrzl+ndUDhO6IsoL2gFmpbU17Jj406Zg==} - - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - - mime-db@1.54.0: - resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} - engines: {node: '>= 0.6'} - - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - - mime-types@3.0.2: - resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} - engines: {node: '>=18'} - - mime@2.6.0: - resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} - engines: {node: '>=4.0.0'} - hasBin: true - - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - - mimic-response@1.0.1: - resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} - engines: {node: '>=4'} - - mimic-response@3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} - - minimatch@10.1.1: - resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} - engines: {node: 20 || >=22} - - minimatch@10.2.4: - resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} - engines: {node: 18 || 20 || >=22} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - minipass-collect@2.0.1: - resolution: {integrity: sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==} - engines: {node: '>=16 || 14 >=14.17'} - - minipass-fetch@4.0.1: - resolution: {integrity: sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - minipass-flush@1.0.5: - resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} - engines: {node: '>= 8'} - - minipass-pipeline@1.2.4: - resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} - engines: {node: '>=8'} - - minipass-sized@1.0.3: - resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} - engines: {node: '>=8'} - - minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} - - minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} - - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - - minipass@7.1.3: - resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} - engines: {node: '>=16 || 14 >=14.17'} - - minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} - - minizlib@3.1.0: - resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} - engines: {node: '>= 18'} - - mkdirp-classic@0.5.3: - resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - - mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true - - mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - - moment@2.30.1: - resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - nano-memoize@3.0.16: - resolution: {integrity: sha512-JyK96AKVGAwVeMj3MoMhaSXaUNqgMbCRSQB3trUV8tYZfWEzqUBKdK1qJpfuNXgKeHOx1jv/IEYTM659ly7zUA==} - - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - napi-build-utils@2.0.0: - resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} - - native-run@2.0.3: - resolution: {integrity: sha512-U1PllBuzW5d1gfan+88L+Hky2eZx+9gv3Pf6rNBxKbORxi7boHzqiA6QFGSnqMem4j0A9tZ08NMIs5+0m/VS1Q==} - engines: {node: '>=16.0.0'} - hasBin: true - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - - negotiator@1.0.0: - resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} - engines: {node: '>= 0.6'} - - node-abi@3.85.0: - resolution: {integrity: sha512-zsFhmbkAzwhTft6nd3VxcG0cvJsT70rL+BIGHWVq5fi6MwGrHwzqKaxXE+Hl2GmnGItnDKPPkO5/LQqjVkIdFg==} - engines: {node: '>=10'} - - node-abi@4.24.0: - resolution: {integrity: sha512-u2EC1CeNe25uVtX3EZbdQ275c74zdZmmpzrHEQh2aIYqoVjlglfUpOX9YY85x1nlBydEKDVaSmMNhR7N82Qj8A==} - engines: {node: '>=22.12.0'} - - node-addon-api@1.7.2: - resolution: {integrity: sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==} - - node-api-version@0.2.1: - resolution: {integrity: sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==} - - node-gyp@11.5.0: - resolution: {integrity: sha512-ra7Kvlhxn5V9Slyus0ygMa2h+UqExPqUIkfk7Pc8QTLT956JLSy51uWFwHtIYy0vI8cB4BDhc/S03+880My/LQ==} - engines: {node: ^18.17.0 || >=20.5.0} - hasBin: true - - node-releases@2.0.27: - resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} - - nopt@8.1.0: - resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==} - engines: {node: ^18.17.0 || >=20.5.0} - hasBin: true - - normalize-url@6.1.0: - resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} - engines: {node: '>=10'} - - numeric-quantity@2.1.0: - resolution: {integrity: sha512-oDkQ8nFuNVA+unEg1jd6dAS+O7eLXWWzsa4ViI0S0yFi6654GK0s74o8bF8uLRQdWIz/qFF1GABNFPfwAGQUsg==} - engines: {node: '>=16'} - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - - object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} - engines: {node: '>= 0.4'} - - object.entries@1.1.9: - resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} - engines: {node: '>= 0.4'} - - object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} - - object.values@1.2.1: - resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} - engines: {node: '>= 0.4'} - - on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - one-time@1.0.0: - resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} - - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - - open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} - - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} - - ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} - - os@0.1.2: - resolution: {integrity: sha512-ZoXJkvAnljwvc56MbvhtKVWmSkzV712k42Is2mA0+0KTSRakq5XXuXpjZjgAt9ctzl51ojhQWakQQpmOvXWfjQ==} - - own-keys@1.0.1: - resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} - engines: {node: '>= 0.4'} - - p-cancelable@2.1.1: - resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} - engines: {node: '>=8'} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - - p-map@7.0.4: - resolution: {integrity: sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==} - engines: {node: '>=18'} - - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} - - path-scurry@2.0.2: - resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} - engines: {node: 18 || 20 || >=22} - - path-to-regexp@8.3.0: - resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} - - pe-library@0.4.1: - resolution: {integrity: sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==} - engines: {node: '>=12', npm: '>=6'} - - pend@1.2.0: - resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - - pg-cloudflare@1.3.0: - resolution: {integrity: sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ==} - - pg-connection-string@2.11.0: - resolution: {integrity: sha512-kecgoJwhOpxYU21rZjULrmrBJ698U2RxXofKVzOn5UDj61BPj/qMb7diYUR1nLScCDbrztQFl1TaQZT0t1EtzQ==} - - pg-int8@1.0.1: - resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} - engines: {node: '>=4.0.0'} - - pg-pool@3.12.0: - resolution: {integrity: sha512-eIJ0DES8BLaziFHW7VgJEBPi5hg3Nyng5iKpYtj3wbcAUV9A1wLgWiY7ajf/f/oO1wfxt83phXPY8Emztg7ITg==} - peerDependencies: - pg: '>=8.0' - - pg-protocol@1.12.0: - resolution: {integrity: sha512-uOANXNRACNdElMXJ0tPz6RBM0XQ61nONGAwlt8da5zs/iUOOCLBQOHSXnrC6fMsvtjxbOJrZZl5IScGv+7mpbg==} - - pg-types@2.2.0: - resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} - engines: {node: '>=4'} - - pg@8.19.0: - resolution: {integrity: sha512-QIcLGi508BAHkQ3pJNptsFz5WQMlpGbuBGBaIaXsWK8mel2kQ/rThYI+DbgjUvZrIr7MiuEuc9LcChJoEZK1xQ==} - engines: {node: '>= 16.0.0'} - peerDependencies: - pg-native: '>=3.0.1' - peerDependenciesMeta: - pg-native: - optional: true - - pgpass@1.0.5: - resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} - engines: {node: '>=12'} - - pinyin-pro@3.27.0: - resolution: {integrity: sha512-Osdgjwe7Rm17N2paDMM47yW+jUIUH3+0RGo8QP39ZTLpTaJVDK0T58hOLaMQJbcMmAebVuK2ePunTEVEx1clNQ==} - - plist@3.1.0: - resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} - engines: {node: '>=10.4.0'} - - possible-typed-array-names@1.1.0: - resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} - engines: {node: '>= 0.4'} - - postcss@8.5.6: - resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} - engines: {node: ^10 || ^12 || >=14} - - postgres-array@2.0.0: - resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} - engines: {node: '>=4'} - - postgres-bytea@1.0.1: - resolution: {integrity: sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==} - engines: {node: '>=0.10.0'} - - postgres-date@1.0.7: - resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} - engines: {node: '>=0.10.0'} - - postgres-interval@1.2.0: - resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} - engines: {node: '>=0.10.0'} - - postject@1.0.0-alpha.6: - resolution: {integrity: sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A==} - engines: {node: '>=14.0.0'} - hasBin: true - - prebuild-install@7.1.3: - resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} - engines: {node: '>=10'} - hasBin: true - - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - prettier-linter-helpers@1.0.1: - resolution: {integrity: sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==} - engines: {node: '>=6.0.0'} - - prettier@3.7.4: - resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==} - engines: {node: '>=14'} - hasBin: true - - proc-log@5.0.0: - resolution: {integrity: sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - progress@2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} - - promise-retry@2.0.1: - resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} - engines: {node: '>=10'} - - prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} - - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - - proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} - - pump@3.0.3: - resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} - - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - - qs@6.14.1: - resolution: {integrity: sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==} - engines: {node: '>=0.6'} - - quick-lru@5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} - - range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - - raw-body@3.0.2: - resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} - engines: {node: '>= 0.10'} - - rc-field-form@1.44.0: - resolution: {integrity: sha512-el7w87fyDUsca63Y/s8qJcq9kNkf/J5h+iTdqG5WsSHLH0e6Usl7QuYSmSVzJMgtp40mOVZIY/W/QP9zwrp1FA==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - rc-motion@2.9.5: - resolution: {integrity: sha512-w+XTUrfh7ArbYEd2582uDrEhmBHwK1ZENJiSJVb7uRxdE7qJSYjbO2eksRXmndqyKqKoYPc9ClpPh5242mV1vA==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - rc-segmented@2.4.1: - resolution: {integrity: sha512-KUi+JJFdKnumV9iXlm+BJ00O4NdVBp2TEexLCk6bK1x/RH83TvYKQMzIz/7m3UTRPD08RM/8VG/JNjWgWbd4cw==} - peerDependencies: - react: '>=16.0.0' - react-dom: '>=16.0.0' - - rc-util@5.44.4: - resolution: {integrity: sha512-resueRJzmHG9Q6rI/DfK6Kdv9/Lfls05vzMs1Sk3M2P+3cJa+MakaZyWY8IPfehVuhPJFKrIY1IK4GqbiaiY5w==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true - - react-dnd-html5-backend@16.0.1: - resolution: {integrity: sha512-Wu3dw5aDJmOGw8WjH1I1/yTH+vlXEL4vmjk5p+MHxP8HuHJS1lAGeIdG/hze1AvNeXWo/JgULV87LyQOr+r5jw==} - - react-dnd-touch-backend@16.0.1: - resolution: {integrity: sha512-NonoCABzzjyWGZuDxSG77dbgMZ2Wad7eQiCd/ECtsR2/NBLTjGksPUx9UPezZ1nQ/L7iD130Tz3RUshL/ClKLA==} - - react-dnd@16.0.1: - resolution: {integrity: sha512-QeoM/i73HHu2XF9aKksIUuamHPDvRglEwdHL4jsp784BgUuWcg6mzfxT0QDdQz8Wj0qyRKx2eMg8iZtWvU4E2Q==} - peerDependencies: - '@types/hoist-non-react-statics': '>= 3.3.1' - '@types/node': '>= 12' - '@types/react': '>= 16' - react: '>= 16.14' - peerDependenciesMeta: - '@types/hoist-non-react-statics': - optional: true - '@types/node': - optional: true - '@types/react': - optional: true - - react-dom@19.2.3: - resolution: {integrity: sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==} - peerDependencies: - react: ^19.2.3 - - react-fast-compare@3.2.2: - resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} - - react-i18next@16.5.6: - resolution: {integrity: sha512-Ua7V2/efA88ido7KyK51fb8Ki8M/sRfW8LR/rZ/9ZKr2luhuTI7kwYZN5agT1rWG7aYm5G0RYE/6JR8KJoCMDw==} - peerDependencies: - i18next: '>= 25.6.2' - react: '>= 16.8.0' - react-dom: '*' - react-native: '*' - typescript: ^5 - peerDependenciesMeta: - react-dom: - optional: true - react-native: - optional: true - typescript: - optional: true - - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - - react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - - react-querybuilder@8.14.0: - resolution: {integrity: sha512-uwJn1XT4A6reuxjPmRLUnvewhC4PZksZU4XSxCJgqwR37r2A1/REvxEgv+zVQGVFcd4dUIZs1E++WDabOWVlmA==} - peerDependencies: - react: '>=18' - - react-redux@9.2.0: - resolution: {integrity: sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==} - peerDependencies: - '@types/react': ^18.2.25 || ^19 - react: ^18.0 || ^19 - redux: ^5.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - redux: - optional: true - - react-refresh@0.18.0: - resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} - engines: {node: '>=0.10.0'} - - react-router-dom@6.30.3: - resolution: {integrity: sha512-pxPcv1AczD4vso7G4Z3TKcvlxK7g7TNt3/FNGMhfqyntocvYKj+GCatfigGDjbLozC4baguJ0ReCigoDJXb0ag==} - engines: {node: '>=14.0.0'} - peerDependencies: - react: '>=16.8' - react-dom: '>=16.8' - - react-router@6.30.3: - resolution: {integrity: sha512-XRnlbKMTmktBkjCLE8/XcZFlnHvr2Ltdr1eJX4idL55/9BbORzyZEaIkBFDhFGCEWBBItsVrDxwx3gnisMitdw==} - engines: {node: '>=14.0.0'} - peerDependencies: - react: '>=16.8' - - react@19.2.3: - resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==} - engines: {node: '>=0.10.0'} - - read-binary-file-arch@1.0.6: - resolution: {integrity: sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==} - hasBin: true - - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - - readdirp@5.0.0: - resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} - engines: {node: '>= 20.19.0'} - - redux-thunk@3.1.0: - resolution: {integrity: sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==} - peerDependencies: - redux: ^5.0.0 - - redux@4.2.1: - resolution: {integrity: sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==} - - redux@5.0.1: - resolution: {integrity: sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==} - - reflect-metadata@0.2.2: - resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} - - reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} - engines: {node: '>= 0.4'} - - regexp.prototype.flags@1.5.4: - resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} - engines: {node: '>= 0.4'} - - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - resedit@1.7.2: - resolution: {integrity: sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==} - engines: {node: '>=12', npm: '>=6'} - - reselect@5.1.1: - resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==} - - resize-observer-polyfill@1.5.1: - resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} - - resolve-alpn@1.2.1: - resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true - - responselike@2.0.1: - resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} - - restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - - retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} - - rimraf@2.6.3: - resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - - rimraf@6.1.3: - resolution: {integrity: sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA==} - engines: {node: 20 || >=22} - hasBin: true - - roarr@2.15.4: - resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} - engines: {node: '>=8.0'} - - rollup@4.55.1: - resolution: {integrity: sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - router@2.2.0: - resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} - engines: {node: '>= 18'} - - runes2@1.1.4: - resolution: {integrity: sha512-LNPnEDPOOU4ehF71m5JoQyzT2yxwD6ZreFJ7MxZUAoMKNMY1XrAo60H1CUoX5ncSm0rIuKlqn9JZNRrRkNou2g==} - - safe-array-concat@1.1.3: - resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} - engines: {node: '>=0.4'} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - safe-push-apply@1.0.0: - resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} - engines: {node: '>= 0.4'} - - safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} - engines: {node: '>= 0.4'} - - safe-stable-stringify@2.5.0: - resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} - engines: {node: '>=10'} - - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - - sanitize-filename@1.6.3: - resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==} - - sax@1.1.4: - resolution: {integrity: sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg==} - - sax@1.4.4: - resolution: {integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==} - engines: {node: '>=11.0.0'} - - scheduler@0.27.0: - resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} - - screenfull@5.2.0: - resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==} - engines: {node: '>=0.10.0'} - - scroll-into-view-if-needed@3.1.0: - resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} - - semver-compare@1.0.0: - resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} - - semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - semver@7.7.3: - resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} - engines: {node: '>=10'} - hasBin: true - - send@1.2.1: - resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} - engines: {node: '>= 18'} - - serialize-error@7.0.1: - resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} - engines: {node: '>=10'} - - serve-static@2.2.1: - resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} - engines: {node: '>= 18'} - - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - - set-proto@1.0.0: - resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} - engines: {node: '>= 0.4'} - - setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - - sha.js@2.4.12: - resolution: {integrity: sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==} - engines: {node: '>= 0.10'} - hasBin: true - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} - engines: {node: '>= 0.4'} - - side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} - - side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} - - side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} - engines: {node: '>= 0.4'} - - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - - simple-concat@1.0.1: - resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} - - simple-get@4.0.1: - resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} - - simple-update-notifier@2.0.0: - resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} - engines: {node: '>=10'} - - sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - - slice-ansi@3.0.0: - resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} - engines: {node: '>=8'} - - slice-ansi@4.0.0: - resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} - engines: {node: '>=10'} - - smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - - socks-proxy-agent@8.0.5: - resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} - engines: {node: '>= 14'} - - socks@2.8.7: - resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - - source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - split2@4.2.0: - resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} - engines: {node: '>= 10.x'} - - sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - - sql-highlight@6.1.0: - resolution: {integrity: sha512-ed7OK4e9ywpE7pgRMkMQmZDPKSVdm0oX5IEtZiKnFucSF0zu6c80GZBe38UqHuVhTWJ9xsKgSMjCG2bml86KvA==} - engines: {node: '>=14'} - - ssf@0.11.2: - resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} - engines: {node: '>=0.8'} - - ssri@12.0.0: - resolution: {integrity: sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - stack-trace@0.0.10: - resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} - - staged-components@1.1.3: - resolution: {integrity: sha512-9EIswzDqjwlEu+ymkV09TTlJfzSbKgEnNteUnZSTxkpMgr5Wx2CzzA9WcMFWBNCldqVPsHVnRGGrApduq2Se5A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - - stat-mode@1.0.0: - resolution: {integrity: sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==} - engines: {node: '>= 6'} - - statuses@2.0.2: - resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} - engines: {node: '>= 0.8'} - - stop-iteration-iterator@1.1.0: - resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} - engines: {node: '>= 0.4'} - - string-convert@0.2.1: - resolution: {integrity: sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==} - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - - string.prototype.matchall@4.0.12: - resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} - engines: {node: '>= 0.4'} - - string.prototype.repeat@1.0.0: - resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} - - string.prototype.trim@1.2.10: - resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.9: - resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} - engines: {node: '>= 0.4'} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-ansi@7.1.2: - resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} - engines: {node: '>=12'} - - strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} - - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - - stylis@4.3.6: - resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==} - - sumchecker@3.0.1: - resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==} - engines: {node: '>= 8.0'} - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - synckit@0.11.11: - resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} - engines: {node: ^14.18.0 || >=16.0.0} - - tar-fs@2.1.4: - resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==} - - tar-stream@2.2.0: - resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} - engines: {node: '>=6'} - - tar@6.2.1: - resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} - engines: {node: '>=10'} - - tar@7.5.2: - resolution: {integrity: sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==} - engines: {node: '>=18'} - - tar@7.5.9: - resolution: {integrity: sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg==} - engines: {node: '>=18'} - - temp-file@3.4.0: - resolution: {integrity: sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==} - - temp@0.9.4: - resolution: {integrity: sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==} - engines: {node: '>=6.0.0'} - - terser@5.46.0: - resolution: {integrity: sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==} - engines: {node: '>=10'} - hasBin: true - - text-hex@1.0.0: - resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} - - throttle-debounce@5.0.2: - resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==} - engines: {node: '>=12.22'} - - through2@4.0.2: - resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} - - tiny-async-pool@1.3.0: - resolution: {integrity: sha512-01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA==} - - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} - engines: {node: '>=12.0.0'} - - tmp-promise@3.0.3: - resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} - - tmp@0.2.5: - resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==} - engines: {node: '>=14.14'} - - to-buffer@1.2.2: - resolution: {integrity: sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==} - engines: {node: '>= 0.4'} - - toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - - tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - - triple-beam@1.4.1: - resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} - engines: {node: '>= 14.0.0'} - - truncate-utf8-bytes@1.0.2: - resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} - - ts-api-utils@2.4.0: - resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' - - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - - tunnel-agent@0.6.0: - resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - - type-fest@0.13.1: - resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} - engines: {node: '>=10'} - - type-is@2.0.1: - resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} - engines: {node: '>= 0.6'} - - typed-array-buffer@1.0.3: - resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.3: - resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.7: - resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} - engines: {node: '>= 0.4'} - - typeorm@0.3.28: - resolution: {integrity: sha512-6GH7wXhtfq2D33ZuRXYwIsl/qM5685WZcODZb7noOOcRMteM9KF2x2ap3H0EBjnSV0VO4gNAfJT5Ukp0PkOlvg==} - engines: {node: '>=16.13.0'} - hasBin: true - peerDependencies: - '@google-cloud/spanner': ^5.18.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 - '@sap/hana-client': ^2.14.22 - better-sqlite3: ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 || ^12.0.0 - ioredis: ^5.0.4 - mongodb: ^5.8.0 || ^6.0.0 - mssql: ^9.1.1 || ^10.0.0 || ^11.0.0 || ^12.0.0 - mysql2: ^2.2.5 || ^3.0.1 - oracledb: ^6.3.0 - pg: ^8.5.1 - pg-native: ^3.0.0 - pg-query-stream: ^4.0.0 - redis: ^3.1.1 || ^4.0.0 || ^5.0.14 - sql.js: ^1.4.0 - sqlite3: ^5.0.3 - ts-node: ^10.7.0 - typeorm-aurora-data-api-driver: ^2.0.0 || ^3.0.0 - peerDependenciesMeta: - '@google-cloud/spanner': - optional: true - '@sap/hana-client': - optional: true - better-sqlite3: - optional: true - ioredis: - optional: true - mongodb: - optional: true - mssql: - optional: true - mysql2: - optional: true - oracledb: - optional: true - pg: - optional: true - pg-native: - optional: true - pg-query-stream: - optional: true - redis: - optional: true - sql.js: - optional: true - sqlite3: - optional: true - ts-node: - optional: true - typeorm-aurora-data-api-driver: - optional: true - - typescript-eslint@8.52.0: - resolution: {integrity: sha512-atlQQJ2YkO4pfTVQmQ+wvYQwexPDOIgo+RaVcD7gHgzy/IQA+XTyuxNM9M9TVXvttkF7koBHmcwisKdOAf2EcA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - typescript@5.9.3: - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} - engines: {node: '>=14.17'} - hasBin: true - - unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} - engines: {node: '>= 0.4'} - - undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - - unique-filename@4.0.0: - resolution: {integrity: sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - unique-slug@5.0.0: - resolution: {integrity: sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==} - engines: {node: ^18.17.0 || >=20.5.0} - - universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - - unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - - untildify@4.0.0: - resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} - engines: {node: '>=8'} - - update-browserslist-db@1.2.3: - resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - use-sync-external-store@1.6.0: - resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - utf8-byte-length@1.0.5: - resolution: {integrity: sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==} - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - uuid@11.1.0: - resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} - hasBin: true - - uuid@13.0.0: - resolution: {integrity: sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==} - hasBin: true - - vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - - verror@1.10.1: - resolution: {integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==} - engines: {node: '>=0.6.0'} - - vite@7.3.1: - resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 - jiti: '>=1.21.0' - less: ^4.0.0 - lightningcss: ^1.21.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: '>=0.54.8' - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - - void-elements@3.1.0: - resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} - engines: {node: '>=0.10.0'} - - wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - - which-boxed-primitive@1.1.1: - resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} - engines: {node: '>= 0.4'} - - which-builtin-type@1.2.1: - resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} - engines: {node: '>= 0.4'} - - which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} - - which-typed-array@1.1.19: - resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} - engines: {node: '>= 0.4'} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - which@5.0.0: - resolution: {integrity: sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==} - engines: {node: ^18.17.0 || >=20.5.0} - hasBin: true - - winston-daily-rotate-file@5.0.0: - resolution: {integrity: sha512-JDjiXXkM5qvwY06733vf09I2wnMXpZEhxEVOSPenZMii+g7pcDcTBt2MRugnoi8BwVSuCT2jfRXBUy+n1Zz/Yw==} - engines: {node: '>=8'} - peerDependencies: - winston: ^3 - - winston-transport@4.9.0: - resolution: {integrity: sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==} - engines: {node: '>= 12.0.0'} - - winston@3.19.0: - resolution: {integrity: sha512-LZNJgPzfKR+/J3cHkxcpHKpKKvGfDZVPS4hfJCc4cCG0CgYzvlD6yE/S3CIL/Yt91ak327YCpiF/0MyeZHEHKA==} - engines: {node: '>= 12.0.0'} - - wmf@1.0.2: - resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} - engines: {node: '>=0.8'} - - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - - word@0.3.0: - resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} - engines: {node: '>=0.8'} - - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - xlsx@0.18.5: - resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} - engines: {node: '>=0.8'} - hasBin: true - - xml2js@0.6.2: - resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==} - engines: {node: '>=4.0.0'} - - xmlbuilder@11.0.1: - resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} - engines: {node: '>=4.0'} - - xmlbuilder@15.1.1: - resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} - engines: {node: '>=8.0'} - - xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - - yallist@5.0.0: - resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} - engines: {node: '>=18'} - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - - yauzl@2.10.0: - resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - - zod-validation-error@4.0.2: - resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} - engines: {node: '>=18.0.0'} - peerDependencies: - zod: ^3.25.0 || ^4.0.0 - - zod@4.3.5: - resolution: {integrity: sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==} - -snapshots: - - 7zip-bin@5.2.0: {} - - '@ant-design/colors@8.0.1': - dependencies: - '@ant-design/fast-color': 3.0.1 - - '@ant-design/cssinjs-utils@2.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@ant-design/cssinjs': 2.1.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@babel/runtime': 7.28.6 - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@ant-design/cssinjs@2.1.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@babel/runtime': 7.28.6 - '@emotion/hash': 0.8.0 - '@emotion/unitless': 0.7.5 - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - csstype: 3.2.3 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - stylis: 4.3.6 - - '@ant-design/fast-color@3.0.1': {} - - '@ant-design/icons-svg@4.4.2': {} - - '@ant-design/icons@6.1.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@ant-design/colors': 8.0.1 - '@ant-design/icons-svg': 4.4.2 - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@ant-design/react-slick@2.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@babel/runtime': 7.28.6 - clsx: 2.1.1 - json2mq: 0.2.0 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - throttle-debounce: 5.0.2 - - '@babel/code-frame@7.27.1': - dependencies: - '@babel/helper-validator-identifier': 7.28.5 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/compat-data@7.28.5': {} - - '@babel/core@7.28.5': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.5 - '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) - '@babel/helpers': 7.28.4 - '@babel/parser': 7.28.5 - '@babel/template': 7.27.2 - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 - '@jridgewell/remapping': 2.3.5 - convert-source-map: 2.0.0 - debug: 4.4.3 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.28.5': - dependencies: - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - jsesc: 3.1.0 - - '@babel/helper-compilation-targets@7.27.2': - dependencies: - '@babel/compat-data': 7.28.5 - '@babel/helper-validator-option': 7.27.1 - browserslist: 4.28.1 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-globals@7.28.0': {} - - '@babel/helper-module-imports@7.27.1': - dependencies: - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.28.5 - transitivePeerDependencies: - - supports-color - - '@babel/helper-plugin-utils@7.27.1': {} - - '@babel/helper-string-parser@7.27.1': {} - - '@babel/helper-validator-identifier@7.28.5': {} - - '@babel/helper-validator-option@7.27.1': {} - - '@babel/helpers@7.28.4': - dependencies: - '@babel/template': 7.27.2 - '@babel/types': 7.28.5 - - '@babel/parser@7.28.5': - dependencies: - '@babel/types': 7.28.5 - - '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/runtime@7.28.6': {} - - '@babel/template@7.27.2': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 - - '@babel/traverse@7.28.5': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.5 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.5 - '@babel/template': 7.27.2 - '@babel/types': 7.28.5 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.28.5': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 - - '@capacitor/android@8.1.0(@capacitor/core@8.1.0)': - dependencies: - '@capacitor/core': 8.1.0 - - '@capacitor/cli@8.1.0': - dependencies: - '@ionic/cli-framework-output': 2.2.8 - '@ionic/utils-subprocess': 3.0.1 - '@ionic/utils-terminal': 2.3.5 - commander: 12.1.0 - debug: 4.4.3 - env-paths: 2.2.1 - fs-extra: 11.3.3 - kleur: 4.1.5 - native-run: 2.0.3 - open: 8.4.2 - plist: 3.1.0 - prompts: 2.4.2 - rimraf: 6.1.3 - semver: 7.7.3 - tar: 7.5.9 - tslib: 2.8.1 - xml2js: 0.6.2 - transitivePeerDependencies: - - supports-color - - '@capacitor/core@8.1.0': - dependencies: - tslib: 2.8.1 - - '@capacitor/preferences@8.0.1(@capacitor/core@8.1.0)': - dependencies: - '@capacitor/core': 8.1.0 - - '@colors/colors@1.6.0': {} - - '@dabh/diagnostics@2.0.8': - dependencies: - '@so-ric/colorspace': 1.1.6 - enabled: 2.0.0 - kuler: 2.0.0 - - '@develar/schema-utils@2.6.5': - dependencies: - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) - - '@electron-toolkit/eslint-config-prettier@3.0.0(eslint@9.39.2(jiti@2.6.1))(prettier@3.7.4)': - dependencies: - eslint: 9.39.2(jiti@2.6.1) - eslint-config-prettier: 10.1.8(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-prettier: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1))(prettier@3.7.4) - prettier: 3.7.4 - transitivePeerDependencies: - - '@types/eslint' - - '@electron-toolkit/eslint-config-ts@3.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint/js': 9.39.2 - eslint: 9.39.2(jiti@2.6.1) - globals: 16.5.0 - typescript-eslint: 8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - optionalDependencies: - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@electron-toolkit/preload@3.0.2(electron@39.2.7)': - dependencies: - electron: 39.2.7 - - '@electron-toolkit/tsconfig@2.0.0(@types/node@22.19.5)': - dependencies: - '@types/node': 22.19.5 - - '@electron-toolkit/utils@4.0.0(electron@39.2.7)': - dependencies: - electron: 39.2.7 - - '@electron/asar@3.4.1': - dependencies: - commander: 5.1.0 - glob: 7.2.3 - minimatch: 3.1.2 - - '@electron/fuses@1.8.0': - dependencies: - chalk: 4.1.2 - fs-extra: 9.1.0 - minimist: 1.2.8 - - '@electron/get@2.0.3': - dependencies: - debug: 4.4.3 - env-paths: 2.2.1 - fs-extra: 8.1.0 - got: 11.8.6 - progress: 2.0.3 - semver: 6.3.1 - sumchecker: 3.0.1 - optionalDependencies: - global-agent: 3.0.0 - transitivePeerDependencies: - - supports-color - - '@electron/notarize@2.5.0': - dependencies: - debug: 4.4.3 - fs-extra: 9.1.0 - promise-retry: 2.0.1 - transitivePeerDependencies: - - supports-color - - '@electron/osx-sign@1.3.3': - dependencies: - compare-version: 0.1.2 - debug: 4.4.3 - fs-extra: 10.1.0 - isbinaryfile: 4.0.10 - minimist: 1.2.8 - plist: 3.1.0 - transitivePeerDependencies: - - supports-color - - '@electron/rebuild@4.0.1': - dependencies: - '@malept/cross-spawn-promise': 2.0.0 - chalk: 4.1.2 - debug: 4.4.3 - detect-libc: 2.1.2 - got: 11.8.6 - graceful-fs: 4.2.11 - node-abi: 4.24.0 - node-api-version: 0.2.1 - node-gyp: 11.5.0 - ora: 5.4.1 - read-binary-file-arch: 1.0.6 - semver: 7.7.3 - tar: 6.2.1 - yargs: 17.7.2 - transitivePeerDependencies: - - supports-color - - '@electron/universal@2.0.3': - dependencies: - '@electron/asar': 3.4.1 - '@malept/cross-spawn-promise': 2.0.0 - debug: 4.4.3 - dir-compare: 4.2.0 - fs-extra: 11.3.3 - minimatch: 9.0.5 - plist: 3.1.0 - transitivePeerDependencies: - - supports-color - - '@electron/windows-sign@1.2.2': - dependencies: - cross-dirname: 0.1.0 - debug: 4.4.3 - fs-extra: 11.3.3 - minimist: 1.2.8 - postject: 1.0.0-alpha.6 - transitivePeerDependencies: - - supports-color - optional: true - - '@emotion/hash@0.8.0': {} - - '@emotion/unitless@0.7.5': {} - - '@esbuild/aix-ppc64@0.25.12': - optional: true - - '@esbuild/aix-ppc64@0.27.2': - optional: true - - '@esbuild/android-arm64@0.25.12': - optional: true - - '@esbuild/android-arm64@0.27.2': - optional: true - - '@esbuild/android-arm@0.25.12': - optional: true - - '@esbuild/android-arm@0.27.2': - optional: true - - '@esbuild/android-x64@0.25.12': - optional: true - - '@esbuild/android-x64@0.27.2': - optional: true - - '@esbuild/darwin-arm64@0.25.12': - optional: true - - '@esbuild/darwin-arm64@0.27.2': - optional: true - - '@esbuild/darwin-x64@0.25.12': - optional: true - - '@esbuild/darwin-x64@0.27.2': - optional: true - - '@esbuild/freebsd-arm64@0.25.12': - optional: true - - '@esbuild/freebsd-arm64@0.27.2': - optional: true - - '@esbuild/freebsd-x64@0.25.12': - optional: true - - '@esbuild/freebsd-x64@0.27.2': - optional: true - - '@esbuild/linux-arm64@0.25.12': - optional: true - - '@esbuild/linux-arm64@0.27.2': - optional: true - - '@esbuild/linux-arm@0.25.12': - optional: true - - '@esbuild/linux-arm@0.27.2': - optional: true - - '@esbuild/linux-ia32@0.25.12': - optional: true - - '@esbuild/linux-ia32@0.27.2': - optional: true - - '@esbuild/linux-loong64@0.25.12': - optional: true - - '@esbuild/linux-loong64@0.27.2': - optional: true - - '@esbuild/linux-mips64el@0.25.12': - optional: true - - '@esbuild/linux-mips64el@0.27.2': - optional: true - - '@esbuild/linux-ppc64@0.25.12': - optional: true - - '@esbuild/linux-ppc64@0.27.2': - optional: true - - '@esbuild/linux-riscv64@0.25.12': - optional: true - - '@esbuild/linux-riscv64@0.27.2': - optional: true - - '@esbuild/linux-s390x@0.25.12': - optional: true - - '@esbuild/linux-s390x@0.27.2': - optional: true - - '@esbuild/linux-x64@0.25.12': - optional: true - - '@esbuild/linux-x64@0.27.2': - optional: true - - '@esbuild/netbsd-arm64@0.25.12': - optional: true - - '@esbuild/netbsd-arm64@0.27.2': - optional: true - - '@esbuild/netbsd-x64@0.25.12': - optional: true - - '@esbuild/netbsd-x64@0.27.2': - optional: true - - '@esbuild/openbsd-arm64@0.25.12': - optional: true - - '@esbuild/openbsd-arm64@0.27.2': - optional: true - - '@esbuild/openbsd-x64@0.25.12': - optional: true - - '@esbuild/openbsd-x64@0.27.2': - optional: true - - '@esbuild/openharmony-arm64@0.25.12': - optional: true - - '@esbuild/openharmony-arm64@0.27.2': - optional: true - - '@esbuild/sunos-x64@0.25.12': - optional: true - - '@esbuild/sunos-x64@0.27.2': - optional: true - - '@esbuild/win32-arm64@0.25.12': - optional: true - - '@esbuild/win32-arm64@0.27.2': - optional: true - - '@esbuild/win32-ia32@0.25.12': - optional: true - - '@esbuild/win32-ia32@0.27.2': - optional: true - - '@esbuild/win32-x64@0.25.12': - optional: true - - '@esbuild/win32-x64@0.27.2': - optional: true - - '@eslint-community/eslint-utils@4.9.1(eslint@9.39.2(jiti@2.6.1))': - dependencies: - eslint: 9.39.2(jiti@2.6.1) - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.12.2': {} - - '@eslint/config-array@0.21.1': - dependencies: - '@eslint/object-schema': 2.1.7 - debug: 4.4.3 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@eslint/config-helpers@0.4.2': - dependencies: - '@eslint/core': 0.17.0 - - '@eslint/core@0.17.0': - dependencies: - '@types/json-schema': 7.0.15 - - '@eslint/eslintrc@3.3.3': - dependencies: - ajv: 6.12.6 - debug: 4.4.3 - espree: 10.4.0 - globals: 14.0.0 - ignore: 5.3.2 - import-fresh: 3.3.1 - js-yaml: 4.1.1 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@9.39.2': {} - - '@eslint/object-schema@2.1.7': {} - - '@eslint/plugin-kit@0.4.1': - dependencies: - '@eslint/core': 0.17.0 - levn: 0.4.1 - - '@floating-ui/core@1.7.4': - dependencies: - '@floating-ui/utils': 0.2.10 - - '@floating-ui/dom@1.7.5': - dependencies: - '@floating-ui/core': 1.7.4 - '@floating-ui/utils': 0.2.10 - - '@floating-ui/utils@0.2.10': {} - - '@humanfs/core@0.19.1': {} - - '@humanfs/node@0.16.7': - dependencies: - '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.4.3 - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/retry@0.4.3': {} - - '@ionic/cli-framework-output@2.2.8': - dependencies: - '@ionic/utils-terminal': 2.3.5 - debug: 4.4.3 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - - '@ionic/utils-array@2.1.6': - dependencies: - debug: 4.4.3 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - - '@ionic/utils-fs@3.1.7': - dependencies: - '@types/fs-extra': 8.1.5 - debug: 4.4.3 - fs-extra: 9.1.0 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - - '@ionic/utils-object@2.1.6': - dependencies: - debug: 4.4.3 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - - '@ionic/utils-process@2.1.12': - dependencies: - '@ionic/utils-object': 2.1.6 - '@ionic/utils-terminal': 2.3.5 - debug: 4.4.3 - signal-exit: 3.0.7 - tree-kill: 1.2.2 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - - '@ionic/utils-stream@3.1.7': - dependencies: - debug: 4.4.3 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - - '@ionic/utils-subprocess@3.0.1': - dependencies: - '@ionic/utils-array': 2.1.6 - '@ionic/utils-fs': 3.1.7 - '@ionic/utils-process': 2.1.12 - '@ionic/utils-stream': 3.1.7 - '@ionic/utils-terminal': 2.3.5 - cross-spawn: 7.0.6 - debug: 4.4.3 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - - '@ionic/utils-terminal@2.3.5': - dependencies: - '@types/slice-ansi': 4.0.0 - debug: 4.4.3 - signal-exit: 3.0.7 - slice-ansi: 4.0.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - tslib: 2.8.1 - untildify: 4.0.0 - wrap-ansi: 7.0.0 - transitivePeerDependencies: - - supports-color - - '@isaacs/balanced-match@4.0.1': {} - - '@isaacs/brace-expansion@5.0.0': - dependencies: - '@isaacs/balanced-match': 4.0.1 - - '@isaacs/cliui@8.0.2': - dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.2 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 - - '@isaacs/fs-minipass@4.0.1': - dependencies: - minipass: 7.1.2 - - '@jridgewell/gen-mapping@0.3.13': - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/remapping@2.3.5': - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/source-map@0.3.11': - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/sourcemap-codec@1.5.5': {} - - '@jridgewell/trace-mapping@0.3.31': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 - - '@jsep-plugin/assignment@1.3.0(jsep@1.4.0)': - dependencies: - jsep: 1.4.0 - - '@jsep-plugin/regex@1.0.4(jsep@1.4.0)': - dependencies: - jsep: 1.4.0 - - '@malept/cross-spawn-promise@2.0.0': - dependencies: - cross-spawn: 7.0.6 - - '@malept/flatpak-bundler@0.4.0': - dependencies: - debug: 4.4.3 - fs-extra: 9.1.0 - lodash: 4.17.21 - tmp-promise: 3.0.3 - transitivePeerDependencies: - - supports-color - - '@npmcli/agent@3.0.0': - dependencies: - agent-base: 7.1.4 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - lru-cache: 10.4.3 - socks-proxy-agent: 8.0.5 - transitivePeerDependencies: - - supports-color - - '@npmcli/fs@4.0.0': - dependencies: - semver: 7.7.3 - - '@pkgjs/parseargs@0.11.0': - optional: true - - '@pkgr/core@0.2.9': {} - - '@rc-component/async-validator@5.1.0': - dependencies: - '@babel/runtime': 7.28.6 - - '@rc-component/cascader@1.14.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/select': 1.6.13(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/tree': 1.2.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/checkbox@2.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/collapse@1.2.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@babel/runtime': 7.28.6 - '@rc-component/motion': 1.3.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/color-picker@3.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@ant-design/fast-color': 3.0.1 - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/context@2.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/dialog@1.8.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/motion': 1.3.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/portal': 2.2.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/drawer@1.4.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/motion': 1.3.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/portal': 2.2.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/dropdown@1.0.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/trigger': 3.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/form@1.6.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/async-validator': 5.1.0 - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/image@1.6.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/motion': 1.3.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/portal': 2.2.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/input-number@1.6.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/mini-decimal': 1.1.0 - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/input@1.1.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/mentions@1.6.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/input': 1.1.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/menu': 1.2.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/textarea': 1.1.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/trigger': 3.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/menu@1.2.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/motion': 1.3.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/overflow': 1.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/trigger': 3.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/mini-decimal@1.1.0': - dependencies: - '@babel/runtime': 7.28.6 - - '@rc-component/motion@1.3.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/mutate-observer@2.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/notification@1.2.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/motion': 1.3.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/overflow@1.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@babel/runtime': 7.28.6 - '@rc-component/resize-observer': 1.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/pagination@1.2.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/picker@1.9.0(dayjs@1.11.20)(moment@2.30.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/overflow': 1.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/resize-observer': 1.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/trigger': 3.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - optionalDependencies: - dayjs: 1.11.20 - moment: 2.30.1 - - '@rc-component/portal@2.2.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/progress@1.0.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/qrcode@1.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@babel/runtime': 7.28.6 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/rate@1.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/resize-observer@1.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/segmented@1.3.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@babel/runtime': 7.28.6 - '@rc-component/motion': 1.3.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/select@1.6.13(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/overflow': 1.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/trigger': 3.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/virtual-list': 1.0.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/slider@1.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/steps@1.2.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/switch@1.0.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/table@1.9.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/context': 2.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/resize-observer': 1.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/virtual-list': 1.0.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/tabs@1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/dropdown': 1.0.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/menu': 1.2.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/motion': 1.3.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/resize-observer': 1.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/textarea@1.1.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/input': 1.1.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/resize-observer': 1.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/tooltip@1.4.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/trigger': 3.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/tour@2.3.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/portal': 2.2.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/trigger': 3.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/tree-select@1.8.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/select': 1.6.13(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/tree': 1.2.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/tree@1.2.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/motion': 1.3.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/virtual-list': 1.0.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/trigger@3.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/motion': 1.3.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/portal': 2.2.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/resize-observer': 1.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/upload@1.1.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@rc-component/util@1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - is-mobile: 5.0.0 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - react-is: 18.3.1 - - '@rc-component/virtual-list@1.0.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@babel/runtime': 7.28.6 - '@rc-component/resize-observer': 1.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-dnd/asap@5.0.2': {} - - '@react-dnd/invariant@4.0.2': {} - - '@react-dnd/shallowequal@4.0.2': {} - - '@react-querybuilder/antd@8.14.0(@ant-design/icons@6.1.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(antd@6.3.1(moment@2.30.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(dayjs@1.11.20)(react-querybuilder@8.14.0(@types/react@19.2.8)(react@19.2.3)(redux@5.0.1))(react@19.2.3)': - dependencies: - '@ant-design/icons': 6.1.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - antd: 6.3.1(moment@2.30.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - dayjs: 1.11.20 - react: 19.2.3 - react-querybuilder: 8.14.0(@types/react@19.2.8)(react@19.2.3)(redux@5.0.1) - - '@react-querybuilder/core@8.14.0': - dependencies: - '@ts-jison/lexer': 0.4.1-alpha.1 - '@ts-jison/parser': 0.4.1-alpha.1 - immer: 11.1.4 - numeric-quantity: 2.1.0 - - '@react-querybuilder/dnd@8.14.0(react-dnd-html5-backend@16.0.1)(react-dnd-touch-backend@16.0.1)(react-dnd@16.0.1(@types/node@22.19.5)(@types/react@19.2.8)(react@19.2.3))(react-querybuilder@8.14.0(@types/react@19.2.8)(react@19.2.3)(redux@5.0.1))(react@19.2.3)': - dependencies: - react: 19.2.3 - react-dnd: 16.0.1(@types/node@22.19.5)(@types/react@19.2.8)(react@19.2.3) - react-querybuilder: 8.14.0(@types/react@19.2.8)(react@19.2.3)(redux@5.0.1) - optionalDependencies: - react-dnd-html5-backend: 16.0.1 - react-dnd-touch-backend: 16.0.1 - - '@react-spring/animated@9.6.1(react@19.2.3)': - dependencies: - '@react-spring/shared': 9.6.1(react@19.2.3) - '@react-spring/types': 9.6.1 - react: 19.2.3 - - '@react-spring/core@9.6.1(react@19.2.3)': - dependencies: - '@react-spring/animated': 9.6.1(react@19.2.3) - '@react-spring/rafz': 9.6.1 - '@react-spring/shared': 9.6.1(react@19.2.3) - '@react-spring/types': 9.6.1 - react: 19.2.3 - - '@react-spring/rafz@9.6.1': {} - - '@react-spring/shared@9.6.1(react@19.2.3)': - dependencies: - '@react-spring/rafz': 9.6.1 - '@react-spring/types': 9.6.1 - react: 19.2.3 - - '@react-spring/types@9.6.1': {} - - '@react-spring/web@9.6.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-spring/animated': 9.6.1(react@19.2.3) - '@react-spring/core': 9.6.1(react@19.2.3) - '@react-spring/shared': 9.6.1(react@19.2.3) - '@react-spring/types': 9.6.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@reduxjs/toolkit@2.11.2(react-redux@9.2.0(@types/react@19.2.8)(react@19.2.3)(redux@5.0.1))(react@19.2.3)': - dependencies: - '@standard-schema/spec': 1.1.0 - '@standard-schema/utils': 0.3.0 - immer: 11.1.4 - redux: 5.0.1 - redux-thunk: 3.1.0(redux@5.0.1) - reselect: 5.1.1 - optionalDependencies: - react: 19.2.3 - react-redux: 9.2.0(@types/react@19.2.8)(react@19.2.3)(redux@5.0.1) - - '@remix-run/router@1.23.2': {} - - '@rolldown/pluginutils@1.0.0-beta.53': {} - - '@rollup/rollup-android-arm-eabi@4.55.1': - optional: true - - '@rollup/rollup-android-arm64@4.55.1': - optional: true - - '@rollup/rollup-darwin-arm64@4.55.1': - optional: true - - '@rollup/rollup-darwin-x64@4.55.1': - optional: true - - '@rollup/rollup-freebsd-arm64@4.55.1': - optional: true - - '@rollup/rollup-freebsd-x64@4.55.1': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.55.1': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.55.1': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.55.1': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.55.1': - optional: true - - '@rollup/rollup-linux-loong64-gnu@4.55.1': - optional: true - - '@rollup/rollup-linux-loong64-musl@4.55.1': - optional: true - - '@rollup/rollup-linux-ppc64-gnu@4.55.1': - optional: true - - '@rollup/rollup-linux-ppc64-musl@4.55.1': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.55.1': - optional: true - - '@rollup/rollup-linux-riscv64-musl@4.55.1': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.55.1': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.55.1': - optional: true - - '@rollup/rollup-linux-x64-musl@4.55.1': - optional: true - - '@rollup/rollup-openbsd-x64@4.55.1': - optional: true - - '@rollup/rollup-openharmony-arm64@4.55.1': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.55.1': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.55.1': - optional: true - - '@rollup/rollup-win32-x64-gnu@4.55.1': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.55.1': - optional: true - - '@sindresorhus/is@4.6.0': {} - - '@so-ric/colorspace@1.1.6': - dependencies: - color: 5.0.3 - text-hex: 1.0.0 - - '@sqltools/formatter@1.2.5': {} - - '@standard-schema/spec@1.1.0': {} - - '@standard-schema/utils@0.3.0': {} - - '@szmarczak/http-timer@4.0.6': - dependencies: - defer-to-connect: 2.0.1 - - '@ts-jison/common@0.4.1-alpha.1': {} - - '@ts-jison/lexer@0.4.1-alpha.1': - dependencies: - '@ts-jison/common': 0.4.1-alpha.1 - - '@ts-jison/parser@0.4.1-alpha.1': - dependencies: - '@ts-jison/common': 0.4.1-alpha.1 - '@ts-jison/lexer': 0.4.1-alpha.1 - - '@types/babel__core@7.20.5': - dependencies: - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 - '@types/babel__generator': 7.27.0 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.28.0 - - '@types/babel__generator@7.27.0': - dependencies: - '@babel/types': 7.28.5 - - '@types/babel__template@7.4.4': - dependencies: - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 - - '@types/babel__traverse@7.28.0': - dependencies: - '@babel/types': 7.28.5 - - '@types/better-sqlite3@7.6.13': - dependencies: - '@types/node': 22.19.5 - - '@types/cacheable-request@6.0.3': - dependencies: - '@types/http-cache-semantics': 4.0.4 - '@types/keyv': 3.1.4 - '@types/node': 22.19.5 - '@types/responselike': 1.0.3 - - '@types/debug@4.1.12': - dependencies: - '@types/ms': 2.1.0 - - '@types/estree@1.0.8': {} - - '@types/fs-extra@8.1.5': - dependencies: - '@types/node': 22.19.5 - - '@types/fs-extra@9.0.13': - dependencies: - '@types/node': 22.19.5 - - '@types/http-cache-semantics@4.0.4': {} - - '@types/js-cookie@3.0.6': {} - - '@types/json-schema@7.0.15': {} - - '@types/keyv@3.1.4': - dependencies: - '@types/node': 22.19.5 - - '@types/ms@2.1.0': {} - - '@types/node@22.19.5': - dependencies: - undici-types: 6.21.0 - - '@types/pg@8.18.0': - dependencies: - '@types/node': 22.19.5 - pg-protocol: 1.12.0 - pg-types: 2.2.0 - - '@types/plist@3.0.5': - dependencies: - '@types/node': 22.19.5 - xmlbuilder: 15.1.1 - optional: true - - '@types/react-dom@19.2.3(@types/react@19.2.8)': - dependencies: - '@types/react': 19.2.8 - - '@types/react@19.2.8': - dependencies: - csstype: 3.2.3 - - '@types/responselike@1.0.3': - dependencies: - '@types/node': 22.19.5 - - '@types/slice-ansi@4.0.0': {} - - '@types/triple-beam@1.3.5': {} - - '@types/use-sync-external-store@0.0.6': {} - - '@types/uuid@11.0.0': - dependencies: - uuid: 13.0.0 - - '@types/verror@1.10.11': - optional: true - - '@types/yauzl@2.10.3': - dependencies: - '@types/node': 22.19.5 - optional: true - - '@typescript-eslint/eslint-plugin@8.52.0(@typescript-eslint/parser@8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.52.0 - '@typescript-eslint/type-utils': 8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.52.0 - eslint: 9.39.2(jiti@2.6.1) - ignore: 7.0.5 - natural-compare: 1.4.0 - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.52.0 - '@typescript-eslint/types': 8.52.0 - '@typescript-eslint/typescript-estree': 8.52.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.52.0 - debug: 4.4.3 - eslint: 9.39.2(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.52.0(typescript@5.9.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.52.0(typescript@5.9.3) - '@typescript-eslint/types': 8.52.0 - debug: 4.4.3 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@8.52.0': - dependencies: - '@typescript-eslint/types': 8.52.0 - '@typescript-eslint/visitor-keys': 8.52.0 - - '@typescript-eslint/tsconfig-utils@8.52.0(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 - - '@typescript-eslint/type-utils@8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/types': 8.52.0 - '@typescript-eslint/typescript-estree': 8.52.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - debug: 4.4.3 - eslint: 9.39.2(jiti@2.6.1) - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@8.52.0': {} - - '@typescript-eslint/typescript-estree@8.52.0(typescript@5.9.3)': - dependencies: - '@typescript-eslint/project-service': 8.52.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.52.0(typescript@5.9.3) - '@typescript-eslint/types': 8.52.0 - '@typescript-eslint/visitor-keys': 8.52.0 - debug: 4.4.3 - minimatch: 9.0.5 - semver: 7.7.3 - tinyglobby: 0.2.15 - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.52.0 - '@typescript-eslint/types': 8.52.0 - '@typescript-eslint/typescript-estree': 8.52.0(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@8.52.0': - dependencies: - '@typescript-eslint/types': 8.52.0 - eslint-visitor-keys: 4.2.1 - - '@use-gesture/core@10.3.0': {} - - '@use-gesture/react@10.3.0(react@19.2.3)': - dependencies: - '@use-gesture/core': 10.3.0 - react: 19.2.3 - - '@vitejs/plugin-react@5.1.2(vite@7.3.1(@types/node@22.19.5)(jiti@2.6.1)(terser@5.46.0))': - dependencies: - '@babel/core': 7.28.5 - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.5) - '@rolldown/pluginutils': 1.0.0-beta.53 - '@types/babel__core': 7.20.5 - react-refresh: 0.18.0 - vite: 7.3.1(@types/node@22.19.5)(jiti@2.6.1)(terser@5.46.0) - transitivePeerDependencies: - - supports-color - - '@xmldom/xmldom@0.8.11': {} - - abbrev@3.0.1: {} - - accepts@2.0.0: - dependencies: - mime-types: 3.0.2 - negotiator: 1.0.0 - - acorn-jsx@5.3.2(acorn@8.15.0): - dependencies: - acorn: 8.15.0 - - acorn@8.15.0: {} - - adler-32@1.3.1: {} - - agent-base@7.1.4: {} - - ahooks@3.9.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3): - dependencies: - '@babel/runtime': 7.28.6 - '@types/js-cookie': 3.0.6 - dayjs: 1.11.20 - intersection-observer: 0.12.2 - js-cookie: 3.0.5 - lodash: 4.17.21 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - react-fast-compare: 3.2.2 - resize-observer-polyfill: 1.5.1 - screenfull: 5.2.0 - tslib: 2.8.1 - - ajv-keywords@3.5.2(ajv@6.12.6): - dependencies: - ajv: 6.12.6 - - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - - ansi-regex@5.0.1: {} - - ansi-regex@6.2.2: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - ansi-styles@6.2.3: {} - - ansis@4.2.0: {} - - antd-mobile-icons@0.3.0: {} - - antd-mobile-v5-count@1.0.1: {} - - antd-mobile@5.42.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3): - dependencies: - '@floating-ui/dom': 1.7.5 - '@rc-component/mini-decimal': 1.1.0 - '@react-spring/web': 9.6.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@use-gesture/react': 10.3.0(react@19.2.3) - ahooks: 3.9.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - antd-mobile-icons: 0.3.0 - antd-mobile-v5-count: 1.0.1 - classnames: 2.5.1 - dayjs: 1.11.20 - deepmerge: 4.3.1 - nano-memoize: 3.0.16 - rc-field-form: 1.44.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - rc-segmented: 2.4.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - rc-util: 5.44.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - react-fast-compare: 3.2.2 - react-is: 18.3.1 - runes2: 1.1.4 - staged-components: 1.1.3(react@19.2.3) - tslib: 2.8.1 - use-sync-external-store: 1.6.0(react@19.2.3) - - antd@6.3.1(moment@2.30.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): - dependencies: - '@ant-design/colors': 8.0.1 - '@ant-design/cssinjs': 2.1.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@ant-design/cssinjs-utils': 2.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@ant-design/fast-color': 3.0.1 - '@ant-design/icons': 6.1.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@ant-design/react-slick': 2.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@babel/runtime': 7.28.6 - '@rc-component/cascader': 1.14.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/checkbox': 2.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/collapse': 1.2.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/color-picker': 3.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/dialog': 1.8.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/drawer': 1.4.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/dropdown': 1.0.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/form': 1.6.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/image': 1.6.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/input': 1.1.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/input-number': 1.6.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/mentions': 1.6.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/menu': 1.2.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/motion': 1.3.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/mutate-observer': 2.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/notification': 1.2.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/pagination': 1.2.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/picker': 1.9.0(dayjs@1.11.20)(moment@2.30.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/progress': 1.0.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/qrcode': 1.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/rate': 1.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/resize-observer': 1.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/segmented': 1.3.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/select': 1.6.13(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/slider': 1.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/steps': 1.2.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/switch': 1.0.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/table': 1.9.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/tabs': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/textarea': 1.1.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/tooltip': 1.4.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/tour': 2.3.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/tree': 1.2.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/tree-select': 1.8.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/trigger': 3.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/upload': 1.1.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rc-component/util': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - clsx: 2.1.1 - dayjs: 1.11.20 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - scroll-into-view-if-needed: 3.1.0 - throttle-debounce: 5.0.2 - transitivePeerDependencies: - - date-fns - - luxon - - moment - - app-builder-bin@5.0.0-alpha.12: {} - - app-builder-lib@26.4.0(dmg-builder@26.4.0)(electron-builder-squirrel-windows@26.4.0): - dependencies: - '@develar/schema-utils': 2.6.5 - '@electron/asar': 3.4.1 - '@electron/fuses': 1.8.0 - '@electron/notarize': 2.5.0 - '@electron/osx-sign': 1.3.3 - '@electron/rebuild': 4.0.1 - '@electron/universal': 2.0.3 - '@malept/flatpak-bundler': 0.4.0 - '@types/fs-extra': 9.0.13 - async-exit-hook: 2.0.1 - builder-util: 26.3.4 - builder-util-runtime: 9.5.1 - chromium-pickle-js: 0.2.0 - ci-info: 4.3.1 - debug: 4.4.3 - dmg-builder: 26.4.0(electron-builder-squirrel-windows@26.4.0) - dotenv: 16.6.1 - dotenv-expand: 11.0.7 - ejs: 3.1.10 - electron-builder-squirrel-windows: 26.4.0(dmg-builder@26.4.0) - electron-publish: 26.3.4 - fs-extra: 10.1.0 - hosted-git-info: 4.1.0 - isbinaryfile: 5.0.7 - jiti: 2.6.1 - js-yaml: 4.1.1 - json5: 2.2.3 - lazy-val: 1.0.5 - minimatch: 10.1.1 - plist: 3.1.0 - resedit: 1.7.2 - semver: 7.7.3 - tar: 6.2.1 - temp-file: 3.4.0 - tiny-async-pool: 1.3.0 - which: 5.0.0 - transitivePeerDependencies: - - supports-color - - app-root-path@3.1.0: {} - - argparse@2.0.1: {} - - array-buffer-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - is-array-buffer: 3.0.5 - - array-includes@3.1.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - is-string: 1.1.1 - math-intrinsics: 1.1.0 - - array.prototype.findlast@1.2.5: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-shim-unscopables: 1.1.0 - - array.prototype.flat@1.3.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-shim-unscopables: 1.1.0 - - array.prototype.flatmap@1.3.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-shim-unscopables: 1.1.0 - - array.prototype.tosorted@1.1.4: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-errors: 1.3.0 - es-shim-unscopables: 1.1.0 - - arraybuffer.prototype.slice@1.0.4: - dependencies: - array-buffer-byte-length: 1.0.2 - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - is-array-buffer: 3.0.5 - - assert-plus@1.0.0: - optional: true - - astral-regex@2.0.0: {} - - async-exit-hook@2.0.1: {} - - async-function@1.0.0: {} - - async-validator@4.2.5: {} - - async@3.2.6: {} - - asynckit@0.4.0: {} - - at-least-node@1.0.0: {} - - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.1.0 - - balanced-match@1.0.2: {} - - balanced-match@4.0.4: {} - - base64-js@1.5.1: {} - - baseline-browser-mapping@2.9.14: {} - - better-sqlite3@12.6.0: - dependencies: - bindings: 1.5.0 - prebuild-install: 7.1.3 - - big-integer@1.6.52: {} - - bindings@1.5.0: - dependencies: - file-uri-to-path: 1.0.0 - - bl@4.1.0: - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - - body-parser@2.2.2: - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 4.4.3 - http-errors: 2.0.1 - iconv-lite: 0.7.2 - on-finished: 2.4.1 - qs: 6.14.1 - raw-body: 3.0.2 - type-is: 2.0.1 - transitivePeerDependencies: - - supports-color - - boolean@3.2.0: - optional: true - - bplist-parser@0.3.2: - dependencies: - big-integer: 1.6.52 - - brace-expansion@1.1.12: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@2.0.2: - dependencies: - balanced-match: 1.0.2 - - brace-expansion@5.0.4: - dependencies: - balanced-match: 4.0.4 - - browserslist@4.28.1: - dependencies: - baseline-browser-mapping: 2.9.14 - caniuse-lite: 1.0.30001764 - electron-to-chromium: 1.5.267 - node-releases: 2.0.27 - update-browserslist-db: 1.2.3(browserslist@4.28.1) - - buffer-crc32@0.2.13: {} - - buffer-from@1.1.2: {} - - buffer@5.7.1: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - - buffer@6.0.3: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - - builder-util-runtime@9.5.1: - dependencies: - debug: 4.4.3 - sax: 1.4.4 - transitivePeerDependencies: - - supports-color - - builder-util@26.3.4: - dependencies: - 7zip-bin: 5.2.0 - '@types/debug': 4.1.12 - app-builder-bin: 5.0.0-alpha.12 - builder-util-runtime: 9.5.1 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.3 - fs-extra: 10.1.0 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - js-yaml: 4.1.1 - sanitize-filename: 1.6.3 - source-map-support: 0.5.21 - stat-mode: 1.0.0 - temp-file: 3.4.0 - tiny-async-pool: 1.3.0 - transitivePeerDependencies: - - supports-color - - bytes@3.1.2: {} - - cac@6.7.14: {} - - cacache@19.0.1: - dependencies: - '@npmcli/fs': 4.0.0 - fs-minipass: 3.0.3 - glob: 10.5.0 - lru-cache: 10.4.3 - minipass: 7.1.2 - minipass-collect: 2.0.1 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - p-map: 7.0.4 - ssri: 12.0.0 - tar: 7.5.2 - unique-filename: 4.0.0 - - cacheable-lookup@5.0.4: {} - - cacheable-request@7.0.4: - dependencies: - clone-response: 1.0.3 - get-stream: 5.2.0 - http-cache-semantics: 4.2.0 - keyv: 4.5.4 - lowercase-keys: 2.0.0 - normalize-url: 6.1.0 - responselike: 2.0.1 - - call-bind-apply-helpers@1.0.2: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - - call-bind@1.0.8: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - get-intrinsic: 1.3.0 - set-function-length: 1.2.2 - - call-bound@1.0.4: - dependencies: - call-bind-apply-helpers: 1.0.2 - get-intrinsic: 1.3.0 - - callsites@3.1.0: {} - - caniuse-lite@1.0.30001764: {} - - cfb@1.2.2: - dependencies: - adler-32: 1.3.1 - crc-32: 1.2.2 - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - chokidar@5.0.0: - dependencies: - readdirp: 5.0.0 - - chownr@1.1.4: {} - - chownr@2.0.0: {} - - chownr@3.0.0: {} - - chromium-pickle-js@0.2.0: {} - - ci-info@4.3.1: {} - - classnames@2.5.1: {} - - cli-cursor@3.1.0: - dependencies: - restore-cursor: 3.1.0 - - cli-spinners@2.9.2: {} - - cli-truncate@2.1.0: - dependencies: - slice-ansi: 3.0.0 - string-width: 4.2.3 - optional: true - - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - clone-response@1.0.3: - dependencies: - mimic-response: 1.0.1 - - clone@1.0.4: {} - - clone@2.1.2: {} - - clsx@2.1.1: {} - - codepage@1.15.0: {} - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-convert@3.1.3: - dependencies: - color-name: 2.1.0 - - color-name@1.1.4: {} - - color-name@2.1.0: {} - - color-string@2.1.4: - dependencies: - color-name: 2.1.0 - - color@5.0.3: - dependencies: - color-convert: 3.1.3 - color-string: 2.1.4 - - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 - - commander@12.1.0: {} - - commander@2.20.3: {} - - commander@5.1.0: {} - - commander@9.5.0: - optional: true - - compare-version@0.1.2: {} - - compute-scroll-into-view@3.1.1: {} - - concat-map@0.0.1: {} - - content-disposition@1.0.1: {} - - content-type@1.0.5: {} - - convert-source-map@2.0.0: {} - - cookie-signature@1.2.2: {} - - cookie@0.7.2: {} - - core-util-is@1.0.2: - optional: true - - crc-32@1.2.2: {} - - crc@3.8.0: - dependencies: - buffer: 5.7.1 - optional: true - - cross-dirname@0.1.0: - optional: true - - cross-spawn@7.0.6: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - csstype@3.2.3: {} - - data-view-buffer@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-offset@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - dayjs@1.11.20: {} - - debug@4.4.3: - dependencies: - ms: 2.1.3 - - decompress-response@6.0.0: - dependencies: - mimic-response: 3.1.0 - - dedent@1.7.1: {} - - deep-extend@0.6.0: {} - - deep-is@0.1.4: {} - - deepmerge@4.3.1: {} - - defaults@1.0.4: - dependencies: - clone: 1.0.4 - - defer-to-connect@2.0.1: {} - - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.1 - es-errors: 1.3.0 - gopd: 1.2.0 - - define-lazy-prop@2.0.0: {} - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - - delayed-stream@1.0.0: {} - - depd@2.0.0: {} - - detect-libc@2.1.2: {} - - detect-node@2.1.0: - optional: true - - dir-compare@4.2.0: - dependencies: - minimatch: 3.1.2 - p-limit: 3.1.0 - - dmg-builder@26.4.0(electron-builder-squirrel-windows@26.4.0): - dependencies: - app-builder-lib: 26.4.0(dmg-builder@26.4.0)(electron-builder-squirrel-windows@26.4.0) - builder-util: 26.3.4 - fs-extra: 10.1.0 - iconv-lite: 0.6.3 - js-yaml: 4.1.1 - optionalDependencies: - dmg-license: 1.0.11 - transitivePeerDependencies: - - electron-builder-squirrel-windows - - supports-color - - dmg-license@1.0.11: - dependencies: - '@types/plist': 3.0.5 - '@types/verror': 1.10.11 - ajv: 6.12.6 - crc: 3.8.0 - iconv-corefoundation: 1.1.7 - plist: 3.1.0 - smart-buffer: 4.2.0 - verror: 1.10.1 - optional: true - - dnd-core@16.0.1: - dependencies: - '@react-dnd/asap': 5.0.2 - '@react-dnd/invariant': 4.0.2 - redux: 4.2.1 - - doctrine@2.1.0: - dependencies: - esutils: 2.0.3 - - dotenv-expand@11.0.7: - dependencies: - dotenv: 16.6.1 - - dotenv@16.6.1: {} - - dunder-proto@1.0.1: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-errors: 1.3.0 - gopd: 1.2.0 - - eastasianwidth@0.2.0: {} - - ee-first@1.1.1: {} - - ejs@3.1.10: - dependencies: - jake: 10.9.4 - - electron-builder-squirrel-windows@26.4.0(dmg-builder@26.4.0): - dependencies: - app-builder-lib: 26.4.0(dmg-builder@26.4.0)(electron-builder-squirrel-windows@26.4.0) - builder-util: 26.3.4 - electron-winstaller: 5.4.0 - transitivePeerDependencies: - - dmg-builder - - supports-color - - electron-builder@26.4.0(electron-builder-squirrel-windows@26.4.0): - dependencies: - app-builder-lib: 26.4.0(dmg-builder@26.4.0)(electron-builder-squirrel-windows@26.4.0) - builder-util: 26.3.4 - builder-util-runtime: 9.5.1 - chalk: 4.1.2 - ci-info: 4.3.1 - dmg-builder: 26.4.0(electron-builder-squirrel-windows@26.4.0) - fs-extra: 10.1.0 - lazy-val: 1.0.5 - simple-update-notifier: 2.0.0 - yargs: 17.7.2 - transitivePeerDependencies: - - electron-builder-squirrel-windows - - supports-color - - electron-publish@26.3.4: - dependencies: - '@types/fs-extra': 9.0.13 - builder-util: 26.3.4 - builder-util-runtime: 9.5.1 - chalk: 4.1.2 - form-data: 4.0.5 - fs-extra: 10.1.0 - lazy-val: 1.0.5 - mime: 2.6.0 - transitivePeerDependencies: - - supports-color - - electron-to-chromium@1.5.267: {} - - electron-vite@5.0.0(vite@7.3.1(@types/node@22.19.5)(jiti@2.6.1)(terser@5.46.0)): - dependencies: - '@babel/core': 7.28.5 - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.5) - cac: 6.7.14 - esbuild: 0.25.12 - magic-string: 0.30.21 - picocolors: 1.1.1 - vite: 7.3.1(@types/node@22.19.5)(jiti@2.6.1)(terser@5.46.0) - transitivePeerDependencies: - - supports-color - - electron-winstaller@5.4.0: - dependencies: - '@electron/asar': 3.4.1 - debug: 4.4.3 - fs-extra: 7.0.1 - lodash: 4.17.21 - temp: 0.9.4 - optionalDependencies: - '@electron/windows-sign': 1.2.2 - transitivePeerDependencies: - - supports-color - - electron@39.2.7: - dependencies: - '@electron/get': 2.0.3 - '@types/node': 22.19.5 - extract-zip: 2.0.1 - transitivePeerDependencies: - - supports-color - - elementtree@0.1.7: - dependencies: - sax: 1.1.4 - - emoji-regex@8.0.0: {} - - emoji-regex@9.2.2: {} - - enabled@2.0.0: {} - - encodeurl@2.0.0: {} - - encoding@0.1.13: - dependencies: - iconv-lite: 0.6.3 - optional: true - - end-of-stream@1.4.5: - dependencies: - once: 1.4.0 - - env-paths@2.2.1: {} - - err-code@2.0.3: {} - - es-abstract@1.24.1: - dependencies: - array-buffer-byte-length: 1.0.2 - arraybuffer.prototype.slice: 1.0.4 - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - data-view-buffer: 1.0.2 - data-view-byte-length: 1.0.2 - data-view-byte-offset: 1.0.1 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-set-tostringtag: 2.1.0 - es-to-primitive: 1.3.0 - function.prototype.name: 1.1.8 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - get-symbol-description: 1.1.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - internal-slot: 1.1.0 - is-array-buffer: 3.0.5 - is-callable: 1.2.7 - is-data-view: 1.0.2 - is-negative-zero: 2.0.3 - is-regex: 1.2.1 - is-set: 2.0.3 - is-shared-array-buffer: 1.0.4 - is-string: 1.1.1 - is-typed-array: 1.1.15 - is-weakref: 1.1.1 - math-intrinsics: 1.1.0 - object-inspect: 1.13.4 - object-keys: 1.1.1 - object.assign: 4.1.7 - own-keys: 1.0.1 - regexp.prototype.flags: 1.5.4 - safe-array-concat: 1.1.3 - safe-push-apply: 1.0.0 - safe-regex-test: 1.1.0 - set-proto: 1.0.0 - stop-iteration-iterator: 1.1.0 - string.prototype.trim: 1.2.10 - string.prototype.trimend: 1.0.9 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.3 - typed-array-byte-length: 1.0.3 - typed-array-byte-offset: 1.0.4 - typed-array-length: 1.0.7 - unbox-primitive: 1.1.0 - which-typed-array: 1.1.19 - - es-define-property@1.0.1: {} - - es-errors@1.3.0: {} - - es-iterator-helpers@1.2.2: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-errors: 1.3.0 - es-set-tostringtag: 2.1.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - iterator.prototype: 1.1.5 - safe-array-concat: 1.1.3 - - es-object-atoms@1.1.1: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - es-shim-unscopables@1.1.0: - dependencies: - hasown: 2.0.2 - - es-to-primitive@1.3.0: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.1.0 - is-symbol: 1.1.1 - - es6-error@4.1.1: - optional: true - - esbuild@0.25.12: - 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 - - esbuild@0.27.2: - optionalDependencies: - '@esbuild/aix-ppc64': 0.27.2 - '@esbuild/android-arm': 0.27.2 - '@esbuild/android-arm64': 0.27.2 - '@esbuild/android-x64': 0.27.2 - '@esbuild/darwin-arm64': 0.27.2 - '@esbuild/darwin-x64': 0.27.2 - '@esbuild/freebsd-arm64': 0.27.2 - '@esbuild/freebsd-x64': 0.27.2 - '@esbuild/linux-arm': 0.27.2 - '@esbuild/linux-arm64': 0.27.2 - '@esbuild/linux-ia32': 0.27.2 - '@esbuild/linux-loong64': 0.27.2 - '@esbuild/linux-mips64el': 0.27.2 - '@esbuild/linux-ppc64': 0.27.2 - '@esbuild/linux-riscv64': 0.27.2 - '@esbuild/linux-s390x': 0.27.2 - '@esbuild/linux-x64': 0.27.2 - '@esbuild/netbsd-arm64': 0.27.2 - '@esbuild/netbsd-x64': 0.27.2 - '@esbuild/openbsd-arm64': 0.27.2 - '@esbuild/openbsd-x64': 0.27.2 - '@esbuild/openharmony-arm64': 0.27.2 - '@esbuild/sunos-x64': 0.27.2 - '@esbuild/win32-arm64': 0.27.2 - '@esbuild/win32-ia32': 0.27.2 - '@esbuild/win32-x64': 0.27.2 - - escalade@3.2.0: {} - - escape-html@1.0.3: {} - - escape-string-regexp@4.0.0: {} - - eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@2.6.1)): - dependencies: - eslint: 9.39.2(jiti@2.6.1) - - eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1))(prettier@3.7.4): - dependencies: - eslint: 9.39.2(jiti@2.6.1) - prettier: 3.7.4 - prettier-linter-helpers: 1.0.1 - synckit: 0.11.11 - optionalDependencies: - eslint-config-prettier: 10.1.8(eslint@9.39.2(jiti@2.6.1)) - - eslint-plugin-react-hooks@7.0.1(eslint@9.39.2(jiti@2.6.1)): - dependencies: - '@babel/core': 7.28.5 - '@babel/parser': 7.28.5 - eslint: 9.39.2(jiti@2.6.1) - hermes-parser: 0.25.1 - zod: 4.3.5 - zod-validation-error: 4.0.2(zod@4.3.5) - transitivePeerDependencies: - - supports-color - - eslint-plugin-react-refresh@0.4.26(eslint@9.39.2(jiti@2.6.1)): - dependencies: - eslint: 9.39.2(jiti@2.6.1) - - eslint-plugin-react@7.37.5(eslint@9.39.2(jiti@2.6.1)): - dependencies: - array-includes: 3.1.9 - array.prototype.findlast: 1.2.5 - array.prototype.flatmap: 1.3.3 - array.prototype.tosorted: 1.1.4 - doctrine: 2.1.0 - es-iterator-helpers: 1.2.2 - eslint: 9.39.2(jiti@2.6.1) - estraverse: 5.3.0 - hasown: 2.0.2 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 - object.entries: 1.1.9 - object.fromentries: 2.0.8 - object.values: 1.2.1 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.12 - string.prototype.repeat: 1.0.0 - - eslint-scope@8.4.0: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-visitor-keys@3.4.3: {} - - eslint-visitor-keys@4.2.1: {} - - eslint@9.39.2(jiti@2.6.1): - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) - '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.21.1 - '@eslint/config-helpers': 0.4.2 - '@eslint/core': 0.17.0 - '@eslint/eslintrc': 3.3.3 - '@eslint/js': 9.39.2 - '@eslint/plugin-kit': 0.4.1 - '@humanfs/node': 0.16.7 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.8 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.3 - escape-string-regexp: 4.0.0 - eslint-scope: 8.4.0 - eslint-visitor-keys: 4.2.1 - espree: 10.4.0 - esquery: 1.7.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 - find-up: 5.0.0 - glob-parent: 6.0.2 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - optionalDependencies: - jiti: 2.6.1 - transitivePeerDependencies: - - supports-color - - espree@10.4.0: - dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) - eslint-visitor-keys: 4.2.1 - - esquery@1.7.0: - dependencies: - estraverse: 5.3.0 - - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 - - estraverse@5.3.0: {} - - esutils@2.0.3: {} - - etag@1.8.1: {} - - eventemitter2@6.4.9: {} - - expand-template@2.0.3: {} - - exponential-backoff@3.1.3: {} - - express@5.2.1: - dependencies: - accepts: 2.0.0 - body-parser: 2.2.2 - content-disposition: 1.0.1 - content-type: 1.0.5 - cookie: 0.7.2 - cookie-signature: 1.2.2 - debug: 4.4.3 - depd: 2.0.0 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 2.1.1 - fresh: 2.0.0 - http-errors: 2.0.1 - merge-descriptors: 2.0.0 - mime-types: 3.0.2 - on-finished: 2.4.1 - once: 1.4.0 - parseurl: 1.3.3 - proxy-addr: 2.0.7 - qs: 6.14.1 - range-parser: 1.2.1 - router: 2.2.0 - send: 1.2.1 - serve-static: 2.2.1 - statuses: 2.0.2 - type-is: 2.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - - extract-zip@2.0.1: - dependencies: - debug: 4.4.3 - get-stream: 5.2.0 - yauzl: 2.10.0 - optionalDependencies: - '@types/yauzl': 2.10.3 - transitivePeerDependencies: - - supports-color - - extsprintf@1.4.1: - optional: true - - fast-deep-equal@3.1.3: {} - - fast-diff@1.3.0: {} - - fast-json-stable-stringify@2.1.0: {} - - fast-levenshtein@2.0.6: {} - - fd-slicer@1.1.0: - dependencies: - pend: 1.2.0 - - fdir@6.5.0(picomatch@4.0.3): - optionalDependencies: - picomatch: 4.0.3 - - fecha@4.2.3: {} - - file-entry-cache@8.0.0: - dependencies: - flat-cache: 4.0.1 - - file-stream-rotator@0.6.1: - dependencies: - moment: 2.30.1 - - file-uri-to-path@1.0.0: {} - - filelist@1.0.4: - dependencies: - minimatch: 5.1.6 - - finalhandler@2.1.1: - dependencies: - debug: 4.4.3 - encodeurl: 2.0.0 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.2 - transitivePeerDependencies: - - supports-color - - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - flat-cache@4.0.1: - dependencies: - flatted: 3.3.3 - keyv: 4.5.4 - - flatted@3.3.3: {} - - fn.name@1.1.0: {} - - for-each@0.3.5: - dependencies: - is-callable: 1.2.7 - - foreground-child@3.3.1: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - - form-data@4.0.5: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 - hasown: 2.0.2 - mime-types: 2.1.35 - - forwarded@0.2.0: {} - - frac@1.1.2: {} - - fresh@2.0.0: {} - - fs-constants@1.0.0: {} - - fs-extra@10.1.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.2.0 - universalify: 2.0.1 - - fs-extra@11.3.3: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.2.0 - universalify: 2.0.1 - - fs-extra@7.0.1: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 - - fs-extra@8.1.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 - - fs-extra@9.1.0: - dependencies: - at-least-node: 1.0.0 - graceful-fs: 4.2.11 - jsonfile: 6.2.0 - universalify: 2.0.1 - - fs-minipass@2.1.0: - dependencies: - minipass: 3.3.6 - - fs-minipass@3.0.3: - dependencies: - minipass: 7.1.2 - - fs.realpath@1.0.0: {} - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - function.prototype.name@1.1.8: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - functions-have-names: 1.2.3 - hasown: 2.0.2 - is-callable: 1.2.7 - - functions-have-names@1.2.3: {} - - generator-function@2.0.1: {} - - gensync@1.0.0-beta.2: {} - - get-caller-file@2.0.5: {} - - get-intrinsic@1.3.0: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - function-bind: 1.1.2 - get-proto: 1.0.1 - gopd: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - math-intrinsics: 1.1.0 - - get-proto@1.0.1: - dependencies: - dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 - - get-stream@5.2.0: - dependencies: - pump: 3.0.3 - - get-symbol-description@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - - github-from-package@0.0.0: {} - - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - - glob@10.5.0: - dependencies: - foreground-child: 3.3.1 - jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 - - glob@13.0.6: - dependencies: - minimatch: 10.2.4 - minipass: 7.1.3 - path-scurry: 2.0.2 - - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - global-agent@3.0.0: - dependencies: - boolean: 3.2.0 - es6-error: 4.1.1 - matcher: 3.0.0 - roarr: 2.15.4 - semver: 7.7.3 - serialize-error: 7.0.1 - optional: true - - globals@14.0.0: {} - - globals@16.5.0: {} - - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 - - gopd@1.2.0: {} - - got@11.8.6: - dependencies: - '@sindresorhus/is': 4.6.0 - '@szmarczak/http-timer': 4.0.6 - '@types/cacheable-request': 6.0.3 - '@types/responselike': 1.0.3 - cacheable-lookup: 5.0.4 - cacheable-request: 7.0.4 - decompress-response: 6.0.0 - http2-wrapper: 1.0.3 - lowercase-keys: 2.0.0 - p-cancelable: 2.1.1 - responselike: 2.0.1 - - graceful-fs@4.2.11: {} - - has-bigints@1.1.0: {} - - has-flag@4.0.0: {} - - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.1 - - has-proto@1.2.0: - dependencies: - dunder-proto: 1.0.1 - - has-symbols@1.1.0: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.1.0 - - hash-it@6.0.1: {} - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - hermes-estree@0.25.1: {} - - hermes-parser@0.25.1: - dependencies: - hermes-estree: 0.25.1 - - hoist-non-react-statics@3.3.2: - dependencies: - react-is: 16.13.1 - - hosted-git-info@4.1.0: - dependencies: - lru-cache: 6.0.0 - - html-parse-stringify@3.0.1: - dependencies: - void-elements: 3.1.0 - - http-cache-semantics@4.2.0: {} - - http-errors@2.0.1: - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.2 - toidentifier: 1.0.1 - - http-proxy-agent@7.0.2: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - http2-wrapper@1.0.3: - dependencies: - quick-lru: 5.1.1 - resolve-alpn: 1.2.1 - - https-proxy-agent@7.0.6: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - i18next@25.8.14(typescript@5.9.3): - dependencies: - '@babel/runtime': 7.28.6 - optionalDependencies: - typescript: 5.9.3 - - iconv-corefoundation@1.1.7: - dependencies: - cli-truncate: 2.1.0 - node-addon-api: 1.7.2 - optional: true - - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - - iconv-lite@0.7.2: - dependencies: - safer-buffer: 2.1.2 - - ieee754@1.2.1: {} - - ignore@5.3.2: {} - - ignore@7.0.5: {} - - immer@11.1.4: {} - - import-fresh@3.3.1: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - imurmurhash@0.1.4: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - - ini@1.3.8: {} - - ini@4.1.3: {} - - internal-slot@1.1.0: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.1.0 - - intersection-observer@0.12.2: {} - - ip-address@10.1.0: {} - - ipaddr.js@1.9.1: {} - - is-array-buffer@3.0.5: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - is-async-function@2.1.1: - dependencies: - async-function: 1.0.0 - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-bigint@1.1.0: - dependencies: - has-bigints: 1.1.0 - - is-boolean-object@1.2.2: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-callable@1.2.7: {} - - is-core-module@2.16.1: - dependencies: - hasown: 2.0.2 - - is-data-view@1.0.2: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-typed-array: 1.1.15 - - is-date-object@1.1.0: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-docker@2.2.1: {} - - is-extglob@2.1.1: {} - - is-finalizationregistry@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-fullwidth-code-point@3.0.0: {} - - is-generator-function@1.1.2: - dependencies: - call-bound: 1.0.4 - generator-function: 2.0.1 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-interactive@1.0.0: {} - - is-map@2.0.3: {} - - is-mobile@5.0.0: {} - - is-negative-zero@2.0.3: {} - - is-number-object@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-promise@4.0.0: {} - - is-regex@1.2.1: - dependencies: - call-bound: 1.0.4 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - is-set@2.0.3: {} - - is-shared-array-buffer@1.0.4: - dependencies: - call-bound: 1.0.4 - - is-stream@2.0.1: {} - - is-string@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-symbol@1.1.1: - dependencies: - call-bound: 1.0.4 - has-symbols: 1.1.0 - safe-regex-test: 1.1.0 - - is-typed-array@1.1.15: - dependencies: - which-typed-array: 1.1.19 - - is-unicode-supported@0.1.0: {} - - is-weakmap@2.0.2: {} - - is-weakref@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-weakset@2.0.4: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - is-wsl@2.2.0: - dependencies: - is-docker: 2.2.1 - - isarray@2.0.5: {} - - isbinaryfile@4.0.10: {} - - isbinaryfile@5.0.7: {} - - isexe@2.0.0: {} - - isexe@3.1.1: {} - - iterator.prototype@1.1.5: - dependencies: - define-data-property: 1.1.4 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - has-symbols: 1.1.0 - set-function-name: 2.0.2 - - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - - jake@10.9.4: - dependencies: - async: 3.2.6 - filelist: 1.0.4 - picocolors: 1.1.1 - - jiti@2.6.1: {} - - js-cookie@3.0.5: {} - - js-tokens@4.0.0: {} - - js-yaml@4.1.1: - dependencies: - argparse: 2.0.1 - - jsep@1.4.0: {} - - jsesc@3.1.0: {} - - json-buffer@3.0.1: {} - - json-rules-engine@7.3.1: - dependencies: - clone: 2.1.2 - eventemitter2: 6.4.9 - hash-it: 6.0.1 - jsonpath-plus: 10.4.0 - - json-schema-traverse@0.4.1: {} - - json-stable-stringify-without-jsonify@1.0.1: {} - - json-stringify-safe@5.0.1: - optional: true - - json2mq@0.2.0: - dependencies: - string-convert: 0.2.1 - - json5@2.2.3: {} - - jsonfile@4.0.0: - optionalDependencies: - graceful-fs: 4.2.11 - - jsonfile@6.2.0: - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 - - jsonpath-plus@10.4.0: - dependencies: - '@jsep-plugin/assignment': 1.3.0(jsep@1.4.0) - '@jsep-plugin/regex': 1.0.4(jsep@1.4.0) - jsep: 1.4.0 - - jsx-ast-utils@3.3.5: - dependencies: - array-includes: 3.1.9 - array.prototype.flat: 1.3.3 - object.assign: 4.1.7 - object.values: 1.2.1 - - keyv@4.5.4: - dependencies: - json-buffer: 3.0.1 - - kleur@3.0.3: {} - - kleur@4.1.5: {} - - kuler@2.0.0: {} - - lazy-val@1.0.5: {} - - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - - lodash.merge@4.6.2: {} - - lodash@4.17.21: {} - - log-symbols@4.1.0: - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 - - logform@2.7.0: - dependencies: - '@colors/colors': 1.6.0 - '@types/triple-beam': 1.3.5 - fecha: 4.2.3 - ms: 2.1.3 - safe-stable-stringify: 2.5.0 - triple-beam: 1.4.1 - - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 - - lowercase-keys@2.0.0: {} - - lru-cache@10.4.3: {} - - lru-cache@11.2.6: {} - - lru-cache@5.1.1: - dependencies: - yallist: 3.1.1 - - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - - magic-string@0.30.21: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - - make-fetch-happen@14.0.3: - dependencies: - '@npmcli/agent': 3.0.0 - cacache: 19.0.1 - http-cache-semantics: 4.2.0 - minipass: 7.1.2 - minipass-fetch: 4.0.1 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - negotiator: 1.0.0 - proc-log: 5.0.0 - promise-retry: 2.0.1 - ssri: 12.0.0 - transitivePeerDependencies: - - supports-color - - matcher@3.0.0: - dependencies: - escape-string-regexp: 4.0.0 - optional: true - - math-intrinsics@1.1.0: {} - - media-typer@1.1.0: {} - - merge-descriptors@2.0.0: {} - - mica-electron@1.5.16: {} - - mime-db@1.52.0: {} - - mime-db@1.54.0: {} - - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - - mime-types@3.0.2: - dependencies: - mime-db: 1.54.0 - - mime@2.6.0: {} - - mimic-fn@2.1.0: {} - - mimic-response@1.0.1: {} - - mimic-response@3.1.0: {} - - minimatch@10.1.1: - dependencies: - '@isaacs/brace-expansion': 5.0.0 - - minimatch@10.2.4: - dependencies: - brace-expansion: 5.0.4 - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.12 - - minimatch@5.1.6: - dependencies: - brace-expansion: 2.0.2 - - minimatch@9.0.5: - dependencies: - brace-expansion: 2.0.2 - - minimist@1.2.8: {} - - minipass-collect@2.0.1: - dependencies: - minipass: 7.1.2 - - minipass-fetch@4.0.1: - dependencies: - minipass: 7.1.2 - minipass-sized: 1.0.3 - minizlib: 3.1.0 - optionalDependencies: - encoding: 0.1.13 - - minipass-flush@1.0.5: - dependencies: - minipass: 3.3.6 - - minipass-pipeline@1.2.4: - dependencies: - minipass: 3.3.6 - - minipass-sized@1.0.3: - dependencies: - minipass: 3.3.6 - - minipass@3.3.6: - dependencies: - yallist: 4.0.0 - - minipass@5.0.0: {} - - minipass@7.1.2: {} - - minipass@7.1.3: {} - - minizlib@2.1.2: - dependencies: - minipass: 3.3.6 - yallist: 4.0.0 - - minizlib@3.1.0: - dependencies: - minipass: 7.1.2 - - mkdirp-classic@0.5.3: {} - - mkdirp@0.5.6: - dependencies: - minimist: 1.2.8 - - mkdirp@1.0.4: {} - - moment@2.30.1: {} - - ms@2.1.3: {} - - nano-memoize@3.0.16: {} - - nanoid@3.3.11: {} - - napi-build-utils@2.0.0: {} - - native-run@2.0.3: - dependencies: - '@ionic/utils-fs': 3.1.7 - '@ionic/utils-terminal': 2.3.5 - bplist-parser: 0.3.2 - debug: 4.4.3 - elementtree: 0.1.7 - ini: 4.1.3 - plist: 3.1.0 - split2: 4.2.0 - through2: 4.0.2 - tslib: 2.8.1 - yauzl: 2.10.0 - transitivePeerDependencies: - - supports-color - - natural-compare@1.4.0: {} - - negotiator@1.0.0: {} - - node-abi@3.85.0: - dependencies: - semver: 7.7.3 - - node-abi@4.24.0: - dependencies: - semver: 7.7.3 - - node-addon-api@1.7.2: - optional: true - - node-api-version@0.2.1: - dependencies: - semver: 7.7.3 - - node-gyp@11.5.0: - dependencies: - env-paths: 2.2.1 - exponential-backoff: 3.1.3 - graceful-fs: 4.2.11 - make-fetch-happen: 14.0.3 - nopt: 8.1.0 - proc-log: 5.0.0 - semver: 7.7.3 - tar: 7.5.2 - tinyglobby: 0.2.15 - which: 5.0.0 - transitivePeerDependencies: - - supports-color - - node-releases@2.0.27: {} - - nopt@8.1.0: - dependencies: - abbrev: 3.0.1 - - normalize-url@6.1.0: {} - - numeric-quantity@2.1.0: {} - - object-assign@4.1.1: {} - - object-hash@3.0.0: {} - - object-inspect@1.13.4: {} - - object-keys@1.1.1: {} - - object.assign@4.1.7: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - has-symbols: 1.1.0 - object-keys: 1.1.1 - - object.entries@1.1.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - object.fromentries@2.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-object-atoms: 1.1.1 - - object.values@1.2.1: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - on-finished@2.4.1: - dependencies: - ee-first: 1.1.1 - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - one-time@1.0.0: - dependencies: - fn.name: 1.1.0 - - onetime@5.1.2: - dependencies: - mimic-fn: 2.1.0 - - open@8.4.2: - dependencies: - define-lazy-prop: 2.0.0 - is-docker: 2.2.1 - is-wsl: 2.2.0 - - optionator@0.9.4: - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.5 - - ora@5.4.1: - dependencies: - bl: 4.1.0 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-spinners: 2.9.2 - is-interactive: 1.0.0 - is-unicode-supported: 0.1.0 - log-symbols: 4.1.0 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - - os@0.1.2: {} - - own-keys@1.0.1: - dependencies: - get-intrinsic: 1.3.0 - object-keys: 1.1.1 - safe-push-apply: 1.0.0 - - p-cancelable@2.1.1: {} - - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - - p-map@7.0.4: {} - - package-json-from-dist@1.0.1: {} - - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - parseurl@1.3.3: {} - - path-exists@4.0.0: {} - - path-is-absolute@1.0.1: {} - - path-key@3.1.1: {} - - path-parse@1.0.7: {} - - path-scurry@1.11.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 - - path-scurry@2.0.2: - dependencies: - lru-cache: 11.2.6 - minipass: 7.1.3 - - path-to-regexp@8.3.0: {} - - pe-library@0.4.1: {} - - pend@1.2.0: {} - - pg-cloudflare@1.3.0: - optional: true - - pg-connection-string@2.11.0: {} - - pg-int8@1.0.1: {} - - pg-pool@3.12.0(pg@8.19.0): - dependencies: - pg: 8.19.0 - - pg-protocol@1.12.0: {} - - pg-types@2.2.0: - dependencies: - pg-int8: 1.0.1 - postgres-array: 2.0.0 - postgres-bytea: 1.0.1 - postgres-date: 1.0.7 - postgres-interval: 1.2.0 - - pg@8.19.0: - dependencies: - pg-connection-string: 2.11.0 - pg-pool: 3.12.0(pg@8.19.0) - pg-protocol: 1.12.0 - pg-types: 2.2.0 - pgpass: 1.0.5 - optionalDependencies: - pg-cloudflare: 1.3.0 - - pgpass@1.0.5: - dependencies: - split2: 4.2.0 - - picocolors@1.1.1: {} - - picomatch@4.0.3: {} - - pinyin-pro@3.27.0: {} - - plist@3.1.0: - dependencies: - '@xmldom/xmldom': 0.8.11 - base64-js: 1.5.1 - xmlbuilder: 15.1.1 - - possible-typed-array-names@1.1.0: {} - - postcss@8.5.6: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - postgres-array@2.0.0: {} - - postgres-bytea@1.0.1: {} - - postgres-date@1.0.7: {} - - postgres-interval@1.2.0: - dependencies: - xtend: 4.0.2 - - postject@1.0.0-alpha.6: - dependencies: - commander: 9.5.0 - optional: true - - prebuild-install@7.1.3: - dependencies: - detect-libc: 2.1.2 - expand-template: 2.0.3 - github-from-package: 0.0.0 - minimist: 1.2.8 - mkdirp-classic: 0.5.3 - napi-build-utils: 2.0.0 - node-abi: 3.85.0 - pump: 3.0.3 - rc: 1.2.8 - simple-get: 4.0.1 - tar-fs: 2.1.4 - tunnel-agent: 0.6.0 - - prelude-ls@1.2.1: {} - - prettier-linter-helpers@1.0.1: - dependencies: - fast-diff: 1.3.0 - - prettier@3.7.4: {} - - proc-log@5.0.0: {} - - progress@2.0.3: {} - - promise-retry@2.0.1: - dependencies: - err-code: 2.0.3 - retry: 0.12.0 - - prompts@2.4.2: - dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 - - prop-types@15.8.1: - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - - proxy-addr@2.0.7: - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 - - pump@3.0.3: - dependencies: - end-of-stream: 1.4.5 - once: 1.4.0 - - punycode@2.3.1: {} - - qs@6.14.1: - dependencies: - side-channel: 1.1.0 - - quick-lru@5.1.1: {} - - range-parser@1.2.1: {} - - raw-body@3.0.2: - dependencies: - bytes: 3.1.2 - http-errors: 2.0.1 - iconv-lite: 0.7.2 - unpipe: 1.0.0 - - rc-field-form@1.44.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3): - dependencies: - '@babel/runtime': 7.28.6 - async-validator: 4.2.5 - rc-util: 5.44.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - rc-motion@2.9.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3): - dependencies: - '@babel/runtime': 7.28.6 - classnames: 2.5.1 - rc-util: 5.44.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - rc-segmented@2.4.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3): - dependencies: - '@babel/runtime': 7.28.6 - classnames: 2.5.1 - rc-motion: 2.9.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - rc-util: 5.44.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - rc-util@5.44.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3): - dependencies: - '@babel/runtime': 7.28.6 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - react-is: 18.3.1 - - rc@1.2.8: - dependencies: - deep-extend: 0.6.0 - ini: 1.3.8 - minimist: 1.2.8 - strip-json-comments: 2.0.1 - - react-dnd-html5-backend@16.0.1: - dependencies: - dnd-core: 16.0.1 - - react-dnd-touch-backend@16.0.1: - dependencies: - '@react-dnd/invariant': 4.0.2 - dnd-core: 16.0.1 - - react-dnd@16.0.1(@types/node@22.19.5)(@types/react@19.2.8)(react@19.2.3): - dependencies: - '@react-dnd/invariant': 4.0.2 - '@react-dnd/shallowequal': 4.0.2 - dnd-core: 16.0.1 - fast-deep-equal: 3.1.3 - hoist-non-react-statics: 3.3.2 - react: 19.2.3 - optionalDependencies: - '@types/node': 22.19.5 - '@types/react': 19.2.8 - - react-dom@19.2.3(react@19.2.3): - dependencies: - react: 19.2.3 - scheduler: 0.27.0 - - react-fast-compare@3.2.2: {} - - react-i18next@16.5.6(i18next@25.8.14(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3): - dependencies: - '@babel/runtime': 7.28.6 - html-parse-stringify: 3.0.1 - i18next: 25.8.14(typescript@5.9.3) - react: 19.2.3 - use-sync-external-store: 1.6.0(react@19.2.3) - optionalDependencies: - react-dom: 19.2.3(react@19.2.3) - typescript: 5.9.3 - - react-is@16.13.1: {} - - react-is@18.3.1: {} - - react-querybuilder@8.14.0(@types/react@19.2.8)(react@19.2.3)(redux@5.0.1): - dependencies: - '@react-querybuilder/core': 8.14.0 - '@reduxjs/toolkit': 2.11.2(react-redux@9.2.0(@types/react@19.2.8)(react@19.2.3)(redux@5.0.1))(react@19.2.3) - immer: 11.1.4 - react: 19.2.3 - react-redux: 9.2.0(@types/react@19.2.8)(react@19.2.3)(redux@5.0.1) - transitivePeerDependencies: - - '@types/react' - - drizzle-orm - - json-logic-js - - redux - - sequelize - - react-redux@9.2.0(@types/react@19.2.8)(react@19.2.3)(redux@5.0.1): - dependencies: - '@types/use-sync-external-store': 0.0.6 - react: 19.2.3 - use-sync-external-store: 1.6.0(react@19.2.3) - optionalDependencies: - '@types/react': 19.2.8 - redux: 5.0.1 - - react-refresh@0.18.0: {} - - react-router-dom@6.30.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3): - dependencies: - '@remix-run/router': 1.23.2 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - react-router: 6.30.3(react@19.2.3) - - react-router@6.30.3(react@19.2.3): - dependencies: - '@remix-run/router': 1.23.2 - react: 19.2.3 - - react@19.2.3: {} - - read-binary-file-arch@1.0.6: - dependencies: - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - readable-stream@3.6.2: - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - - readdirp@5.0.0: {} - - redux-thunk@3.1.0(redux@5.0.1): - dependencies: - redux: 5.0.1 - - redux@4.2.1: - dependencies: - '@babel/runtime': 7.28.6 - - redux@5.0.1: {} - - reflect-metadata@0.2.2: {} - - reflect.getprototypeof@1.0.10: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - which-builtin-type: 1.2.1 - - regexp.prototype.flags@1.5.4: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-errors: 1.3.0 - get-proto: 1.0.1 - gopd: 1.2.0 - set-function-name: 2.0.2 - - require-directory@2.1.1: {} - - resedit@1.7.2: - dependencies: - pe-library: 0.4.1 - - reselect@5.1.1: {} - - resize-observer-polyfill@1.5.1: {} - - resolve-alpn@1.2.1: {} - - resolve-from@4.0.0: {} - - resolve@2.0.0-next.5: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - responselike@2.0.1: - dependencies: - lowercase-keys: 2.0.0 - - restore-cursor@3.1.0: - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - - retry@0.12.0: {} - - rimraf@2.6.3: - dependencies: - glob: 7.2.3 - - rimraf@6.1.3: - dependencies: - glob: 13.0.6 - package-json-from-dist: 1.0.1 - - roarr@2.15.4: - dependencies: - boolean: 3.2.0 - detect-node: 2.1.0 - globalthis: 1.0.4 - json-stringify-safe: 5.0.1 - semver-compare: 1.0.0 - sprintf-js: 1.1.3 - optional: true - - rollup@4.55.1: - dependencies: - '@types/estree': 1.0.8 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.55.1 - '@rollup/rollup-android-arm64': 4.55.1 - '@rollup/rollup-darwin-arm64': 4.55.1 - '@rollup/rollup-darwin-x64': 4.55.1 - '@rollup/rollup-freebsd-arm64': 4.55.1 - '@rollup/rollup-freebsd-x64': 4.55.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.55.1 - '@rollup/rollup-linux-arm-musleabihf': 4.55.1 - '@rollup/rollup-linux-arm64-gnu': 4.55.1 - '@rollup/rollup-linux-arm64-musl': 4.55.1 - '@rollup/rollup-linux-loong64-gnu': 4.55.1 - '@rollup/rollup-linux-loong64-musl': 4.55.1 - '@rollup/rollup-linux-ppc64-gnu': 4.55.1 - '@rollup/rollup-linux-ppc64-musl': 4.55.1 - '@rollup/rollup-linux-riscv64-gnu': 4.55.1 - '@rollup/rollup-linux-riscv64-musl': 4.55.1 - '@rollup/rollup-linux-s390x-gnu': 4.55.1 - '@rollup/rollup-linux-x64-gnu': 4.55.1 - '@rollup/rollup-linux-x64-musl': 4.55.1 - '@rollup/rollup-openbsd-x64': 4.55.1 - '@rollup/rollup-openharmony-arm64': 4.55.1 - '@rollup/rollup-win32-arm64-msvc': 4.55.1 - '@rollup/rollup-win32-ia32-msvc': 4.55.1 - '@rollup/rollup-win32-x64-gnu': 4.55.1 - '@rollup/rollup-win32-x64-msvc': 4.55.1 - fsevents: 2.3.3 - - router@2.2.0: - dependencies: - debug: 4.4.3 - depd: 2.0.0 - is-promise: 4.0.0 - parseurl: 1.3.3 - path-to-regexp: 8.3.0 - transitivePeerDependencies: - - supports-color - - runes2@1.1.4: {} - - safe-array-concat@1.1.3: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - has-symbols: 1.1.0 - isarray: 2.0.5 - - safe-buffer@5.2.1: {} - - safe-push-apply@1.0.0: - dependencies: - es-errors: 1.3.0 - isarray: 2.0.5 - - safe-regex-test@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-regex: 1.2.1 - - safe-stable-stringify@2.5.0: {} - - safer-buffer@2.1.2: {} - - sanitize-filename@1.6.3: - dependencies: - truncate-utf8-bytes: 1.0.2 - - sax@1.1.4: {} - - sax@1.4.4: {} - - scheduler@0.27.0: {} - - screenfull@5.2.0: {} - - scroll-into-view-if-needed@3.1.0: - dependencies: - compute-scroll-into-view: 3.1.1 - - semver-compare@1.0.0: - optional: true - - semver@5.7.2: {} - - semver@6.3.1: {} - - semver@7.7.3: {} - - send@1.2.1: - dependencies: - debug: 4.4.3 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 2.0.0 - http-errors: 2.0.1 - mime-types: 3.0.2 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.2 - transitivePeerDependencies: - - supports-color - - serialize-error@7.0.1: - dependencies: - type-fest: 0.13.1 - optional: true - - serve-static@2.2.1: - dependencies: - encodeurl: 2.0.0 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 1.2.1 - transitivePeerDependencies: - - supports-color - - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - - set-proto@1.0.0: - dependencies: - dunder-proto: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - - setprototypeof@1.2.0: {} - - sha.js@2.4.12: - dependencies: - inherits: 2.0.4 - safe-buffer: 5.2.1 - to-buffer: 1.2.2 - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - side-channel-list@1.0.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - - side-channel-map@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - - side-channel-weakmap@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - side-channel-map: 1.0.1 - - side-channel@1.1.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - side-channel-list: 1.0.0 - side-channel-map: 1.0.1 - side-channel-weakmap: 1.0.2 - - signal-exit@3.0.7: {} - - signal-exit@4.1.0: {} - - simple-concat@1.0.1: {} - - simple-get@4.0.1: - dependencies: - decompress-response: 6.0.0 - once: 1.4.0 - simple-concat: 1.0.1 - - simple-update-notifier@2.0.0: - dependencies: - semver: 7.7.3 - - sisteransi@1.0.5: {} - - slice-ansi@3.0.0: - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - optional: true - - slice-ansi@4.0.0: - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - - smart-buffer@4.2.0: {} - - socks-proxy-agent@8.0.5: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - socks: 2.8.7 - transitivePeerDependencies: - - supports-color - - socks@2.8.7: - dependencies: - ip-address: 10.1.0 - smart-buffer: 4.2.0 - - source-map-js@1.2.1: {} - - source-map-support@0.5.21: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - - source-map@0.6.1: {} - - split2@4.2.0: {} - - sprintf-js@1.1.3: - optional: true - - sql-highlight@6.1.0: {} - - ssf@0.11.2: - dependencies: - frac: 1.1.2 - - ssri@12.0.0: - dependencies: - minipass: 7.1.2 - - stack-trace@0.0.10: {} - - staged-components@1.1.3(react@19.2.3): - dependencies: - react: 19.2.3 - - stat-mode@1.0.0: {} - - statuses@2.0.2: {} - - stop-iteration-iterator@1.1.0: - dependencies: - es-errors: 1.3.0 - internal-slot: 1.1.0 - - string-convert@0.2.1: {} - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.2 - - string.prototype.matchall@4.0.12: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - regexp.prototype.flags: 1.5.4 - set-function-name: 2.0.2 - side-channel: 1.1.0 - - string.prototype.repeat@1.0.0: - dependencies: - define-properties: 1.2.1 - es-abstract: 1.24.1 - - string.prototype.trim@1.2.10: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-data-property: 1.1.4 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-object-atoms: 1.1.1 - has-property-descriptors: 1.0.2 - - string.prototype.trimend@1.0.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - string_decoder@1.3.0: - dependencies: - safe-buffer: 5.2.1 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-ansi@7.1.2: - dependencies: - ansi-regex: 6.2.2 - - strip-json-comments@2.0.1: {} - - strip-json-comments@3.1.1: {} - - stylis@4.3.6: {} - - sumchecker@3.0.1: - dependencies: - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - supports-preserve-symlinks-flag@1.0.0: {} - - synckit@0.11.11: - dependencies: - '@pkgr/core': 0.2.9 - - tar-fs@2.1.4: - dependencies: - chownr: 1.1.4 - mkdirp-classic: 0.5.3 - pump: 3.0.3 - tar-stream: 2.2.0 - - tar-stream@2.2.0: - dependencies: - bl: 4.1.0 - end-of-stream: 1.4.5 - fs-constants: 1.0.0 - inherits: 2.0.4 - readable-stream: 3.6.2 - - tar@6.2.1: - dependencies: - chownr: 2.0.0 - fs-minipass: 2.1.0 - minipass: 5.0.0 - minizlib: 2.1.2 - mkdirp: 1.0.4 - yallist: 4.0.0 - - tar@7.5.2: - dependencies: - '@isaacs/fs-minipass': 4.0.1 - chownr: 3.0.0 - minipass: 7.1.2 - minizlib: 3.1.0 - yallist: 5.0.0 - - tar@7.5.9: - dependencies: - '@isaacs/fs-minipass': 4.0.1 - chownr: 3.0.0 - minipass: 7.1.2 - minizlib: 3.1.0 - yallist: 5.0.0 - - temp-file@3.4.0: - dependencies: - async-exit-hook: 2.0.1 - fs-extra: 10.1.0 - - temp@0.9.4: - dependencies: - mkdirp: 0.5.6 - rimraf: 2.6.3 - - terser@5.46.0: - dependencies: - '@jridgewell/source-map': 0.3.11 - acorn: 8.15.0 - commander: 2.20.3 - source-map-support: 0.5.21 - - text-hex@1.0.0: {} - - throttle-debounce@5.0.2: {} - - through2@4.0.2: - dependencies: - readable-stream: 3.6.2 - - tiny-async-pool@1.3.0: - dependencies: - semver: 5.7.2 - - tinyglobby@0.2.15: - dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - - tmp-promise@3.0.3: - dependencies: - tmp: 0.2.5 - - tmp@0.2.5: {} - - to-buffer@1.2.2: - dependencies: - isarray: 2.0.5 - safe-buffer: 5.2.1 - typed-array-buffer: 1.0.3 - - toidentifier@1.0.1: {} - - tree-kill@1.2.2: {} - - triple-beam@1.4.1: {} - - truncate-utf8-bytes@1.0.2: - dependencies: - utf8-byte-length: 1.0.5 - - ts-api-utils@2.4.0(typescript@5.9.3): - dependencies: - typescript: 5.9.3 - - tslib@2.8.1: {} - - tunnel-agent@0.6.0: - dependencies: - safe-buffer: 5.2.1 - - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - - type-fest@0.13.1: - optional: true - - type-is@2.0.1: - dependencies: - content-type: 1.0.5 - media-typer: 1.1.0 - mime-types: 3.0.2 - - typed-array-buffer@1.0.3: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-typed-array: 1.1.15 - - typed-array-byte-length@1.0.3: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - - typed-array-byte-offset@1.0.4: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - reflect.getprototypeof: 1.0.10 - - typed-array-length@1.0.7: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - is-typed-array: 1.1.15 - possible-typed-array-names: 1.1.0 - reflect.getprototypeof: 1.0.10 - - typeorm@0.3.28(better-sqlite3@12.6.0)(pg@8.19.0): - dependencies: - '@sqltools/formatter': 1.2.5 - ansis: 4.2.0 - app-root-path: 3.1.0 - buffer: 6.0.3 - dayjs: 1.11.20 - debug: 4.4.3 - dedent: 1.7.1 - dotenv: 16.6.1 - glob: 10.5.0 - reflect-metadata: 0.2.2 - sha.js: 2.4.12 - sql-highlight: 6.1.0 - tslib: 2.8.1 - uuid: 11.1.0 - yargs: 17.7.2 - optionalDependencies: - better-sqlite3: 12.6.0 - pg: 8.19.0 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - typescript-eslint@8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3): - dependencies: - '@typescript-eslint/eslint-plugin': 8.52.0(@typescript-eslint/parser@8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.52.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - typescript@5.9.3: {} - - unbox-primitive@1.1.0: - dependencies: - call-bound: 1.0.4 - has-bigints: 1.1.0 - has-symbols: 1.1.0 - which-boxed-primitive: 1.1.1 - - undici-types@6.21.0: {} - - unique-filename@4.0.0: - dependencies: - unique-slug: 5.0.0 - - unique-slug@5.0.0: - dependencies: - imurmurhash: 0.1.4 - - universalify@0.1.2: {} - - universalify@2.0.1: {} - - unpipe@1.0.0: {} - - untildify@4.0.0: {} - - update-browserslist-db@1.2.3(browserslist@4.28.1): - dependencies: - browserslist: 4.28.1 - escalade: 3.2.0 - picocolors: 1.1.1 - - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - - use-sync-external-store@1.6.0(react@19.2.3): - dependencies: - react: 19.2.3 - - utf8-byte-length@1.0.5: {} - - util-deprecate@1.0.2: {} - - uuid@11.1.0: {} - - uuid@13.0.0: {} - - vary@1.1.2: {} - - verror@1.10.1: - dependencies: - assert-plus: 1.0.0 - core-util-is: 1.0.2 - extsprintf: 1.4.1 - optional: true - - vite@7.3.1(@types/node@22.19.5)(jiti@2.6.1)(terser@5.46.0): - dependencies: - esbuild: 0.27.2 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.55.1 - tinyglobby: 0.2.15 - optionalDependencies: - '@types/node': 22.19.5 - fsevents: 2.3.3 - jiti: 2.6.1 - terser: 5.46.0 - - void-elements@3.1.0: {} - - wcwidth@1.0.1: - dependencies: - defaults: 1.0.4 - - which-boxed-primitive@1.1.1: - dependencies: - is-bigint: 1.1.0 - is-boolean-object: 1.2.2 - is-number-object: 1.1.1 - is-string: 1.1.1 - is-symbol: 1.1.1 - - which-builtin-type@1.2.1: - dependencies: - call-bound: 1.0.4 - function.prototype.name: 1.1.8 - has-tostringtag: 1.0.2 - is-async-function: 2.1.1 - is-date-object: 1.1.0 - is-finalizationregistry: 1.1.1 - is-generator-function: 1.1.2 - is-regex: 1.2.1 - is-weakref: 1.1.1 - isarray: 2.0.5 - which-boxed-primitive: 1.1.1 - which-collection: 1.0.2 - which-typed-array: 1.1.19 - - which-collection@1.0.2: - dependencies: - is-map: 2.0.3 - is-set: 2.0.3 - is-weakmap: 2.0.2 - is-weakset: 2.0.4 - - which-typed-array@1.1.19: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - for-each: 0.3.5 - get-proto: 1.0.1 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - which@5.0.0: - dependencies: - isexe: 3.1.1 - - winston-daily-rotate-file@5.0.0(winston@3.19.0): - dependencies: - file-stream-rotator: 0.6.1 - object-hash: 3.0.0 - triple-beam: 1.4.1 - winston: 3.19.0 - winston-transport: 4.9.0 - - winston-transport@4.9.0: - dependencies: - logform: 2.7.0 - readable-stream: 3.6.2 - triple-beam: 1.4.1 - - winston@3.19.0: - dependencies: - '@colors/colors': 1.6.0 - '@dabh/diagnostics': 2.0.8 - async: 3.2.6 - is-stream: 2.0.1 - logform: 2.7.0 - one-time: 1.0.0 - readable-stream: 3.6.2 - safe-stable-stringify: 2.5.0 - stack-trace: 0.0.10 - triple-beam: 1.4.1 - winston-transport: 4.9.0 - - wmf@1.0.2: {} - - word-wrap@1.2.5: {} - - word@0.3.0: {} - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.3 - string-width: 5.1.2 - strip-ansi: 7.1.2 - - wrappy@1.0.2: {} - - xlsx@0.18.5: - dependencies: - adler-32: 1.3.1 - cfb: 1.2.2 - codepage: 1.15.0 - crc-32: 1.2.2 - ssf: 0.11.2 - wmf: 1.0.2 - word: 0.3.0 - - xml2js@0.6.2: - dependencies: - sax: 1.4.4 - xmlbuilder: 11.0.1 - - xmlbuilder@11.0.1: {} - - xmlbuilder@15.1.1: {} - - xtend@4.0.2: {} - - y18n@5.0.8: {} - - yallist@3.1.1: {} - - yallist@4.0.0: {} - - yallist@5.0.0: {} - - yargs-parser@21.1.1: {} - - yargs@17.7.2: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - - yauzl@2.10.0: - dependencies: - buffer-crc32: 0.2.13 - fd-slicer: 1.1.0 - - yocto-queue@0.1.0: {} - - zod-validation-error@4.0.2(zod@4.3.5): - dependencies: - zod: 4.3.5 - - zod@4.3.5: {} diff --git a/old-ss/resources/SecScore.svg b/old-ss/resources/SecScore.svg deleted file mode 100644 index 39a5ac6..0000000 --- a/old-ss/resources/SecScore.svg +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/old-ss/resources/SecScore_logo.ico b/old-ss/resources/SecScore_logo.ico deleted file mode 100644 index 3b58071..0000000 Binary files a/old-ss/resources/SecScore_logo.ico and /dev/null differ diff --git a/old-ss/scripts/afterPack.cjs b/old-ss/scripts/afterPack.cjs deleted file mode 100644 index 049d355..0000000 --- a/old-ss/scripts/afterPack.cjs +++ /dev/null @@ -1,10 +0,0 @@ -const fs = require('fs') -const path = require('path') - -const afterPack = async (context) => { - const appOutDir = context.appOutDir - fs.mkdirSync(path.join(appOutDir, 'data'), { recursive: true }) -} - -module.exports = afterPack -module.exports.default = afterPack diff --git a/old-ss/scripts/ci/apply-version.mjs b/old-ss/scripts/ci/apply-version.mjs deleted file mode 100644 index d088cd0..0000000 --- a/old-ss/scripts/ci/apply-version.mjs +++ /dev/null @@ -1,72 +0,0 @@ -import fs from 'fs' -import path from 'path' - -const rawVersion = String(process.argv[2] || '') - .trim() - .replace(/^v/i, '') -if (!rawVersion) { - process.stderr.write('缺少版本号参数,例如:node scripts/ci/apply-version.mjs 1.2.3\n') - process.exit(1) -} - -const semverRe = /^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+([0-9A-Za-z.-]+))?$/ - -function toSemver(version) { - if (semverRe.test(version)) { - return version - } - - const parts = version.split(/[._-]/) - const nums = parts.filter((p) => /^\d+$/.test(p)) - const nonNums = parts.filter((p) => !/^\d+$/.test(p) && p.length > 0) - - let major = '0', - minor = '0', - patch = '0' - let prerelease = '' - let buildMeta = '' - - if (nums.length >= 3) { - major = nums[0] - minor = nums[1] - patch = nums[2] - if (nums.length > 3) { - buildMeta = nums.slice(3).join('.') - } - } else if (nums.length === 2) { - major = nums[0] - minor = nums[1] - patch = '0' - } else if (nums.length === 1) { - major = nums[0] - minor = '0' - patch = '0' - } - - if (nonNums.length > 0) { - if (prerelease) { - prerelease += '.' + nonNums.join('.') - } else { - prerelease = nonNums.join('.') - } - } - - let result = `${major}.${minor}.${patch}` - if (prerelease) { - result += `-${prerelease}` - } - if (buildMeta) { - result += `+${buildMeta}` - } - - return result -} - -const version = toSemver(rawVersion) - -process.stdout.write(`版本号转换: "${rawVersion}" -> "${version}"\n`) - -const pkgPath = path.join(process.cwd(), 'package.json') -const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8')) -pkg.version = version -fs.writeFileSync(pkgPath, `${JSON.stringify(pkg, null, 2)}\n`, 'utf-8') diff --git a/old-ss/scripts/ci/parse-commit.mjs b/old-ss/scripts/ci/parse-commit.mjs deleted file mode 100644 index c014e00..0000000 --- a/old-ss/scripts/ci/parse-commit.mjs +++ /dev/null @@ -1,98 +0,0 @@ -import fs from 'fs' -import path from 'path' - -const cwd = process.cwd() -const pkgPath = path.join(cwd, 'package.json') -const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8')) -const scripts = pkg?.scripts ?? {} - -const rawMessage = - process.env.RELEASE_MESSAGE ?? - process.env.GITHUB_COMMIT_MESSAGE ?? - process.argv.slice(2).join(' ') ?? - '' -const message = String(rawMessage || '').trim() - -// 是否以 release: 开头 -const isReleasePrefix = /^release:/i.test(message) - -const semverRe = /\bv?(\S+)/ -const versionMatch = message.match(semverRe) -const version = versionMatch ? versionMatch[1] : '' - -const buildToken = - message.match(/\b(build:(?:win|mac|linux|unpack|all))\b/i)?.[1]?.toLowerCase() ?? '' -let buildScript = - buildToken === 'build:all' - ? 'build:all' - : buildToken && buildToken.startsWith('build:') - ? buildToken - : '' - -// 如果是 release: 开头且没有显式指定构建脚本,默认为 build:all -if (isReleasePrefix && !buildScript) { - buildScript = 'build:all' -} - -const supportedBuildScripts = new Set(['build:win', 'build:mac', 'build:linux', 'build:unpack']) -const hasBuildScript = buildScript - ? buildScript === 'build:all' - ? [...supportedBuildScripts].every((s) => typeof scripts[s] === 'string' && scripts[s]) - : typeof scripts[buildScript] === 'string' && scripts[buildScript] - : false - -const fail = (text) => { - process.stderr.write(`${text}\n`) - process.exit(1) -} - -const hasAnySignal = Boolean(isReleasePrefix || version || buildScript) -const shouldSkip = !hasAnySignal - -if (!shouldSkip) { - if (!version) { - fail( - [ - '未在提交信息中检测到版本号。', - '示例:release: v1.2.3 build:win 或 release: 1.2.3', - '支持格式:v1.2.3 或 1.2.3(可带 -beta.1 等后缀)' - ].join('\n') - ) - } - - if (!buildScript) { - fail( - [ - '未在提交信息中检测到构建命令标记。', - '示例:release: v1.2.3 build:win', - '支持:build:win | build:mac | build:linux | build:unpack | build:all' - ].join('\n') - ) - } - - if (!hasBuildScript) { - fail(`构建脚本不存在或为空:${buildScript}`) - } -} - -const runWin = !shouldSkip && (buildScript === 'build:all' || buildScript === 'build:win') -const runMac = !shouldSkip && (buildScript === 'build:all' || buildScript === 'build:mac') -const runLinux = !shouldSkip && (buildScript === 'build:all' || buildScript === 'build:linux') -const runUnpack = !shouldSkip && buildScript === 'build:unpack' - -const outputs = { - version: shouldSkip ? '' : version, - tag: shouldSkip ? '' : `v${version}`, - build_script: shouldSkip ? '' : buildScript, - run_win: String(runWin), - run_mac: String(runMac), - run_linux: String(runLinux), - run_unpack: String(runUnpack) -} - -if (process.env.GITHUB_OUTPUT) { - const lines = Object.entries(outputs).map(([k, v]) => `${k}=${v}`) - fs.appendFileSync(process.env.GITHUB_OUTPUT, `${lines.join('\n')}\n`) -} else { - process.stdout.write(`${JSON.stringify(outputs, null, 2)}\n`) -} diff --git a/old-ss/scripts/clean-db.mjs b/old-ss/scripts/clean-db.mjs deleted file mode 100644 index 53f062a..0000000 --- a/old-ss/scripts/clean-db.mjs +++ /dev/null @@ -1,21 +0,0 @@ -import fs from 'fs' -import path from 'path' - -const root = process.cwd() -const targets = ['db.sqlite'] - -for (const name of targets) { - const filePath = path.join(root, name) - try { - if (fs.existsSync(filePath)) { - fs.rmSync(filePath, { force: true }) - console.log(`[clean-db] removed ${filePath}`) - } - } catch (e) { - if (e.code === 'EPERM' || e.code === 'EACCES') { - console.warn(`[clean-db] skipped ${filePath}: file in use or permission denied`) - } else { - console.error(`[clean-db] failed to remove ${filePath}:`, e?.message || e) - } - } -} diff --git a/old-ss/src/main/context.ts b/old-ss/src/main/context.ts deleted file mode 100644 index 05ff78f..0000000 --- a/old-ss/src/main/context.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Context as BaseContext } from '../shared/kernel' -import { ipcMain } from 'electron' - -export class MainContext extends BaseContext { - public isQuitting = false - - constructor() { - super() - } - - handle( - channel: string, - listener: (event: Electron.IpcMainInvokeEvent, ...args: any[]) => Promise | any - ) { - ipcMain.handle(channel, listener) - this.effect(() => ipcMain.removeHandler(channel)) - } - - ipcOn(channel: string, listener: (event: Electron.IpcMainEvent, ...args: any[]) => void) { - ipcMain.on(channel, listener) - this.effect(() => ipcMain.removeListener(channel, listener)) - } -} diff --git a/old-ss/src/main/db/DbManager.ts b/old-ss/src/main/db/DbManager.ts deleted file mode 100644 index b93166d..0000000 --- a/old-ss/src/main/db/DbManager.ts +++ /dev/null @@ -1,245 +0,0 @@ -import { Context, Service } from '../../shared/kernel' -import { DataSource } from 'typeorm' -import path from 'path' -import fs from 'fs' -import { StudentEntity } from './entities/StudentEntity' -import { ReasonEntity } from './entities/ReasonEntity' -import { ScoreEventEntity } from './entities/ScoreEventEntity' -import { SettlementEntity } from './entities/SettlementEntity' -import { SettingEntity } from './entities/SettingEntity' -import { TagEntity } from './entities/TagEntity' -import { StudentTagEntity } from './entities/StudentTagEntity' -import { migrations } from './migrations' - -declare module '../../shared/kernel' { - interface Context { - db: DbManager - } -} - -interface PostgreSQLConfig { - host: string - port: number - username: string - password: string - database: string - ssl?: boolean - sslmode?: string - channelBinding?: string -} - -interface QueueItem { - id: string - operation: () => Promise - resolve: (value: any) => void - reject: (error: Error) => void - timestamp: number -} - -export function parsePostgreSQLConnectionString(connectionString: string): PostgreSQLConfig | null { - if (!connectionString.startsWith('postgresql://')) { - return null - } - - try { - const url = new URL(connectionString) - const config: PostgreSQLConfig = { - host: url.hostname, - port: url.port ? parseInt(url.port, 10) : 5432, - username: url.username, - password: decodeURIComponent(url.password || ''), - database: url.pathname.slice(1), - ssl: false - } - - const params = new URLSearchParams(url.search) - if (params.get('sslmode')) { - config.ssl = true - config.sslmode = params.get('sslmode') || 'require' - } - if (params.get('channel_binding')) { - config.channelBinding = params.get('channel_binding') || 'require' - } - - return config - } catch (e) { - console.error('Failed to parse PostgreSQL connection string:', e) - return null - } -} - -export class DbManager extends Service { - private _dataSource: DataSource | null = null - private _isPostgreSQL: boolean = false - private dbPath: string - private operationQueue: QueueItem[] = [] - private isProcessingQueue: boolean = false - private queueIdCounter: number = 0 - - constructor(ctx: Context, dbPath: string, pgConnectionString?: string) { - super(ctx, 'db') - this.dbPath = dbPath - this._isPostgreSQL = !!pgConnectionString - } - - get dataSource(): DataSource { - if (!this._dataSource) { - throw new Error('Database not initialized. Call initialize() first.') - } - return this._dataSource - } - - get isPostgreSQL(): boolean { - return this._isPostgreSQL - } - - private createDataSource(pgConnectionString?: string): DataSource { - const pgConfig = pgConnectionString ? parsePostgreSQLConnectionString(pgConnectionString) : null - - if (pgConfig) { - this._isPostgreSQL = true - return new DataSource({ - type: 'postgres', - host: pgConfig.host, - port: pgConfig.port, - username: pgConfig.username, - password: pgConfig.password, - database: pgConfig.database, - ssl: pgConfig.ssl ? { rejectUnauthorized: false } : false, - extra: { - ssl: pgConfig.ssl ? { rejectUnauthorized: false } : undefined, - sslmode: pgConfig.sslmode, - channelBinding: pgConfig.channelBinding - }, - entities: [ - StudentEntity, - ReasonEntity, - ScoreEventEntity, - SettlementEntity, - SettingEntity, - TagEntity, - StudentTagEntity - ], - migrations, - synchronize: false, - logging: false, - poolSize: 10, - connectTimeoutMS: 30000 - }) - } else { - this._isPostgreSQL = false - const dbDir = path.dirname(this.dbPath) - if (!fs.existsSync(dbDir)) { - fs.mkdirSync(dbDir, { recursive: true }) - } - return new DataSource({ - type: 'better-sqlite3', - database: this.dbPath, - entities: [ - StudentEntity, - ReasonEntity, - ScoreEventEntity, - SettlementEntity, - SettingEntity, - TagEntity, - StudentTagEntity - ], - migrations, - synchronize: false, - logging: false - }) - } - } - - async initialize(pgConnectionString?: string) { - if (this._dataSource?.isInitialized) { - await this.dispose() - } - - this._dataSource = this.createDataSource(pgConnectionString) - await this._dataSource.initialize() - - if (!this._isPostgreSQL) { - await this._dataSource.query('PRAGMA foreign_keys = ON') - } - - await this._dataSource.runMigrations() - } - - async dispose() { - if (!this._dataSource?.isInitialized) return - await this._dataSource.destroy() - this._dataSource = null - } - - async switchConnection(pgConnectionString?: string): Promise<{ type: 'sqlite' | 'postgresql' }> { - await this.dispose() - await this.initialize(pgConnectionString) - return { type: this._isPostgreSQL ? 'postgresql' : 'sqlite' } - } - - getDatabaseType(): 'sqlite' | 'postgresql' { - return this._isPostgreSQL ? 'postgresql' : 'sqlite' - } - - async enqueueOperation(operation: () => Promise): Promise { - return new Promise((resolve, reject) => { - const item: QueueItem = { - id: `op-${++this.queueIdCounter}`, - operation, - resolve: resolve as (value: any) => void, - reject, - timestamp: Date.now() - } - - this.operationQueue.push(item) - this.processQueue() - }) - } - - private async processQueue() { - if (this.isProcessingQueue || this.operationQueue.length === 0) { - return - } - - this.isProcessingQueue = true - - while (this.operationQueue.length > 0) { - const item = this.operationQueue.shift()! - try { - const result = await item.operation() - item.resolve(result) - } catch (error) { - item.reject(error as Error) - } - } - - this.isProcessingQueue = false - } - - async withQueue(operation: () => Promise): Promise { - if (this._isPostgreSQL) { - return this.enqueueOperation(operation) - } - return operation() - } - - async syncToRemote(): Promise<{ success: boolean; message?: string }> { - if (!this._isPostgreSQL) { - return { success: false, message: '当前不是远程数据库模式' } - } - - if (!this._dataSource?.isInitialized) { - return { success: false, message: '数据库未初始化' } - } - - try { - return await this.enqueueOperation(async () => { - await this._dataSource!.query('SELECT 1') - return { success: true, message: '同步成功' } - }) - } catch (error: any) { - return { success: false, message: error?.message || '同步失败' } - } - } -} diff --git a/old-ss/src/main/db/backup/DataBackupRepository.ts b/old-ss/src/main/db/backup/DataBackupRepository.ts deleted file mode 100644 index 65f5ac9..0000000 --- a/old-ss/src/main/db/backup/DataBackupRepository.ts +++ /dev/null @@ -1,170 +0,0 @@ -import type { DataSource } from 'typeorm' -import { - ReasonEntity, - ScoreEventEntity, - SettlementEntity, - SettingEntity, - StudentEntity -} from '../entities' - -type exportBundle = { - students: StudentEntity[] - reasons: ReasonEntity[] - events: ScoreEventEntity[] - settlements: SettlementEntity[] - settings: SettingEntity[] -} - -type importResult = { success: true } | { success: false; message: string } - -export class DataBackupRepository { - constructor(private readonly dataSource: DataSource) {} - - async exportJson(): Promise { - const bundle = await this.exportBundle() - return JSON.stringify(bundle, null, 2) - } - - private async exportBundle(): Promise { - const students = await this.dataSource.getRepository(StudentEntity).find() - const reasons = await this.dataSource.getRepository(ReasonEntity).find() - const events = await this.dataSource.getRepository(ScoreEventEntity).find() - const settlements = await this.dataSource - .getRepository(SettlementEntity) - .find({ order: { id: 'ASC' } }) - const settings = await this.dataSource - .getRepository(SettingEntity) - .createQueryBuilder('s') - .where("s.key NOT LIKE 'security_%'") - .getMany() - return { students, reasons, events, settlements, settings } - } - - async importJson(jsonText: string): Promise { - let parsed: any - try { - parsed = JSON.parse(String(jsonText ?? '')) - } catch { - return { success: false, message: 'Invalid JSON' } - } - - const students = Array.isArray(parsed?.students) ? parsed.students : [] - const reasons = Array.isArray(parsed?.reasons) ? parsed.reasons : [] - const events = Array.isArray(parsed?.events) ? parsed.events : [] - const settlements = Array.isArray(parsed?.settlements) ? parsed.settlements : [] - const settings = Array.isArray(parsed?.settings) ? parsed.settings : [] - - try { - await this.dataSource.transaction(async (manager) => { - await manager.clear(ScoreEventEntity) - await manager.clear(SettlementEntity) - await manager.clear(StudentEntity) - await manager.clear(ReasonEntity) - await manager - .getRepository(SettingEntity) - .createQueryBuilder() - .delete() - .where("key NOT LIKE 'security_%'") - .execute() - - const insertStudents: Partial[] = [] - for (const s of students) { - const name = String(s?.name ?? '').trim() - if (!name) continue - const score = Number(s?.score ?? 0) - const extraJson = s?.extra_json != null ? String(s.extra_json) : null - const createdAt = s?.created_at != null ? String(s.created_at) : new Date().toISOString() - const updatedAt = s?.updated_at != null ? String(s.updated_at) : new Date().toISOString() - insertStudents.push({ - name, - score: Number.isFinite(score) ? score : 0, - extra_json: extraJson, - created_at: createdAt, - updated_at: updatedAt - }) - } - if (insertStudents.length) { - await manager.getRepository(StudentEntity).insert(insertStudents) - } - - const insertReasons: Partial[] = [] - for (const r of reasons) { - const content = String(r?.content ?? '').trim() - if (!content) continue - const category = String(r?.category ?? '其他') - const delta = Number(r?.delta ?? 0) - const isSystem = Number(r?.is_system ?? 0) ? 1 : 0 - const updatedAt = r?.updated_at != null ? String(r.updated_at) : new Date().toISOString() - insertReasons.push({ - content, - category, - delta: Number.isFinite(delta) ? delta : 0, - is_system: isSystem, - updated_at: updatedAt - }) - } - if (insertReasons.length) { - await manager.getRepository(ReasonEntity).insert(insertReasons) - } - - const insertSettlements: Partial[] = [] - for (const s of settlements) { - const id = Number(s?.id) - const startTime = String(s?.start_time ?? '').trim() - const endTime = String(s?.end_time ?? '').trim() - const createdAt = String(s?.created_at ?? new Date().toISOString()) - if (!Number.isFinite(id) || !startTime || !endTime) continue - insertSettlements.push({ - id, - start_time: startTime, - end_time: endTime, - created_at: createdAt - }) - } - if (insertSettlements.length) { - await manager.getRepository(SettlementEntity).insert(insertSettlements) - } - - const insertEvents: Partial[] = [] - for (const e of events) { - const uuid = String(e?.uuid ?? '').trim() - const studentName = String(e?.student_name ?? '').trim() - const reasonContent = String(e?.reason_content ?? '').trim() - if (!uuid || !studentName || !reasonContent) continue - const delta = Number(e?.delta ?? 0) - const valPrev = Number(e?.val_prev ?? 0) - const valCurr = Number(e?.val_curr ?? 0) - const eventTime = String(e?.event_time ?? new Date().toISOString()) - const settlementIdRaw = e?.settlement_id - const settlementId = - settlementIdRaw === null || settlementIdRaw === undefined - ? null - : Number(settlementIdRaw) - insertEvents.push({ - uuid, - student_name: studentName, - reason_content: reasonContent, - delta: Number.isFinite(delta) ? delta : 0, - val_prev: Number.isFinite(valPrev) ? valPrev : 0, - val_curr: Number.isFinite(valCurr) ? valCurr : 0, - event_time: eventTime, - settlement_id: Number.isFinite(settlementId as any) ? (settlementId as any) : null - }) - } - if (insertEvents.length) { - await manager.getRepository(ScoreEventEntity).insert(insertEvents) - } - - for (const it of settings) { - const key = String(it?.key ?? '').trim() - if (!key || key.startsWith('security_')) continue - await manager.getRepository(SettingEntity).save({ key, value: String(it?.value ?? '') }) - } - }) - } catch (e: any) { - return { success: false, message: e?.message || 'Import failed' } - } - - return { success: true } - } -} diff --git a/old-ss/src/main/db/entities.ts b/old-ss/src/main/db/entities.ts deleted file mode 100644 index f0b1fce..0000000 --- a/old-ss/src/main/db/entities.ts +++ /dev/null @@ -1,5 +0,0 @@ -export { StudentEntity } from './entities/StudentEntity' -export { ReasonEntity } from './entities/ReasonEntity' -export { ScoreEventEntity } from './entities/ScoreEventEntity' -export { SettlementEntity } from './entities/SettlementEntity' -export { SettingEntity } from './entities/SettingEntity' diff --git a/old-ss/src/main/db/entities/ReasonEntity.ts b/old-ss/src/main/db/entities/ReasonEntity.ts deleted file mode 100644 index e36a660..0000000 --- a/old-ss/src/main/db/entities/ReasonEntity.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Column, Entity, Index, PrimaryGeneratedColumn } from 'typeorm' - -@Entity({ name: 'reasons' }) -export class ReasonEntity { - @PrimaryGeneratedColumn() - id!: number - - @Index({ unique: true }) - @Column({ type: 'text' }) - content!: string - - @Column({ type: 'text', default: '其他' }) - category!: string - - @Column({ type: 'integer' }) - delta!: number - - @Column({ type: 'integer', default: 0 }) - is_system!: number - - @Column({ type: 'text', default: () => 'CURRENT_TIMESTAMP' }) - updated_at!: string -} diff --git a/old-ss/src/main/db/entities/ScoreEventEntity.ts b/old-ss/src/main/db/entities/ScoreEventEntity.ts deleted file mode 100644 index 70ea35c..0000000 --- a/old-ss/src/main/db/entities/ScoreEventEntity.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { Column, Entity, Index, PrimaryGeneratedColumn } from 'typeorm' - -@Entity({ name: 'score_events' }) -export class ScoreEventEntity { - @PrimaryGeneratedColumn() - id!: number - - @Index({ unique: true }) - @Column({ type: 'text' }) - uuid!: string - - @Column({ type: 'text' }) - student_name!: string - - @Column({ type: 'text' }) - reason_content!: string - - @Column({ type: 'integer' }) - delta!: number - - @Column({ type: 'integer' }) - val_prev!: number - - @Column({ type: 'integer' }) - val_curr!: number - - @Column({ type: 'text', default: () => 'CURRENT_TIMESTAMP' }) - event_time!: string - - @Index() - @Column({ type: 'integer', nullable: true }) - settlement_id!: number | null -} diff --git a/old-ss/src/main/db/entities/SettingEntity.ts b/old-ss/src/main/db/entities/SettingEntity.ts deleted file mode 100644 index d5e6410..0000000 --- a/old-ss/src/main/db/entities/SettingEntity.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Column, Entity, PrimaryColumn } from 'typeorm' - -@Entity({ name: 'settings' }) -export class SettingEntity { - @PrimaryColumn({ type: 'text' }) - key!: string - - @Column({ type: 'text', nullable: true }) - value!: string | null -} diff --git a/old-ss/src/main/db/entities/SettlementEntity.ts b/old-ss/src/main/db/entities/SettlementEntity.ts deleted file mode 100644 index 57063da..0000000 --- a/old-ss/src/main/db/entities/SettlementEntity.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm' - -@Entity({ name: 'settlements' }) -export class SettlementEntity { - @PrimaryGeneratedColumn() - id!: number - - @Column({ type: 'text' }) - start_time!: string - - @Column({ type: 'text' }) - end_time!: string - - @Column({ type: 'text', default: () => 'CURRENT_TIMESTAMP' }) - created_at!: string -} diff --git a/old-ss/src/main/db/entities/StudentEntity.ts b/old-ss/src/main/db/entities/StudentEntity.ts deleted file mode 100644 index 07907d5..0000000 --- a/old-ss/src/main/db/entities/StudentEntity.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Column, Entity, PrimaryGeneratedColumn, ManyToMany, JoinTable } from 'typeorm' -import { TagEntity } from './TagEntity' - -@Entity({ name: 'students' }) -export class StudentEntity { - @PrimaryGeneratedColumn() - id!: number - - @Column({ type: 'text' }) - name!: string - - @Column({ type: 'text', default: '[]' }) - tags!: string - - @Column({ type: 'integer', default: 0 }) - score!: number - - @Column({ type: 'text', nullable: true }) - extra_json!: string | null - - @Column({ type: 'text', default: () => 'CURRENT_TIMESTAMP' }) - created_at!: string - - @Column({ type: 'text', default: () => 'CURRENT_TIMESTAMP' }) - updated_at!: string - - @ManyToMany(() => TagEntity, { cascade: true }) - @JoinTable({ - name: 'student_tags', - joinColumn: { name: 'student_id', referencedColumnName: 'id' }, - inverseJoinColumn: { name: 'tag_id', referencedColumnName: 'id' } - }) - tagEntities!: TagEntity[] -} diff --git a/old-ss/src/main/db/entities/StudentTagEntity.ts b/old-ss/src/main/db/entities/StudentTagEntity.ts deleted file mode 100644 index e7733e0..0000000 --- a/old-ss/src/main/db/entities/StudentTagEntity.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Column, Entity, PrimaryGeneratedColumn, ManyToOne, JoinColumn, Index } from 'typeorm' -import { StudentEntity } from './StudentEntity' -import { TagEntity } from './TagEntity' - -@Entity({ name: 'student_tags' }) -@Index(['student_id', 'tag_id'], { unique: true }) -export class StudentTagEntity { - @PrimaryGeneratedColumn() - id!: number - - @Column({ name: 'student_id', type: 'integer' }) - student_id!: number - - @Column({ name: 'tag_id', type: 'integer' }) - tag_id!: number - - @ManyToOne(() => StudentEntity, { onDelete: 'CASCADE' }) - @JoinColumn({ name: 'student_id' }) - student!: StudentEntity - - @ManyToOne(() => TagEntity, { onDelete: 'CASCADE' }) - @JoinColumn({ name: 'tag_id' }) - tag!: TagEntity - - @Column({ type: 'text', default: () => 'CURRENT_TIMESTAMP' }) - created_at!: string -} diff --git a/old-ss/src/main/db/entities/TagEntity.ts b/old-ss/src/main/db/entities/TagEntity.ts deleted file mode 100644 index 6cd78b1..0000000 --- a/old-ss/src/main/db/entities/TagEntity.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm' - -@Entity({ name: 'tags' }) -export class TagEntity { - @PrimaryGeneratedColumn() - id!: number - - @Column({ type: 'text', unique: true }) - name!: string - - @Column({ type: 'text', default: () => 'CURRENT_TIMESTAMP' }) - created_at!: string - - @Column({ type: 'text', default: () => 'CURRENT_TIMESTAMP' }) - updated_at!: string -} diff --git a/old-ss/src/main/db/entities/index.ts b/old-ss/src/main/db/entities/index.ts deleted file mode 100644 index 4fea170..0000000 --- a/old-ss/src/main/db/entities/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export { StudentEntity } from './StudentEntity' -export { ReasonEntity } from './ReasonEntity' -export { ScoreEventEntity } from './ScoreEventEntity' -export { SettlementEntity } from './SettlementEntity' -export { SettingEntity } from './SettingEntity' -export { TagEntity } from './TagEntity' -export { StudentTagEntity } from './StudentTagEntity' diff --git a/old-ss/src/main/db/migrations/InitSchema2026011800000.ts b/old-ss/src/main/db/migrations/InitSchema2026011800000.ts deleted file mode 100644 index 67f067c..0000000 --- a/old-ss/src/main/db/migrations/InitSchema2026011800000.ts +++ /dev/null @@ -1,155 +0,0 @@ -import type { MigrationInterface, QueryRunner } from 'typeorm' - -export class InitSchema2026011800000 implements MigrationInterface { - name = 'InitSchema2026011800000' - - private isPostgres(queryRunner: QueryRunner): boolean { - return queryRunner.connection.options.type === 'postgres' - } - - async up(queryRunner: QueryRunner): Promise { - const isPg = this.isPostgres(queryRunner) - const pkSerial = isPg ? 'SERIAL PRIMARY KEY' : 'integer PRIMARY KEY AUTOINCREMENT' - const now = isPg ? 'CURRENT_TIMESTAMP' : '(CURRENT_TIMESTAMP)' - const defaultZero = isPg ? 'DEFAULT 0' : 'DEFAULT (0)' - const defaultEmptyArr = isPg ? "DEFAULT '[]'" : "DEFAULT '[]'" - - if (!(await queryRunner.hasTable('students'))) { - await queryRunner.query(` - CREATE TABLE "students" ( - "id" ${pkSerial} NOT NULL, - "name" text NOT NULL, - "score" integer NOT NULL ${defaultZero}, - "extra_json" text, - "tags" text NOT NULL ${defaultEmptyArr}, - "created_at" text NOT NULL DEFAULT ${now}, - "updated_at" text NOT NULL DEFAULT ${now} - ) - `) - } - - if (!(await queryRunner.hasTable('reasons'))) { - await queryRunner.query(` - CREATE TABLE "reasons" ( - "id" ${pkSerial} NOT NULL, - "content" text NOT NULL, - "category" text NOT NULL DEFAULT '其他', - "delta" integer NOT NULL, - "is_system" integer NOT NULL ${defaultZero}, - "updated_at" text NOT NULL DEFAULT ${now}, - CONSTRAINT "UQ_reasons_content" UNIQUE ("content") - ) - `) - } - - if (!(await queryRunner.hasTable('settlements'))) { - await queryRunner.query(` - CREATE TABLE "settlements" ( - "id" ${pkSerial} NOT NULL, - "start_time" text NOT NULL, - "end_time" text NOT NULL, - "created_at" text NOT NULL DEFAULT ${now} - ) - `) - } - - if (!(await queryRunner.hasTable('score_events'))) { - await queryRunner.query(` - CREATE TABLE "score_events" ( - "id" ${pkSerial} NOT NULL, - "uuid" text NOT NULL, - "student_name" text NOT NULL, - "reason_content" text NOT NULL, - "delta" integer NOT NULL, - "val_prev" integer NOT NULL, - "val_curr" integer NOT NULL, - "event_time" text NOT NULL DEFAULT ${now}, - "settlement_id" integer, - CONSTRAINT "UQ_score_events_uuid" UNIQUE ("uuid") - ) - `) - } - await queryRunner.query( - `CREATE INDEX IF NOT EXISTS "IDX_score_events_settlement_id" ON "score_events" ("settlement_id")` - ) - - if (!(await queryRunner.hasTable('settings'))) { - await queryRunner.query(` - CREATE TABLE "settings" ( - "key" text PRIMARY KEY NOT NULL, - "value" text - ) - `) - } - - const reasonValues = `('上课发言','课堂表现',1,1,CURRENT_TIMESTAMP),('作业优秀','作业情况',2,1,CURRENT_TIMESTAMP),('纪律良好','纪律',1,1,CURRENT_TIMESTAMP),('帮助同学','品德',2,1,CURRENT_TIMESTAMP),('迟到','纪律',-1,1,CURRENT_TIMESTAMP),('未交作业','作业情况',-2,1,CURRENT_TIMESTAMP)` - - if (isPg) { - await queryRunner.query(` - INSERT INTO "reasons" ("content","category","delta","is_system","updated_at") VALUES - ${reasonValues} - ON CONFLICT DO NOTHING - `) - } else { - await queryRunner.query(` - INSERT OR IGNORE INTO "reasons" ("content","category","delta","is_system","updated_at") VALUES - ${reasonValues} - `) - } - - if (!(await queryRunner.hasTable('tags'))) { - await queryRunner.query(` - CREATE TABLE "tags" ( - "id" ${pkSerial} NOT NULL, - "name" text NOT NULL UNIQUE, - "created_at" text NOT NULL DEFAULT ${now}, - "updated_at" text NOT NULL DEFAULT ${now} - ) - `) - } - - if (!(await queryRunner.hasTable('student_tags'))) { - await queryRunner.query(` - CREATE TABLE "student_tags" ( - "id" ${pkSerial} NOT NULL, - "student_id" integer NOT NULL, - "tag_id" integer NOT NULL, - "created_at" text NOT NULL DEFAULT ${now}, - FOREIGN KEY ("student_id") REFERENCES "students"("id") ON DELETE CASCADE, - FOREIGN KEY ("tag_id") REFERENCES "tags"("id") ON DELETE CASCADE, - UNIQUE("student_id", "tag_id") - ) - `) - } - - await queryRunner.query( - `CREATE INDEX IF NOT EXISTS "IDX_student_tags_student_id" ON "student_tags" ("student_id")` - ) - await queryRunner.query( - `CREATE INDEX IF NOT EXISTS "IDX_student_tags_tag_id" ON "student_tags" ("tag_id")` - ) - - const tagValues = `('优秀生'),('班干部'),('勤奋'),('活跃'),('进步快')` - - if (isPg) { - await queryRunner.query(` - INSERT INTO "tags" ("name") VALUES ${tagValues} - ON CONFLICT DO NOTHING - `) - } else { - await queryRunner.query(` - INSERT OR IGNORE INTO "tags" ("name") VALUES ${tagValues} - `) - } - } - - async down(queryRunner: QueryRunner): Promise { - await queryRunner.query(`DROP TABLE IF EXISTS "score_events"`) - await queryRunner.query(`DROP TABLE IF EXISTS "settlements"`) - await queryRunner.query(`DROP TABLE IF EXISTS "students"`) - await queryRunner.query(`DROP TABLE IF EXISTS "reasons"`) - await queryRunner.query(`DROP TABLE IF EXISTS "settings"`) - await queryRunner.query(`DROP TABLE IF EXISTS "student_tags"`) - await queryRunner.query(`DROP TABLE IF EXISTS "tags"`) - } -} diff --git a/old-ss/src/main/db/migrations/index.ts b/old-ss/src/main/db/migrations/index.ts deleted file mode 100644 index fbb3197..0000000 --- a/old-ss/src/main/db/migrations/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { InitSchema2026011800000 } from './InitSchema2026011800000' - -export const migrations = [InitSchema2026011800000] diff --git a/old-ss/src/main/hosting/hostApplication.ts b/old-ss/src/main/hosting/hostApplication.ts deleted file mode 100644 index c8629d7..0000000 --- a/old-ss/src/main/hosting/hostApplication.ts +++ /dev/null @@ -1,92 +0,0 @@ -import type { - configureHostDelegate, - hostApplicationContext, - hostBuilderContext, - hostedService, - middleware, - serviceToken -} from './types' -import { ServiceProvider } from './serviceCollection' - -export class HostApplication { - private hostedInstances: hostedService[] = [] - private started = false - - constructor( - private readonly context: hostBuilderContext, - private readonly provider: ServiceProvider, - private readonly configureDelegates: configureHostDelegate[], - private readonly middleware: middleware[], - private readonly hostedTokens: serviceToken[] - ) {} - - async start(): Promise { - if (this.started) return - - const appCtx = this.createApplicationContext() - for (const configure of this.configureDelegates) { - await configure(this.context, appCtx) - } - - await this.dispatch(0, appCtx, async () => { - await this.bootstrapHostedServices() - }) - - this.started = true - await this.context.lifetime.notifyStarted() - } - - async stop(): Promise { - if (!this.started) return - await this.context.lifetime.notifyStopping() - await this.disposeHostedServices() - await this.context.lifetime.notifyStopped() - this.started = false - } - - async dispose(): Promise { - await this.stop() - await this.provider.dispose() - } - - get services(): ServiceProvider { - return this.provider - } - - get hostContext(): hostBuilderContext { - return this.context - } - - private createApplicationContext(): hostApplicationContext { - return { services: this.provider, host: this.context } - } - - private async bootstrapHostedServices() { - for (const token of this.hostedTokens) { - const service = this.provider.get(token) - this.hostedInstances.push(service) - await service.start() - } - } - - private async disposeHostedServices() { - while (this.hostedInstances.length) { - const service = this.hostedInstances.pop() - if (!service) continue - await service.stop() - } - } - - private async dispatch( - index: number, - appCtx: hostApplicationContext, - terminal: () => Promise - ) { - const middleware = this.middleware[index] - if (!middleware) { - await terminal() - return - } - await middleware(appCtx, () => this.dispatch(index + 1, appCtx, terminal)) - } -} diff --git a/old-ss/src/main/hosting/hostBuilder.ts b/old-ss/src/main/hosting/hostBuilder.ts deleted file mode 100644 index d39f901..0000000 --- a/old-ss/src/main/hosting/hostBuilder.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { ServiceCollection } from './serviceCollection' -import { HostApplication } from './hostApplication' -import { - type appRuntimeContext, - type configureHostDelegate, - type configureServicesDelegate, - type hostBuilderContext, - type hostBuilderSettings, - type hostedService, - type middleware, - type serviceToken -} from './types' - -export class SecScoreHostBuilder { - private readonly serviceCollection: ServiceCollection - private readonly configureServicesDelegates: configureServicesDelegate[] = [] - private readonly configureDelegates: configureHostDelegate[] = [] - private readonly middleware: middleware[] = [] - private readonly hostedServices: serviceToken[] = [] - private readonly builderContext: hostBuilderContext - - constructor(runtimeCtx: appRuntimeContext, settings: hostBuilderSettings = {}) { - this.serviceCollection = new ServiceCollection(runtimeCtx) - this.builderContext = { - ctx: runtimeCtx, - environmentName: settings.environment ?? process.env.SECSCORE_ENV ?? 'Production', - properties: new Map(Object.entries(settings.properties ?? {})), - lifetime: this.serviceCollection.getLifetime() - } - } - - get context(): hostBuilderContext { - return this.builderContext - } - - configureServices(callback: configureServicesDelegate): this { - this.configureServicesDelegates.push(callback) - return this - } - - configure(callback: configureHostDelegate): this { - this.configureDelegates.push(callback) - return this - } - - use(middleware: middleware): this { - this.middleware.push(middleware) - return this - } - - addHostedService(token: serviceToken): this { - this.hostedServices.push(token) - return this - } - - async build(): Promise { - for (const configure of this.configureServicesDelegates) { - await configure(this.builderContext, this.serviceCollection) - } - - const provider = this.serviceCollection.buildServiceProvider() - const application = new HostApplication( - this.builderContext, - provider, - this.configureDelegates, - this.middleware, - this.hostedServices - ) - return new SecScoreHost(application) - } -} - -export class SecScoreHost { - constructor(private readonly app: HostApplication) {} - - get services() { - return this.app.services - } - - get hostContext() { - return this.app.hostContext - } - - async start() { - await this.app.start() - } - - async stop() { - await this.app.stop() - } - - async dispose() { - await this.app.dispose() - } - - async run() { - await this.start() - return async () => { - await this.dispose() - } - } -} - -export function createHostBuilder(ctx: appRuntimeContext, settings?: hostBuilderSettings) { - return new SecScoreHostBuilder(ctx, settings) -} - -export const Host = { - createApplicationBuilder: createHostBuilder -} diff --git a/old-ss/src/main/hosting/index.ts b/old-ss/src/main/hosting/index.ts deleted file mode 100644 index 3f55de2..0000000 --- a/old-ss/src/main/hosting/index.ts +++ /dev/null @@ -1,32 +0,0 @@ -export { SecScoreHostBuilder, SecScoreHost, createHostBuilder, Host } from './hostBuilder' -export { ServiceCollection, ServiceProvider } from './serviceCollection' -export { - HostApplicationLifetimeToken, - AppConfigToken, - LoggerToken, - DbManagerToken, - SettingsStoreToken, - SecurityServiceToken, - PermissionServiceToken, - StudentRepositoryToken, - ReasonRepositoryToken, - EventRepositoryToken, - SettlementRepositoryToken, - TagRepositoryToken, - ThemeServiceToken, - WindowManagerToken, - TrayServiceToken, - AutoScoreServiceToken -} from './tokens' -export type { - appRuntimeContext, - hostedService, - middleware, - hostBuilderSettings, - hostBuilderContext, - configureServicesDelegate, - configureHostDelegate, - hostApplicationLifetime, - hostApplicationContext, - serviceToken -} from './types' diff --git a/old-ss/src/main/hosting/lifetime.ts b/old-ss/src/main/hosting/lifetime.ts deleted file mode 100644 index 0f38da7..0000000 --- a/old-ss/src/main/hosting/lifetime.ts +++ /dev/null @@ -1,61 +0,0 @@ -import type { awaitable, disposer, hostApplicationLifetime } from './types' - -type loggerLike = { error: (...args: any[]) => void } - -// 默认的应用生命周期实现,管理启动/停止事件 -export class DefaultHostApplicationLifetime implements hostApplicationLifetime { - constructor(private readonly logger: loggerLike = console) {} - private readonly started = new Set<() => awaitable>() // 启动事件处理器 - private readonly stopping = new Set<() => awaitable>() // 停止事件处理器 - private readonly stopped = new Set<() => awaitable>() // 已停止事件处理器 - - // 注册启动事件处理器 - onStarted(handler: () => awaitable): disposer { - this.started.add(handler) - return () => { - this.started.delete(handler) - } // 返回清理函数 - } - - // 注册停止事件处理器 - onStopping(handler: () => awaitable): disposer { - this.stopping.add(handler) - return () => { - this.stopping.delete(handler) - } - } - - // 注册已停止事件处理器 - onStopped(handler: () => awaitable): disposer { - this.stopped.add(handler) - return () => { - this.stopped.delete(handler) - } - } - - // 通知所有启动事件处理器 - async notifyStarted() { - await this.dispatch(this.started) - } - - // 通知所有停止事件处理器 - async notifyStopping() { - await this.dispatch(this.stopping) - } - - // 通知所有已停止事件处理器 - async notifyStopped() { - await this.dispatch(this.stopped) - } - - // 执行事件处理器列表 - private async dispatch(targets: Set<() => awaitable>) { - for (const handler of Array.from(targets)) { - try { - await handler() - } catch (error) { - this.logger.error('[HostLifetime] handler failed', error as Error) // 记录错误但不中断 - } - } - } -} diff --git a/old-ss/src/main/hosting/serviceCollection.ts b/old-ss/src/main/hosting/serviceCollection.ts deleted file mode 100644 index 8c54034..0000000 --- a/old-ss/src/main/hosting/serviceCollection.ts +++ /dev/null @@ -1,216 +0,0 @@ -import { HostApplicationLifetimeToken } from './tokens' -import { DefaultHostApplicationLifetime } from './lifetime' -import type { - appRuntimeContext, - disposer, - injectableClass, - serviceDescriptor, - serviceFactory, - serviceFactoryOrValue, - serviceLifetime, - serviceToken -} from './types' - -// 检查值是否为构造函数 -function isConstructor(value: serviceFactoryOrValue): value is injectableClass { - return ( - typeof value === 'function' && - !!(value as any).prototype && - (value as any).prototype.constructor === value - ) -} - -// 服务集合类,管理所有注册的服务描述符 -export class ServiceCollection { - private readonly descriptors = new Map() // 服务描述符映射 - private readonly hostLifetime: DefaultHostApplicationLifetime // 应用生命周期管理器 - - constructor(private readonly ctx: appRuntimeContext) { - this.hostLifetime = new DefaultHostApplicationLifetime(this.ctx.logger ?? console) - this.addSingleton(HostApplicationLifetimeToken, () => this.hostLifetime) - } - - // 获取生命周期管理器 - getLifetime() { - return this.hostLifetime - } - - // 添加单例服务 - addSingleton(token: serviceToken, impl: serviceFactoryOrValue): this { - return this.register(token, 'singleton', impl) - } - - // 添加作用域服务 - addScoped(token: serviceToken, impl: serviceFactoryOrValue): this { - return this.register(token, 'scoped', impl) - } - - // 添加瞬时服务 - addTransient(token: serviceToken, impl: serviceFactoryOrValue): this { - return this.register(token, 'transient', impl) - } - - // 尝试添加单例服务(如果不存在) - tryAddSingleton(token: serviceToken, impl: serviceFactoryOrValue): this { - if (!this.descriptors.has(token)) { - this.addSingleton(token, impl) - } - return this - } - - // 检查服务是否已注册 - has(token: serviceToken): boolean { - return this.descriptors.has(token) - } - - // 清空所有服务 - clear(): void { - this.descriptors.clear() - } - - // 构建服务提供者 - buildServiceProvider(): ServiceProvider { - return new ServiceProvider(this.ctx, new Map(this.descriptors)) - } - - // 注册服务 - private register( - token: serviceToken, - lifetime: serviceLifetime, - impl: serviceFactoryOrValue - ): this { - const descriptor: serviceDescriptor = { - token, - lifetime, - factory: this.normalizeFactory(impl) // 标准化工厂函数 - } - this.descriptors.set(token, descriptor) - return this - } - - // 标准化工厂函数 - private normalizeFactory(impl: serviceFactoryOrValue): serviceFactory { - if (isConstructor(impl)) { - return (provider) => this.instantiateClass(impl, provider) // 构造函数,实例化类 - } - - if (typeof impl === 'function') { - return impl as serviceFactory // 已经是工厂函数 - } - - return () => impl // 直接值,返回常量 - } - - // 实例化类,注入依赖 - private instantiateClass(Ctor: injectableClass, provider: ServiceProvider): T { - const deps = [...(Ctor.inject ?? [])].map((token) => provider.get(token)) // 获取依赖 - return new Ctor(...deps) // 构造实例 - } -} - -// 服务提供者类,负责解析和提供服务实例 -export class ServiceProvider { - private readonly singletonCache: Map // 单例缓存 - private readonly scopedCache = new Map() // 作用域缓存 - private readonly singletonCleanup: disposer[] // 单例清理函数 - private readonly scopedCleanup: disposer[] = [] // 作用域清理函数 - private readonly root: ServiceProvider | null // 根提供者 - - constructor( - private readonly ctx: appRuntimeContext, - private readonly descriptors: Map, - root: ServiceProvider | null = null, - private readonly isScope = false // 是否为作用域提供者 - ) { - this.root = root - this.singletonCache = root ? root.singletonCache : new Map() // 共享单例缓存 - this.singletonCleanup = root ? root.singletonCleanup : [] - } - - // 获取服务实例 - get(token: serviceToken): T { - const descriptor = this.descriptors.get(token) as serviceDescriptor | undefined - if (!descriptor) { - throw new Error(`Service not registered for token: ${token.toString?.() ?? String(token)}`) - } - - switch (descriptor.lifetime) { - case 'singleton': - return this.resolveSingleton(descriptor) - case 'scoped': - return this.resolveScoped(descriptor) - case 'transient': - default: - return this.instantiate(descriptor) // 每次都新实例 - } - } - - // 创建作用域提供者 - createScope(): ServiceProvider { - return new ServiceProvider(this.ctx, this.descriptors, this.root ?? this, true) - } - - // 释放资源 - async dispose(): Promise { - await this.flushCleanup(this.scopedCleanup) // 先清理作用域 - if (!this.isScope) { - await this.flushCleanup(this.singletonCleanup) // 再清理单例 - this.singletonCache.clear() - } - this.scopedCache.clear() - } - - // 解析单例服务 - private resolveSingleton(descriptor: serviceDescriptor): T { - const cacheOwner = this.root ?? this - if (cacheOwner.singletonCache.has(descriptor.token)) { - return cacheOwner.singletonCache.get(descriptor.token) as T - } - const instance = this.instantiate(descriptor) - cacheOwner.singletonCache.set(descriptor.token, instance) - const disposer = this.extractDisposer(instance) // 提取清理函数 - if (disposer) cacheOwner.singletonCleanup.push(disposer) - return instance - } - - // 解析作用域服务 - private resolveScoped(descriptor: serviceDescriptor): T { - if (this.scopedCache.has(descriptor.token)) { - return this.scopedCache.get(descriptor.token) as T - } - const instance = this.instantiate(descriptor) - this.scopedCache.set(descriptor.token, instance) - const disposer = this.extractDisposer(instance) - if (disposer) this.scopedCleanup.push(disposer) - return instance - } - - // 实例化服务 - private instantiate(descriptor: serviceDescriptor): T { - return descriptor.factory(this) - } - - // 提取实例的清理函数 - private extractDisposer(instance: unknown): disposer | null { - if (!instance) return null - if (typeof (instance as any).dispose === 'function') { - return () => (instance as any).dispose() - } - if (typeof (instance as any).destroy === 'function') { - return () => (instance as any).destroy() - } - if (typeof (instance as any).stop === 'function') { - return () => (instance as any).stop() - } - return null - } - - // 执行清理函数列表 - private async flushCleanup(cleanup: disposer[]) { - while (cleanup.length) { - const disposer = cleanup.pop() - if (!disposer) continue - await disposer() - } - } -} diff --git a/old-ss/src/main/hosting/tokens.ts b/old-ss/src/main/hosting/tokens.ts deleted file mode 100644 index 918f43f..0000000 --- a/old-ss/src/main/hosting/tokens.ts +++ /dev/null @@ -1,17 +0,0 @@ -export const HostApplicationLifetimeToken = Symbol.for('secscore.hosting.lifetime') - -export const AppConfigToken = Symbol.for('secscore.app.config') -export const LoggerToken = Symbol.for('secscore.logger') -export const DbManagerToken = Symbol.for('secscore.dbManager') -export const SettingsStoreToken = Symbol.for('secscore.settingsStore') -export const SecurityServiceToken = Symbol.for('secscore.securityService') -export const PermissionServiceToken = Symbol.for('secscore.permissionService') -export const StudentRepositoryToken = Symbol.for('secscore.studentRepository') -export const ReasonRepositoryToken = Symbol.for('secscore.reasonRepository') -export const EventRepositoryToken = Symbol.for('secscore.eventRepository') -export const SettlementRepositoryToken = Symbol.for('secscore.settlementRepository') -export const TagRepositoryToken = Symbol.for('secscore.tagRepository') -export const ThemeServiceToken = Symbol.for('secscore.themeService') -export const WindowManagerToken = Symbol.for('secscore.windowManager') -export const TrayServiceToken = Symbol.for('secscore.trayService') -export const AutoScoreServiceToken = Symbol.for('secscore.autoScoreService') diff --git a/old-ss/src/main/hosting/types.ts b/old-ss/src/main/hosting/types.ts deleted file mode 100644 index 6ba06c9..0000000 --- a/old-ss/src/main/hosting/types.ts +++ /dev/null @@ -1,71 +0,0 @@ -import type { ServiceCollection, ServiceProvider } from './serviceCollection' - -export type awaitable = T | Promise -export type disposer = () => awaitable - -export type serviceToken = string | symbol | (new (...args: any[]) => T) - -export interface injectableClass { - new (...args: any[]): T - inject?: readonly serviceToken[] -} - -export type serviceFactory = (provider: ServiceProvider) => T -export type serviceFactoryOrValue = serviceFactory | injectableClass | T - -export type serviceLifetime = 'singleton' | 'scoped' | 'transient' - -export interface serviceDescriptor { - token: serviceToken - lifetime: serviceLifetime - factory: serviceFactory -} - -export interface hostedService { - start(): awaitable - stop(): awaitable -} - -export interface hostBuilderSettings { - environment?: string - properties?: Record -} - -export interface hostApplicationLifetime { - onStarted(handler: () => awaitable): disposer - onStopping(handler: () => awaitable): disposer - onStopped(handler: () => awaitable): disposer - notifyStarted(): Promise - notifyStopping(): Promise - notifyStopped(): Promise -} - -export interface appRuntimeContext { - logger?: { error: (...args: any[]) => void } -} - -export interface hostBuilderContext { - ctx: appRuntimeContext - environmentName: string - properties: Map - lifetime: hostApplicationLifetime -} - -export interface hostApplicationContext { - services: ServiceProvider - host: hostBuilderContext -} - -export type configureServicesDelegate = ( - context: hostBuilderContext, - services: ServiceCollection -) => awaitable - -export type configureHostDelegate = ( - context: hostBuilderContext, - app: hostApplicationContext -) => awaitable - -export type middleware = (app: hostApplicationContext, next: () => Promise) => awaitable - -export type { ServiceCollection, ServiceProvider } diff --git a/old-ss/src/main/index.ts b/old-ss/src/main/index.ts deleted file mode 100644 index 7a249f1..0000000 --- a/old-ss/src/main/index.ts +++ /dev/null @@ -1,367 +0,0 @@ -import 'reflect-metadata' -import { app } from 'electron' -import { join, dirname } from 'path' -import fs from 'fs' -import { electronApp, optimizer, is } from '@electron-toolkit/utils' -import icon from '../../resources/SecScore_logo.ico?asset' -import { MainContext } from './context' -import { DbManager } from './db/DbManager' -import { LoggerService } from './services/LoggerService' -import { SettingsService } from './services/SettingsService' -import { SecurityService } from './services/SecurityService' -import { PermissionService } from './services/PermissionService' -import { AuthService } from './services/AuthService' -import { DataService } from './services/DataService' -import { ThemeService } from './services/ThemeService' -import { WindowManager, type windowManagerOptions } from './services/WindowManager' -import { TrayService } from './services/TrayService' -import { AutoScoreService } from './services/AutoScoreService' -import { DbConnectionService } from './services/DbConnectionService' -import { StudentRepository } from './repos/StudentRepository' -import { ReasonRepository } from './repos/ReasonRepository' -import { EventRepository } from './repos/EventRepository' -import { SettlementRepository } from './repos/SettlementRepository' -import { TagRepository } from './repos/TagRepository' -import { - AppConfigToken, - createHostBuilder, - DbManagerToken, - EventRepositoryToken, - LoggerToken, - PermissionServiceToken, - ReasonRepositoryToken, - SecurityServiceToken, - SettlementRepositoryToken, - SettingsStoreToken, - StudentRepositoryToken, - TagRepositoryToken, - ThemeServiceToken, - WindowManagerToken, - TrayServiceToken, - AutoScoreServiceToken -} from './hosting' - -type mainAppConfig = { - isDev: boolean - appRoot: string - dataRoot: string - configDir: string - logDir: string - dbPath: string - pgConnectionString?: string - window: windowManagerOptions -} - -const PROTOCOL_SCHEME = 'secscore' - -let mainCtxRef: MainContext | null = null -let pendingProtocolUrl: string | null = null - -const extractProtocolUrl = (argv: string[]): string | null => { - const prefix = `${PROTOCOL_SCHEME}://` - const lowerPrefix = prefix.toLowerCase() - for (const arg of argv) { - if (typeof arg !== 'string') continue - const v = arg.trim() - if (!v) continue - const lower = v.toLowerCase() - if (lower.startsWith(lowerPrefix)) return v - } - return null -} - -const openMainRoute = (ctx: MainContext, route: string) => { - ctx.windows.open({ - key: 'main', - title: 'SecScore', - route - }) -} - -const handleProtocolUrl = (rawUrl: string, ctx: MainContext) => { - if (!rawUrl) return - let s = rawUrl.trim() - if (!s) return - const prefix = `${PROTOCOL_SCHEME}://` - if (s.toLowerCase().startsWith(prefix)) { - s = s.slice(prefix.length) - } - s = s.replace(/^\/+/, '') - if (!s) { - openMainRoute(ctx, '/') - return - } - const parts = s.split('/') - const head = parts[0]?.toLowerCase() ?? '' - if (!head) { - openMainRoute(ctx, '/') - return - } - if (head === 'home') { - openMainRoute(ctx, '/') - return - } - if (head === 'students') { - openMainRoute(ctx, '/students') - return - } - if (head === 'score') { - openMainRoute(ctx, '/score') - return - } - if (head === 'leaderboard') { - openMainRoute(ctx, '/leaderboard') - return - } - if (head === 'settlements') { - openMainRoute(ctx, '/settlements') - return - } - if (head === 'reasons') { - openMainRoute(ctx, '/reasons') - return - } - if (head === 'settings') { - openMainRoute(ctx, '/settings') - return - } -} - -const hasSingleInstanceLock = app.requestSingleInstanceLock() - -if (!hasSingleInstanceLock) { - app.quit() -} else { - const initialUrl = extractProtocolUrl(process.argv) - if (initialUrl) { - pendingProtocolUrl = initialUrl - } - app.on('second-instance', (event, argv) => { - event.preventDefault() - const url = extractProtocolUrl(argv) - if (!url) return - if (mainCtxRef) { - handleProtocolUrl(url, mainCtxRef) - } else { - pendingProtocolUrl = url - } - }) - app.on('open-url', (event, url) => { - event.preventDefault() - if (mainCtxRef) { - handleProtocolUrl(url, mainCtxRef) - } else { - pendingProtocolUrl = url - } - }) -} - -app.whenReady().then(async () => { - electronApp.setAppUserModelId('com.electron') - - if (!is.dev) { - app.setAsDefaultProtocolClient(PROTOCOL_SCHEME) - } - - app.on('browser-window-created', (_, window) => { - optimizer.watchWindowShortcuts(window) - }) - - const appRoot = is.dev ? process.cwd() : dirname(process.execPath) - - const ensureWritableDir = (preferred: string, fallback: string) => { - try { - if (!fs.existsSync(preferred)) fs.mkdirSync(preferred, { recursive: true }) - return preferred - } catch { - if (!fs.existsSync(fallback)) fs.mkdirSync(fallback, { recursive: true }) - return fallback - } - } - - const dataRoot = is.dev - ? process.cwd() - : ensureWritableDir(join(appRoot, 'data'), join(app.getPath('userData'), 'secscore-data')) - - const logDir = is.dev ? join(process.cwd(), 'logs') : join(dataRoot, 'logs') - const configDir = is.dev ? join(process.cwd(), 'configs') : join(dataRoot, 'configs') - const dbPath = is.dev ? join(process.cwd(), 'db.sqlite') : join(dataRoot, 'db.sqlite') - - const pgConnectionString = process.env['PG_CONNECTION_STRING'] || undefined - - const config: mainAppConfig = { - isDev: is.dev, - appRoot, - dataRoot, - logDir, - configDir, - dbPath, - pgConnectionString, - window: { - icon, - preloadPath: join(__dirname, '../preload/index.js'), - rendererHtmlPath: join(__dirname, '../renderer/index.html'), - getRendererUrl: () => (is.dev ? process.env['ELECTRON_RENDERER_URL'] : undefined) - } - } - - const builder = createHostBuilder({ - logger: { - error: (...args: any[]) => { - try { - process.stderr.write(`${args.map((a) => String(a)).join(' ')}\n`) - } catch { - return - } - } - } - }) - .configureServices(async (_builderContext, services) => { - services.addSingleton(AppConfigToken, config) - - services.addSingleton(MainContext, () => new MainContext()) - - services.addSingleton( - LoggerToken, - (p) => new LoggerService(p.get(MainContext), config.logDir) - ) - services.addSingleton( - DbManagerToken, - (p) => new DbManager(p.get(MainContext), config.dbPath, config.pgConnectionString) - ) - services.addSingleton(SettingsStoreToken, (p) => new SettingsService(p.get(MainContext))) - services.addSingleton(SecurityServiceToken, (p) => new SecurityService(p.get(MainContext))) - services.addSingleton( - PermissionServiceToken, - (p) => new PermissionService(p.get(MainContext)) - ) - services.addSingleton(AuthService, (p) => new AuthService(p.get(MainContext))) - services.addSingleton( - DataService, - (p) => new DataService(p.get(MainContext), p.get(TagRepositoryToken)) - ) - - services.addSingleton( - StudentRepositoryToken, - (p) => new StudentRepository(p.get(MainContext)) - ) - services.addSingleton(ReasonRepositoryToken, (p) => new ReasonRepository(p.get(MainContext))) - services.addSingleton(EventRepositoryToken, (p) => new EventRepository(p.get(MainContext))) - services.addSingleton( - SettlementRepositoryToken, - (p) => new SettlementRepository(p.get(MainContext)) - ) - services.addSingleton( - TagRepositoryToken, - (p) => new TagRepository((p.get(DbManagerToken) as DbManager).dataSource) - ) - - services.addSingleton(ThemeServiceToken, (p) => new ThemeService(p.get(MainContext))) - services.addSingleton( - WindowManagerToken, - (p) => new WindowManager(p.get(MainContext), config.window) - ) - services.addSingleton( - TrayServiceToken, - (p) => new TrayService(p.get(MainContext), config.window) - ) - services.addSingleton(AutoScoreServiceToken, (p) => new AutoScoreService(p.get(MainContext))) - services.addSingleton(DbConnectionService, (p) => new DbConnectionService(p.get(MainContext))) - }) - .configure(async (_builderContext, appCtx) => { - const services = appCtx.services - services.get(LoggerToken) - // 先初始化 db(使用默认 SQLite) - const db = services.get(DbManagerToken) as DbManager - await db.initialize() - // 然后初始化 settings - const settings = services.get(SettingsStoreToken) as SettingsService - await settings.initialize() - // 检查是否需要切换到 PostgreSQL - const pgConnectionString = settings.getValue('pg_connection_string') - if (pgConnectionString) { - try { - await db.switchConnection(pgConnectionString) - await settings.setValue('pg_connection_status', { - connected: true, - type: 'postgresql' - }) - } catch (e: any) { - console.error('Failed to connect to PostgreSQL:', e) - await settings.setValue('pg_connection_status', { - connected: false, - type: 'postgresql', - error: e?.message || '连接失败' - }) - // 切换回 SQLite - await db.switchConnection(undefined) - } - } - services.get(SecurityServiceToken) - services.get(PermissionServiceToken) - services.get(AuthService) - services.get(DataService) - services.get(StudentRepositoryToken) - services.get(ReasonRepositoryToken) - services.get(EventRepositoryToken) - services.get(SettlementRepositoryToken) - const theme = services.get( - ThemeServiceToken - ) as import('./services/ThemeService').ThemeService - await theme.init() - if (!process.env.HEADLESS) { - services.get(WindowManagerToken) - const tray = services.get(TrayServiceToken) as TrayService - tray.initialize() - } - const autoScore = services.get(AutoScoreServiceToken) as AutoScoreService - await autoScore.initialize?.() - services.get(DbConnectionService) - }) - - const host = await builder.build() - const ctx = host.services.get(MainContext) as MainContext - mainCtxRef = ctx - - ctx.handle('app:register-url-protocol', async () => { - if (is.dev) { - return { success: false, message: '仅在打包后的应用中可用' } - } - try { - const ok = app.setAsDefaultProtocolClient(PROTOCOL_SCHEME) - if (ok) { - return { success: true, data: { registered: true } } - } - return { success: false, data: { registered: false }, message: '系统未接受协议注册' } - } catch (error) { - const message = - error instanceof Error ? error.message : typeof error === 'string' ? error : 'Unknown error' - return { success: false, message: `注册失败: ${message}` } - } - }) - - await host.start() - - if (pendingProtocolUrl) { - handleProtocolUrl(pendingProtocolUrl, ctx) - pendingProtocolUrl = null - } else { - openMainRoute(ctx, '/') - } - - let disposing = false - const beforeQuitHandler = () => { - if (disposing) return - disposing = true - ctx.isQuitting = true - app.removeListener('before-quit', beforeQuitHandler) - void host.dispose() - } - app.on('before-quit', beforeQuitHandler) -}) - -app.on('window-all-closed', () => { - if (process.platform !== 'darwin') { - app.quit() - } -}) diff --git a/old-ss/src/main/repos/EventRepository.ts b/old-ss/src/main/repos/EventRepository.ts deleted file mode 100644 index b94e173..0000000 --- a/old-ss/src/main/repos/EventRepository.ts +++ /dev/null @@ -1,248 +0,0 @@ -import { Service } from '../../shared/kernel' -import { MainContext } from '../context' -import { v4 as uuidv4 } from 'uuid' -import { IsNull } from 'typeorm' -import { ScoreEventEntity, StudentEntity } from '../db/entities' - -export interface scoreEvent { - id: number - uuid: string - student_name: string - reason_content: string - delta: number - val_prev: number - val_curr: number - event_time: string - settlement_id?: number | null -} - -declare module '../../shared/kernel' { - interface Context { - events: EventRepository - } -} - -export class EventRepository extends Service { - constructor(ctx: MainContext) { - super(ctx, 'events') - this.registerIpc() - } - - private get mainCtx() { - return this.ctx as MainContext - } - - private registerIpc() { - this.mainCtx.handle('db:event:query', async (_, params) => { - try { - return { success: true, data: await this.findAll(params?.limit) } - } catch (err: any) { - return { success: false, message: err.message } - } - }) - - this.mainCtx.handle('db:event:delete', async (event, uuid) => { - try { - if (!this.mainCtx.permissions.requirePermission(event, 'points')) - return { success: false, message: 'Permission denied' } - await this.deleteByUuid(uuid) - return { success: true } - } catch (err: any) { - return { success: false, message: err.message } - } - }) - - this.mainCtx.handle('db:event:create', async (event, data) => { - try { - if (!this.mainCtx.permissions.requirePermission(event, 'points')) - return { success: false, message: 'Permission denied' } - const id = await this.create(data) - return { success: true, data: id } - } catch (e: any) { - return { success: false, message: e.message } - } - }) - - this.mainCtx.handle('db:event:queryByStudent', async (_, params) => { - try { - const limit = Number(params?.limit ?? 50) - const studentName = String(params?.student_name ?? '') - const startTime = params?.startTime ? String(params.startTime) : null - if (!studentName) return { success: true, data: [] } - const rows = await this.queryByStudent(studentName, startTime, limit) - return { success: true, data: rows } - } catch (err: any) { - return { success: false, message: err.message } - } - }) - - this.mainCtx.handle('db:leaderboard:query', async (_, params) => { - try { - const range = String(params?.range ?? 'today') - const data = await this.queryLeaderboard(range) - return { success: true, data } - } catch (err: any) { - return { success: false, message: err.message } - } - }) - } - - async findAll(limit = 100) { - const repo = this.ctx.db.dataSource.getRepository(ScoreEventEntity) - return await repo.find({ - where: { settlement_id: IsNull() }, - order: { event_time: 'DESC' }, - take: limit - }) - } - - async create(event: { student_name: string; reason_content: string; delta: number }) { - const ds = this.ctx.db.dataSource - return await ds.transaction(async (manager) => { - const studentName = String(event?.student_name ?? '').trim() - const reasonContent = String(event?.reason_content ?? '').trim() - const delta = Number(event?.delta ?? 0) - - const studentRepo = manager.getRepository(StudentEntity) - const existingStudent = await studentRepo.findOne({ where: { name: studentName } }) - if (!existingStudent) throw new Error('Student not found') - - const val_prev = Number(existingStudent.score ?? 0) - const val_curr = val_prev + (Number.isFinite(delta) ? delta : 0) - const uuid = uuidv4() - const event_time = new Date().toISOString() - - const eventsRepo = manager.getRepository(ScoreEventEntity) - const saved = await eventsRepo.save( - eventsRepo.create({ - uuid, - student_name: studentName, - reason_content: reasonContent, - delta: Number.isFinite(delta) ? delta : 0, - val_prev, - val_curr, - event_time, - settlement_id: null - }) - ) - - await studentRepo.update( - { id: existingStudent.id }, - { score: val_curr, updated_at: new Date().toISOString() } - ) - - return saved.id - }) - } - - async deleteByUuid(uuid: string) { - const ds = this.ctx.db.dataSource - await ds.transaction(async (manager) => { - const eventsRepo = manager.getRepository(ScoreEventEntity) - const ev = await eventsRepo.findOne({ where: { uuid: String(uuid ?? '').trim() } }) - if (!ev) return - if (ev.settlement_id !== null && ev.settlement_id !== undefined) { - throw new Error('该记录已结算,无法撤销') - } - - const studentRepo = manager.getRepository(StudentEntity) - const student = await studentRepo.findOne({ where: { name: ev.student_name } }) - if (student) { - await studentRepo.update( - { id: student.id }, - { - score: Number(student.score ?? 0) - Number(ev.delta ?? 0), - updated_at: new Date().toISOString() - } - ) - } - - await eventsRepo.delete({ uuid: ev.uuid }) - }) - } - - private isPostgres(): boolean { - return this.ctx.db.dataSource.options.type === 'postgres' - } - - async queryByStudent(studentName: string, startTime: string | null, limit: number) { - const repo = this.ctx.db.dataSource.getRepository(ScoreEventEntity) - const qb = repo - .createQueryBuilder('e') - .where('e.student_name = :studentName', { studentName }) - .andWhere('e.settlement_id IS NULL') - .orderBy('e.event_time', 'DESC') - .limit(limit) - if (startTime) { - if (this.isPostgres()) { - qb.andWhere('e.event_time >= :startTime', { startTime }) - } else { - qb.andWhere('julianday(e.event_time) >= julianday(:startTime)', { startTime }) - } - } - return await qb.getMany() - } - - async queryLeaderboard(range: string) { - const now = new Date() - let start = new Date(now) - if (range === 'today') { - start.setHours(0, 0, 0, 0) - } else if (range === 'week') { - const day = start.getDay() - const diff = (day === 0 ? -6 : 1) - day - start.setDate(start.getDate() + diff) - start.setHours(0, 0, 0, 0) - } else if (range === 'month') { - start = new Date(start.getFullYear(), start.getMonth(), 1) - start.setHours(0, 0, 0, 0) - } else { - start.setHours(0, 0, 0, 0) - } - const startTime = start.toISOString() - - const isPg = this.isPostgres() - const joinCondition = isPg - ? 'e.student_name = s.name AND e.settlement_id IS NULL AND e.event_time >= :startTime' - : 'e.student_name = s.name AND e.settlement_id IS NULL AND julianday(e.event_time) >= julianday(:startTime)' - - const qb = this.ctx.db.dataSource - .getRepository(StudentEntity) - .createQueryBuilder('s') - .leftJoin(ScoreEventEntity, 'e', joinCondition, { startTime }) - .select('s.id', 'id') - .addSelect('s.name', 'name') - .addSelect('s.score', 'score') - .addSelect('COALESCE(SUM(e.delta), 0)', 'range_change') - .groupBy('s.id') - .addGroupBy('s.name') - .addGroupBy('s.score') - .orderBy('s.score', 'DESC') - .addOrderBy('range_change', 'DESC') - .addOrderBy('s.name', 'ASC') - - const rows = await qb.getRawMany() - return { startTime, rows } - } - - async getLastScoreTimeByStudents(studentNames: string[]): Promise> { - if (studentNames.length === 0) return new Map() - - const repo = this.ctx.db.dataSource.getRepository(ScoreEventEntity) - const results = await repo - .createQueryBuilder('e') - .select('e.student_name', 'student_name') - .addSelect('MAX(e.event_time)', 'last_time') - .where('e.student_name IN (:...studentNames)', { studentNames }) - .groupBy('e.student_name') - .getRawMany() - - const map = new Map() - for (const row of results) { - if (row.last_time) { - map.set(row.student_name, new Date(row.last_time)) - } - } - return map - } -} diff --git a/old-ss/src/main/repos/ReasonRepository.ts b/old-ss/src/main/repos/ReasonRepository.ts deleted file mode 100644 index f0ed71a..0000000 --- a/old-ss/src/main/repos/ReasonRepository.ts +++ /dev/null @@ -1,94 +0,0 @@ -import { Service } from '../../shared/kernel' -import { MainContext } from '../context' -import { ReasonEntity } from '../db/entities' - -export interface reason { - id: number - content: string - category: string - delta: number - is_system: number -} - -declare module '../../shared/kernel' { - interface Context { - reasons: ReasonRepository - } -} - -export class ReasonRepository extends Service { - constructor(ctx: MainContext) { - super(ctx, 'reasons') - this.registerIpc() - } - - private get mainCtx() { - return this.ctx as MainContext - } - - private registerIpc() { - this.mainCtx.handle('db:reason:query', async () => ({ - success: true, - data: await this.findAll() - })) - this.mainCtx.handle('db:reason:create', async (event, data) => { - if (!this.mainCtx.permissions.requirePermission(event, 'admin')) - return { success: false, message: 'Permission denied' } - return { success: true, data: await this.create(data) } - }) - this.mainCtx.handle('db:reason:update', async (event, id, data) => { - if (!this.mainCtx.permissions.requirePermission(event, 'admin')) - return { success: false, message: 'Permission denied' } - await this.update(id, data) - return { success: true } - }) - this.mainCtx.handle('db:reason:delete', async (event, id) => { - if (!this.mainCtx.permissions.requirePermission(event, 'admin')) - return { success: false, message: 'Permission denied' } - const changes = await this.delete(id) - if (!changes) return { success: false, message: '记录不存在' } - return { success: true, data: { changes } } - }) - // 兼容前端 deleteReason 命名错误 - this.mainCtx.handle('db:deleteReason', async (event, id) => { - if (!this.mainCtx.permissions.requirePermission(event, 'admin')) - return { success: false, message: 'Permission denied' } - const changes = await this.delete(id) - if (!changes) return { success: false, message: '记录不存在' } - return { success: true, data: { changes } } - }) - } - - async findAll(): Promise { - const repo = this.ctx.db.dataSource.getRepository(ReasonEntity) - return (await repo.find({ order: { category: 'ASC', content: 'ASC' } })) as any - } - - async create(reason: Omit): Promise { - const repo = this.ctx.db.dataSource.getRepository(ReasonEntity) - const created = repo.create({ - content: String(reason?.content ?? '').trim(), - category: String(reason?.category ?? '其他'), - delta: Number(reason?.delta ?? 0), - is_system: 0, - updated_at: new Date().toISOString() - }) - const saved = await repo.save(created) - return saved.id - } - - async update(id: number, reason: Partial): Promise { - const next: any = {} - for (const [key, val] of Object.entries(reason)) { - if (key === 'id') continue - next[key] = val - } - next.updated_at = new Date().toISOString() - await this.ctx.db.dataSource.getRepository(ReasonEntity).update(id, next) - } - - async delete(id: number): Promise { - const result = await this.ctx.db.dataSource.getRepository(ReasonEntity).delete(id) - return Number(result.affected ?? 0) - } -} diff --git a/old-ss/src/main/repos/SettlementRepository.ts b/old-ss/src/main/repos/SettlementRepository.ts deleted file mode 100644 index e710c28..0000000 --- a/old-ss/src/main/repos/SettlementRepository.ts +++ /dev/null @@ -1,180 +0,0 @@ -import { Service } from '../../shared/kernel' -import { MainContext } from '../context' -import { IsNull } from 'typeorm' -import { ScoreEventEntity, SettlementEntity, StudentEntity } from '../db/entities' - -function isPostgres(ds: any): boolean { - return ds.options?.type === 'postgres' -} - -export interface settlementSummary { - id: number - start_time: string - end_time: string - event_count: number -} - -export interface settlementLeaderboardRow { - name: string - score: number -} - -declare module '../../shared/kernel' { - interface Context { - settlements: SettlementRepository - } -} - -export class SettlementRepository extends Service { - constructor(ctx: MainContext) { - super(ctx, 'settlements') - this.registerIpc() - } - - private get mainCtx() { - return this.ctx as MainContext - } - - private registerIpc() { - this.mainCtx.handle('db:settlement:query', async () => { - try { - return { success: true, data: await this.findAll() } - } catch (err: any) { - return { success: false, message: err.message } - } - }) - - this.mainCtx.handle('db:settlement:create', async (event) => { - try { - if (!this.mainCtx.permissions.requirePermission(event, 'admin')) - return { success: false, message: 'Permission denied' } - const data = await this.settleNow() - return { success: true, data } - } catch (err: any) { - return { success: false, message: err.message } - } - }) - - this.mainCtx.handle('db:settlement:leaderboard', async (_, params) => { - try { - const settlementId = Number(params?.settlement_id) - if (!Number.isFinite(settlementId)) - return { success: false, message: 'Invalid settlement_id' } - return { success: true, data: await this.getLeaderboard(settlementId) } - } catch (err: any) { - return { success: false, message: err.message } - } - }) - } - - async findAll(): Promise { - const ds = this.ctx.db.dataSource - const orderBy = isPostgres(ds) ? 's.end_time' : 'julianday(s.end_time)' - const qb = ds - .getRepository(SettlementEntity) - .createQueryBuilder('s') - .select('s.id', 'id') - .addSelect('s.start_time', 'start_time') - .addSelect('s.end_time', 'end_time') - .addSelect((subQb) => { - return subQb - .select('COUNT(1)', 'cnt') - .from(ScoreEventEntity, 'e') - .where('e.settlement_id = s.id') - }, 'event_count') - .orderBy(orderBy, 'DESC') - - const rows = await qb.getRawMany() - return rows.map((r: any) => ({ - id: Number(r.id), - start_time: String(r.start_time), - end_time: String(r.end_time), - event_count: Number(r.event_count ?? 0) - })) - } - - async settleNow() { - const ds = this.ctx.db.dataSource - return await ds.transaction(async (manager) => { - const eventsRepo = manager.getRepository(ScoreEventEntity) - const unassignedCount = await eventsRepo.count({ where: { settlement_id: IsNull() } }) - const eventCount = Number(unassignedCount ?? 0) - if (eventCount <= 0) { - throw new Error('暂无可结算记录') - } - - const endTime = new Date().toISOString() - - const settlementsRepo = manager.getRepository(SettlementEntity) - const ds = this.ctx.db.dataSource - const orderBy = isPostgres(ds) ? 's.end_time' : 'julianday(s.end_time)' - const lastSettlement = await settlementsRepo - .createQueryBuilder('s') - .select('s.end_time', 'end_time') - .orderBy(orderBy, 'DESC') - .limit(1) - .getRawOne<{ end_time?: string }>() - - const minEvent = await eventsRepo - .createQueryBuilder('e') - .select('MIN(e.event_time)', 'min_time') - .where('e.settlement_id IS NULL') - .getRawOne<{ min_time?: string }>() - - const startTime = String(lastSettlement?.end_time || minEvent?.min_time || endTime) - - const created = await settlementsRepo.save( - settlementsRepo.create({ - start_time: startTime, - end_time: endTime, - created_at: new Date().toISOString() - }) - ) - const settlementId = created.id - - await eventsRepo - .createQueryBuilder() - .update(ScoreEventEntity) - .set({ settlement_id: settlementId }) - .where('settlement_id IS NULL') - .execute() - - await manager - .getRepository(StudentEntity) - .createQueryBuilder() - .update(StudentEntity) - .set({ score: 0, updated_at: new Date().toISOString() }) - .execute() - - return { settlementId, startTime, endTime, eventCount } - }) - } - - async getLeaderboard(settlementId: number) { - const settlementsRepo = this.ctx.db.dataSource.getRepository(SettlementEntity) - const settlement = await settlementsRepo.findOne({ where: { id: settlementId } }) - if (!settlement) { - throw new Error('结算记录不存在') - } - - const rows = await this.ctx.db.dataSource - .getRepository(ScoreEventEntity) - .createQueryBuilder('e') - .select('e.student_name', 'name') - .addSelect('COALESCE(SUM(e.delta), 0)', 'score') - .where('e.settlement_id = :settlementId', { settlementId }) - .groupBy('e.student_name') - .orderBy('score', 'DESC') - .addOrderBy('name', 'ASC') - .getRawMany() - - return { - settlement: { - id: settlement.id, - start_time: settlement.start_time, - end_time: settlement.end_time - }, - rows: rows.map((r: any) => ({ name: String(r.name), score: Number(r.score ?? 0) })) - } - } -} diff --git a/old-ss/src/main/repos/StudentRepository.ts b/old-ss/src/main/repos/StudentRepository.ts deleted file mode 100644 index a0e8130..0000000 --- a/old-ss/src/main/repos/StudentRepository.ts +++ /dev/null @@ -1,184 +0,0 @@ -import { Service } from '../../shared/kernel' -import { MainContext } from '../context' -import { ScoreEventEntity, StudentEntity } from '../db/entities' - -export interface student { - id: number - name: string - score: number - tags?: string[] - extra_json?: string -} - -declare module '../../shared/kernel' { - interface Context { - students: StudentRepository - } -} - -export class StudentRepository extends Service { - constructor(ctx: MainContext) { - super(ctx, 'students') - this.registerIpc() - } - - private get mainCtx() { - return this.ctx as MainContext - } - - private registerIpc() { - this.mainCtx.handle('db:student:query', async () => ({ - success: true, - data: await this.findAll() - })) - this.mainCtx.handle('db:student:create', async (event, data) => { - if (!this.mainCtx.permissions.requirePermission(event, 'admin')) - return { success: false, message: 'Permission denied' } - return { success: true, data: await this.create(data) } - }) - this.mainCtx.handle('db:student:update', async (event, id, data) => { - if (!this.mainCtx.permissions.requirePermission(event, 'admin')) - return { success: false, message: 'Permission denied' } - await this.update(id, data) - return { success: true } - }) - this.mainCtx.handle('db:student:delete', async (event, id) => { - if (!this.mainCtx.permissions.requirePermission(event, 'admin')) - return { success: false, message: 'Permission denied' } - await this.delete(id) - return { success: true } - }) - - this.mainCtx.handle('db:student:importFromSecRandom', async (event) => { - if (!this.mainCtx.permissions.requirePermission(event, 'admin')) - return { success: false, message: 'Permission denied' } - return { - success: false, - message: 'SecRandom IPC 导入已禁用(后续再做)' - } - }) - - this.mainCtx.handle('db:student:importFromXlsx', async (event, input: any) => { - if (!this.mainCtx.permissions.requirePermission(event, 'admin')) - return { success: false, message: 'Permission denied' } - - const rawNames = Array.isArray(input?.names) ? input.names : [] - const names = rawNames.map((n: any) => String(n ?? '').trim()).filter((n: string) => n) - if (!names.length) return { success: false, message: '名单为空' } - - const result = await this.importRosterMerge( - names.map((name) => ({ name, secrandomId: null })) - ) - return { success: true, data: result } - }) - } - - async findAll(): Promise { - const repo = this.ctx.db.dataSource.getRepository(StudentEntity) - const entities = await repo.find({ - select: ['id', 'name', 'score', 'tags', 'extra_json', 'created_at', 'updated_at'], - order: { score: 'DESC', name: 'ASC' } - }) - - return entities.map((entity) => { - let tags: string[] = [] - try { - tags = Array.isArray(entity.tags) ? entity.tags : JSON.parse(entity.tags || '[]') - } catch { - tags = [] - } - return { - id: entity.id, - name: entity.name, - score: entity.score, - tags, - extra_json: entity.extra_json ?? undefined - } - }) - } - - async create(student: { name: string }): Promise { - const repo = this.ctx.db.dataSource.getRepository(StudentEntity) - const created = repo.create({ - name: String(student?.name ?? '').trim(), - score: 0, - extra_json: null, - tags: '[]', - created_at: new Date().toISOString(), - updated_at: new Date().toISOString() - }) - const saved = await repo.save(created) - return saved.id - } - - async update(id: number, student: Partial): Promise { - const next: any = {} - for (const [key, val] of Object.entries(student)) { - if (key === 'id') continue - if (key === 'tags') { - next[key] = JSON.stringify(val || []) - } else { - next[key] = val - } - } - next.updated_at = new Date().toISOString() - await this.ctx.db.dataSource.getRepository(StudentEntity).update(id, next) - } - - async delete(id: number): Promise { - const ds = this.ctx.db.dataSource - await ds.transaction(async (manager) => { - const studentsRepo = manager.getRepository(StudentEntity) - const studentRow = await studentsRepo.findOne({ where: { id } }) - if (!studentRow) return - await manager.getRepository(ScoreEventEntity).delete({ student_name: studentRow.name }) - await studentsRepo.delete({ id }) - }) - } - - private async importRosterMerge(items: Array<{ name: string; secrandomId: number | null }>) { - const cleaned = Array.from( - new Map( - items - .map((i) => ({ - name: String(i?.name ?? '').trim(), - secrandomId: Number.isFinite(i?.secrandomId as any) ? Number(i.secrandomId) : null - })) - .filter((i) => i.name && i.name.length <= 64) - .map((i) => [i.name, i] as const) - ).values() - ) - if (!cleaned.length) return { inserted: 0, skipped: 0, total: 0 } - - const ds = this.ctx.db.dataSource - return await ds.transaction(async (manager) => { - const repo = manager.getRepository(StudentEntity) - const existing = await repo.find({ select: ['name'] as any }) - const existingSet = new Set(existing.map((r: any) => String(r?.name ?? '').trim())) - - const toInsert = cleaned.filter((i) => !existingSet.has(i.name)) - const now = new Date().toISOString() - if (toInsert.length) { - await repo.insert( - toInsert.map((i) => ({ - name: i.name, - score: 0, - extra_json: - typeof i.secrandomId === 'number' - ? JSON.stringify({ secrandom_id: i.secrandomId }) - : null, - tags: '[]', - created_at: now, - updated_at: now - })) - ) - } - - return { - inserted: toInsert.length, - skipped: cleaned.length - toInsert.length, - total: cleaned.length - } - }) - } -} diff --git a/old-ss/src/main/repos/TagRepository.ts b/old-ss/src/main/repos/TagRepository.ts deleted file mode 100644 index 9fc4549..0000000 --- a/old-ss/src/main/repos/TagRepository.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { DataSource, Repository } from 'typeorm' -import { TagEntity } from '../db/entities/TagEntity' -import { StudentTagEntity } from '../db/entities/StudentTagEntity' - -export class TagRepository { - private tagRepo: Repository - private studentTagRepo: Repository - - constructor(dataSource: DataSource) { - this.tagRepo = dataSource.getRepository(TagEntity) - this.studentTagRepo = dataSource.getRepository(StudentTagEntity) - } - - async findAll(): Promise { - return this.tagRepo.find({ order: { created_at: 'ASC' } }) - } - - async findByName(name: string): Promise { - return this.tagRepo.findOne({ where: { name } }) - } - - async create(name: string): Promise { - const tag = this.tagRepo.create({ name }) - return this.tagRepo.save(tag) - } - - async findOrCreate(name: string): Promise { - const existing = await this.findByName(name) - if (existing) return existing - return this.create(name) - } - - async delete(id: number): Promise { - const result = await this.tagRepo.delete(id) - return result.affected === 1 - } - - async findByStudent(studentId: number): Promise { - const relations = await this.studentTagRepo - .createQueryBuilder('st') - .leftJoinAndSelect('st.tag', 'tag') - .where('st.student_id = :studentId', { studentId }) - .orderBy('st.created_at', 'ASC') - .getMany() - - return relations.map((r) => r.tag).filter(Boolean) - } - - async addTagToStudent(studentId: number, tagId: number): Promise { - const exists = await this.studentTagRepo.findOne({ - where: { student_id: studentId, tag_id: tagId } - }) - if (!exists) { - const relation = this.studentTagRepo.create({ - student_id: studentId, - tag_id: tagId - }) - await this.studentTagRepo.save(relation) - } - } - - async removeTagFromStudent(studentId: number, tagId: number): Promise { - await this.studentTagRepo.delete({ - student_id: studentId, - tag_id: tagId - }) - } - - async updateStudentTags(studentId: number, tagIds: number[]): Promise { - await this.studentTagRepo.delete({ student_id: studentId }) - for (const tagId of tagIds) { - const relation = this.studentTagRepo.create({ - student_id: studentId, - tag_id: tagId - }) - await this.studentTagRepo.save(relation) - } - } -} diff --git a/old-ss/src/main/services/AuthService.ts b/old-ss/src/main/services/AuthService.ts deleted file mode 100644 index ce47436..0000000 --- a/old-ss/src/main/services/AuthService.ts +++ /dev/null @@ -1,175 +0,0 @@ -import { Service } from '../../shared/kernel' -import { MainContext } from '../context' -import { permissionLevel } from './PermissionService' -import crypto from 'crypto' - -declare module '../../shared/kernel' { - interface Context { - auth: AuthService - } -} - -export class AuthService extends Service { - private SETTINGS_SECURITY_ADMIN = 'security_admin_password' - private SETTINGS_SECURITY_POINTS = 'security_points_password' - private SETTINGS_SECURITY_RECOVERY = 'security_recovery_string' - - constructor(ctx: MainContext) { - super(ctx, 'auth') - this.registerIpc() - } - - private get mainCtx() { - return this.ctx as MainContext - } - - private registerIpc() { - const ctx = this.mainCtx - - ctx.handle('auth:getStatus', (event) => { - const senderId = event?.sender?.id - const permission = - typeof senderId === 'number' - ? ctx.permissions.getPermission(senderId) - : ctx.permissions.getDefaultPermission() - return { - success: true, - data: { - permission, - hasAdminPassword: ctx.security.hasSecret(this.SETTINGS_SECURITY_ADMIN), - hasPointsPassword: ctx.security.hasSecret(this.SETTINGS_SECURITY_POINTS), - hasRecoveryString: ctx.security.hasSecret(this.SETTINGS_SECURITY_RECOVERY) - } - } - }) - - ctx.handle('auth:login', async (event, password: string) => { - const senderId = event?.sender?.id - if (typeof senderId !== 'number') return { success: false, message: 'Invalid sender' } - if (!ctx.security.isSixDigit(String(password ?? ''))) { - ctx.permissions.setPermission(senderId, ctx.permissions.getDefaultPermission()) - return { success: false, message: 'Invalid password format' } - } - - const adminCipher = ctx.settings.getRaw(this.SETTINGS_SECURITY_ADMIN) - const pointsCipher = ctx.settings.getRaw(this.SETTINGS_SECURITY_POINTS) - const adminPlain = await ctx.security.decryptSecret(adminCipher) - const pointsPlain = await ctx.security.decryptSecret(pointsCipher) - - if (adminCipher && adminPlain === password) { - ctx.permissions.setPermission(senderId, 'admin') - return { success: true, data: { permission: 'admin' as permissionLevel } } - } - if (pointsCipher && pointsPlain === password) { - ctx.permissions.setPermission(senderId, 'points') - return { success: true, data: { permission: 'points' as permissionLevel } } - } - - ctx.permissions.setPermission(senderId, ctx.permissions.getDefaultPermission()) - return { success: false, message: 'Password incorrect' } - }) - - ctx.handle('auth:logout', (event) => { - const senderId = event?.sender?.id - if (typeof senderId === 'number') - ctx.permissions.setPermission(senderId, ctx.permissions.getDefaultPermission()) - return { success: true, data: { permission: ctx.permissions.getDefaultPermission() } } - }) - - ctx.handle( - 'auth:setPasswords', - async (event, payload: { adminPassword?: string | null; pointsPassword?: string | null }) => { - const alreadyHasAdmin = ctx.security.hasSecret(this.SETTINGS_SECURITY_ADMIN) - if (alreadyHasAdmin && !ctx.permissions.requirePermission(event, 'admin')) - return { success: false, message: 'Permission denied' } - - const adminPasswordRaw = payload?.adminPassword - const pointsPasswordRaw = payload?.pointsPassword - - if (typeof adminPasswordRaw === 'string') { - const trimmed = adminPasswordRaw.trim() - if (trimmed.length === 0) await ctx.settings.setRaw(this.SETTINGS_SECURITY_ADMIN, '') - else { - if (!ctx.security.isSixDigit(trimmed)) - return { success: false, message: 'Admin password must be 6 digits' } - await ctx.settings.setRaw( - this.SETTINGS_SECURITY_ADMIN, - await ctx.security.encryptSecret(trimmed) - ) - } - } - - if (typeof pointsPasswordRaw === 'string') { - const trimmed = pointsPasswordRaw.trim() - if (trimmed.length === 0) await ctx.settings.setRaw(this.SETTINGS_SECURITY_POINTS, '') - else { - if (!ctx.security.isSixDigit(trimmed)) - return { success: false, message: 'Points password must be 6 digits' } - await ctx.settings.setRaw( - this.SETTINGS_SECURITY_POINTS, - await ctx.security.encryptSecret(trimmed) - ) - } - } - - if (!ctx.security.hasSecret(this.SETTINGS_SECURITY_RECOVERY)) { - const recovery = crypto.randomBytes(18).toString('base64url') - await ctx.settings.setRaw( - this.SETTINGS_SECURITY_RECOVERY, - await ctx.security.encryptSecret(recovery) - ) - return { success: true, data: { recoveryString: recovery } } - } - - return { success: true, data: {} } - } - ) - - ctx.handle('auth:generateRecovery', async (event) => { - if ( - ctx.security.hasSecret(this.SETTINGS_SECURITY_ADMIN) && - !ctx.permissions.requirePermission(event, 'admin') - ) - return { success: false, message: 'Permission denied' } - const recovery = crypto.randomBytes(18).toString('base64url') - await ctx.settings.setRaw( - this.SETTINGS_SECURITY_RECOVERY, - await ctx.security.encryptSecret(recovery) - ) - return { success: true, data: { recoveryString: recovery } } - }) - - ctx.handle('auth:resetByRecovery', async (event, recoveryString: string) => { - const cipher = ctx.settings.getRaw(this.SETTINGS_SECURITY_RECOVERY) - const plain = await ctx.security.decryptSecret(cipher) - if (!plain || plain !== String(recoveryString ?? '').trim()) - return { success: false, message: 'Recovery string incorrect' } - - await ctx.settings.setRaw(this.SETTINGS_SECURITY_ADMIN, '') - await ctx.settings.setRaw(this.SETTINGS_SECURITY_POINTS, '') - - const newRecovery = crypto.randomBytes(18).toString('base64url') - await ctx.settings.setRaw( - this.SETTINGS_SECURITY_RECOVERY, - await ctx.security.encryptSecret(newRecovery) - ) - - const senderId = event?.sender?.id - if (typeof senderId === 'number') - ctx.permissions.setPermission(senderId, ctx.permissions.getDefaultPermission()) - return { success: true, data: { recoveryString: newRecovery } } - }) - - ctx.handle('auth:clearAll', async (event) => { - if (!ctx.permissions.requirePermission(event, 'admin')) - return { success: false, message: 'Permission denied' } - await ctx.settings.setRaw(this.SETTINGS_SECURITY_ADMIN, '') - await ctx.settings.setRaw(this.SETTINGS_SECURITY_POINTS, '') - await ctx.settings.setRaw(this.SETTINGS_SECURITY_RECOVERY, '') - const senderId = event?.sender?.id - if (typeof senderId === 'number') - ctx.permissions.setPermission(senderId, ctx.permissions.getDefaultPermission()) - return { success: true } - }) - } -} diff --git a/old-ss/src/main/services/AutoScoreService.ts b/old-ss/src/main/services/AutoScoreService.ts deleted file mode 100644 index e26bc18..0000000 --- a/old-ss/src/main/services/AutoScoreService.ts +++ /dev/null @@ -1,445 +0,0 @@ -import { Service } from '../../shared/kernel' -import { MainContext } from '../context' -import { - AutoScoreRuleEngine, - type RuleConfig, - type AutoScoreContext -} from '../../shared/autoScore/AutoScoreRuleEngine' - -interface AutoScoreRule extends RuleConfig { - id: number - lastExecuted?: Date -} - -declare module '../../shared/kernel' { - interface Context { - autoScore: AutoScoreService - } -} - -export class AutoScoreService extends Service { - private rules: AutoScoreRule[] = [] - private timers: Map = new Map() - private initialized = false - private ruleEngine: AutoScoreRuleEngine - - constructor(ctx: MainContext) { - super(ctx, 'autoScore') - this.ruleEngine = new AutoScoreRuleEngine() - this.registerIpc() - } - - private get mainCtx() { - return this.ctx as MainContext - } - - private registerIpc() { - this.mainCtx.handle('auto-score:getRules', async (event) => { - try { - if (!this.mainCtx.permissions.requirePermission(event, 'admin')) - return { success: false, message: 'Permission denied' } - return { success: true, data: this.getRules() } - } catch (err: any) { - return { success: false, message: err.message } - } - }) - - this.mainCtx.handle('auto-score:addRule', async (event, rule) => { - try { - if (!this.mainCtx.permissions.requirePermission(event, 'admin')) - return { success: false, message: 'Permission denied' } - const id = await this.addRule(rule) - return { success: true, data: id } - } catch (err: any) { - return { success: false, message: err.message } - } - }) - - this.mainCtx.handle('auto-score:updateRule', async (event, rule) => { - try { - if (!this.mainCtx.permissions.requirePermission(event, 'admin')) - return { success: false, message: 'Permission denied' } - const success = await this.updateRule(rule) - return { success, data: success } - } catch (err: any) { - return { success: false, message: err.message } - } - }) - - this.mainCtx.handle('auto-score:deleteRule', async (event, ruleId) => { - try { - if (!this.mainCtx.permissions.requirePermission(event, 'admin')) - return { success: false, message: 'Permission denied' } - const success = await this.deleteRule(ruleId) - return { success, data: success } - } catch (err: any) { - return { success: false, message: err.message } - } - }) - - this.mainCtx.handle('auto-score:toggleRule', async (event, params) => { - try { - if (!this.mainCtx.permissions.requirePermission(event, 'admin')) - return { success: false, message: 'Permission denied' } - const { ruleId, enabled } = params - const success = await this.toggleRule(ruleId, enabled) - return { success, data: success } - } catch (err: any) { - return { success: false, message: err.message } - } - }) - - this.mainCtx.handle('auto-score:getStatus', async (event) => { - try { - if (!this.mainCtx.permissions.requirePermission(event, 'admin')) - return { success: false, message: 'Permission denied' } - return { success: true, data: { enabled: this.isEnabled() } } - } catch (err: any) { - return { success: false, message: err.message } - } - }) - - this.mainCtx.handle('auto-score:sortRules', async (event, ruleIds) => { - try { - if (!this.mainCtx.permissions.requirePermission(event, 'admin')) - return { success: false, message: 'Permission denied' } - const success = await this.sortRules(ruleIds) - return { success, data: success } - } catch (err: any) { - return { success: false, message: err.message } - } - }) - } - - private async loadRulesFromFile(): Promise { - await this.loadRulesFromSettings() - } - - private async loadRulesFromSettings() { - try { - const settings = await this.mainCtx.settings.getAllRaw() - const autoScoreRulesStr = settings['auto_score_rules'] || '[]' - const rulesFromSettings = JSON.parse(autoScoreRulesStr) - - this.rules = rulesFromSettings.map((rule: any) => ({ - ...rule, - lastExecuted: rule.lastExecuted ? new Date(rule.lastExecuted) : undefined - })) - } catch (error) { - this.logger.error('Failed to load auto score rules from settings:', { error }) - this.rules = [] - } - } - - private async saveRulesToFile(): Promise { - await this.saveRulesToSettings() - } - - private async saveRulesToSettings() { - try { - const rulesToSave = this.rules.map(({ lastExecuted, ...rule }) => ({ - ...rule, - lastExecuted: lastExecuted?.toISOString() - })) - await this.mainCtx.settings.setRaw('auto_score_rules', JSON.stringify(rulesToSave)) - } catch (error) { - this.logger.error('Failed to save auto score rules to settings:', { error }) - } - } - - private async startRules() { - if (this.initialized) { - this.stopRules() - } - - this.ruleEngine = new AutoScoreRuleEngine() - - for (const rule of this.rules) { - if (rule.enabled) { - await this.ruleEngine.addRule(rule) - this.startRuleTimer(rule) - } - } - - this.initialized = true - } - - private startRuleTimer(rule: AutoScoreRule) { - if (this.timers.has(rule.id)) { - clearTimeout(this.timers.get(rule.id)!) - this.timers.delete(rule.id) - } - - const now = new Date() - let delayMs = 0 - let primaryTrigger: { event: string; value?: string } | undefined - - for (const trigger of rule.triggers || []) { - if (trigger.event === 'interval_time_passed') { - const minutes = parseInt(trigger.value || '30', 10) - const intervalMs = minutes * 60 * 1000 - - let nextExecuteTime: Date - if (rule.lastExecuted) { - nextExecuteTime = new Date(rule.lastExecuted.getTime() + intervalMs) - } else { - nextExecuteTime = new Date(now.getTime() + intervalMs) - } - - const triggerDelayMs = nextExecuteTime.getTime() - now.getTime() - if (delayMs === 0 || triggerDelayMs < delayMs) { - delayMs = triggerDelayMs - primaryTrigger = trigger - } - } - } - - if (!primaryTrigger) { - this.logger.warn(`Rule ${rule.name} has no valid triggers with timing logic, skipping`) - return - } - - if (delayMs < 0) { - delayMs = 0 - } - - const timer = setTimeout(() => { - this.executeRule(rule) - this.setRuleInterval(rule) - }, delayMs) - - this.timers.set(rule.id, timer) - this.logger.info(`Rule ${rule.name} scheduled to execute in ${delayMs}ms`) - } - - private setRuleInterval(rule: AutoScoreRule) { - const now = new Date() - let minDelayMs = Infinity - let primaryTrigger: { event: string; value?: string } | undefined - - for (const trigger of rule.triggers || []) { - if (trigger.event === 'interval_time_passed') { - const minutes = parseInt(trigger.value || '30', 10) - const intervalMs = minutes * 60 * 1000 - - let nextExecuteTime: Date - if (rule.lastExecuted) { - nextExecuteTime = new Date(rule.lastExecuted.getTime() + intervalMs) - } else { - nextExecuteTime = new Date(now.getTime() + intervalMs) - } - - const triggerDelayMs = nextExecuteTime.getTime() - now.getTime() - if (triggerDelayMs < minDelayMs) { - minDelayMs = triggerDelayMs - primaryTrigger = trigger - } - } - } - - if (!primaryTrigger || minDelayMs === Infinity) { - return - } - - const timer = setInterval(() => { - this.executeRule(rule) - }, minDelayMs) - - this.timers.set(rule.id, timer) - } - - private async executeRule(rule: AutoScoreRule) { - try { - this.logger.info(`Executing auto score rule: ${rule.name}`) - - const studentRepo = this.mainCtx.students - const eventRepo = this.mainCtx.events - - const allStudents = await studentRepo.findAll() - - let studentsToScore = allStudents - if (rule.studentNames.length > 0) { - studentsToScore = allStudents.filter((s) => rule.studentNames.includes(s.name)) - } - - const studentNames = studentsToScore.map((s) => s.name) - const lastScoreTimeMap = await eventRepo.getLastScoreTimeByStudents(studentNames) - - const context: AutoScoreContext = { - students: studentsToScore.map((s) => ({ - id: s.id, - name: s.name, - tags: s.tags || [], - lastScoreTime: lastScoreTimeMap.get(s.name) || new Date(0) - })), - events: [], - rule: { - id: rule.id, - name: rule.name, - studentNames: rule.studentNames, - triggers: rule.triggers, - actions: rule.actions - }, - now: new Date() - } - - const results = await this.ruleEngine.run(context) - - for (const result of results) { - if (result.matchedStudents.length > 0) { - for (const action of result.actions) { - await this.ruleEngine.executeAction( - action.event, - result.matchedStudents, - { - ...action, - ruleId: rule.id, - ruleName: rule.name, - studentRepo - }, - eventRepo - ) - } - } - } - - rule.lastExecuted = new Date() - await this.saveRulesToFile() - - this.logger.info( - `Auto score rule executed successfully for ${results.reduce((sum, r) => sum + r.matchedStudents.length, 0)} students` - ) - } catch (error) { - this.logger.error(`Failed to execute auto score rule ${rule.name}:`, { error }) - } - } - - private stopRules() { - for (const timer of this.timers.values()) { - clearTimeout(timer) - clearInterval(timer) - } - this.timers.clear() - } - - async addRule(rule: Omit): Promise { - const newId = this.rules.length > 0 ? Math.max(...this.rules.map((r) => r.id)) + 1 : 1 - const newRule: AutoScoreRule = { - ...rule, - id: newId, - lastExecuted: undefined - } - - this.rules.push(newRule) - await this.saveRulesToFile() - - if (rule.enabled) { - await this.ruleEngine.addRule(newRule) - this.startRuleTimer(newRule) - } - - return newId - } - - async updateRule(rule: Partial & { id: number }): Promise { - const index = this.rules.findIndex((r) => r.id === rule.id) - if (index === -1) return false - - if (this.timers.has(rule.id)) { - clearTimeout(this.timers.get(rule.id)!) - clearInterval(this.timers.get(rule.id)!) - this.timers.delete(rule.id) - } - - const updatedRule = { ...this.rules[index], ...rule } - this.rules[index] = updatedRule - - await this.saveRulesToFile() - - if (updatedRule.enabled) { - await this.ruleEngine.addRule(updatedRule) - this.startRuleTimer(updatedRule) - } - - return true - } - - async deleteRule(ruleId: number): Promise { - const index = this.rules.findIndex((r) => r.id === ruleId) - if (index === -1) return false - - if (this.timers.has(ruleId)) { - clearTimeout(this.timers.get(ruleId)!) - clearInterval(this.timers.get(ruleId)!) - this.timers.delete(ruleId) - } - - this.rules.splice(index, 1) - await this.saveRulesToFile() - - return true - } - - async toggleRule(ruleId: number, enabled: boolean): Promise { - const rule = this.rules.find((r) => r.id === ruleId) - if (!rule) return false - - rule.enabled = enabled - - if (this.timers.has(ruleId)) { - clearTimeout(this.timers.get(ruleId)!) - clearInterval(this.timers.get(ruleId)!) - this.timers.delete(ruleId) - } - - if (enabled) { - await this.ruleEngine.addRule(rule) - this.startRuleTimer(rule) - } - - await this.saveRulesToFile() - return true - } - - async sortRules(ruleIds: number[]): Promise { - const ruleMap = new Map(this.rules.map((r) => [r.id, r])) - const sortedRules: AutoScoreRule[] = [] - for (const id of ruleIds) { - const rule = ruleMap.get(id) - if (rule) { - sortedRules.push(rule) - } - } - for (const rule of this.rules) { - if (!ruleIds.includes(rule.id)) { - sortedRules.push(rule) - } - } - this.rules = sortedRules - await this.saveRulesToFile() - return true - } - - getRules(): AutoScoreRule[] { - return [...this.rules] - } - - isEnabled(): boolean { - return this.rules.some((rule) => rule.enabled) - } - - async restart() { - this.stopRules() - await this.loadRulesFromFile() - this.startRules() - } - - async initialize(): Promise { - await this.loadRulesFromFile() - this.startRules() - } - - async dispose(): Promise { - this.stopRules() - } -} diff --git a/old-ss/src/main/services/DataService.ts b/old-ss/src/main/services/DataService.ts deleted file mode 100644 index c0b1f0e..0000000 --- a/old-ss/src/main/services/DataService.ts +++ /dev/null @@ -1,104 +0,0 @@ -import { Service } from '../../shared/kernel' -import { MainContext } from '../context' -import { DataBackupRepository } from '../db/backup/DataBackupRepository' -import { TagRepository } from '../repos/TagRepository' - -declare module '../../shared/kernel' { - interface Context { - data: DataService - } -} - -export class DataService extends Service { - constructor( - ctx: MainContext, - private tagRepo: TagRepository - ) { - super(ctx, 'data') - this.registerIpc() - } - - private get mainCtx() { - return this.ctx as MainContext - } - - private registerIpc() { - this.mainCtx.handle('data:exportJson', async (event) => { - if (!this.mainCtx.permissions.requirePermission(event, 'admin')) - return { success: false, message: 'Permission denied' } - - const backup = new DataBackupRepository(this.mainCtx.db.dataSource) - return { - success: true, - data: await backup.exportJson() - } - }) - - this.mainCtx.handle('data:importJson', async (event, jsonText: string) => { - if (!this.mainCtx.permissions.requirePermission(event, 'admin')) - return { success: false, message: 'Permission denied' } - - const backup = new DataBackupRepository(this.mainCtx.db.dataSource) - const result = await backup.importJson(jsonText) - if (!result.success) return result - - await this.mainCtx.settings.reloadFromDb() - return { success: true } - }) - - this.mainCtx.handle('tags:getAll', async (event) => { - if (!this.mainCtx.permissions.requirePermission(event, 'view')) - return { success: false, message: 'Permission denied' } - - const tags = await this.tagRepo.findAll() - return { - success: true, - data: tags.map((t) => ({ id: t.id, name: t.name })) - } - }) - - this.mainCtx.handle('tags:getByStudent', async (event, studentId: number) => { - if (!this.mainCtx.permissions.requirePermission(event, 'view')) - return { success: false, message: 'Permission denied' } - - const tags = await this.tagRepo.findByStudent(studentId) - return { - success: true, - data: tags.map((t) => ({ id: t.id, name: t.name })) - } - }) - - this.mainCtx.handle('tags:create', async (event, name: string) => { - if (!this.mainCtx.permissions.requirePermission(event, 'admin')) - return { success: false, message: 'Permission denied' } - - const tag = await this.tagRepo.findOrCreate(name) - return { - success: true, - data: { id: tag.id, name: tag.name } - } - }) - - this.mainCtx.handle('tags:delete', async (event, id: number) => { - if (!this.mainCtx.permissions.requirePermission(event, 'admin')) - return { success: false, message: 'Permission denied' } - - const success = await this.tagRepo.delete(id) - return { - success, - message: success ? '删除成功' : '删除失败' - } - }) - - this.mainCtx.handle( - 'tags:updateStudentTags', - async (event, studentId: number, tagIds: number[]) => { - if (!this.mainCtx.permissions.requirePermission(event, 'admin')) - return { success: false, message: 'Permission denied' } - - await this.tagRepo.updateStudentTags(studentId, tagIds) - return { success: true } - } - ) - } -} diff --git a/old-ss/src/main/services/DbConnectionService.ts b/old-ss/src/main/services/DbConnectionService.ts deleted file mode 100644 index babfaba..0000000 --- a/old-ss/src/main/services/DbConnectionService.ts +++ /dev/null @@ -1,151 +0,0 @@ -import { Service } from '../../shared/kernel' -import { MainContext } from '../context' -import { DataSource } from 'typeorm' -import { StudentEntity } from '../db/entities/StudentEntity' -import { ReasonEntity } from '../db/entities/ReasonEntity' -import { ScoreEventEntity } from '../db/entities/ScoreEventEntity' -import { SettlementEntity } from '../db/entities/SettlementEntity' -import { SettingEntity } from '../db/entities/SettingEntity' -import { TagEntity } from '../db/entities/TagEntity' -import { StudentTagEntity } from '../db/entities/StudentTagEntity' -import { parsePostgreSQLConnectionString } from '../db/DbManager' - -declare module '../../shared/kernel' { - interface Context { - dbConnection: DbConnectionService - } -} - -export class DbConnectionService extends Service { - private testDataSource: DataSource | null = null - - constructor(ctx: MainContext) { - super(ctx, 'dbConnection') - this.registerIpc() - } - - private get mainCtx() { - return this.ctx as MainContext - } - - private registerIpc() { - this.mainCtx.handle('db:testConnection', async (_event, connectionString: string) => { - const result = await this.testConnection(connectionString) - return { success: true, data: result } - }) - - this.mainCtx.handle('db:switchConnection', async (_event, connectionString: string) => { - try { - const result = await this.switchConnection(connectionString) - return { success: true, data: result } - } catch (error: any) { - return { success: false, message: error?.message || '切换失败' } - } - }) - - this.mainCtx.handle('db:getStatus', async () => { - const status = this.getStatus() - return { success: true, data: status } - }) - - this.mainCtx.handle('db:sync', async () => { - const db = this.mainCtx.db - const result = await db.syncToRemote() - return { success: result.success, data: result } - }) - } - - async testConnection(connectionString: string): Promise<{ success: boolean; error?: string }> { - const config = parsePostgreSQLConnectionString(connectionString) - if (!config) { - return { success: false, error: '无效的 PostgreSQL 连接字符串格式' } - } - - try { - if (this.testDataSource) { - await this.testDataSource.destroy() - } - - this.testDataSource = new DataSource({ - type: 'postgres', - host: config.host, - port: config.port, - username: config.username, - password: config.password, - database: config.database, - ssl: config.ssl ? { rejectUnauthorized: false } : false, - extra: { - ssl: config.ssl ? { rejectUnauthorized: false } : undefined, - sslmode: config.sslmode, - channelBinding: config.channelBinding - }, - entities: [ - StudentEntity, - ReasonEntity, - ScoreEventEntity, - SettlementEntity, - SettingEntity, - TagEntity, - StudentTagEntity - ], - synchronize: false, - logging: false, - connectTimeoutMS: 10000 - }) - - await this.testDataSource.initialize() - await this.testDataSource.destroy() - this.testDataSource = null - - return { success: true } - } catch (error: any) { - if (this.testDataSource) { - await this.testDataSource.destroy().catch(() => null) - this.testDataSource = null - } - console.error('PostgreSQL connection test failed:', error) - return { success: false, error: error?.message || '连接失败' } - } - } - - async switchConnection(connectionString: string): Promise<{ type: 'sqlite' | 'postgresql' }> { - if (!connectionString) { - // 切换到 SQLite - const result = await this.mainCtx.db.switchConnection(undefined) - await this.mainCtx.settings.setValue('pg_connection_string', '') - await this.mainCtx.settings.setValue('pg_connection_status', { - connected: true, - type: 'sqlite' - }) - return result - } - - const testResult = await this.testConnection(connectionString) - if (!testResult.success) { - await this.mainCtx.settings.setValue('pg_connection_status', { - connected: false, - type: 'postgresql', - error: testResult.error - }) - throw new Error(testResult.error || '连接测试失败') - } - - // 切换到 PostgreSQL - const result = await this.mainCtx.db.switchConnection(connectionString) - await this.mainCtx.settings.setValue('pg_connection_string', connectionString) - await this.mainCtx.settings.setValue('pg_connection_status', { - connected: true, - type: 'postgresql' - }) - - return result - } - - getStatus(): { type: 'sqlite' | 'postgresql'; connected: boolean; error?: string } { - const status = this.mainCtx.settings.getValue('pg_connection_status') - if (status) { - return status - } - return { type: 'sqlite', connected: true } - } -} diff --git a/old-ss/src/main/services/LoggerService.ts b/old-ss/src/main/services/LoggerService.ts deleted file mode 100644 index 01ab3d7..0000000 --- a/old-ss/src/main/services/LoggerService.ts +++ /dev/null @@ -1,184 +0,0 @@ -import fs from 'fs' -import path from 'path' -import { Service } from '../../shared/kernel' -import { MainContext } from '../context' -import * as winston from 'winston' -import DailyRotateFile from 'winston-daily-rotate-file' - -export type logLevel = 'info' | 'warn' | 'error' | 'debug' - -declare module '../../shared/kernel' { - interface Context { - logger: LoggerService - } -} - -export class LoggerService extends Service { - private logDir: string - private currentLevel: logLevel = 'info' - private winstonLogger: winston.Logger - - constructor(ctx: MainContext, logDir: string) { - super(ctx, 'logger') - this.logDir = logDir - fs.mkdirSync(this.logDir, { recursive: true }) - this.winstonLogger = this.createLogger() - this.registerIpc() - } - - private get mainCtx() { - return this.ctx as MainContext - } - - private registerIpc() { - this.mainCtx.handle('log:query', (_, lines) => ({ success: true, data: this.readLogs(lines) })) - this.mainCtx.handle('log:clear', (event) => { - if (!this.mainCtx.permissions.requirePermission(event, 'admin')) - return { success: false, message: 'Permission denied' } - this.clearLogs() - return { success: true } - }) - this.mainCtx.handle('log:setLevel', async (event, level: logLevel) => { - if (!this.mainCtx.permissions.requirePermission(event, 'admin')) - return { success: false, message: 'Permission denied' } - await this.mainCtx.settings.setValue('log_level', level as any) - return { success: true } - }) - this.mainCtx.handle('log:write', (_event, payload: any) => { - const level = String(payload?.level || 'info') - const message = String(payload?.message || '') - const meta = payload?.meta - if (level === 'debug' || level === 'info' || level === 'warn' || level === 'error') { - this.log(level as logLevel, message, { source: 'renderer', meta }) - } else { - this.info(message, { source: 'renderer', meta }) - } - return { success: true } - }) - } - - setLevel(level: logLevel) { - this.currentLevel = level - this.winstonLogger.level = level - } - - log(level: logLevel, message: string, meta?: any) { - this.winstonLogger.log(level, message, meta ?? {}) - } - - info(message: string, ...args: any[]) { - this.log('info', message, args.length ? { args } : undefined) - } - warn(message: string, ...args: any[]) { - this.log('warn', message, args.length ? { args } : undefined) - } - error(message: string, ...args: any[]) { - this.log('error', message, args.length ? { args } : undefined) - } - debug(message: string, ...args: any[]) { - this.log('debug', message, args.length ? { args } : undefined) - } - - private createLogger(): winston.Logger { - const timestampFormat = winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss.SSS' }) - const withErrors = winston.format.errors({ stack: true }) - - const safeJsonStringify = (value: unknown) => { - const seen = new WeakSet() - return JSON.stringify(value, (_key, v) => { - if (!v || typeof v !== 'object') return v - if (seen.has(v)) return '[Circular]' - seen.add(v) - return v - }) - } - - const consoleFormat = winston.format.combine( - timestampFormat, - withErrors, - winston.format.colorize({ all: true }), - winston.format.printf((info) => { - const { timestamp, level, message, stack, ...rest } = info as any - const metaText = rest && Object.keys(rest).length ? ` ${safeJsonStringify(rest)}` : '' - const stackText = stack ? `\n${String(stack)}` : '' - return `${timestamp} ${level} ${String(message)}${metaText}${stackText}` - }) - ) - - const fileFormat = winston.format.combine( - timestampFormat, - withErrors, - winston.format.printf((info) => safeJsonStringify(info)) - ) - - const rotateTransport = new DailyRotateFile({ - filename: path.join(this.logDir, 'secscore-%DATE%.log'), - datePattern: 'YYYY-MM-DD', - maxFiles: '30d', - maxSize: '20m' - }) - rotateTransport.format = fileFormat - - return winston.createLogger({ - level: this.currentLevel, - defaultMeta: { source: 'main', pid: process.pid }, - transports: [new winston.transports.Console({ format: consoleFormat }), rotateTransport] - }) - } - - clearLogs() { - try { - const files = this.getLogFiles() - for (const f of files) { - try { - fs.unlinkSync(f) - } catch { - continue - } - } - } catch (err) { - this.winstonLogger.log('error', 'Failed to clear logs', { - meta: err instanceof Error ? { message: err.message, stack: err.stack } : { err } - }) - } - } - - readLogs(lines: number = 100): string[] { - try { - const files = this.getLogFiles() - const picked: string[] = [] - for (let i = files.length - 1; i >= 0; i--) { - const filePath = files[i] - const content = fs.readFileSync(filePath, 'utf-8') - const fileLines = content.split(/\r?\n/).filter((line) => line.trim().length > 0) - for (let j = fileLines.length - 1; j >= 0 && picked.length < lines; j--) { - picked.push(fileLines[j]) - } - if (picked.length >= lines) break - } - return picked.reverse() - } catch (err) { - this.winstonLogger.log('error', 'Failed to read logs', { - meta: err instanceof Error ? { message: err.message, stack: err.stack } : { err } - }) - return [] - } - } - - private getLogFiles(): string[] { - if (!fs.existsSync(this.logDir)) return [] - const entries = fs.readdirSync(this.logDir) - const files = entries.filter((f) => f.endsWith('.log')).map((f) => path.join(this.logDir, f)) - - files.sort((a, b) => { - try { - const sa = fs.statSync(a) - const sb = fs.statSync(b) - return sa.mtimeMs - sb.mtimeMs - } catch { - return a.localeCompare(b) - } - }) - return files - } -} diff --git a/old-ss/src/main/services/PermissionService.ts b/old-ss/src/main/services/PermissionService.ts deleted file mode 100644 index 2771105..0000000 --- a/old-ss/src/main/services/PermissionService.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { Context, Service } from '../../shared/kernel' - -export type permissionLevel = 'admin' | 'points' | 'view' - -declare module '../../shared/kernel' { - interface Context { - permissions: PermissionService - } -} - -export class PermissionService extends Service { - public permissionRank: Record = { view: 0, points: 1, admin: 2 } - private permissionsBySenderId = new Map() - private SETTINGS_SECURITY_ADMIN = 'security_admin_password' - private SETTINGS_SECURITY_POINTS = 'security_points_password' - - constructor(ctx: Context) { - super(ctx, 'permissions') - } - - shouldProtect() { - return ( - this.ctx.security.hasSecret(this.SETTINGS_SECURITY_ADMIN) || - this.ctx.security.hasSecret(this.SETTINGS_SECURITY_POINTS) - ) - } - - getDefaultPermission(): permissionLevel { - return this.shouldProtect() ? 'view' : 'admin' - } - - getPermission(senderId: number): permissionLevel { - const existing = this.permissionsBySenderId.get(senderId) - if (existing) return existing - const def = this.getDefaultPermission() - this.permissionsBySenderId.set(senderId, def) - return def - } - - setPermission(senderId: number, level: permissionLevel) { - this.permissionsBySenderId.set(senderId, level) - } - - requirePermission(event: any, required: permissionLevel): boolean { - const senderId = event?.sender?.id - if (typeof senderId !== 'number') return false - const current = this.getPermission(senderId) - return this.permissionRank[current] >= this.permissionRank[required] - } -} diff --git a/old-ss/src/main/services/SecurityService.ts b/old-ss/src/main/services/SecurityService.ts deleted file mode 100644 index 7cada27..0000000 --- a/old-ss/src/main/services/SecurityService.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { Service } from '../../shared/kernel' -import crypto from 'crypto' -import { app } from 'electron' -import { MainContext } from '../context' - -declare module '../../shared/kernel' { - interface Context { - security: SecurityService - } -} - -export class SecurityService extends Service { - private ivKey = 'security_crypto_iv' - - constructor(ctx: MainContext) { - super(ctx, 'security') - } - - async ensureSecurityIv() { - let ivHex = this.ctx.settings.getRaw(this.ivKey) - if (!ivHex) { - ivHex = crypto.randomBytes(16).toString('hex') - await this.ctx.settings.setRaw(this.ivKey, ivHex) - } - return ivHex - } - - getCryptoKey() { - return crypto.scryptSync(app.getPath('userData'), 'secscore-salt', 32) - } - - async encryptSecret(plainText: string) { - const ivHex = await this.ensureSecurityIv() - const key = this.getCryptoKey() - const cipher = crypto.createCipheriv('aes-256-cbc', key, Buffer.from(ivHex, 'hex')) - let encrypted = cipher.update(plainText, 'utf8', 'hex') - encrypted += cipher.final('hex') - return encrypted - } - - async decryptSecret(cipherText: string) { - try { - if (!cipherText) return '' - const ivHex = await this.ensureSecurityIv() - const key = this.getCryptoKey() - const decipher = crypto.createDecipheriv('aes-256-cbc', key, Buffer.from(ivHex, 'hex')) - let plain = decipher.update(cipherText, 'hex', 'utf8') - plain += decipher.final('utf8') - return plain - } catch { - return '' - } - } - - isSixDigit(s: string) { - return /^\d{6}$/.test(s) - } - - hasSecret(key: string) { - const v = this.ctx.settings.getRaw(key) - return typeof v === 'string' && v.trim().length > 0 - } -} diff --git a/old-ss/src/main/services/SettingsService.ts b/old-ss/src/main/services/SettingsService.ts deleted file mode 100644 index 37c0ac6..0000000 --- a/old-ss/src/main/services/SettingsService.ts +++ /dev/null @@ -1,291 +0,0 @@ -import { Service } from '../../shared/kernel' -import { MainContext } from '../context' -import { BrowserWindow, webContents } from 'electron' -import type { IpcMainInvokeEvent } from 'electron' -import type { settingsKey, settingsSpec, settingChange } from '../../preload/types' -import type { permissionLevel } from './PermissionService' -import { SettingEntity } from '../db/entities' - -declare module '../../shared/kernel' { - interface Context { - settings: SettingsService - } -} - -type settingValueKind = 'string' | 'boolean' | 'number' | 'json' - -type settingDefinition = { - kind: settingValueKind - defaultValue: unknown - readPermission?: permissionLevel | 'any' - writePermission?: permissionLevel | 'any' - validate?: (value: unknown) => boolean - normalize?: (value: unknown) => unknown - onChanged?: (ctx: MainContext, next: unknown, prev: unknown) => void -} - -export class SettingsService extends Service { - constructor(ctx: MainContext) { - super(ctx, 'settings') - this.registerIpc() - } - - private get mainCtx() { - return this.ctx as MainContext - } - - private definitions: Record = { - is_wizard_completed: { - kind: 'boolean', - defaultValue: false, - writePermission: 'any' - }, - log_level: { - kind: 'string', - defaultValue: 'info', - writePermission: 'admin', - validate: (v) => v === 'debug' || v === 'info' || v === 'warn' || v === 'error', - onChanged: (ctx, next) => { - ctx.logger.setLevel(next as any) - } - }, - window_zoom: { - kind: 'number', - defaultValue: 1.0, - writePermission: 'admin', - onChanged: (_ctx, next) => { - const zoom = Number(next) || 1.0 - webContents.getAllWebContents().forEach((wc: any) => { - wc.setZoomFactor(zoom) - }) - } - }, - themes_custom: { - kind: 'json', - defaultValue: [], - writePermission: 'admin' - }, - auto_score_enabled: { - kind: 'boolean', - defaultValue: false, - writePermission: 'admin' - }, - auto_score_rules: { - kind: 'json', - defaultValue: [], - writePermission: 'admin' - }, - current_theme_id: { - kind: 'string', - defaultValue: 'light-default', - writePermission: 'admin' - }, - pg_connection_string: { - kind: 'string', - defaultValue: '', - writePermission: 'admin' - }, - pg_connection_status: { - kind: 'json', - defaultValue: { connected: false, type: 'sqlite' }, - writePermission: 'admin' - } - } - - private cache = new Map() - private initPromise: Promise | null = null - - async initialize(): Promise { - if (this.initPromise) return this.initPromise - this.initPromise = (async () => { - await this.loadCache() - await this.ensureDefaults() - })() - return this.initPromise - } - - private async loadCache() { - const repo = this.ctx.db.dataSource.getRepository(SettingEntity) - const rows = await repo.find() - this.cache.clear() - for (const r of rows) this.cache.set(r.key, String(r.value ?? '')) - } - - private async ensureDefaults() { - const repo = this.ctx.db.dataSource.getRepository(SettingEntity) - for (const key of Object.keys(this.definitions) as settingsKey[]) { - if (this.cache.has(key)) continue - const def = this.definitions[key] - const raw = this.serializeValue(key, def.defaultValue) - await repo - .createQueryBuilder() - .insert() - .into(SettingEntity) - .values({ key, value: raw }) - .orIgnore() - .execute() - this.cache.set(key, raw) - } - } - - private serializeValue(key: settingsKey, value: unknown): string { - const def = this.definitions[key] - switch (def.kind) { - case 'boolean': - return value ? '1' : '0' - case 'number': - return String(value) - case 'json': - return JSON.stringify(value) - case 'string': - default: - return String(value) - } - } - - private deserializeValue(key: settingsKey, raw: string): unknown { - const def = this.definitions[key] - switch (def.kind) { - case 'boolean': - return raw === '1' || raw.toLowerCase() === 'true' - case 'number': - return Number(raw) - case 'json': - try { - return JSON.parse(raw) - } catch { - return def.defaultValue - } - case 'string': - default: - return raw - } - } - - private parseValue(key: settingsKey, raw: string | undefined): unknown { - const def = this.definitions[key] - if (raw == null) return def.defaultValue - const deserialized = this.deserializeValue(key, raw) - const normalized = def.normalize ? def.normalize(deserialized) : deserialized - if (def.validate && !def.validate(normalized)) return def.defaultValue - return normalized - } - - private canWrite(event: IpcMainInvokeEvent, key: settingsKey): boolean { - const required = this.definitions[key].writePermission - if (!required || required === 'any') return true - return this.mainCtx.permissions.requirePermission(event, required) - } - - private notifyChanged(key: settingsKey, value: unknown) { - const change: settingChange = { key, value } as any - const windows = BrowserWindow.getAllWindows() - for (const win of windows) { - win.webContents.send('settings:changed', change) - } - } - - private registerIpc() { - this.mainCtx.handle('settings:getAll', async () => { - await this.initialize() - return { success: true, data: this.getAll() } - }) - this.mainCtx.handle('settings:get', async (_event, key: settingsKey) => { - await this.initialize() - return { success: true, data: this.getValue(key) } - }) - this.mainCtx.handle('settings:set', async (event, key: settingsKey, value: any) => { - if (!this.canWrite(event, key)) return { success: false, message: 'Permission denied' } - await this.setValue(key, value) - return { success: true } - }) - } - - async reloadFromDb(options: { notify?: boolean } = {}): Promise { - await this.initialize() - const notify = options.notify ?? true - const prev = this.getAll() - await this.loadCache() - await this.ensureDefaults() - if (!notify) return - - for (const key of Object.keys(this.definitions) as settingsKey[]) { - const def = this.definitions[key] - const next = this.getValue(key as any) as any - const prevValue = prev[key] - if (next !== prevValue) { - def.onChanged?.(this.mainCtx, next, prevValue) - this.notifyChanged(key, next) - } - } - } - - getRaw(key: string): string { - return this.cache.get(key) ?? '' - } - - async setRaw(key: string, value: string): Promise { - await this.initialize() - const prev = this.cache.get(key) ?? '' - if (key in this.definitions) { - const typedKey = key as settingsKey - const def = this.definitions[typedKey] - const nextDeserialized = this.deserializeValue(typedKey, value) - const nextNormalized = def.normalize ? def.normalize(nextDeserialized) : nextDeserialized - const nextRaw = - def.validate && !def.validate(nextNormalized) - ? this.serializeValue(typedKey, def.defaultValue) - : this.serializeValue(typedKey, nextNormalized) - - await this.ctx.db.dataSource.getRepository(SettingEntity).save({ key, value: nextRaw }) - this.cache.set(key, nextRaw) - - const nextTyped = this.parseValue(typedKey, nextRaw) - const prevTyped = this.parseValue(typedKey, prev) - if (nextTyped !== prevTyped) { - def.onChanged?.(this.mainCtx, nextTyped, prevTyped) - this.notifyChanged(typedKey, nextTyped) - } - return - } - - await this.ctx.db.dataSource.getRepository(SettingEntity).save({ key, value }) - this.cache.set(key, value) - } - - getValue(key: K): settingsSpec[K] { - return this.parseValue(key, this.cache.get(key)) as settingsSpec[K] - } - - async setValue(key: K, value: settingsSpec[K]): Promise { - await this.initialize() - const def = this.definitions[key] - const prev = this.getValue(key) - const normalized = def.normalize ? def.normalize(value) : value - if (def.validate && !def.validate(normalized)) { - throw new Error(`Invalid value for setting: ${String(key)}`) - } - const raw = this.serializeValue(key, normalized) - await this.ctx.db.dataSource.getRepository(SettingEntity).save({ key, value: raw }) - this.cache.set(key, raw) - const next = this.getValue(key) - if (next !== prev) { - def.onChanged?.(this.mainCtx, next, prev) - this.notifyChanged(key, next) - } - } - - getAllRaw(): Record { - const out: Record = {} - for (const [k, v] of this.cache.entries()) out[k] = v - return out - } - - getAll(): settingsSpec { - const out: any = {} - for (const key of Object.keys(this.definitions) as settingsKey[]) { - out[key] = this.getValue(key) - } - return out as settingsSpec - } -} diff --git a/old-ss/src/main/services/ThemeService.ts b/old-ss/src/main/services/ThemeService.ts deleted file mode 100644 index 7531767..0000000 --- a/old-ss/src/main/services/ThemeService.ts +++ /dev/null @@ -1,291 +0,0 @@ -import { Service } from '../../shared/kernel' -import { MainContext } from '../context' -import { BrowserWindow } from 'electron' - -export interface themeConfig { - name: string - id: string - mode: 'light' | 'dark' - config: { - tdesign: Record - custom: Record - } -} - -declare module '../../shared/kernel' { - interface Context { - themes: ThemeService - } -} - -export class ThemeService extends Service { - private currentThemeId: string = 'light-default' - private customThemes: themeConfig[] = [] - private readonly builtinThemes: themeConfig[] = [ - { - name: '极简浅色', - id: 'light-default', - mode: 'light', - config: { - tdesign: { - brandColor: '#0052D9', - warningColor: '#ED7B2F', - errorColor: '#D54941', - successColor: '#2BA471' - }, - custom: { - '--ss-bg-color': 'linear-gradient(180deg, #f7fbff 0%, #f1f7ff 55%, #f8f9fc 100%)', - '--ss-card-bg': '#ffffff', - '--ss-text-main': '#181818', - '--ss-text-secondary': '#666666', - '--ss-border-color': '#dcdcdc', - '--ss-header-bg': 'linear-gradient(180deg, #ffffff 0%, rgba(255,255,255,0.7) 100%)', - '--ss-sidebar-bg': 'rgba(255, 255, 255, 0.88)', - '--ss-item-hover': '#f3f3f3', - '--ss-sidebar-text': '#181818', - '--ss-sidebar-active-bg': 'rgba(0, 0, 0, 0.06)', - '--ss-sidebar-active-text': '#181818' - } - } - }, - { - name: '极客深蓝', - id: 'dark-default', - mode: 'dark', - config: { - tdesign: { - brandColor: '#0052D9', - warningColor: '#E37318', - errorColor: '#D32029', - successColor: '#248232' - }, - custom: { - '--ss-bg-color': 'linear-gradient(180deg, #0f1220 0%, #101524 55%, #0b0d16 100%)', - '--ss-card-bg': '#1e1e1e', - '--ss-text-main': '#ffffff', - '--ss-text-secondary': '#a0a0a0', - '--ss-border-color': '#333333', - '--ss-header-bg': 'rgba(30, 30, 30, 0.92)', - '--ss-sidebar-bg': 'rgba(30, 30, 30, 0.92)', - '--ss-item-hover': '#2c2c2c', - '--ss-sidebar-text': '#ffffff', - '--ss-sidebar-active-bg': 'rgba(255, 255, 255, 0.10)', - '--ss-sidebar-active-text': '#ffffff' - } - } - }, - { - name: '冷静青蓝', - id: 'dark-cyan', - mode: 'dark', - config: { - tdesign: { - brandColor: '#16A085', - warningColor: '#F39C12', - errorColor: '#E74C3C', - successColor: '#1ABC9C' - }, - custom: { - '--ss-bg-color': 'linear-gradient(180deg, #050b10 0%, #06121a 55%, #05070a 100%)', - '--ss-card-bg': '#0f1a23', - '--ss-text-main': '#E5F7FF', - '--ss-text-secondary': '#7FA4B8', - '--ss-border-color': '#1F3645', - '--ss-header-bg': 'rgba(15, 26, 35, 0.92)', - '--ss-sidebar-bg': 'rgba(15, 26, 35, 0.92)', - '--ss-item-hover': '#182635', - '--ss-sidebar-text': '#E5F7FF', - '--ss-sidebar-active-bg': '#182635', - '--ss-sidebar-active-text': '#E5F7FF' - } - } - }, - { - name: '清新马卡龙', - id: 'light-pastel', - mode: 'light', - config: { - tdesign: { - brandColor: '#FF9AA2', - warningColor: '#FFB347', - errorColor: '#FF6F69', - successColor: '#B5EAD7' - }, - custom: { - '--ss-bg-color': 'linear-gradient(180deg, #fff7f1 0%, #fff1f1 55%, #f7f7fb 100%)', - '--ss-card-bg': '#ffffff', - '--ss-text-main': '#3A3A3A', - '--ss-text-secondary': '#8A8A8A', - '--ss-border-color': '#F1D3D3', - '--ss-header-bg': 'rgba(255, 255, 255, 0.88)', - '--ss-sidebar-bg': 'rgba(255, 255, 255, 0.90)', - '--ss-item-hover': '#FFE7E0', - '--ss-sidebar-text': '#3A3A3A', - '--ss-sidebar-active-bg': '#FFE7E0', - '--ss-sidebar-active-text': '#3A3A3A' - } - } - } - ] - - constructor(ctx: MainContext) { - super(ctx, 'themes') - this.registerIpc() - } - - private get mainCtx() { - return this.ctx as MainContext - } - - public async init() { - await this.mainCtx.settings.initialize() - await this.loadSavedTheme() - await this.loadCustomThemes() - } - - private async loadSavedTheme() { - try { - const savedThemeId = this.mainCtx.settings.getValue('current_theme_id') - if (savedThemeId && typeof savedThemeId === 'string') { - const themes = this.getThemeList() - const exists = themes.some((t) => t.id === savedThemeId) - if (exists) { - this.currentThemeId = savedThemeId - } - } - } catch (e) { - this.mainCtx.logger.warn('Failed to load saved theme', { meta: e }) - } - } - - private async saveCurrentTheme() { - try { - await this.mainCtx.settings.setValue('current_theme_id', this.currentThemeId) - } catch (e) { - this.mainCtx.logger.warn('Failed to save theme', { meta: e }) - } - } - - private async loadCustomThemes() { - try { - const v = this.mainCtx.settings.getValue('themes_custom') - if (Array.isArray(v)) { - this.customThemes = v.filter((t) => t && typeof t === 'object') as any - } else { - this.customThemes = [] - } - } catch { - this.customThemes = [] - } - } - - private async saveCustomThemes() { - await this.mainCtx.settings.setValue('themes_custom', this.customThemes) - } - - private registerIpc() { - this.mainCtx.handle('theme:list', async () => { - return { success: true, data: this.getThemeList() } - }) - - this.mainCtx.handle('theme:current', async () => { - const theme = this.getThemeById(this.currentThemeId) - return { success: true, data: theme } - }) - - this.mainCtx.handle('theme:set', async (event, themeId: string) => { - const senderId = event?.sender?.id - if (typeof senderId === 'number') { - if (!this.mainCtx.permissions.requirePermission(event, 'admin')) - return { success: false, message: 'Permission denied' } - } - this.currentThemeId = themeId - await this.saveCurrentTheme() - this.notifyThemeUpdate() - return { success: true } - }) - - this.mainCtx.handle('theme:save', async (event, theme: themeConfig) => { - if (!this.mainCtx.permissions.requirePermission(event, 'admin')) - return { success: false, message: 'Permission denied' } - - try { - if (!theme?.id || !theme?.name) { - return { success: false, message: 'Invalid theme' } - } - const isBuiltin = this.builtinThemes.some((t) => t.id === theme.id) - if (isBuiltin) { - return { success: false, message: 'Cannot overwrite builtin themes' } - } - - const normalized: themeConfig = { - name: String(theme.name), - id: String(theme.id), - mode: theme.mode === 'dark' ? 'dark' : 'light', - config: { - tdesign: { ...(theme.config?.tdesign || {}) }, - custom: { ...(theme.config?.custom || {}) } - } - } - - const idx = this.customThemes.findIndex((t) => t.id === normalized.id) - if (idx >= 0) this.customThemes[idx] = normalized - else this.customThemes.unshift(normalized) - - await this.saveCustomThemes() - this.notifyThemeUpdate() - return { success: true } - } catch (e) { - return { success: false, message: String(e) } - } - }) - - this.mainCtx.handle('theme:delete', async (event, themeId: string) => { - if (!this.mainCtx.permissions.requirePermission(event, 'admin')) - return { success: false, message: 'Permission denied' } - - try { - const id = String(themeId || '').trim() - if (!id) return { success: false, message: 'Invalid theme id' } - if (this.builtinThemes.some((t) => t.id === id)) { - return { success: false, message: 'Cannot delete builtin themes' } - } - - const before = this.customThemes.length - this.customThemes = this.customThemes.filter((t) => t.id !== id) - if (this.customThemes.length === before) { - return { success: false, message: 'Theme not found' } - } - - await this.saveCustomThemes() - if (this.currentThemeId === themeId) { - this.currentThemeId = 'light-default' - await this.saveCurrentTheme() - } - this.notifyThemeUpdate() - return { success: true } - } catch (e) { - return { success: false, message: String(e) } - } - }) - } - - private getThemeList(): themeConfig[] { - return [...this.builtinThemes, ...this.customThemes] - } - - private getThemeById(id: string): themeConfig | null { - const list = this.getThemeList() - return list.find((t) => t.id === id) || list[0] || null - } - - private notifyThemeUpdate() { - const theme = this.getThemeById(this.currentThemeId) - if (!theme) return - - const windows = BrowserWindow.getAllWindows() - for (const win of windows) { - win.webContents.send('theme:updated', theme) - } - } -} diff --git a/old-ss/src/main/services/TrayService.ts b/old-ss/src/main/services/TrayService.ts deleted file mode 100644 index 771a185..0000000 --- a/old-ss/src/main/services/TrayService.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { Service } from '../../shared/kernel' -import { MainContext } from '../context' -import { Tray, Menu, app, nativeImage } from 'electron' -import type { windowManagerOptions } from './WindowManager' - -export class TrayService extends Service { - private tray: Tray | null = null - - constructor( - ctx: MainContext, - private readonly opts: windowManagerOptions - ) { - super(ctx, 'tray') - } - - private get mainCtx() { - return this.ctx as MainContext - } - - public initialize() { - const icon = nativeImage.createFromPath(this.opts.icon) - this.tray = new Tray(icon) - - const contextMenu = Menu.buildFromTemplate([ - { - label: '显示主窗口', - click: () => { - this.showMainWindow() - } - }, - { type: 'separator' }, - { - label: '重启应用', - click: () => { - this.restartApp() - } - }, - { type: 'separator' }, - { - label: '关闭应用', - click: () => { - app.quit() - } - } - ]) - - this.tray.setToolTip('SecScore 积分管理') - this.tray.setContextMenu(contextMenu) - - this.tray.on('double-click', () => { - this.showMainWindow() - }) - } - - private showMainWindow() { - const mainWin = this.mainCtx.windows.get('main') - if (mainWin) { - if (mainWin.isMinimized()) mainWin.restore() - mainWin.show() - mainWin.focus() - } else { - this.mainCtx.windows.open({ key: 'main', title: 'SecScore', route: '/' }) - } - } - - private restartApp() { - app.relaunch() - app.quit() - } -} diff --git a/old-ss/src/main/services/WindowManager.ts b/old-ss/src/main/services/WindowManager.ts deleted file mode 100644 index f8de0a2..0000000 --- a/old-ss/src/main/services/WindowManager.ts +++ /dev/null @@ -1,235 +0,0 @@ -import { Service } from '../../shared/kernel' -import { MainContext } from '../context' -import { BrowserWindow, shell } from 'electron' -import type { BrowserWindowConstructorOptions } from 'electron' - -export type windowOpenInput = { - key: string - title?: string - route?: string - options?: BrowserWindowConstructorOptions -} - -export type windowManagerOptions = { - icon: any - preloadPath: string - rendererHtmlPath: string - getRendererUrl: () => string | undefined -} - -declare module '../../shared/kernel' { - interface Context { - windows: WindowManager - } -} - -export class WindowManager extends Service { - private readonly windows = new Map() - - constructor( - ctx: MainContext, - private readonly opts: windowManagerOptions - ) { - super(ctx, 'windows') - this.registerIpc() - } - - private get mainCtx() { - return this.ctx as MainContext - } - - public get(key: string) { - const existing = this.windows.get(key) - if (!existing) return null - if (existing.isDestroyed()) { - this.windows.delete(key) - return null - } - return existing - } - - public open(input: windowOpenInput) { - const existing = this.get(input.key) - if (existing) { - if (input.route) { - existing.webContents.send('app:navigate', input.route) - } - existing.show() - existing.focus() - return existing - } - - const baseOptions: BrowserWindowConstructorOptions = { - width: 1180, - height: 680, - show: false, - autoHideMenuBar: true, - frame: true, - transparent: false, - backgroundColor: '#ffffff', - icon: this.opts.icon, - title: input.title, - webPreferences: { - preload: this.opts.preloadPath, - sandbox: false - }, - ...input.options - } - - const win = new BrowserWindow(baseOptions) - - const zoomSettings = this.mainCtx.settings - const zoom = zoomSettings ? Number(zoomSettings.getValue('window_zoom')) || 1.0 : 1.0 - win.webContents.setZoomFactor(zoom) - - this.windows.set(input.key, win) - - win.on('close', (event) => { - if (!this.mainCtx.isQuitting && input.key === 'main') { - event.preventDefault() - win.hide() - } - }) - - win.on('closed', () => { - this.windows.delete(input.key) - }) - - win.on('ready-to-show', () => { - win.show() - }) - - // Notify renderer about maximize state changes - win.on('maximize', () => { - win.webContents.send('window:maximized-changed', true) - }) - win.on('unmaximize', () => { - win.webContents.send('window:maximized-changed', false) - }) - - win.webContents.setWindowOpenHandler((details) => { - shell.openExternal(details.url) - return { action: 'deny' } - }) - - void this.loadRoute(win, input.route ?? '/') - return win - } - - public navigate(key: string, route: string) { - const win = this.get(key) - if (!win) return false - win.webContents.send('app:navigate', route) - return true - } - - public navigateWindow(win: BrowserWindow, route: string) { - if (win.isDestroyed()) return false - win.webContents.send('app:navigate', route) - return true - } - - private async loadRoute(win: BrowserWindow, route: string) { - const normalizedRoute = route.startsWith('/') ? route : `/${route}` - const rendererUrl = this.opts.getRendererUrl() - - if (rendererUrl) { - await win.loadURL(`${rendererUrl}#${normalizedRoute}`) - return - } - - await win.loadFile(this.opts.rendererHtmlPath, { hash: normalizedRoute }) - } - - private registerIpc() { - this.mainCtx.handle('window:open', async (_event, input: any) => { - const key = String(input?.key ?? '').trim() - if (!key) return { success: false, message: 'Missing key' } - this.open({ - key, - title: input?.title ? String(input.title) : undefined, - route: input?.route ? String(input.route) : undefined, - options: input?.options - }) - return { success: true } - }) - - this.mainCtx.handle('window:navigate', async (event, input: any) => { - const route = String(input?.route ?? '').trim() - if (!route) return { success: false, message: 'Missing route' } - - const key = input?.key ? String(input.key).trim() : '' - if (key) { - const ok = this.navigate(key, route) - return ok ? { success: true } : { success: false, message: 'Window not found' } - } - - const win = BrowserWindow.fromWebContents(event.sender) - if (!win) return { success: false, message: 'Window not found' } - const ok = this.navigateWindow(win, route) - return ok ? { success: true } : { success: false, message: 'Window not found' } - }) - - // Window controls - this.mainCtx.handle('window:minimize', (event) => { - const win = BrowserWindow.fromWebContents(event.sender) - if (win) win.minimize() - }) - - this.mainCtx.handle('window:maximize', (event) => { - const win = BrowserWindow.fromWebContents(event.sender) - if (win) { - if (win.isMaximized()) { - win.unmaximize() - return false - } else { - win.maximize() - return true - } - } - return false - }) - - this.mainCtx.handle('window:close', (event) => { - const win = BrowserWindow.fromWebContents(event.sender) - if (win) win.close() - }) - - this.mainCtx.handle('window:isMaximized', (event) => { - const win = BrowserWindow.fromWebContents(event.sender) - return win ? win.isMaximized() : false - }) - - this.mainCtx.handle('window:set-zoom', (event, zoom: number) => { - const win = BrowserWindow.fromWebContents(event.sender) - if (win && zoom >= 0.5 && zoom <= 2.0) { - win.webContents.setZoomFactor(zoom) - } - }) - - this.mainCtx.handle('window:toggle-devtools', (event) => { - const win = BrowserWindow.fromWebContents(event.sender) - if (win) { - if (win.webContents.isDevToolsOpened()) { - win.webContents.closeDevTools() - } else { - win.webContents.openDevTools() - } - } - }) - - this.mainCtx.handle('window:resize', (event, width: number, height: number) => { - const win = BrowserWindow.fromWebContents(event.sender) - if (win) { - const bounds = win.getBounds() - const newX = bounds.x + (bounds.width - width) - win.setBounds({ - x: newX, - y: bounds.y, - width, - height - }) - } - }) - } -} diff --git a/old-ss/src/mobile/App.tsx b/old-ss/src/mobile/App.tsx deleted file mode 100644 index a78025a..0000000 --- a/old-ss/src/mobile/App.tsx +++ /dev/null @@ -1,131 +0,0 @@ -import { ConfigProvider, theme as antTheme, message } from 'antd' -import { HashRouter, Routes, Route, Navigate } from 'react-router-dom' -import { useState, useEffect, createContext, useContext } from 'react' -import { MobileHome } from './pages/Home' -import { MobileScore } from './pages/Score' -import { MobileLeaderboard } from './pages/Leaderboard' -import { MobileSettings } from './pages/Settings' -import { MobileLayout } from './components/Layout' - -interface ThemeContextType { - isDark: boolean - toggleTheme: () => void -} - -const ThemeContext = createContext({ - isDark: false, - toggleTheme: () => {} -}) - -export const useTheme = () => useContext(ThemeContext) - -interface ApiConfig { - baseUrl: string -} - -interface ApiContextType { - api: { - get: (path: string) => Promise - post: (path: string, data?: any) => Promise - put: (path: string, data?: any) => Promise - del: (path: string) => Promise - } - config: ApiConfig - setConfig: (config: ApiConfig) => void -} - -const ApiContext = createContext(null) - -export const useApi = () => { - const ctx = useContext(ApiContext) - if (!ctx) throw new Error('useApi must be used within ApiProvider') - return ctx -} - -function App(): React.JSX.Element { - const [isDark, setIsDark] = useState(false) - const [apiConfig, setApiConfig] = useState({ baseUrl: '' }) - const [, messageHolder] = message.useMessage() - - useEffect(() => { - const savedTheme = localStorage.getItem('theme') - if (savedTheme === 'dark') setIsDark(true) - - const savedApiUrl = localStorage.getItem('apiUrl') - if (savedApiUrl) setApiConfig({ baseUrl: savedApiUrl }) - }, []) - - useEffect(() => { - document.documentElement.setAttribute('theme-mode', isDark ? 'dark' : 'light') - localStorage.setItem('theme', isDark ? 'dark' : 'light') - }, [isDark]) - - useEffect(() => { - if (apiConfig.baseUrl) { - localStorage.setItem('apiUrl', apiConfig.baseUrl) - } - }, [apiConfig]) - - const toggleTheme = () => setIsDark((prev) => !prev) - - const api = { - get: async (path: string) => { - if (!apiConfig.baseUrl) throw new Error('API URL not configured') - const res = await fetch(`${apiConfig.baseUrl}${path}`) - return res.json() - }, - post: async (path: string, data?: any) => { - if (!apiConfig.baseUrl) throw new Error('API URL not configured') - const res = await fetch(`${apiConfig.baseUrl}${path}`, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(data) - }) - return res.json() - }, - put: async (path: string, data?: any) => { - if (!apiConfig.baseUrl) throw new Error('API URL not configured') - const res = await fetch(`${apiConfig.baseUrl}${path}`, { - method: 'PUT', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(data) - }) - return res.json() - }, - del: async (path: string) => { - if (!apiConfig.baseUrl) throw new Error('API URL not configured') - const res = await fetch(`${apiConfig.baseUrl}${path}`, { method: 'DELETE' }) - return res.json() - } - } - - return ( - - {messageHolder} - - - - - }> - } /> - } /> - } /> - } /> - } /> - - - - - - - ) -} - -export default App diff --git a/old-ss/src/mobile/components/Layout.tsx b/old-ss/src/mobile/components/Layout.tsx deleted file mode 100644 index 81073f3..0000000 --- a/old-ss/src/mobile/components/Layout.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import { Outlet, useLocation, useNavigate } from 'react-router-dom' -import { TabBar } from 'antd-mobile' -import { - HomeOutlined, - PlusCircleOutlined, - TrophyOutlined, - SettingOutlined -} from '@ant-design/icons' -import { useTheme } from '../App' - -const tabs = [ - { key: '/', title: '主页', icon: }, - { key: '/score', title: '积分', icon: }, - { key: '/leaderboard', title: '排行', icon: }, - { key: '/settings', title: '设置', icon: } -] - -export function MobileLayout(): React.JSX.Element { - const location = useLocation() - const navigate = useNavigate() - const { isDark } = useTheme() - - return ( -
-
- -
-
- navigate(key)} - items={tabs.map((tab) => ({ - key: tab.key, - title: tab.title, - icon: tab.icon - }))} - style={{ - '--color': isDark ? '#999' : '#666', - '--active-color': '#1890ff', - backgroundColor: 'transparent' - }} - /> -
-
- ) -} diff --git a/old-ss/src/mobile/index.html b/old-ss/src/mobile/index.html deleted file mode 100644 index 8e4f9f8..0000000 --- a/old-ss/src/mobile/index.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - SecScore - 教育积分管理 - - -
- - - diff --git a/old-ss/src/mobile/main.tsx b/old-ss/src/mobile/main.tsx deleted file mode 100644 index fd81885..0000000 --- a/old-ss/src/mobile/main.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import '../renderer/src/assets/main.css' - -import { StrictMode } from 'react' -import { createRoot } from 'react-dom/client' -import App from './App' - -createRoot(document.getElementById('root')!).render( - - - -) diff --git a/old-ss/src/mobile/pages/Home.tsx b/old-ss/src/mobile/pages/Home.tsx deleted file mode 100644 index e1f1840..0000000 --- a/old-ss/src/mobile/pages/Home.tsx +++ /dev/null @@ -1,122 +0,0 @@ -import { useState, useEffect } from 'react' -import { Card, Tag, SearchBar, Space, SpinLoading } from 'antd-mobile' -import { useApi } from '../App' - -interface Student { - id: number - name: string - score: number -} - -export function MobileHome(): React.JSX.Element { - const { api, config } = useApi() - const [students, setStudents] = useState([]) - const [loading, setLoading] = useState(false) - const [search, setSearch] = useState('') - - useEffect(() => { - if (!config.baseUrl) return - loadStudents() - }, [config.baseUrl]) - - const loadStudents = async () => { - setLoading(true) - try { - const res = await api.get('/api/students') - if (res.success) { - setStudents(res.data || []) - } - } catch (e) { - console.error('Failed to load students:', e) - } finally { - setLoading(false) - } - } - - const filteredStudents = students.filter((s) => - s.name.toLowerCase().includes(search.toLowerCase()) - ) - - const getAvatarColor = (name: string) => { - const colors = [ - '#FF6B6B', - '#4ECDC4', - '#45B7D1', - '#FFA07A', - '#98D8C8', - '#F7DC6F', - '#BB8FCE', - '#85C1E2' - ] - let hash = 0 - for (let i = 0; i < name.length; i++) { - hash = name.charCodeAt(i) + ((hash << 5) - hash) - } - return colors[Math.abs(hash) % colors.length] - } - - if (!config.baseUrl) { - return ( -
-

请先在设置中配置服务器地址

-
- ) - } - - return ( -
-

学生积分

- - - - {loading ? ( -
- -
- ) : ( - - {filteredStudents.map((student) => ( - -
-
- {student.name.slice(-2)} -
-
-
{student.name}
- 0 ? 'success' : student.score < 0 ? 'danger' : 'default'} - > - {student.score > 0 ? `+${student.score}` : student.score} - -
-
-
- ))} -
- )} - - {!loading && filteredStudents.length === 0 && ( -
- {search ? '未找到匹配的学生' : '暂无学生数据'} -
- )} -
- ) -} diff --git a/old-ss/src/mobile/pages/Leaderboard.tsx b/old-ss/src/mobile/pages/Leaderboard.tsx deleted file mode 100644 index 45b9545..0000000 --- a/old-ss/src/mobile/pages/Leaderboard.tsx +++ /dev/null @@ -1,104 +0,0 @@ -import { useState, useEffect } from 'react' -import { Card, SpinLoading, Selector } from 'antd-mobile' -import { useApi } from '../App' - -interface RankRow { - name: string - score: number - range_change: number -} - -export function MobileLeaderboard(): React.JSX.Element { - const { api, config } = useApi() - const [data, setData] = useState([]) - const [loading, setLoading] = useState(false) - const [range, setRange] = useState<'today' | 'week' | 'month'>('today') - - useEffect(() => { - if (!config.baseUrl) return - loadData() - }, [config.baseUrl, range]) - - const loadData = async () => { - setLoading(true) - try { - const res = await api.get(`/api/leaderboard?range=${range}`) - if (res.success) { - setData(res.data?.rows || []) - } - } catch (e) { - console.error('Failed to load leaderboard:', e) - } finally { - setLoading(false) - } - } - - if (!config.baseUrl) { - return ( -
-

请先在设置中配置服务器地址

-
- ) - } - - return ( -
-

排行榜

- - setRange(v[0] as 'today' | 'week' | 'month')} - options={[ - { label: '今天', value: 'today' }, - { label: '本周', value: 'week' }, - { label: '本月', value: 'month' } - ]} - style={{ marginBottom: '12px' }} - /> - - {loading ? ( -
- -
- ) : ( - - {data.map((row, index) => ( -
-
- {index + 1} -
-
{row.name}
-
{row.score}
-
0 ? '#52c41a' : row.range_change < 0 ? '#ff4d4f' : '#999' - }} - > - {row.range_change > 0 ? `+${row.range_change}` : row.range_change} -
-
- ))} - {data.length === 0 && ( -
暂无数据
- )} -
- )} -
- ) -} diff --git a/old-ss/src/mobile/pages/Score.tsx b/old-ss/src/mobile/pages/Score.tsx deleted file mode 100644 index 3768260..0000000 --- a/old-ss/src/mobile/pages/Score.tsx +++ /dev/null @@ -1,165 +0,0 @@ -import { useState, useEffect } from 'react' -import { Card, Button, Selector, Input, TextArea, SpinLoading, Toast } from 'antd-mobile' -import { useApi } from '../App' - -interface Student { - id: number - name: string - score: number -} - -interface Reason { - id: number - content: string - delta: number - category: string -} - -export function MobileScore(): React.JSX.Element { - const { api, config } = useApi() - const [students, setStudents] = useState([]) - const [reasons, setReasons] = useState([]) - const [loading, setLoading] = useState(false) - const [submitting, setSubmitting] = useState(false) - const [selectedStudents, setSelectedStudents] = useState([]) - const [selectedReason, setSelectedReason] = useState(null) - const [customScore, setCustomScore] = useState('') - const [customReason, setCustomReason] = useState('') - - useEffect(() => { - if (!config.baseUrl) return - loadData() - }, [config.baseUrl]) - - const loadData = async () => { - setLoading(true) - try { - const [stuRes, reaRes] = await Promise.all([ - api.get('/api/students'), - api.get('/api/reasons') - ]) - if (stuRes.success) setStudents(stuRes.data || []) - if (reaRes.success) setReasons(reaRes.data || []) - } catch (e) { - console.error('Failed to load data:', e) - } finally { - setLoading(false) - } - } - - const handleSubmit = async () => { - if (selectedStudents.length === 0) { - Toast.show({ content: '请选择学生', icon: 'fail' }) - return - } - - const delta = selectedReason?.delta ?? parseInt(customScore, 10) - if (isNaN(delta)) { - Toast.show({ content: '请选择理由或输入分值', icon: 'fail' }) - return - } - - const reasonContent = selectedReason?.content || customReason || '积分变更' - - setSubmitting(true) - try { - let successCount = 0 - for (const studentName of selectedStudents) { - const res = await api.post('/api/events', { - student_name: studentName, - reason_content: reasonContent, - delta - }) - if (res.success) successCount++ - } - - Toast.show({ - content: `已为 ${successCount} 名学生提交积分`, - icon: 'success' - }) - - setSelectedStudents([]) - setSelectedReason(null) - setCustomScore('') - setCustomReason('') - } catch { - Toast.show({ content: '提交失败', icon: 'fail' }) - } finally { - setSubmitting(false) - } - } - - if (!config.baseUrl) { - return ( -
-

请先在设置中配置服务器地址

-
- ) - } - - return ( -
-

积分操作

- - {loading ? ( -
- -
- ) : ( - <> - - setSelectedStudents(v as string[])} - options={students.map((s) => ({ - label: s.name, - value: s.name - }))} - /> - - - - { - const reason = reasons.find((r) => r.id === v[0]) - setSelectedReason(reason || null) - if (reason) { - setCustomScore(String(Math.abs(reason.delta))) - } - }} - options={reasons.map((r) => ({ - label: `${r.content} (${r.delta > 0 ? `+${r.delta}` : r.delta})`, - value: r.id - }))} - /> - - - -
- -