From 1568369c059bfc2a7a47ef11ac18d59efc6cfacc Mon Sep 17 00:00:00 2001 From: yanzai Date: Fri, 2 Aug 2024 14:08:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Laravel/.editorconfig | 18 + Laravel/.env.example | 52 + Laravel/.gitattributes | 10 + Laravel/.gitignore | 15 + Laravel/.styleci.yml | 14 + Laravel/README.md | 64 + Laravel/app/Console/Commands/MakeService.php | 59 + .../app/Console/Commands/Stubs/services.stub | 7 + Laravel/app/Console/Kernel.php | 34 + Laravel/app/Exceptions/Handler.php | 41 + .../API/Admin/BaseInfoController.php | 38 + .../API/Admin/ConfigController.php | 23 + .../Controllers/API/Admin/GroupController.php | 45 + .../Controllers/API/Admin/LoginController.php | 21 + .../Controllers/API/Admin/MenuController.php | 45 + .../Controllers/API/Admin/UserController.php | 49 + .../Admin/YeWu/healthCalendarController.php | 47 + .../Http/Controllers/API/LogController.php | 22 + .../Http/Controllers/API/TokenController.php | 23 + .../Http/Controllers/API/UpLoadController.php | 30 + Laravel/app/Http/Controllers/Controller.php | 13 + .../app/Http/Controllers/TestController.php | 13 + Laravel/app/Http/Kernel.php | 70 + Laravel/app/Http/Middleware/Authenticate.php | 21 + Laravel/app/Http/Middleware/CheckSign.php | 35 + Laravel/app/Http/Middleware/CheckToken.php | 32 + .../app/Http/Middleware/EncryptCookies.php | 17 + Laravel/app/Http/Middleware/Log.php | 78 + .../PreventRequestsDuringMaintenance.php | 17 + .../Middleware/RedirectIfAuthenticated.php | 32 + Laravel/app/Http/Middleware/TrimStrings.php | 19 + Laravel/app/Http/Middleware/TrustHosts.php | 20 + Laravel/app/Http/Middleware/TrustProxies.php | 28 + .../app/Http/Middleware/VerifyCsrfToken.php | 17 + Laravel/app/Lib/HSM.php | 66 + Laravel/app/Lib/JWT.php | 132 + Laravel/app/Lib/UKEY.php | 97 + Laravel/app/Lib/XTSign.php | 107 + Laravel/app/Lib/Yz.php | 30 + Laravel/app/Models/User.php | 44 + Laravel/app/Providers/AppServiceProvider.php | 28 + Laravel/app/Providers/AuthServiceProvider.php | 30 + .../Providers/BroadcastServiceProvider.php | 21 + .../app/Providers/EventServiceProvider.php | 32 + .../app/Providers/RouteServiceProvider.php | 63 + Laravel/app/Services/Admin/GroupService.php | 72 + Laravel/app/Services/Admin/MenuService.php | 127 + Laravel/app/Services/Admin/UserService.php | 128 + .../Admin/YeWu/HealthCalendarService.php | 137 + Laravel/app/Services/ConfigService.php | 37 + Laravel/app/Services/LogService.php | 130 + Laravel/app/Services/Login/LoginService.php | 77 + Laravel/app/Services/TokenService.php | 43 + Laravel/artisan | 53 + Laravel/bootstrap/app.php | 55 + Laravel/bootstrap/cache/.gitignore | 2 + Laravel/composer.json | 65 + Laravel/composer.lock | 8427 +++++++++++++++++ Laravel/config/app.php | 249 + Laravel/config/auth.php | 111 + Laravel/config/broadcasting.php | 64 + Laravel/config/cache.php | 110 + Laravel/config/cors.php | 34 + Laravel/config/database.php | 147 + Laravel/config/filesystems.php | 73 + Laravel/config/hashing.php | 52 + Laravel/config/logging.php | 118 + Laravel/config/mail.php | 118 + Laravel/config/queue.php | 93 + Laravel/config/sanctum.php | 65 + Laravel/config/services.php | 33 + Laravel/config/session.php | 201 + Laravel/config/view.php | 36 + Laravel/database/.gitignore | 1 + Laravel/database/factories/UserFactory.php | 39 + .../2014_10_12_000000_create_users_table.php | 36 + ...12_100000_create_password_resets_table.php | 32 + ..._08_19_000000_create_failed_jobs_table.php | 36 + ...01_create_personal_access_tokens_table.php | 36 + Laravel/database/seeders/DatabaseSeeder.php | 18 + Laravel/package.json | 18 + Laravel/phpunit.xml | 31 + Laravel/public/.htaccess | 0 Laravel/public/favicon.ico | 0 Laravel/public/index.php | 55 + Laravel/public/nginx.htaccess | 8 + Laravel/public/report.pdf | Bin 0 -> 115311 bytes Laravel/public/robots.txt | 2 + Laravel/resources/css/app.css | 0 Laravel/resources/js/app.js | 1 + Laravel/resources/js/bootstrap.js | 28 + Laravel/resources/lang/en/auth.php | 20 + Laravel/resources/lang/en/pagination.php | 19 + Laravel/resources/lang/en/passwords.php | 22 + Laravel/resources/lang/en/validation.php | 163 + Laravel/resources/views/welcome.blade.php | 132 + Laravel/routes/api.php | 62 + Laravel/routes/channels.php | 18 + Laravel/routes/console.php | 19 + Laravel/routes/web.php | 28 + Laravel/server.php | 21 + Laravel/storage/app/.gitignore | 3 + Laravel/storage/framework/.gitignore | 9 + Laravel/storage/framework/cache/.gitignore | 3 + .../storage/framework/cache/data/.gitignore | 2 + Laravel/storage/framework/sessions/.gitignore | 2 + Laravel/storage/framework/testing/.gitignore | 2 + Laravel/storage/framework/views/.gitignore | 2 + Laravel/storage/logs/.gitignore | 2 + Laravel/tests/CreatesApplication.php | 22 + Laravel/tests/Feature/ExampleTest.php | 21 + Laravel/tests/TestCase.php | 10 + Laravel/tests/Unit/ExampleTest.php | 18 + Laravel/webpack.mix.js | 17 + admin/.env.development | 3 + admin/.env.production | 4 + admin/.eslintrc.cjs | 14 + admin/.gitignore | 28 + admin/.prettierrc.json | 8 + admin/.vscode/extensions.json | 8 + admin/README.md | 35 + admin/index.html | 13 + admin/package-lock.json | 3349 +++++++ admin/package.json | 32 + admin/public/favicon.ico | Bin 0 -> 4286 bytes admin/public/js/xtxsync.js | 984 ++ admin/src/App.vue | 90 + admin/src/api/api.js | 114 + admin/src/assets/backg_l.jpg | Bin 0 -> 159532 bytes admin/src/assets/base.css | 92 + admin/src/assets/loginBackg.png | Bin 0 -> 126290 bytes admin/src/assets/logo.png | Bin 0 -> 7050 bytes admin/src/assets/logo.svg | 1 + admin/src/assets/main.css | 35 + admin/src/assets/user.jpg | Bin 0 -> 36407 bytes admin/src/components/HelloWorld.vue | 44 + admin/src/components/IconList.vue | 66 + admin/src/components/TheWelcome.vue | 88 + admin/src/components/WelcomeItem.vue | 86 + admin/src/components/icons/IconCommunity.vue | 7 + .../components/icons/IconDocumentation.vue | 7 + admin/src/components/icons/IconEcosystem.vue | 7 + admin/src/components/icons/IconSupport.vue | 7 + admin/src/components/icons/IconTooling.vue | 19 + admin/src/main.js | 23 + admin/src/router/index.js | 145 + admin/src/stores/counter.js | 12 + admin/src/stores/index.js | 14 + admin/src/style/dark/css-vars.css | 15 + admin/src/tools/Tools.js | 3 + admin/src/tools/axios.js | 117 + admin/src/views/AboutView.vue | 15 + .../views/AppointmentMngr/HealthCalendar.vue | 404 + admin/src/views/HomeView.vue | 9 + admin/src/views/Index.vue | 330 + admin/src/views/Login.vue | 156 + admin/src/views/MedicalCenter/Dashboard.vue | 173 + admin/src/views/SystemMngr/Group/List.vue | 159 + admin/src/views/SystemMngr/Menu/List.vue | 173 + admin/src/views/SystemMngr/SystemConfig.vue | 129 + admin/src/views/SystemMngr/SystemLog.vue | 158 + admin/src/views/SystemMngr/User/ChangPwd.vue | 197 + admin/src/views/SystemMngr/User/List.vue | 173 + admin/src/views/YeWu/CheckItemConfig.vue | 27 + admin/src/views/YeWu/MainList.vue | 43 + admin/vite.config.js | 33 + 166 files changed, 21183 insertions(+) create mode 100644 Laravel/.editorconfig create mode 100644 Laravel/.env.example create mode 100644 Laravel/.gitattributes create mode 100644 Laravel/.gitignore create mode 100644 Laravel/.styleci.yml create mode 100644 Laravel/README.md create mode 100644 Laravel/app/Console/Commands/MakeService.php create mode 100644 Laravel/app/Console/Commands/Stubs/services.stub create mode 100644 Laravel/app/Console/Kernel.php create mode 100644 Laravel/app/Exceptions/Handler.php create mode 100644 Laravel/app/Http/Controllers/API/Admin/BaseInfoController.php create mode 100644 Laravel/app/Http/Controllers/API/Admin/ConfigController.php create mode 100644 Laravel/app/Http/Controllers/API/Admin/GroupController.php create mode 100644 Laravel/app/Http/Controllers/API/Admin/LoginController.php create mode 100644 Laravel/app/Http/Controllers/API/Admin/MenuController.php create mode 100644 Laravel/app/Http/Controllers/API/Admin/UserController.php create mode 100644 Laravel/app/Http/Controllers/API/Admin/YeWu/healthCalendarController.php create mode 100644 Laravel/app/Http/Controllers/API/LogController.php create mode 100644 Laravel/app/Http/Controllers/API/TokenController.php create mode 100644 Laravel/app/Http/Controllers/API/UpLoadController.php create mode 100644 Laravel/app/Http/Controllers/Controller.php create mode 100644 Laravel/app/Http/Controllers/TestController.php create mode 100644 Laravel/app/Http/Kernel.php create mode 100644 Laravel/app/Http/Middleware/Authenticate.php create mode 100644 Laravel/app/Http/Middleware/CheckSign.php create mode 100644 Laravel/app/Http/Middleware/CheckToken.php create mode 100644 Laravel/app/Http/Middleware/EncryptCookies.php create mode 100644 Laravel/app/Http/Middleware/Log.php create mode 100644 Laravel/app/Http/Middleware/PreventRequestsDuringMaintenance.php create mode 100644 Laravel/app/Http/Middleware/RedirectIfAuthenticated.php create mode 100644 Laravel/app/Http/Middleware/TrimStrings.php create mode 100644 Laravel/app/Http/Middleware/TrustHosts.php create mode 100644 Laravel/app/Http/Middleware/TrustProxies.php create mode 100644 Laravel/app/Http/Middleware/VerifyCsrfToken.php create mode 100644 Laravel/app/Lib/HSM.php create mode 100644 Laravel/app/Lib/JWT.php create mode 100644 Laravel/app/Lib/UKEY.php create mode 100644 Laravel/app/Lib/XTSign.php create mode 100644 Laravel/app/Lib/Yz.php create mode 100644 Laravel/app/Models/User.php create mode 100644 Laravel/app/Providers/AppServiceProvider.php create mode 100644 Laravel/app/Providers/AuthServiceProvider.php create mode 100644 Laravel/app/Providers/BroadcastServiceProvider.php create mode 100644 Laravel/app/Providers/EventServiceProvider.php create mode 100644 Laravel/app/Providers/RouteServiceProvider.php create mode 100644 Laravel/app/Services/Admin/GroupService.php create mode 100644 Laravel/app/Services/Admin/MenuService.php create mode 100644 Laravel/app/Services/Admin/UserService.php create mode 100644 Laravel/app/Services/Admin/YeWu/HealthCalendarService.php create mode 100644 Laravel/app/Services/ConfigService.php create mode 100644 Laravel/app/Services/LogService.php create mode 100644 Laravel/app/Services/Login/LoginService.php create mode 100644 Laravel/app/Services/TokenService.php create mode 100644 Laravel/artisan create mode 100644 Laravel/bootstrap/app.php create mode 100644 Laravel/bootstrap/cache/.gitignore create mode 100644 Laravel/composer.json create mode 100644 Laravel/composer.lock create mode 100644 Laravel/config/app.php create mode 100644 Laravel/config/auth.php create mode 100644 Laravel/config/broadcasting.php create mode 100644 Laravel/config/cache.php create mode 100644 Laravel/config/cors.php create mode 100644 Laravel/config/database.php create mode 100644 Laravel/config/filesystems.php create mode 100644 Laravel/config/hashing.php create mode 100644 Laravel/config/logging.php create mode 100644 Laravel/config/mail.php create mode 100644 Laravel/config/queue.php create mode 100644 Laravel/config/sanctum.php create mode 100644 Laravel/config/services.php create mode 100644 Laravel/config/session.php create mode 100644 Laravel/config/view.php create mode 100644 Laravel/database/.gitignore create mode 100644 Laravel/database/factories/UserFactory.php create mode 100644 Laravel/database/migrations/2014_10_12_000000_create_users_table.php create mode 100644 Laravel/database/migrations/2014_10_12_100000_create_password_resets_table.php create mode 100644 Laravel/database/migrations/2019_08_19_000000_create_failed_jobs_table.php create mode 100644 Laravel/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php create mode 100644 Laravel/database/seeders/DatabaseSeeder.php create mode 100644 Laravel/package.json create mode 100644 Laravel/phpunit.xml create mode 100644 Laravel/public/.htaccess create mode 100644 Laravel/public/favicon.ico create mode 100644 Laravel/public/index.php create mode 100644 Laravel/public/nginx.htaccess create mode 100644 Laravel/public/report.pdf create mode 100644 Laravel/public/robots.txt create mode 100644 Laravel/resources/css/app.css create mode 100644 Laravel/resources/js/app.js create mode 100644 Laravel/resources/js/bootstrap.js create mode 100644 Laravel/resources/lang/en/auth.php create mode 100644 Laravel/resources/lang/en/pagination.php create mode 100644 Laravel/resources/lang/en/passwords.php create mode 100644 Laravel/resources/lang/en/validation.php create mode 100644 Laravel/resources/views/welcome.blade.php create mode 100644 Laravel/routes/api.php create mode 100644 Laravel/routes/channels.php create mode 100644 Laravel/routes/console.php create mode 100644 Laravel/routes/web.php create mode 100644 Laravel/server.php create mode 100644 Laravel/storage/app/.gitignore create mode 100644 Laravel/storage/framework/.gitignore create mode 100644 Laravel/storage/framework/cache/.gitignore create mode 100644 Laravel/storage/framework/cache/data/.gitignore create mode 100644 Laravel/storage/framework/sessions/.gitignore create mode 100644 Laravel/storage/framework/testing/.gitignore create mode 100644 Laravel/storage/framework/views/.gitignore create mode 100644 Laravel/storage/logs/.gitignore create mode 100644 Laravel/tests/CreatesApplication.php create mode 100644 Laravel/tests/Feature/ExampleTest.php create mode 100644 Laravel/tests/TestCase.php create mode 100644 Laravel/tests/Unit/ExampleTest.php create mode 100644 Laravel/webpack.mix.js create mode 100644 admin/.env.development create mode 100644 admin/.env.production create mode 100644 admin/.eslintrc.cjs create mode 100644 admin/.gitignore create mode 100644 admin/.prettierrc.json create mode 100644 admin/.vscode/extensions.json create mode 100644 admin/README.md create mode 100644 admin/index.html create mode 100644 admin/package-lock.json create mode 100644 admin/package.json create mode 100644 admin/public/favicon.ico create mode 100644 admin/public/js/xtxsync.js create mode 100644 admin/src/App.vue create mode 100644 admin/src/api/api.js create mode 100644 admin/src/assets/backg_l.jpg create mode 100644 admin/src/assets/base.css create mode 100644 admin/src/assets/loginBackg.png create mode 100644 admin/src/assets/logo.png create mode 100644 admin/src/assets/logo.svg create mode 100644 admin/src/assets/main.css create mode 100644 admin/src/assets/user.jpg create mode 100644 admin/src/components/HelloWorld.vue create mode 100644 admin/src/components/IconList.vue create mode 100644 admin/src/components/TheWelcome.vue create mode 100644 admin/src/components/WelcomeItem.vue create mode 100644 admin/src/components/icons/IconCommunity.vue create mode 100644 admin/src/components/icons/IconDocumentation.vue create mode 100644 admin/src/components/icons/IconEcosystem.vue create mode 100644 admin/src/components/icons/IconSupport.vue create mode 100644 admin/src/components/icons/IconTooling.vue create mode 100644 admin/src/main.js create mode 100644 admin/src/router/index.js create mode 100644 admin/src/stores/counter.js create mode 100644 admin/src/stores/index.js create mode 100644 admin/src/style/dark/css-vars.css create mode 100644 admin/src/tools/Tools.js create mode 100644 admin/src/tools/axios.js create mode 100644 admin/src/views/AboutView.vue create mode 100644 admin/src/views/AppointmentMngr/HealthCalendar.vue create mode 100644 admin/src/views/HomeView.vue create mode 100644 admin/src/views/Index.vue create mode 100644 admin/src/views/Login.vue create mode 100644 admin/src/views/MedicalCenter/Dashboard.vue create mode 100644 admin/src/views/SystemMngr/Group/List.vue create mode 100644 admin/src/views/SystemMngr/Menu/List.vue create mode 100644 admin/src/views/SystemMngr/SystemConfig.vue create mode 100644 admin/src/views/SystemMngr/SystemLog.vue create mode 100644 admin/src/views/SystemMngr/User/ChangPwd.vue create mode 100644 admin/src/views/SystemMngr/User/List.vue create mode 100644 admin/src/views/YeWu/CheckItemConfig.vue create mode 100644 admin/src/views/YeWu/MainList.vue create mode 100644 admin/vite.config.js diff --git a/Laravel/.editorconfig b/Laravel/.editorconfig new file mode 100644 index 0000000..1671c9b --- /dev/null +++ b/Laravel/.editorconfig @@ -0,0 +1,18 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false + +[*.{yml,yaml}] +indent_size = 2 + +[docker-compose.yml] +indent_size = 4 diff --git a/Laravel/.env.example b/Laravel/.env.example new file mode 100644 index 0000000..b7becba --- /dev/null +++ b/Laravel/.env.example @@ -0,0 +1,52 @@ +APP_NAME=Laravel +APP_ENV=local +APP_KEY= +APP_DEBUG=true +APP_URL=http://localhost + +LOG_CHANNEL=stack +LOG_DEPRECATIONS_CHANNEL=null +LOG_LEVEL=debug + +DB_CONNECTION=mysql +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_DATABASE=laravel +DB_USERNAME=root +DB_PASSWORD= + +BROADCAST_DRIVER=log +CACHE_DRIVER=file +FILESYSTEM_DRIVER=local +QUEUE_CONNECTION=sync +SESSION_DRIVER=file +SESSION_LIFETIME=120 + +MEMCACHED_HOST=127.0.0.1 + +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_MAILER=smtp +MAIL_HOST=mailhog +MAIL_PORT=1025 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_ENCRYPTION=null +MAIL_FROM_ADDRESS=null +MAIL_FROM_NAME="${APP_NAME}" + +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_DEFAULT_REGION=us-east-1 +AWS_BUCKET= +AWS_USE_PATH_STYLE_ENDPOINT=false + +PUSHER_APP_ID= +PUSHER_APP_KEY= +PUSHER_APP_SECRET= +PUSHER_APP_CLUSTER=mt1 + +MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" +MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" diff --git a/Laravel/.gitattributes b/Laravel/.gitattributes new file mode 100644 index 0000000..510d996 --- /dev/null +++ b/Laravel/.gitattributes @@ -0,0 +1,10 @@ +* text=auto + +*.blade.php diff=html +*.css diff=css +*.html diff=html +*.md diff=markdown +*.php diff=php + +/.github export-ignore +CHANGELOG.md export-ignore diff --git a/Laravel/.gitignore b/Laravel/.gitignore new file mode 100644 index 0000000..eb003b0 --- /dev/null +++ b/Laravel/.gitignore @@ -0,0 +1,15 @@ +/node_modules +/public/hot +/public/storage +/storage/*.key +/vendor +.env +.env.backup +.phpunit.result.cache +docker-compose.override.yml +Homestead.json +Homestead.yaml +npm-debug.log +yarn-error.log +/.idea +/.vscode diff --git a/Laravel/.styleci.yml b/Laravel/.styleci.yml new file mode 100644 index 0000000..877ea70 --- /dev/null +++ b/Laravel/.styleci.yml @@ -0,0 +1,14 @@ +php: + preset: laravel + version: 8 + disabled: + - no_unused_imports + finder: + not-name: + - index.php + - server.php +js: + finder: + not-name: + - webpack.mix.js +css: true diff --git a/Laravel/README.md b/Laravel/README.md new file mode 100644 index 0000000..1b6397c --- /dev/null +++ b/Laravel/README.md @@ -0,0 +1,64 @@ +

+ +

+Build Status +Total Downloads +Latest Stable Version +License +

+ +## About Laravel + +Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as: + +- [Simple, fast routing engine](https://laravel.com/docs/routing). +- [Powerful dependency injection container](https://laravel.com/docs/container). +- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage. +- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent). +- Database agnostic [schema migrations](https://laravel.com/docs/migrations). +- [Robust background job processing](https://laravel.com/docs/queues). +- [Real-time event broadcasting](https://laravel.com/docs/broadcasting). + +Laravel is accessible, powerful, and provides tools required for large, robust applications. + +## Learning Laravel + +Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. + +If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains over 1500 video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library. + +## Laravel Sponsors + +We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the Laravel [Patreon page](https://patreon.com/taylorotwell). + +### Premium Partners + +- **[Vehikl](https://vehikl.com/)** +- **[Tighten Co.](https://tighten.co)** +- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)** +- **[64 Robots](https://64robots.com)** +- **[Cubet Techno Labs](https://cubettech.com)** +- **[Cyber-Duck](https://cyber-duck.co.uk)** +- **[Many](https://www.many.co.uk)** +- **[Webdock, Fast VPS Hosting](https://www.webdock.io/en)** +- **[DevSquad](https://devsquad.com)** +- **[Curotec](https://www.curotec.com/services/technologies/laravel/)** +- **[OP.GG](https://op.gg)** +- **[WebReinvent](https://webreinvent.com/?utm_source=laravel&utm_medium=github&utm_campaign=patreon-sponsors)** +- **[Lendio](https://lendio.com)** + +## Contributing + +Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions). + +## Code of Conduct + +In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct). + +## Security Vulnerabilities + +If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed. + +## License + +The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). diff --git a/Laravel/app/Console/Commands/MakeService.php b/Laravel/app/Console/Commands/MakeService.php new file mode 100644 index 0000000..893c916 --- /dev/null +++ b/Laravel/app/Console/Commands/MakeService.php @@ -0,0 +1,59 @@ +command('inspire')->hourly(); + } + + /** + * Register the commands for the application. + * + * @return void + */ + protected function commands() + { + $this->load(__DIR__.'/Commands'); + MakeService::class; + + require base_path('routes/console.php'); + + } +} diff --git a/Laravel/app/Exceptions/Handler.php b/Laravel/app/Exceptions/Handler.php new file mode 100644 index 0000000..8e7fbd1 --- /dev/null +++ b/Laravel/app/Exceptions/Handler.php @@ -0,0 +1,41 @@ +> + */ + protected $dontReport = [ + // + ]; + + /** + * A list of the inputs that are never flashed for validation exceptions. + * + * @var array + */ + protected $dontFlash = [ + 'current_password', + 'password', + 'password_confirmation', + ]; + + /** + * Register the exception handling callbacks for the application. + * + * @return void + */ + public function register() + { + $this->reportable(function (Throwable $e) { + // + }); + } +} diff --git a/Laravel/app/Http/Controllers/API/Admin/BaseInfoController.php b/Laravel/app/Http/Controllers/API/Admin/BaseInfoController.php new file mode 100644 index 0000000..2dfd5bd --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Admin/BaseInfoController.php @@ -0,0 +1,38 @@ +get('userid');//中间件产生的参数 + $group = $request->get('role');//中间件产生的参数 + $s=app()->make(MenuService::class); + // dd($s->GetBaseMenuList(['userid'=>$userid,'group'=>$group])); + return $s->GetBaseMenuList(['userid'=>$userid,'group'=>$group]); + + } + //获取自身基本信息 + public function GetBaseUserInfo(Request $request){ + $userid = $request->get('userid');//中间件产生的参数 + $group = $request->get('role');//中间件产生的参数 + $s=app()->make(UserService::class); + return $s->GetDetail(['id'=>$userid]); + + } + + //检查用户是否有某个目录的权限 + public function CheckMenuAuth(Request $request){ + $userid = $request->get('userid');//中间件产生的参数 + $group = $request->get('role');//中间件产生的参数 + $url= request('url'); + $s=app()->make(UserService::class); + return $s->CheckMenuAuth(['userid'=>$userid,'group'=>$group,'url'=>$url]); + } +} diff --git a/Laravel/app/Http/Controllers/API/Admin/ConfigController.php b/Laravel/app/Http/Controllers/API/Admin/ConfigController.php new file mode 100644 index 0000000..57ae4d1 --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Admin/ConfigController.php @@ -0,0 +1,23 @@ +GetConfigInfo(['站点名称','站点图片']); + } + public function SaveConfig(){ + $name = request('name'); + $logo = request('logo'); + $configs = new ConfigService(); + return $configs->SaveConfig($name,$logo); + } +} diff --git a/Laravel/app/Http/Controllers/API/Admin/GroupController.php b/Laravel/app/Http/Controllers/API/Admin/GroupController.php new file mode 100644 index 0000000..d767f84 --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Admin/GroupController.php @@ -0,0 +1,45 @@ +make(GroupService::class); + return $s->GetList(['type'=>$type,'page'=>$page,'pagesize'=>$pagesize]); + } + public function ChangeMenu(Request $request){ + $userid = $request->get('userid');//中间件产生的参数 + $group =request('groupId'); + $menuList =request('menuList'); + $s=app()->make(GroupService::class); + return $s->ChangeMenu(['groupid'=>$group,'menuList'=>$menuList]); + } + public function Save(){ + $groupInfo =request('groupInfo'); + $type =request('type'); + $s=app()->make(GroupService::class); + return $s->Save(['info'=>$groupInfo,'type'=>$type]); + + } + //管理员查询分组使用的菜单 + public function GetGroupMenuList(){ + $groupId =request('groupId'); + if($groupId){ + $group =$groupId; + $userid='search'; + $s=app()->make(MenuService::class); + // dd($s->GetBaseMenuList(['userid'=>$userid,'group'=>$group])); + return $s->GetBaseMenuList(['userid'=>$userid,'group'=>$group]); + } + + } +} diff --git a/Laravel/app/Http/Controllers/API/Admin/LoginController.php b/Laravel/app/Http/Controllers/API/Admin/LoginController.php new file mode 100644 index 0000000..ca7caec --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Admin/LoginController.php @@ -0,0 +1,21 @@ +make(LoginService::class); + //$login= new LoginService(); + return Yz::echo($login->Login(['username'=>$username,'password'=>$password])); + } + +} diff --git a/Laravel/app/Http/Controllers/API/Admin/MenuController.php b/Laravel/app/Http/Controllers/API/Admin/MenuController.php new file mode 100644 index 0000000..a5419ca --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Admin/MenuController.php @@ -0,0 +1,45 @@ +make(MenuService::class); + return $s->GetList(['type'=>$type,'page'=>$page,'pagesize'=>$pagesize]); + } + //获取可用的一级菜单 + public function GetFatherMenuList(){ + $s=app()->make(MenuService::class); + return $s->GetFatherMenuList(); + } + public function AddMenu(){ + $menuInfo =request('menuInfo'); + if($menuInfo['id']){ + if(!($menuInfo['name'] and $menuInfo['pid'] and $menuInfo['url'])){ + return Yz::echoError('请填写全部信息'); + } + }else{ + if(!($menuInfo['name'])){ + return Yz::echoError('请填写全部信息'); + } + } + $s=app()->make(MenuService::class); + return $s->AddMenu(['info'=>$menuInfo]); + } + public function EditMenu(){ + $menuInfo =request('menuInfo'); + $s=app()->make(MenuService::class); + return $s->EditMenu(['info'=>$menuInfo]); + } + +} diff --git a/Laravel/app/Http/Controllers/API/Admin/UserController.php b/Laravel/app/Http/Controllers/API/Admin/UserController.php new file mode 100644 index 0000000..d1bd529 --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Admin/UserController.php @@ -0,0 +1,49 @@ +make(UserService::class); + return $s->GetInfoList(['page'=>$page,'pagesize'=>$pagesize]); + } + public function Save(){ + $userInfo =request('userInfo'); + $s=app()->make(UserService::class); + return $s->Save(['info'=>$userInfo]); + } + public function GetDetail(){ + $id =request('id'); + $s=app()->make(UserService::class); + return $s->GetDetail(['id'=>$id]); + } + public function ChangePwd(Request $request){ //admin修改密码 + $userid = $request->get('userid');//中间件产生的参数 + $oldpwd =request('oldpwd'); + $newpwd =request('newpwd'); + if($oldpwd and $newpwd){ + $s=app()->make(UserService::class); + return $s->ChangePwd(['id'=>$userid,'oldpwd'=>$oldpwd,'newpwd'=>$newpwd]); + }else{ + return \Yz::echoError("参数不完整"); + } + + } + + //修改自身信息 + public function ChangInfo(Request $request){ + $userid = $request->get('userid');//中间件产生的参数 + $headimg =request('headimg'); + $name =request('name'); + if(!isset($name)) return \Yz::echoError1('名称不可为空'); + $ser=new UserService(); + return $ser->ChangInfo(['userid'=>$userid,'name'=>$name,'headimg'=>$headimg]); + } +} diff --git a/Laravel/app/Http/Controllers/API/Admin/YeWu/healthCalendarController.php b/Laravel/app/Http/Controllers/API/Admin/YeWu/healthCalendarController.php new file mode 100644 index 0000000..072f58b --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Admin/YeWu/healthCalendarController.php @@ -0,0 +1,47 @@ +get('userid');//中间件产生的参数 + $group = $request->get('role');//中间件产生的参数 + $page =request('page'); + $pageSize =request('pageSize'); + $searchInfo=request('searchInfo'); + $s=app()->make(HealthCalendarService::class); + return $s->getList(['group'=>$group,'userid'=>$userid,'page'=>$page,'pageSize'=>$pageSize,'searchInfo'=>$searchInfo]); + } + + //创建日历 + public function CreateCalendar(Request $request){ + $userid = $request->get('userid');//中间件产生的参数 + $group = $request->get('role');//中间件产生的参数 + $info= request('info'); + if($group<>1 and $group<>7) return \Yz::echoError('无此接口访问权限'); + + $s=app()->make(HealthCalendarService::class); + return $s->CreateCalendar(['info'=>$info,'group'=>$group,'userid'=>$userid]); + } + public function Del(Request $request){ + $userid = $request->get('userid');//中间件产生的参数 + $group = $request->get('role');//中间件产生的参数 + $list= request('list'); + $s=app()->make(HealthCalendarService::class); + return $s->Del(['list'=>$list,'group'=>$group,'userid'=>$userid]); + } + + //修改日历信息 + public function ChangeInfo(Request $request){ + $userid = $request->get('userid');//中间件产生的参数 + $group = $request->get('role');//中间件产生的参数 + $changeInfo= request('changeInfo'); + $s=app()->make(HealthCalendarService::class); + return $s->ChangeInfo(['changeInfo'=>$changeInfo,'group'=>$group,'userid'=>$userid]); + } +} diff --git a/Laravel/app/Http/Controllers/API/LogController.php b/Laravel/app/Http/Controllers/API/LogController.php new file mode 100644 index 0000000..01a99dd --- /dev/null +++ b/Laravel/app/Http/Controllers/API/LogController.php @@ -0,0 +1,22 @@ +GetList(['page'=>$page,'pagesize'=>$pagesize,'searchInfo'=>$searchInfo]); + } + public function GetLogTableName(){ + $s= new LogService(); + return $s->GetLogTableName(); + } +} diff --git a/Laravel/app/Http/Controllers/API/TokenController.php b/Laravel/app/Http/Controllers/API/TokenController.php new file mode 100644 index 0000000..ee709a1 --- /dev/null +++ b/Laravel/app/Http/Controllers/API/TokenController.php @@ -0,0 +1,23 @@ +header('Authorization');; + $service=app()->make(TokenService::class); + $s=$service->RefreshToken(['token'=>$token]); + +// // var_dump($m); + if(!$s['status']){ + $s['status']=false; + } + return $s; + } +} diff --git a/Laravel/app/Http/Controllers/API/UpLoadController.php b/Laravel/app/Http/Controllers/API/UpLoadController.php new file mode 100644 index 0000000..8c9bb1f --- /dev/null +++ b/Laravel/app/Http/Controllers/API/UpLoadController.php @@ -0,0 +1,30 @@ +isValid()) { +// $s=app()->make(HealthCheckupService::class); +// $save=$s->SaveFile(['file'=>$file]); + $date = date("Ymd"); + $save = $file->store('public/'.$date); + return \Yz::Return(true,'上传成功',Storage::url($save)); + + + + + }else{ + return \Yz::echoError1('获取文件失败'); + } + } +} diff --git a/Laravel/app/Http/Controllers/Controller.php b/Laravel/app/Http/Controllers/Controller.php new file mode 100644 index 0000000..a0a2a8a --- /dev/null +++ b/Laravel/app/Http/Controllers/Controller.php @@ -0,0 +1,13 @@ +count(); + } +} diff --git a/Laravel/app/Http/Kernel.php b/Laravel/app/Http/Kernel.php new file mode 100644 index 0000000..999ddf9 --- /dev/null +++ b/Laravel/app/Http/Kernel.php @@ -0,0 +1,70 @@ + + */ + protected $middleware = [ + // \App\Http\Middleware\TrustHosts::class, + \App\Http\Middleware\TrustProxies::class, + \Fruitcake\Cors\HandleCors::class, + \App\Http\Middleware\PreventRequestsDuringMaintenance::class, + \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, + \App\Http\Middleware\TrimStrings::class, + \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, + ]; + + /** + * The application's route middleware groups. + * + * @var array> + */ + protected $middlewareGroups = [ + 'web' => [ + \App\Http\Middleware\EncryptCookies::class, + \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, + \Illuminate\Session\Middleware\StartSession::class, + // \Illuminate\Session\Middleware\AuthenticateSession::class, + \Illuminate\View\Middleware\ShareErrorsFromSession::class, + \App\Http\Middleware\VerifyCsrfToken::class, + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + + 'api' => [ + // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, + 'throttle:api', + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + ]; + + /** + * The application's route middleware. + * + * These middleware may be assigned to groups or used individually. + * + * @var array + */ + protected $routeMiddleware = [ + 'auth' => \App\Http\Middleware\Authenticate::class, + 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, + 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, + 'can' => \Illuminate\Auth\Middleware\Authorize::class, + 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, + 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, + 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, + 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, + 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, + 'checktoken' => \App\Http\Middleware\CheckToken::class, + 'log' => \App\Http\Middleware\Log::class, + 'check.sign' => \App\Http\Middleware\CheckSign::class, + ]; +} diff --git a/Laravel/app/Http/Middleware/Authenticate.php b/Laravel/app/Http/Middleware/Authenticate.php new file mode 100644 index 0000000..704089a --- /dev/null +++ b/Laravel/app/Http/Middleware/Authenticate.php @@ -0,0 +1,21 @@ +expectsJson()) { + return route('login'); + } + } +} diff --git a/Laravel/app/Http/Middleware/CheckSign.php b/Laravel/app/Http/Middleware/CheckSign.php new file mode 100644 index 0000000..85d6eca --- /dev/null +++ b/Laravel/app/Http/Middleware/CheckSign.php @@ -0,0 +1,35 @@ +input('app_id'); + $time=$request->input('time'); //时间戳 + $nonce=$request->input('nonce'); + $sign=$request->input('sign'); + $timeDiff = abs(time() - $time); // 获取时间差的绝对值 + + if ($timeDiff >= 600) return \Yz::echoError1('时间异常'); + $cha_s=DB::table('outside_user')->where(['app_id'=>$app_id])->get(); + if(!count($cha_s)==1) return \Yz::echoError1('第三方用户不存在'); + $s_sign=strtoupper(md5($app_id.$time.$nonce.$cha_s[0]->app_secrect)); + if($sign<>$s_sign) return \Yz::echoError1('签名验证失败'); + + return $next($request); + } +} diff --git a/Laravel/app/Http/Middleware/CheckToken.php b/Laravel/app/Http/Middleware/CheckToken.php new file mode 100644 index 0000000..ed03902 --- /dev/null +++ b/Laravel/app/Http/Middleware/CheckToken.php @@ -0,0 +1,32 @@ +attributes->add($payload);//添加参数 + + return $next($request); + }else { + // return response()->json([$payload]); + return response($payload); + } + } +} diff --git a/Laravel/app/Http/Middleware/EncryptCookies.php b/Laravel/app/Http/Middleware/EncryptCookies.php new file mode 100644 index 0000000..867695b --- /dev/null +++ b/Laravel/app/Http/Middleware/EncryptCookies.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/Laravel/app/Http/Middleware/Log.php b/Laravel/app/Http/Middleware/Log.php new file mode 100644 index 0000000..6e515d0 --- /dev/null +++ b/Laravel/app/Http/Middleware/Log.php @@ -0,0 +1,78 @@ +getContent(); + $data = json_decode($content, true); // 解码响应内容为关联数组 + + // 在关联数组中添加 code 字段 + // $data['code'] = 200; + $data['code'] = $response->getStatusCode(); + $modifiedContent = json_encode($data); // 编码修改后的关联数组为 JSON 字符串 + $response->setContent($modifiedContent); + if(env('REQUEST_LOG') and $response->getStatusCode()==200){ //如果返回状态为200进行log + + $ip=self::getTrustedProxiesIp(); //真实ip + $request_header=$request->header(); //请求头 + // dd($response); + $response_data = $response->getData(); //返回data,json格式 + $post_data=$request->post(); //post请求数据 + $get_data=$request->query(); //get请求 + $request_url=$request->getPathInfo();//访问的接口地址 + $log=app()->make(LogService::class); + $log->RequestLog([ + 'ip'=>$ip, + 'response_data'=>$response_data, + 'request_header'=>$request_header, + 'post_data'=>$post_data, + 'get_data'=>$get_data, + 'request_url'=>$request_url, + ],$insert_id); + } + + + return $response; + } + public static function getTrustedProxiesIp(){ //获取用户真实ip + \request()->setTrustedProxies(\request()->getClientIps(),Request::HEADER_X_FORWARDED_FOR); + return \request()->getClientIp(); + } + + public static function requestLog($request,$insert_id){ //记录请求时日志,不含返回信息 + if(env('REQUEST_LOG') ){ //如果返回状态为200进行log + $ip=self::getTrustedProxiesIp(); //真实ip + $request_header=$request->header(); //请求头 + $post_data=$request->post(); //post请求数据 + $get_data=$request->query(); //get请求 + $request_url=$request->getPathInfo();//访问的接口地址 + $log=app()->make(LogService::class); + return $log->RequestLog([ + 'ip'=>$ip, + 'request_header'=>$request_header, + 'post_data'=>$post_data, + 'get_data'=>$get_data, + 'request_url'=>$request_url, + ],$insert_id); + } + + } +} diff --git a/Laravel/app/Http/Middleware/PreventRequestsDuringMaintenance.php b/Laravel/app/Http/Middleware/PreventRequestsDuringMaintenance.php new file mode 100644 index 0000000..74cbd9a --- /dev/null +++ b/Laravel/app/Http/Middleware/PreventRequestsDuringMaintenance.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/Laravel/app/Http/Middleware/RedirectIfAuthenticated.php b/Laravel/app/Http/Middleware/RedirectIfAuthenticated.php new file mode 100644 index 0000000..a2813a0 --- /dev/null +++ b/Laravel/app/Http/Middleware/RedirectIfAuthenticated.php @@ -0,0 +1,32 @@ +check()) { + return redirect(RouteServiceProvider::HOME); + } + } + + return $next($request); + } +} diff --git a/Laravel/app/Http/Middleware/TrimStrings.php b/Laravel/app/Http/Middleware/TrimStrings.php new file mode 100644 index 0000000..88cadca --- /dev/null +++ b/Laravel/app/Http/Middleware/TrimStrings.php @@ -0,0 +1,19 @@ + + */ + protected $except = [ + 'current_password', + 'password', + 'password_confirmation', + ]; +} diff --git a/Laravel/app/Http/Middleware/TrustHosts.php b/Laravel/app/Http/Middleware/TrustHosts.php new file mode 100644 index 0000000..7186414 --- /dev/null +++ b/Laravel/app/Http/Middleware/TrustHosts.php @@ -0,0 +1,20 @@ + + */ + public function hosts() + { + return [ + $this->allSubdomainsOfApplicationUrl(), + ]; + } +} diff --git a/Laravel/app/Http/Middleware/TrustProxies.php b/Laravel/app/Http/Middleware/TrustProxies.php new file mode 100644 index 0000000..3391630 --- /dev/null +++ b/Laravel/app/Http/Middleware/TrustProxies.php @@ -0,0 +1,28 @@ +|string|null + */ + protected $proxies; + + /** + * The headers that should be used to detect proxies. + * + * @var int + */ + protected $headers = + Request::HEADER_X_FORWARDED_FOR | + Request::HEADER_X_FORWARDED_HOST | + Request::HEADER_X_FORWARDED_PORT | + Request::HEADER_X_FORWARDED_PROTO | + Request::HEADER_X_FORWARDED_AWS_ELB; +} diff --git a/Laravel/app/Http/Middleware/VerifyCsrfToken.php b/Laravel/app/Http/Middleware/VerifyCsrfToken.php new file mode 100644 index 0000000..9e86521 --- /dev/null +++ b/Laravel/app/Http/Middleware/VerifyCsrfToken.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/Laravel/app/Lib/HSM.php b/Laravel/app/Lib/HSM.php new file mode 100644 index 0000000..713de38 --- /dev/null +++ b/Laravel/app/Lib/HSM.php @@ -0,0 +1,66 @@ +self::$keyIndex, + "encAlg"=>self::$encAlg, + "iv"=>self::$iv, + "plainData"=>$str + ]; + $data=json_encode($data); + $encryptStr=self::post($url,$data); + $r_data=json_decode($encryptStr, true); + // dd($r_data); + if($r_data['status']==0){ + return ['encrypt_str'=>$r_data['body']['cipherData'],'status'=>true]; + }else{ + return ['status'=>false]; + } + } + //解密 + public static function HsmDecrypt($str){ + $url= self::$baseurl."/api/hsm/sym/symDecryptInternalForKEK"; + $data=[ + "keyIndex"=>self::$keyIndex, + "encAlg"=>self::$encAlg, + "iv"=>self::$iv, + "cipherData"=>$str + ]; + $data=json_encode($data); + $encryptStr=self::post($url,$data); + $r_data=json_decode($encryptStr, true); + if($r_data['status']==0){ + return ['decrypt_str'=>hex2bin($r_data['body']['plain']),'status'=>true]; + }else{ + return ['status'=>false]; + } + } + public function post($url, $data_string) + { + $curl = curl_init(); + curl_setopt($curl, CURLOPT_URL, $url); + curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl, CURLOPT_POST, true); + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); + curl_setopt($curl, CURLOPT_HTTPHEADER, [ + 'Content-Type: application/json; charset=utf-8', + 'Content-Length: ' . strlen($data_string) + ]); + curl_setopt($curl, CURLOPT_POSTFIELDS, $data_string); + $r = curl_exec($curl); + curl_close($curl); + return $r; + } +} diff --git a/Laravel/app/Lib/JWT.php b/Laravel/app/Lib/JWT.php new file mode 100644 index 0000000..ddcdc5d --- /dev/null +++ b/Laravel/app/Lib/JWT.php @@ -0,0 +1,132 @@ +date('Y-m-d H:i:s',time())) //判断Token是否过期 + { + $result['status']='OK'; + $result['tokentype']=$payload['tokentype']; + $result['role']=$payload['role']; + $result['userid']=$payload['userid']; + $result['meg']= 'Token验证通过'; + }else{ + $result['status']='Token_TimeOut'; + $result['meg']= 'Token已过期,请返回登录界面重新授权'; + $result['code']=10002; + } + + } + else{ + $result['status']='Toke_Error'; + $result['meg']= '签名异常,拒绝操作!'; + $result['code']=10001; + } + return $result; + } + + +//URL安全的字符串编码: + static function urlsafe_b64encode($string) { + $data = base64_encode($string); + $data = str_replace(array('+','/','='),array('-','_',''),$data); + return $data; + } + +//URL安全的字符串解码: + static function urlsafe_b64decode($string) { + $data = str_replace(array('-','_'),array('+','/'),$string); + $mod4 = strlen($data) % 4; + if ($mod4) { + $data .= substr('====', $mod4); + } + return base64_decode($data); + } + +} diff --git a/Laravel/app/Lib/UKEY.php b/Laravel/app/Lib/UKEY.php new file mode 100644 index 0000000..b1170ef --- /dev/null +++ b/Laravel/app/Lib/UKEY.php @@ -0,0 +1,97 @@ +self::$appName, + 'length'=>16 + ]; + $random=''; + $res=self::post(self::$url.'/api/common/genRandom',json_encode($c));//获取随机数 + if($res['status']==0){ + $random=$res['body']['random']; + $info['random']=$random; + $info['signData']=self::signData($random); + $info['serverCert']=self::GetServerCert(); + } + + return $info; + } + //数据签名 + public static function signData($oriData){ + $c=[ + 'appName'=>self::$appName, + 'oriData'=>$oriData + ]; + $sign=''; + $res=self::post(self::$url.'/api/pkcs1/signData',json_encode($c)); + if($res['status']==0){ + $sign=$res['body']['p1Sign']; + } + return $sign; + } + //获取服务器证书 + public static function GetServerCert(){ + $c=[ + 'appName'=>self::$appName, + ]; + $cert=''; + $res=self::post(self::$url.'/api/cert/getServerCertificate',json_encode($c)); + if($res['status']==0){ + $cert=$res['body']['base64Cert']; + } + return $cert; + } + //服务端验证客户端证书有效性,证书有效返回1,证书无效情况下:-1为不是所信任的根,-2为超过 + //有效期,-3为作废证书,-4已加入黑名单,-5证书未生效, 0 未知错误 + public static function CheckCert($cert){ + $c=[ + 'appName'=>self::$appName, + 'cert'=>$cert + ]; + $validRes=''; + $res=self::post(self::$url.'/api/cert/validateCert',json_encode($c)); + if($res['status']==0){ + $validRes=$res['body']['validRes']; + } + return $validRes; + } + //验证数据签名 返回数据签名验证结果,true 验证通过,false 验证失败 + public static function CheckSign($cert,$oriData,$sign){ + $c=[ + 'appName'=>self::$appName, + 'cert'=>$cert, + 'oriData'=>$oriData, + 'sign'=>$sign + ]; + $validRes=false; + $res=self::post(self::$url.'/api/pkcs1/verifySignData',json_encode($c)); + if($res['status']==0){ + $validRes=$res['body']['verifyRes']; + } + return $validRes; + } + + public function post($url, $data_string) + { + $curl = curl_init(); + curl_setopt($curl, CURLOPT_URL, $url); + curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl, CURLOPT_POST, true); + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); + curl_setopt($curl, CURLOPT_HTTPHEADER, [ + 'Content-Type: application/json; charset=utf-8', + 'Content-Length: ' . strlen($data_string) + ]); + curl_setopt($curl, CURLOPT_POSTFIELDS, $data_string); + $r = curl_exec($curl); + curl_close($curl); + + return json_decode($r,true); + } +} diff --git a/Laravel/app/Lib/XTSign.php b/Laravel/app/Lib/XTSign.php new file mode 100644 index 0000000..0b207e4 --- /dev/null +++ b/Laravel/app/Lib/XTSign.php @@ -0,0 +1,107 @@ +self::BaseUrl."/coss/service/v1/addUser", //注册 + 'getAuthCode'=>self::BaseUrl."/coss/service/v1/getAuthCode", //产生激活码 + 'addSignJob'=>self::BaseUrl."/coss/service/v1/addSignJob", //添加签名任务 + 'verifySignData'=>self::BaseUrl."/coss/service/v1/verifySignData", //验签接口 3.4.9.3 + 'getCertInfo'=>self::BaseUrl."/coss/service/v1/getCertInfo", //解析证书信息 + ]; + + //系统签名接口调用 + public static function XTRequest($url,$data){ + if(!isset(self::ApiList[$url])) return \Yz::echoError1("接口不存在"); + $url= self::ApiList[$url]; + $baseData=[ + "version"=>"1.0", + "appId"=>self::Appid, + "signAlgo"=>"HMAC", + ]; + + $data=array_merge($baseData, $data); + + $sign=self::Sign($data); + $data= array_merge($data,['signature'=>$sign]); + // dd($data); + $data=json_encode($data); + $encryptStr=self::post($url,$data); + $r_data=json_decode($encryptStr, true); + if($r_data['status']==200){ + return \Yz::Return(true,$r_data['message'],$r_data['data']); + }else{ + return \Yz::echoError1($r_data['message']); + } + + + } + //产生激活码 +// public static function getAuthCode(){ +// $url= self::$baseUrl."/coss/service/v1/getAuthCode"; +// $data=[ +// "version"=>"1.0", +// "appId"=>self::$appid, +// "signAlgo"=>"HMAC", +// "userId"=>"915b164cd8e883f7fb289e3bcf34ac68d971c7e1058f18bcb24ad33ec7a201e1", +// ]; +// $sign=self::Sign($data); +// $data= array_merge($data,['signature'=>$sign]); +// // dd($data); +// $data=json_encode($data); +// $encryptStr=self::post($url,$data); +// $r_data=json_decode($encryptStr, true); +// +// return $r_data; +// } + public static function Sign($parameters){ + // 定义 M 集合内的参数值 +// $parameters = array( +// "key1" => "value1", +// "key2" => "value2", +// // ... +// ); + +// 按照参数名的 ASCII 码从小到大排序 + ksort($parameters); + +// 拼接参数为 URL 键值对字符串 + $stringA = ""; + foreach ($parameters as $key => $value) { + if ($value === "") { + // 参数值为空,进行相应的处理 + // 比如跳过该参数或者抛出异常 + continue; + } + $stringA .= $key . "=" . $value . "&"; + } + $stringA = rtrim($stringA, "&"); + +// HMAC 运算 + $secretKey =self::Key; + $signature = base64_encode(hash_hmac("sha256", $stringA, $secretKey, true)); + return $signature; + + } + + public function post($url, $data_string) + { + $curl = curl_init(); + curl_setopt($curl, CURLOPT_URL, $url); + curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl, CURLOPT_POST, true); + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); + curl_setopt($curl, CURLOPT_HTTPHEADER, [ + 'Content-Type: application/json; charset=utf-8', + 'Content-Length: ' . strlen($data_string) + ]); + curl_setopt($curl, CURLOPT_POSTFIELDS, $data_string); + $r = curl_exec($curl); + curl_close($curl); + return $r; + } +} diff --git a/Laravel/app/Lib/Yz.php b/Laravel/app/Lib/Yz.php new file mode 100644 index 0000000..2bb8947 --- /dev/null +++ b/Laravel/app/Lib/Yz.php @@ -0,0 +1,30 @@ +json($result)->setEncodingOptions(JSON_UNESCAPED_UNICODE); + } + public static function echoError($msg){ + $result=array(); + $result['status']='no'; + $result['msg']=$msg; + return response()->json($result)->setEncodingOptions(JSON_UNESCAPED_UNICODE); + } + public static function echoError1($msg){ + $result=array(); + $result['status']=false; + $result['msg']=$msg; + return response()->json($result)->setEncodingOptions(JSON_UNESCAPED_UNICODE); + } + + public static function Return($status,$msg,$data=[]){ + $result=array(); + $result['status']=$status; + $result['msg']=$msg; + $result['data']=$data; + return $result; + } +} + diff --git a/Laravel/app/Models/User.php b/Laravel/app/Models/User.php new file mode 100644 index 0000000..8996368 --- /dev/null +++ b/Laravel/app/Models/User.php @@ -0,0 +1,44 @@ + + */ + protected $fillable = [ + 'name', + 'email', + 'password', + ]; + + /** + * The attributes that should be hidden for serialization. + * + * @var array + */ + protected $hidden = [ + 'password', + 'remember_token', + ]; + + /** + * The attributes that should be cast. + * + * @var array + */ + protected $casts = [ + 'email_verified_at' => 'datetime', + ]; +} diff --git a/Laravel/app/Providers/AppServiceProvider.php b/Laravel/app/Providers/AppServiceProvider.php new file mode 100644 index 0000000..ee8ca5b --- /dev/null +++ b/Laravel/app/Providers/AppServiceProvider.php @@ -0,0 +1,28 @@ + + */ + protected $policies = [ + // 'App\Models\Model' => 'App\Policies\ModelPolicy', + ]; + + /** + * Register any authentication / authorization services. + * + * @return void + */ + public function boot() + { + $this->registerPolicies(); + + // + } +} diff --git a/Laravel/app/Providers/BroadcastServiceProvider.php b/Laravel/app/Providers/BroadcastServiceProvider.php new file mode 100644 index 0000000..395c518 --- /dev/null +++ b/Laravel/app/Providers/BroadcastServiceProvider.php @@ -0,0 +1,21 @@ +> + */ + protected $listen = [ + Registered::class => [ + SendEmailVerificationNotification::class, + ], + ]; + + /** + * Register any events for your application. + * + * @return void + */ + public function boot() + { + // + } +} diff --git a/Laravel/app/Providers/RouteServiceProvider.php b/Laravel/app/Providers/RouteServiceProvider.php new file mode 100644 index 0000000..3bd3c81 --- /dev/null +++ b/Laravel/app/Providers/RouteServiceProvider.php @@ -0,0 +1,63 @@ +configureRateLimiting(); + + $this->routes(function () { + Route::prefix('api') + ->middleware('api') + ->namespace($this->namespace) + ->group(base_path('routes/api.php')); + + Route::middleware('web') + ->namespace($this->namespace) + ->group(base_path('routes/web.php')); + }); + } + + /** + * Configure the rate limiters for the application. + * + * @return void + */ + protected function configureRateLimiting() + { + RateLimiter::for('api', function (Request $request) { + return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip()); + }); + } +} diff --git a/Laravel/app/Services/Admin/GroupService.php b/Laravel/app/Services/Admin/GroupService.php new file mode 100644 index 0000000..440e5d1 --- /dev/null +++ b/Laravel/app/Services/Admin/GroupService.php @@ -0,0 +1,72 @@ +where('group_id', '=', $arr['groupid'])->delete(); + foreach ($arr['menuList'] as $v){ + // dd($v); + $i=DB::table('group_menu')->insert([ + 'group_id' => $arr['groupid'], + 'menu_id' => $v['id'], + ]); + } + DB::commit(); // 手动提交事务 + $result['status']='ok'; + } catch (\Exception $e) { + DB::rollback(); // 发生异常时手动回滚事务 + $result['status']='no'; + $result['msg']='操作失败'; + } + return $result; + } + public function Save($arr){ + $result=array(); + if($arr['type']=='save'){ + $query=DB::table('group')->insert([ + 'group_name' => $arr['info']['name'], + 'status' => 1, + ]); + }else{ + $query=DB::table('group') + ->where('id', $arr['info']['id']) + ->update([ + 'pid' => $arr['info']['pid'], + 'name' => $arr['info']['name'], + 'url' => $arr['info']['url'], + 'icon' => $arr['info']['icon'] + ]); + } + if($query){ + $result['status']='ok'; + }else{ + $result['status']='no'; + $result['msg']='操作失败'; + } + return $result; + + } +} diff --git a/Laravel/app/Services/Admin/MenuService.php b/Laravel/app/Services/Admin/MenuService.php new file mode 100644 index 0000000..8810803 --- /dev/null +++ b/Laravel/app/Services/Admin/MenuService.php @@ -0,0 +1,127 @@ +group==$arr['group']){ + $menulist=DB::select("select b.id,b.pid,b.order,b.icon, b.name,b.url from group_menu as a left join menu as b on a.menu_id=b.id where a.group_id =? and b.status=1 and b.is_menu=1",[$arr['group']]); + + $result['list']=$menulist; + $result['status']='ok'; + + }else{ + $result['status']='no'; + $result['msg']='权限不匹配'; + } + } + + return $result; + } + + public function GetList($arr){ + $result=array(); + $sql=''; + if( $arr['type']=='enable'){ + $sql=" and status=1"; + } + $query_p = DB::select("select * from menu where pid is null".$sql); + $result['list'] = []; + $i=0; + foreach ($query_p as $item) { + $query = DB::select("select * from menu where pid = ? and status=1 ".$sql, [$item->id]); + $child_items = []; + $result['list'][$i] = [ + 'id' => $item->id, + 'pid' => $item->pid, + 'name' => $item->name, + 'url' => $item->url, + 'icon' => $item->icon, + 'created_at' => $item->created_at, + 'updated_at' => $item->updated_at, + 'is_menu'=>$item->is_menu, + 'children' => [] // 子级节点先为空数组,稍后再填充 + ]; + $j=0; + foreach ($query as $child) { + $child_items[$j] = [ + 'id' => $child->id, + 'pid' => $child->pid, + 'name' => $child->name, + 'url' => $child->url, + 'icon' => $child->icon, + 'created_at' => $child->created_at, + 'updated_at' => $child->updated_at, + 'is_menu'=>$child->is_menu + // 'children' => [] // 子级节点先为空数组,稍后再填充 + ]; + $result['list'][$i]['children'][$j]=$child_items[$j]; + $j++; + } + + $i++; + } + + return $result; + } + public function GetFatherMenuList(){ + $result=array(); + $list=DB::table('menu')->where(['status'=>1,'pid'=>null])->get(); + if(count($list)){ + $result['status']='ok'; + $result['msg']='获取成功'; + $result['list']=$list; + }else{ + $result['status']='no'; + $result['msg']='未找到有效一级菜单'; + } + return $result; + } + public function AddMenu($arr){ + $result=array(); + //dd($arr); + $i=DB::table('menu')->insert([ + 'pid' => $arr['info']['pid'], + 'name' => $arr['info']['name'], + 'url' => $arr['info']['url'], + 'status'=>1, + 'is_menu'=>$arr['info']['is_menu'] + ]); + if($i){ + $result['status']='ok'; + $result['msg']='插入成功'; + }else{ + $result['status']='no'; + $result['msg']='操作失败'; + } + return $result; + } + public function EditMenu($arr){ + $result=array(); + $U=DB::table('menu') + ->where('id', $arr['info']['id']) + ->update([ + 'pid' => $arr['info']['pid'], + 'name' => $arr['info']['name'], + 'url' => $arr['info']['url'], + 'icon' => $arr['info']['icon'], + 'is_menu'=>$arr['info']['is_menu'] + + ]); + if($U){ + $result['status']='ok'; + $result['msg']='更新成功'; + }else{ + $result['status']='no'; + $result['msg']='操作失败'; + } + return $result; + } +} diff --git a/Laravel/app/Services/Admin/UserService.php b/Laravel/app/Services/Admin/UserService.php new file mode 100644 index 0000000..520212c --- /dev/null +++ b/Laravel/app/Services/Admin/UserService.php @@ -0,0 +1,128 @@ +c; + return $result; + } + public function Save($arr){ + $result=[]; + if($arr['info']['id']){ + $query=DB::table('users')->where(['id'=>$arr['info']['id']])->update([ + 'group' => $arr['info']['groupId'], + 'cn_name' => $arr['info']['cname'], + 'username' => $arr['info']['uname'], + 'status'=>$arr['info']['status'], + ]); + if($query){ + $result['status']='ok'; + $result['msg']='操作成功'; + }else{ + $result['status']='no'; + $result['msg']='操作失败,没有记录被更新'; + } + }else{ + $hash = password_hash('111111', PASSWORD_DEFAULT); + $c=DB::table('users')->where(['username'=>$arr['info']['uname']])->get(); + if(count($c)){ + $result['status']='no'; + $result['msg']='用户名已存在'; + return $result; + } + DB::beginTransaction(); + try { + $id=DB::table('users')->insertGetId([ + 'group' => $arr['info']['groupId'], + 'cn_name' => $arr['info']['cname'], + 'username' => $arr['info']['uname'], + 'pwd' => $hash, + 'status'=>1 + ]); + + DB::commit(); // 手动提交事务 + if($id){ + $result['status']='ok'; + $result['msg']='操作成功'; + } + } catch (\Exception $e) { + DB::rollback(); // 发生异常时手动回滚事务 + $result['status']='no'; + $result['msg']='操作失败'; + } + + } + + return $result; + } + public function GetDetail($arr){ + $c=DB::table('users')->select(['id','cn_name','username','status','group','img'])->where(['id'=>$arr['id']])->whereIn('status',[0,1])->get(); + if(count($c)){ + $result['info']=$c; + $result['status']='ok'; + $result['msg']='成功'; + }else{ + $result['status']='no'; + $result['msg']='获取详情失败'; + } + return $result; + } + public function ChangePwd($arr){ + $result=array(); + $s=app()->make(LoginService::class); + $check=$s->CheckPwd(['userid'=>$arr['id'],'password'=>$arr['oldpwd']]); + if($check['status']){ + $hash = password_hash($arr['newpwd'], PASSWORD_DEFAULT); + $u=DB::table('users')->where(['id'=>$arr['id'],'status'=>1])->update(['pwd'=>$hash]); + if($u){ + $result['status']='ok'; + }else{ + $result['status']='no'; + $result['msg']='修改密码失败'; + } + }else{ + $result=$check; + } + return $result; + } + + //检查用户是否有某个目录的权限 + //参数['userid'=>$userid,'group'=>$group,'url'=>$url] + public function CheckMenuAuth($arr){ + $list=['index','dashboard']; + $q=DB::select("select * from users where id=? and `group` =?",[$arr['userid'],$arr['group']]); + if(count($q)==1){ + if(in_array($arr['url'],$list)){ + return \Yz::Return(true,'',[]); + } + $check=DB::select("select * from (select menu_id from group_menu where group_id=? ) as a inner JOIN (select id from menu where url = ? ) as b on a.menu_id=b.id +",[$arr['group'],$arr['url']]); + if(count($check)>0){ + return \Yz::Return(true,'',[]); + }else{ + return \Yz::echoError1('暂无权限'); + } + }else{ + return \Yz::echoError1('权限不匹配'); + } + } + + //修改自身信息 + public function ChangInfo($arr){ + $u=DB::table('users')->where(['id'=>$arr['userid']])->update([ + 'cn_name'=>$arr['name'], + 'img'=>$arr['headimg'], + ]); + if($u>0){ + return \Yz::Return(true,'操作成功',[]); + }else{ + return \Yz::echoError1('更新失败'); + } + } +} diff --git a/Laravel/app/Services/Admin/YeWu/HealthCalendarService.php b/Laravel/app/Services/Admin/YeWu/HealthCalendarService.php new file mode 100644 index 0000000..92e7731 --- /dev/null +++ b/Laravel/app/Services/Admin/YeWu/HealthCalendarService.php @@ -0,0 +1,137 @@ +$info,'group'=>$group,'userid'=>$userid] + + public function CreateCalendar($arr){ + + //如果是体检机构为自己创建日历判断权限,是否是为自己创建,否则拒绝 + if($arr['group']==7){ + $cha=DB::table('medical_institution')->where(['link_user_id'=>$arr['userid']])->get(); + if($cha[0]->id <> $arr['info']['orgId']){ + return \Yz::echoError1('无权限为此机构创建体检日历'); + } + } + $startDate = Carbon::parse($arr['info']['dateRange'][0]); + $endDate = Carbon::parse($arr['info']['dateRange'][1]); + $currentDate = $startDate; + $time=$arr['info']['timeRange'][0].'--'.$arr['info']['timeRange'][1]; + $j=0; + while ($currentDate->lte($endDate)) { + $day= $currentDate->format('Y-m-d') . "\n"; + $weekday=date('N',strtotime($day)); + if (in_array($weekday,$arr['info']['xingqi'] )) { //判断循环到的日期那天的星期是否在勾选的星期内,是则进行添加 + $i=DB::table('institutional_calendar')->insert([ + 'institution_id'=>$arr['info']['orgId'], + 'date'=>$day, + 'week'=>$weekday, + 'time'=>$time, + 'end_time'=>$day.' '.$arr['info']['endTime'], + 'count'=>$arr['info']['count'], + 'status'=>1 + ]); + $j++; + } + + $currentDate->addDay(); // 增加一天 + } + + return \Yz::Return(true,'成功创建'.$j.'天体检日历',[]); + } + //获取体检机构日历 + //参数['group'=>$group,'userid'=>$userid,'page'=>$page,'pageSize'=>$pageSize,'searchInfo'=>$searchInfo] + public function getList($arr){ + $sql=' where a.status in(0,1)'; + $canshu=array(); + + + + if($arr['searchInfo']['status']==99){ + $sql=' where a.status in(0,1)'; + } + if($arr['searchInfo']['status']==0){ + $sql=' where a.status in(0)'; + } + if($arr['searchInfo']['status']==1){ + $sql=' where a.status in(1)'; + } + + + if($arr['searchInfo']['dateRange']){ + + $sql=$sql . ' and a.date>=? and a.date<=? '; + array_push($canshu,$arr['searchInfo']['dateRange'][0],$arr['searchInfo']['dateRange'][1]); + } + if($arr['searchInfo']['xingqi']){ + $placeholders = rtrim(str_repeat('?,', count($arr['searchInfo']['xingqi'])), ','); + $sql=$sql . ' and a.week in('.$placeholders.') '; + foreach ($arr['searchInfo']['xingqi'] as $item){ + array_push($canshu,$item); + } + + } + + if($arr['group']==7){ + $cha=DB::table('medical_institution')->where(['link_user_id'=>$arr['userid']])->get(); + $sql=$sql .' and a.institution_id=?'; + array_push($canshu, $cha[0]->id); + }else{ + if($arr['searchInfo']['orgId']){ + + $sql=$sql .' and a.institution_id=?'; + array_push($canshu, $arr['searchInfo']['orgId']); + } + + } + array_push($canshu,($arr['page']-1)*$arr['pageSize'],$arr['pageSize']); + $query=DB::select("select a.*,b.org_name,c.usedcount from institutional_calendar as a left join medical_institution as b on a.institution_id=b.id LEFT JOIN (select calendar_id,count(*) as usedcount from appointment_record where status=1 group by calendar_id) as c on a.id=c.calendar_id ".$sql." order by a.date limit ?,?",$canshu); + $count=DB::select("select count(*) as c from institutional_calendar as a left join medical_institution as b on a.institution_id=b.id LEFT JOIN (select calendar_id,count(*) as usedcount from appointment_record where status=1 group by calendar_id) as c on a.id=c.calendar_id ".$sql,$canshu); + return \Yz::Return(true,'',['list'=>$query,'count'=>$count[0]->c]); + } + + //参数['list'=>$list,'group'=>$group,'userid'=>$userid] + public function Del($arr){ + $query = DB::table('institutional_calendar'); + if($arr['group']==7) { + $cha = DB::table('medical_institution')->select(['id'])->where(['link_user_id' => $arr['userid']])->get(); + $query->where('institution_id',$cha[0]->id); + } + $d=$query->whereIn('id',$arr['list'])->delete(); + if($d){ + return \Yz::Return(true,'',[]); + }else{ + return \Yz::Return(false,'删除失败',[]); + } + } + + + //参数['changeInfo'=>$changeInfo,'group'=>$group,'userid'=>$userid] + //修改日历信息 + public function ChangeInfo($arr){ + $u=0; + $query = DB::table('institutional_calendar'); + if($arr['group']==7) { + $cha = DB::table('medical_institution')->select(['id'])->where(['link_user_id' => $arr['userid']])->get(); + $query->where('institution_id',$cha[0]->id); + } + $query->whereIn('id',$arr['changeInfo']['list']); + if($arr['changeInfo']['type']=='status'){ + $u=$query->update(['status'=>$arr['changeInfo']['status']]); + } + if($arr['changeInfo']['type']=='count'){ + $u=$query->update(['count'=>$arr['changeInfo']['count']]); + } + if($u){ + return \Yz::Return(true,'成功更新'.$u.'条记录',[]); + }else{ + return \Yz::Return(false,'更新失败',[]); + } + } +} diff --git a/Laravel/app/Services/ConfigService.php b/Laravel/app/Services/ConfigService.php new file mode 100644 index 0000000..ced8996 --- /dev/null +++ b/Laravel/app/Services/ConfigService.php @@ -0,0 +1,37 @@ +select(['label','value'])->whereIn('label',$arr)->get(); + if(count($q)>0) { + $result = []; + foreach ($q as $k => $v) { + $result[$v->label] = $v->value; + } + return \Yz::Return(true, '查询成功', $result); + }else{ + return \Yz::Return(false, '查询失败'); + } + } + public function SaveConfig($name,$logo){ + $result=array(); + DB::beginTransaction(); + try { + $d= DB::table('configs')->where('label', '=', '站点名称')->update(['value'=>$name]); + $d= DB::table('configs')->where('label', '=', '站点图片')->update(['value'=>$logo]); + DB::commit(); // 手动提交事务 + return \Yz::Return(true, '操作成功'); + } catch (\Exception $e) { + DB::rollback(); // 发生异常时手动回滚事务 + return \Yz::Return(false, '操作失败'); + } + + + } +} diff --git a/Laravel/app/Services/LogService.php b/Laravel/app/Services/LogService.php new file mode 100644 index 0000000..eaa933b --- /dev/null +++ b/Laravel/app/Services/LogService.php @@ -0,0 +1,130 @@ +0){ + return DB::table($table_name)->where('id', $id)->update([ + 'response_data' => $response_data, + + ]); + }else{ + return DB::table($table_name)->insertGetId([ + 'request_ip' => $arr['ip'], + 'response_data' => $response_data, + 'header_data' => $header_data, + 'post_data' => $post_data, + 'get_data' => $get_data, + 'request_url' => $arr['request_url'], + 'create_time' => $formatted_date, + 'update_time' => $formatted_date + ]); + } + + + } + //获取日志表名称 + public function GetLogTableName(){ + $result=[]; + //获取日志表名称 + $tables = DB::select("SHOW TABLES LIKE '%" . 'zz_request_log_' . "%'"); + $tableNames = []; + + foreach($tables as $table) { + foreach($table as $tableName) { + $tableNames[] = $tableName; + } + } + $result['table_list']=$tableNames; + return \Yz::Return(true,'获取成功',$result); + } + + public function GetList($arr){ //获取日志列表 + $result=[]; + $table_name=$arr['searchInfo']['table_name']; + $page = $arr['page']; + $pagesize = $arr['pagesize']; + if(isset($table_name)){ + //获取接口列表 + $apilist=DB::table($table_name) + ->select('request_url') + ->groupBy('request_url') + ->get(); + $result['api_list']=$apilist; + + $list=DB::table($table_name); + if(isset($arr['searchInfo']['request_url'])) $list=$list->where('request_url',$arr['searchInfo']['request_url']); + if(isset($arr['searchInfo']['ziduan']) and isset($arr['searchInfo']['ziduan_value'])) $list=$list->where($arr['searchInfo']['ziduan'],'like','%'.$arr['searchInfo']['ziduan_value'].'%' ); + $count=$list->count(); + $list=$list->orderBy('id', 'desc')->skip(($page-1)*$pagesize)->take($pagesize)->get(); + + $result['list']=$list; + $result['count']=$count; + return \Yz::Return(true,'获取成功',$result); + }else{ + return \Yz::echoError1("请选择表名"); + } + + + } + + public static function CheckTableName(){ // 查看日志表是否存在,每月一个表,如果没有就创建 + $table_name='zz_request_log_' . date('ym'); + if(Schema::hasTable($table_name)){ + + }else{ + Schema::create($table_name, function (Blueprint $table) { + $table->id(); + $table->string('request_ip', 15); + $table->text('post_data'); + $table->text('get_data'); + $table->text('header_data'); + $table->text('response_data')->nullable(); + $table->string('request_url', 300); + $table->string('create_time', 30); + $table->string('update_time', 30); + $table->timestamps(); + }); + } + } + public static function JsonEncode($data){ //格式化数据,转json + $post_data =$data; + foreach ($post_data as $key => $post_datum) { + $str_len = mb_strlen(json_encode($post_datum, JSON_UNESCAPED_UNICODE)); + $str_size = $str_len / 1024; + if ($str_size > 10) { + if(is_array($post_data)){ + $post_data[$key]= 'Row size too large'; + }elseif(is_object($post_data)){ + $post_data->$key= 'Row size too large'; + }else{ + $post_data="data size too large"; + } + } + } + $post_data = json_encode($post_data, JSON_UNESCAPED_UNICODE); + $str_len = mb_strlen($post_data); + $str_size = $str_len / 1024; + if ($str_size > 40) $post_data = '{"data":"Row size too large"}'; + return $post_data; + } +} diff --git a/Laravel/app/Services/Login/LoginService.php b/Laravel/app/Services/Login/LoginService.php new file mode 100644 index 0000000..ca6922b --- /dev/null +++ b/Laravel/app/Services/Login/LoginService.php @@ -0,0 +1,77 @@ +select('id','pwd','group')->where([['username','=',$arr['username']],['status','=',1],['lock_to','<',$nowTime]])->get(); + if(count($query)==1){ + // $hash = password_hash($arr['password'], PASSWORD_DEFAULT); + // dd($query[0]->pwd); + $check=$this->CheckPwd(['userid'=>$query[0]->id,'password'=>$arr['password']]); + if($check['status']){ + $jwt= new JWT(); + $accessTimeout = $jwt -> GetGetSecretTimeOut(); + $refreshTimeout = $jwt -> GetRefreshTokenTimeOut(); + $access_token = $jwt->BuildJWT('yz','access',$query[0]->id,$query[0]->group,$accessTimeout); + $refresh_token = $jwt->BuildJWT('yz','refresh',$query[0]->id,'',$refreshTimeout); + if(!empty($arr['mian7'])){ + $mian7_token = $jwt->BuildJWT('yz','mian7',$query[0]->id,'',$jwt -> GetMian7TokenTimeOut()); + $result['mian7_token']=$mian7_token; + } + DB::table('users')->where(['id'=>$query[0]->id,'status'=>1])->update(['token'=>md5($refresh_token)]); + $result['token']=$access_token; + $result['refresh_token']=$refresh_token; + $result['status']='ok'; + }else{ + $result=$check; + } + + }else{ + $result['status']='no'; + $result['msg']='查询出错'; + } + }else{ + $result['status']='no'; + $result['msg']='缺少参数'; + } + return $result; + } + public function CheckPwd($arr){ + date_default_timezone_set('PRC'); + $nowTime=date('Y-m-d H:i:s',time()); + // 当前时间戳XXXX分 + $LockToTime=date('Y-m-d H:i:s', strtotime('+'.env('LOCK_TIME').'minute')); + + $query=DB::table('users')->select('pwd','times','lock_to')->where(['id'=>$arr['userid'],'status'=>1,['lock_to','<',$nowTime]])->get(); + if(count($query)==1){ + if (password_verify($arr['password'],$query[0]->pwd)) { + $u=DB::table('users')->where(['id'=>$arr['userid']])->update(['times'=>env('LOGOIN_CHECK_FAIL_TIMES')]); + return ['status'=>true,'msg'=>'ok']; + }else{ + $shengyuTimes=$query[0]->times; + if($shengyuTimes==0){ + $u=DB::table('users')->where(['id'=>$arr['userid']])->update(['times'=>env('LOGOIN_CHECK_FAIL_TIMES')]); + $shengyuTimes=env('LOGOIN_CHECK_FAIL_TIMES'); + } + //减少剩余失败次数 + $jian=DB::table('users')->where(['id'=>$arr['userid'],'status'=>1])->decrement('times',1); + if($shengyuTimes<=1 and $jian==1){ + $u=DB::table('users')->where(['id'=>$arr['userid']])->update(['lock_to'=>$LockToTime]); + } + return ['status'=>false,'msg'=>'密码不正确,剩余次数'.($shengyuTimes-1)]; + } + }else{ + return ['status'=>false,'msg'=>'用户不存在或因密码错误次数过多暂时被锁定,请稍后再试']; + } + + } +} diff --git a/Laravel/app/Services/TokenService.php b/Laravel/app/Services/TokenService.php new file mode 100644 index 0000000..148fb70 --- /dev/null +++ b/Laravel/app/Services/TokenService.php @@ -0,0 +1,43 @@ +where(['id'=>$cc['userid'],'type'=>1,'del'=>2,'token'=>md5($OldRefreshToken)])->update(['token'=>md5($refresh_token)]); + $result['token']=$access_token; + $result['refresh_token']=$refresh_token; + + if($u==1){ + $result['status']=true; + }else{ + $result['status']=false; + $result['msg']='刷新授权失败'; + } + // var_dump($result); + + }else{ + $result['status']=false; + $result['msg']='无效令牌'; + } + return $result; + } +} diff --git a/Laravel/artisan b/Laravel/artisan new file mode 100644 index 0000000..67a3329 --- /dev/null +++ b/Laravel/artisan @@ -0,0 +1,53 @@ +#!/usr/bin/env php +make(Illuminate\Contracts\Console\Kernel::class); + +$status = $kernel->handle( + $input = new Symfony\Component\Console\Input\ArgvInput, + new Symfony\Component\Console\Output\ConsoleOutput +); + +/* +|-------------------------------------------------------------------------- +| Shutdown The Application +|-------------------------------------------------------------------------- +| +| Once Artisan has finished running, we will fire off the shutdown events +| so that any final work may be done by the application before we shut +| down the process. This is the last thing to happen to the request. +| +*/ + +$kernel->terminate($input, $status); + +exit($status); diff --git a/Laravel/bootstrap/app.php b/Laravel/bootstrap/app.php new file mode 100644 index 0000000..037e17d --- /dev/null +++ b/Laravel/bootstrap/app.php @@ -0,0 +1,55 @@ +singleton( + Illuminate\Contracts\Http\Kernel::class, + App\Http\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Console\Kernel::class, + App\Console\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Debug\ExceptionHandler::class, + App\Exceptions\Handler::class +); + +/* +|-------------------------------------------------------------------------- +| Return The Application +|-------------------------------------------------------------------------- +| +| This script returns the application instance. The instance is given to +| the calling script so we can separate the building of the instances +| from the actual running of the application and sending responses. +| +*/ + +return $app; diff --git a/Laravel/bootstrap/cache/.gitignore b/Laravel/bootstrap/cache/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/Laravel/bootstrap/cache/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/Laravel/composer.json b/Laravel/composer.json new file mode 100644 index 0000000..003e598 --- /dev/null +++ b/Laravel/composer.json @@ -0,0 +1,65 @@ +{ + "name": "laravel/laravel", + "type": "project", + "description": "The Laravel Framework.", + "keywords": ["framework", "laravel"], + "license": "MIT", + "require": { + "php": "^7.3|^8.0", + "fruitcake/laravel-cors": "^2.0", + "guzzlehttp/guzzle": "^7.0.1", + "laravel/framework": "^8.75", + "laravel/sanctum": "^2.11", + "laravel/tinker": "^2.5" + }, + "require-dev": { + "facade/ignition": "^2.5", + "fakerphp/faker": "^1.9.1", + "laravel/sail": "^1.0.1", + "mockery/mockery": "^1.4.4", + "nunomaduro/collision": "^5.10", + "phpunit/phpunit": "^9.5.10" + }, + "autoload": { + "classmap": [ + "app/Lib" + ], + "psr-4": { + "App\\": "app/", + "Database\\Factories\\": "database/factories/", + "Database\\Seeders\\": "database/seeders/" + } + }, + "autoload-dev": { + "psr-4": { + "Tests\\": "tests/" + } + }, + "scripts": { + "post-autoload-dump": [ + "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", + "@php artisan package:discover --ansi" + ], + "post-update-cmd": [ + "@php artisan vendor:publish --tag=laravel-assets --ansi --force" + ], + "post-root-package-install": [ + "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" + ], + "post-create-project-cmd": [ + "@php artisan key:generate --ansi" + ] + }, + "extra": { + "laravel": { + "dont-discover": [] + } + }, + "config": { + "optimize-autoloader": true, + "preferred-install": "dist", + "sort-packages": true + }, + "minimum-stability": "dev", + "prefer-stable": true +} diff --git a/Laravel/composer.lock b/Laravel/composer.lock new file mode 100644 index 0000000..9788af3 --- /dev/null +++ b/Laravel/composer.lock @@ -0,0 +1,8427 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "c61ff82cbf0142a401a48a8161e1595a", + "packages": [ + { + "name": "asm89/stack-cors", + "version": "v2.1.1", + "source": { + "type": "git", + "url": "https://github.com/asm89/stack-cors.git", + "reference": "73e5b88775c64ccc0b84fb60836b30dc9d92ac4a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/asm89/stack-cors/zipball/73e5b88775c64ccc0b84fb60836b30dc9d92ac4a", + "reference": "73e5b88775c64ccc0b84fb60836b30dc9d92ac4a", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2|^8.0", + "symfony/http-foundation": "^4|^5|^6", + "symfony/http-kernel": "^4|^5|^6" + }, + "require-dev": { + "phpunit/phpunit": "^7|^9", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "psr-4": { + "Asm89\\Stack\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alexander", + "email": "iam.asm89@gmail.com" + } + ], + "description": "Cross-origin resource sharing library and stack middleware", + "homepage": "https://github.com/asm89/stack-cors", + "keywords": [ + "cors", + "stack" + ], + "support": { + "issues": "https://github.com/asm89/stack-cors/issues", + "source": "https://github.com/asm89/stack-cors/tree/v2.1.1" + }, + "time": "2022-01-18T09:12:03+00:00" + }, + { + "name": "brick/math", + "version": "0.9.3", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/ca57d18f028f84f777b2168cd1911b0dee2343ae", + "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-json": "*", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", + "vimeo/psalm": "4.9.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "brick", + "math" + ], + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/0.9.3" + }, + "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/brick/math", + "type": "tidelift" + } + ], + "time": "2021-08-15T20:50:18+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "v3.0.1", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "0992cc19268b259a39e86f296da5f0677841f42c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/0992cc19268b259a39e86f296da5f0677841f42c", + "reference": "0992cc19268b259a39e86f296da5f0677841f42c", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^3.14" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.1" + }, + "time": "2021-08-13T13:06:58+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.0.8", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/f9301a5b2fb1216b2b08f02ba04dc45423db6bff", + "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^11.0", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.3", + "phpunit/phpunit": "^8.5 || ^9.5", + "vimeo/psalm": "^4.25 || ^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.8" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2023-06-16T13:40:37+00:00" + }, + { + "name": "doctrine/lexer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9.0", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.11" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2022-02-28T11:07:21+00:00" + }, + { + "name": "dragonmantank/cron-expression", + "version": "v3.3.3", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", + "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2|^8.0", + "webmozart/assert": "^1.0" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-webmozart-assert": "^1.0", + "phpunit/phpunit": "^7.0|^8.0|^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.3" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2023-08-10T19:36:49+00:00" + }, + { + "name": "egulias/email-validator", + "version": "2.1.25", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0dbf5d78455d4d6a41d186da50adc1122ec066f4", + "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "doctrine/lexer": "^1.0.1", + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.10" + }, + "require-dev": { + "dominicsayers/isemail": "^3.0.7", + "phpunit/phpunit": "^4.8.36|^7.5.15", + "satooshi/php-coveralls": "^1.0.1" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/2.1.25" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2020-12-29T14:50:06+00:00" + }, + { + "name": "fruitcake/laravel-cors", + "version": "v2.2.0", + "source": { + "type": "git", + "url": "https://github.com/fruitcake/laravel-cors.git", + "reference": "783a74f5e3431d7b9805be8afb60fd0a8f743534" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/783a74f5e3431d7b9805be8afb60fd0a8f743534", + "reference": "783a74f5e3431d7b9805be8afb60fd0a8f743534", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "asm89/stack-cors": "^2.0.1", + "illuminate/contracts": "^6|^7|^8|^9", + "illuminate/support": "^6|^7|^8|^9", + "php": ">=7.2" + }, + "require-dev": { + "laravel/framework": "^6|^7.24|^8", + "orchestra/testbench-dusk": "^4|^5|^6|^7", + "phpunit/phpunit": "^6|^7|^8|^9", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + }, + "laravel": { + "providers": [ + "Fruitcake\\Cors\\CorsServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Fruitcake\\Cors\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fruitcake", + "homepage": "https://fruitcake.nl" + }, + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "Adds CORS (Cross-Origin Resource Sharing) headers support in your Laravel application", + "keywords": [ + "api", + "cors", + "crossdomain", + "laravel" + ], + "support": { + "issues": "https://github.com/fruitcake/laravel-cors/issues", + "source": "https://github.com/fruitcake/laravel-cors/tree/v2.2.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "abandoned": true, + "time": "2022-02-23T14:25:13+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "a878d45c1914464426dc94da61c9e1d36ae262a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/a878d45c1914464426dc94da61c9e1d36ae262a8", + "reference": "a878d45c1914464426dc94da61c9e1d36ae262a8", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.28 || ^9.5.21" + }, + "type": "library", + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2022-07-30T15:56:11+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.7.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/fb7566caccf22d74d1ab270de3551f72a58399f5", + "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5.3 || ^2.0", + "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", + "ext-curl": "*", + "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.29 || ^9.5.23", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.7.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2023-05-21T14:04:53+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "111166291a0f8130081195ac4556a5587d7f1b5d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/111166291a0f8130081195ac4556a5587d7f1b5d", + "reference": "111166291a0f8130081195ac4556a5587d7f1b5d", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", + "phpunit/phpunit": "^8.5.29 || ^9.5.23" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/2.0.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2023-08-03T15:11:55+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.6.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "8bd7c33a0734ae1c5d074360512beb716bef3f77" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/8bd7c33a0734ae1c5d074360512beb716bef3f77", + "reference": "8bd7c33a0734ae1c5d074360512beb716bef3f77", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.29 || ^9.5.23" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.6.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2023-08-03T15:06:02+00:00" + }, + { + "name": "laravel/framework", + "version": "v8.83.27", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "e1afe088b4ca613fb96dc57e6d8dbcb8cc2c6b49" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/e1afe088b4ca613fb96dc57e6d8dbcb8cc2c6b49", + "reference": "e1afe088b4ca613fb96dc57e6d8dbcb8cc2c6b49", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "doctrine/inflector": "^1.4|^2.0", + "dragonmantank/cron-expression": "^3.0.2", + "egulias/email-validator": "^2.1.10", + "ext-json": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "laravel/serializable-closure": "^1.0", + "league/commonmark": "^1.3|^2.0.2", + "league/flysystem": "^1.1", + "monolog/monolog": "^2.0", + "nesbot/carbon": "^2.53.1", + "opis/closure": "^3.6", + "php": "^7.3|^8.0", + "psr/container": "^1.0", + "psr/log": "^1.0|^2.0", + "psr/simple-cache": "^1.0", + "ramsey/uuid": "^4.2.2", + "swiftmailer/swiftmailer": "^6.3", + "symfony/console": "^5.4", + "symfony/error-handler": "^5.4", + "symfony/finder": "^5.4", + "symfony/http-foundation": "^5.4", + "symfony/http-kernel": "^5.4", + "symfony/mime": "^5.4", + "symfony/process": "^5.4", + "symfony/routing": "^5.4", + "symfony/var-dumper": "^5.4", + "tijsverkoyen/css-to-inline-styles": "^2.2.2", + "vlucas/phpdotenv": "^5.4.1", + "voku/portable-ascii": "^1.6.1" + }, + "conflict": { + "tightenco/collect": "<5.5.33" + }, + "provide": { + "psr/container-implementation": "1.0", + "psr/simple-cache-implementation": "1.0" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/broadcasting": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/collections": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/contracts": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/hashing": "self.version", + "illuminate/http": "self.version", + "illuminate/log": "self.version", + "illuminate/macroable": "self.version", + "illuminate/mail": "self.version", + "illuminate/notifications": "self.version", + "illuminate/pagination": "self.version", + "illuminate/pipeline": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/testing": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.198.1", + "doctrine/dbal": "^2.13.3|^3.1.4", + "filp/whoops": "^2.14.3", + "guzzlehttp/guzzle": "^6.5.5|^7.0.1", + "league/flysystem-cached-adapter": "^1.0", + "mockery/mockery": "^1.4.4", + "orchestra/testbench-core": "^6.27", + "pda/pheanstalk": "^4.0", + "phpunit/phpunit": "^8.5.19|^9.5.8", + "predis/predis": "^1.1.9", + "symfony/cache": "^5.4" + }, + "suggest": { + "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.198.1).", + "brianium/paratest": "Required to run tests in parallel (^6.0).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).", + "ext-bcmath": "Required to use the multiple_of validation rule.", + "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", + "ext-pcntl": "Required to use all features of the queue worker.", + "ext-posix": "Required to use all features of the queue worker.", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", + "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "filp/whoops": "Required for friendly error pages in development (^2.14.3).", + "guzzlehttp/guzzle": "Required to use the HTTP Client, Mailgun mail driver and the ping methods on schedules (^6.5.5|^7.0.1).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", + "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", + "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", + "mockery/mockery": "Required to use mocking (^1.4.4).", + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", + "phpunit/phpunit": "Required to use assertions and run tests (^8.5.19|^9.5.8).", + "predis/predis": "Required to use the predis connector (^1.1.9).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0|^5.0|^6.0|^7.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^5.4).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^5.4).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).", + "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "8.x-dev" + } + }, + "autoload": { + "files": [ + "src/Illuminate/Collections/helpers.php", + "src/Illuminate/Events/functions.php", + "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Support/helpers.php" + ], + "psr-4": { + "Illuminate\\": "src/Illuminate/", + "Illuminate\\Support\\": [ + "src/Illuminate/Macroable/", + "src/Illuminate/Collections/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Laravel Framework.", + "homepage": "https://laravel.com", + "keywords": [ + "framework", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2022-12-08T15:28:55+00:00" + }, + { + "name": "laravel/sanctum", + "version": "v2.15.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/sanctum.git", + "reference": "31fbe6f85aee080c4dc2f9b03dc6dd5d0ee72473" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/31fbe6f85aee080c4dc2f9b03dc6dd5d0ee72473", + "reference": "31fbe6f85aee080c4dc2f9b03dc6dd5d0ee72473", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-json": "*", + "illuminate/console": "^6.9|^7.0|^8.0|^9.0", + "illuminate/contracts": "^6.9|^7.0|^8.0|^9.0", + "illuminate/database": "^6.9|^7.0|^8.0|^9.0", + "illuminate/support": "^6.9|^7.0|^8.0|^9.0", + "php": "^7.2|^8.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "orchestra/testbench": "^4.0|^5.0|^6.0|^7.0", + "phpunit/phpunit": "^8.0|^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Sanctum\\SanctumServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sanctum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel Sanctum provides a featherweight authentication system for SPAs and simple APIs.", + "keywords": [ + "auth", + "laravel", + "sanctum" + ], + "support": { + "issues": "https://github.com/laravel/sanctum/issues", + "source": "https://github.com/laravel/sanctum" + }, + "time": "2022-04-08T13:39:49+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "e5a3057a5591e1cfe8183034b0203921abe2c902" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/e5a3057a5591e1cfe8183034b0203921abe2c902", + "reference": "e5a3057a5591e1cfe8183034b0203921abe2c902", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "nesbot/carbon": "^2.61", + "pestphp/pest": "^1.21.3", + "phpstan/phpstan": "^1.8.2", + "symfony/var-dumper": "^5.4.11" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\SerializableClosure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "nuno@laravel.com" + } + ], + "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", + "keywords": [ + "closure", + "laravel", + "serializable" + ], + "support": { + "issues": "https://github.com/laravel/serializable-closure/issues", + "source": "https://github.com/laravel/serializable-closure" + }, + "time": "2023-07-14T13:56:28+00:00" + }, + { + "name": "laravel/tinker", + "version": "v2.8.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "04a2d3bd0d650c0764f70bf49d1ee39393e4eb10" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/04a2d3bd0d650c0764f70bf49d1ee39393e4eb10", + "reference": "04a2d3bd0d650c0764f70bf49d1ee39393e4eb10", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0", + "php": "^7.2.5|^8.0", + "psy/psysh": "^0.10.4|^0.11.1", + "symfony/var-dumper": "^4.3.4|^5.0|^6.0" + }, + "require-dev": { + "mockery/mockery": "~1.3.3|^1.4.2", + "phpunit/phpunit": "^8.5.8|^9.3.3" + }, + "suggest": { + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Tinker\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Powerful REPL for the Laravel framework.", + "keywords": [ + "REPL", + "Tinker", + "laravel", + "psysh" + ], + "support": { + "issues": "https://github.com/laravel/tinker/issues", + "source": "https://github.com/laravel/tinker/tree/v2.8.1" + }, + "time": "2023-02-15T16:40:09+00:00" + }, + { + "name": "league/commonmark", + "version": "2.3.9", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "c1e114f74e518daca2729ea8c4bf1167038fa4b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/c1e114f74e518daca2729ea8c4bf1167038fa4b5", + "reference": "c1e114f74e518daca2729ea8c4bf1167038fa4b5", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-mbstring": "*", + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.30.0", + "commonmark/commonmark.js": "0.30.0", + "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", + "erusev/parsedown": "^1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "^1.4 || ^2.0", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.21", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0 || ^5.0.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.4-dev" + } + }, + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2023-02-15T14:07:24+00:00" + }, + { + "name": "league/config", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/config.git", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } + ], + "time": "2022-12-11T20:36:23+00:00" + }, + { + "name": "league/flysystem", + "version": "1.1.10", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/3239285c825c152bcc315fe0e87d6b55f5972ed1", + "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-fileinfo": "*", + "league/mime-type-detection": "^1.3", + "php": "^7.2.5 || ^8.0" + }, + "conflict": { + "league/flysystem-sftp": "<1.0.6" + }, + "require-dev": { + "phpspec/prophecy": "^1.11.1", + "phpunit/phpunit": "^8.5.8" + }, + "suggest": { + "ext-ftp": "Allows you to use FTP server storage", + "ext-openssl": "Allows you to use FTPS server storage", + "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", + "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", + "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", + "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", + "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", + "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", + "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", + "league/flysystem-webdav": "Allows you to use WebDAV storage", + "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", + "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", + "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frenky.net" + } + ], + "description": "Filesystem abstraction: Many filesystems, one API.", + "keywords": [ + "Cloud Files", + "WebDAV", + "abstraction", + "aws", + "cloud", + "copy.com", + "dropbox", + "file systems", + "files", + "filesystem", + "filesystems", + "ftp", + "rackspace", + "remote", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/1.1.10" + }, + "funding": [ + { + "url": "https://offset.earth/frankdejonge", + "type": "other" + } + ], + "time": "2022-10-04T09:16:37+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.12.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "c7f2872fb273bf493811473dafc88d60ae829f48" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/c7f2872fb273bf493811473dafc88d60ae829f48", + "reference": "c7f2872fb273bf493811473dafc88d60ae829f48", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\MimeTypeDetection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Mime-type detection for Flysystem", + "support": { + "issues": "https://github.com/thephpleague/mime-type-detection/issues", + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.12.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2023-08-03T07:14:11+00:00" + }, + { + "name": "monolog/monolog", + "version": "2.9.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f259e2b15fb95494c83f52d3caad003bbf5ffaa1", + "reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2@dev", + "guzzlehttp/guzzle": "^7.4", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "phpspec/prophecy": "^1.15", + "phpstan/phpstan": "^0.12.91", + "phpunit/phpunit": "^8.5.14", + "predis/predis": "^1.1 || ^2.0", + "rollbar/rollbar": "^1.3 || ^2 || ^3", + "ruflin/elastica": "^7", + "swiftmailer/swiftmailer": "^5.3|^6.0", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/2.9.1" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2023-02-06T13:44:46+00:00" + }, + { + "name": "nesbot/carbon", + "version": "2.69.0", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "4308217830e4ca445583a37d1bf4aff4153fa81c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4308217830e4ca445583a37d1bf4aff4153fa81c", + "reference": "4308217830e4ca445583a37d1bf4aff4153fa81c", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-json": "*", + "php": "^7.1.8 || ^8.0", + "psr/clock": "^1.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "require-dev": { + "doctrine/dbal": "^2.0 || ^3.1.4", + "doctrine/orm": "^2.7", + "friendsofphp/php-cs-fixer": "^3.0", + "kylekatarnls/multi-tester": "^2.0", + "ondrejmirtes/better-reflection": "*", + "phpmd/phpmd": "^2.9", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.99 || ^1.7.14", + "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", + "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", + "squizlabs/php_codesniffer": "^3.4" + }, + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-3.x": "3.x-dev", + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "support": { + "docs": "https://carbon.nesbot.com/docs", + "issues": "https://github.com/briannesbitt/Carbon/issues", + "source": "https://github.com/briannesbitt/Carbon" + }, + "funding": [ + { + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" + }, + { + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", + "type": "tidelift" + } + ], + "time": "2023-08-03T09:00:52+00:00" + }, + { + "name": "nette/schema", + "version": "v1.2.3", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", + "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", + "php": ">=7.1 <8.3" + }, + "require-dev": { + "nette/tester": "^2.3 || ^2.4", + "phpstan/phpstan-nette": "^1.0", + "tracy/tracy": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.2.3" + }, + "time": "2022-10-13T01:24:26+00:00" + }, + { + "name": "nette/utils", + "version": "v3.2.10", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "a4175c62652f2300c8017fb7e640f9ccb11648d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/a4175c62652f2300c8017fb7e640f9ccb11648d2", + "reference": "a4175c62652f2300c8017fb7e640f9ccb11648d2", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2 <8.4" + }, + "conflict": { + "nette/di": "<3.0.6" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "dev-master", + "nette/tester": "~2.0", + "phpstan/phpstan": "^1.0", + "tracy/tracy": "^2.3" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()", + "ext-xml": "to use Strings::length() etc. when mbstring is not available" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v3.2.10" + }, + "time": "2023-07-30T15:38:18+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.17.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "844c228bf2b34a25ea8fed58f7929d14cf0c068e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/844c228bf2b34a25ea8fed58f7929d14cf0c068e", + "reference": "844c228bf2b34a25ea8fed58f7929d14cf0c068e", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.0" + }, + "time": "2023-08-13T14:53:08+00:00" + }, + { + "name": "opis/closure", + "version": "3.6.3", + "source": { + "type": "git", + "url": "https://github.com/opis/closure.git", + "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/opis/closure/zipball/3d81e4309d2a927abbe66df935f4bb60082805ad", + "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^5.4 || ^7.0 || ^8.0" + }, + "require-dev": { + "jeremeamia/superclosure": "^2.0", + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.6.x-dev" + } + }, + "autoload": { + "files": [ + "functions.php" + ], + "psr-4": { + "Opis\\Closure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marius Sarca", + "email": "marius.sarca@gmail.com" + }, + { + "name": "Sorin Sarca", + "email": "sarca_sorin@hotmail.com" + } + ], + "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", + "homepage": "https://opis.io/closure", + "keywords": [ + "anonymous functions", + "closure", + "function", + "serializable", + "serialization", + "serialize" + ], + "support": { + "issues": "https://github.com/opis/closure/issues", + "source": "https://github.com/opis/closure/tree/3.6.3" + }, + "time": "2022-01-27T09:35:39+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.9.1", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dd3a383e599f49777d8b628dadbb90cae435b87e", + "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.9.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2023-02-25T19:38:58+00:00" + }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, + { + "name": "psr/container", + "version": "1.1.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/1.1.2" + }, + "time": "2021-11-05T16:50:12+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client/tree/master" + }, + "time": "2020-06-29T06:28:15+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "e616d01114759c4c489f93b099585439f795fe35" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", + "reference": "e616d01114759c4c489f93b099585439f795fe35", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/1.0.2" + }, + "time": "2023-04-10T20:10:41+00:00" + }, + { + "name": "psr/http-message", + "version": "1.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/1.1" + }, + "time": "2023-04-04T09:50:52+00:00" + }, + { + "name": "psr/log", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.4" + }, + "time": "2021-05-03T11:20:27+00:00" + }, + { + "name": "psr/simple-cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/master" + }, + "time": "2017-10-23T01:57:42+00:00" + }, + { + "name": "psy/psysh", + "version": "v0.11.19", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "1724ceff278daeeac5a006744633bacbb2dc4706" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/1724ceff278daeeac5a006744633bacbb2dc4706", + "reference": "1724ceff278daeeac5a006744633bacbb2dc4706", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "^4.0 || ^3.1", + "php": "^8.0 || ^7.0.8", + "symfony/console": "^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^6.0 || ^5.0 || ^4.0 || ^3.4" + }, + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2" + }, + "suggest": { + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", + "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.11.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.11.19" + }, + "time": "2023-07-15T19:42:19+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "ramsey/collection", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "ad7475d1c9e70b190ecffc58f2d989416af339b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/ad7475d1c9e70b190ecffc58f2d989416af339b4", + "reference": "ad7475d1c9e70b190ecffc58f2d989416af339b4", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.4 || ^8.0", + "symfony/polyfill-php81": "^1.23" + }, + "require-dev": { + "captainhook/plugin-composer": "^5.3", + "ergebnis/composer-normalize": "^2.28.3", + "fakerphp/faker": "^1.21", + "hamcrest/hamcrest-php": "^2.0", + "jangregor/phpstan-prophecy": "^1.0", + "mockery/mockery": "^1.5", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpcsstandards/phpcsutils": "^1.0.0-rc1", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5", + "psalm/plugin-mockery": "^1.1", + "psalm/plugin-phpunit": "^0.18.4", + "ramsey/coding-standard": "^2.0.3", + "ramsey/conventional-commits": "^1.3", + "vimeo/psalm": "^5.4" + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + }, + "ramsey/conventional-commits": { + "configFile": "conventional-commits.json" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Collection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A PHP library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/1.3.0" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", + "type": "tidelift" + } + ], + "time": "2022-12-27T19:12:24+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.2.3", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", + "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "brick/math": "^0.8 || ^0.9", + "ext-json": "*", + "php": "^7.2 || ^8.0", + "ramsey/collection": "^1.0", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-php80": "^1.14" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "captainhook/captainhook": "^5.10", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "doctrine/annotations": "^1.8", + "ergebnis/composer-normalize": "^2.15", + "mockery/mockery": "^1.3", + "moontoast/math": "^1.1", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.2", + "php-mock/php-mock-mockery": "^1.3", + "php-parallel-lint/php-parallel-lint": "^1.1", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-mockery": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^8.5 || ^9", + "slevomat/coding-standard": "^7.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.9" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-ctype": "Enables faster processing of character classification using ctype functions.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.x-dev" + }, + "captainhook": { + "force-install": true + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.2.3" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", + "type": "tidelift" + } + ], + "time": "2021-09-25T23:10:38+00:00" + }, + { + "name": "swiftmailer/swiftmailer", + "version": "v6.3.0", + "source": { + "type": "git", + "url": "https://github.com/swiftmailer/swiftmailer.git", + "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8a5d5072dca8f48460fce2f4131fcc495eec654c", + "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "egulias/email-validator": "^2.0|^3.1", + "php": ">=7.0.0", + "symfony/polyfill-iconv": "^1.0", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "symfony/phpunit-bridge": "^4.4|^5.4" + }, + "suggest": { + "ext-intl": "Needed to support internationalized email addresses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.2-dev" + } + }, + "autoload": { + "files": [ + "lib/swift_required.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Corbyn" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Swiftmailer, free feature-rich PHP mailer", + "homepage": "https://swiftmailer.symfony.com", + "keywords": [ + "email", + "mail", + "mailer" + ], + "support": { + "issues": "https://github.com/swiftmailer/swiftmailer/issues", + "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.3.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/swiftmailer/swiftmailer", + "type": "tidelift" + } + ], + "abandoned": "symfony/mailer", + "time": "2021-10-18T15:26:12+00:00" + }, + { + "name": "symfony/console", + "version": "v5.4.26", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "b504a3d266ad2bb632f196c0936ef2af5ff6e273" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/b504a3d266ad2bb632f196c0936ef2af5ff6e273", + "reference": "b504a3d266ad2bb632f196c0936ef2af5ff6e273", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.1|^6.0" + }, + "conflict": { + "psr/log": ">=3", + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" + }, + "require-dev": { + "psr/log": "^1|^2", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/lock": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v5.4.26" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-19T20:11:33+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v5.4.26", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "0ad3f7e9a1ab492c5b4214cf22a9dc55dcf8600a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/0ad3f7e9a1ab492c5b4214cf22a9dc55dcf8600a", + "reference": "0ad3f7e9a1ab492c5b4214cf22a9dc55dcf8600a", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v5.4.26" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-07T06:10:25+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v2.5.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:53:40+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v5.4.26", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "b26719213a39c9ba57520cbc5e52bfcc5e8d92f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/b26719213a39c9ba57520cbc5e52bfcc5e8d92f9", + "reference": "b26719213a39c9ba57520cbc5e52bfcc5e8d92f9", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^4.4|^5.0|^6.0" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/serializer": "^4.4|^5.0|^6.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v5.4.26" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-16T16:48:57+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v5.4.26", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "5dcc00e03413f05c1e7900090927bb7247cb0aac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/5dcc00e03413f05c1e7900090927bb7247cb0aac", + "reference": "5dcc00e03413f05c1e7900090927bb7247cb0aac", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/event-dispatcher-contracts": "^2|^3", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/dependency-injection": "<4.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^4.4|^5.0|^6.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.26" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-06T06:34:20+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v2.5.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f98b54df6ad059855739db6fcbc2d36995283fe1", + "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:53:40+00:00" + }, + { + "name": "symfony/finder", + "version": "v5.4.27", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "ff4bce3c33451e7ec778070e45bd23f74214cd5d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/ff4bce3c33451e7ec778070e45bd23f74214cd5d", + "reference": "ff4bce3c33451e7ec778070e45bd23f74214cd5d", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v5.4.27" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-31T08:02:31+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v5.4.26", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "e7793151e99dc2ac1352ff3735d100fb3b3bfc08" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e7793151e99dc2ac1352ff3735d100fb3b3bfc08", + "reference": "e7793151e99dc2ac1352ff3735d100fb3b3bfc08", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "predis/predis": "~1.0", + "symfony/cache": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", + "symfony/mime": "^4.4|^5.0|^6.0", + "symfony/rate-limiter": "^5.2|^6.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v5.4.26" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-21T11:30:15+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v5.4.27", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "9f5624816c0b8d92f85666ac7ed2825a18fcd899" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/9f5624816c0b8d92f85666ac7ed2825a18fcd899", + "reference": "9f5624816c0b8d92f85666ac7ed2825a18fcd899", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "psr/log": "^1|^2", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^5.0|^6.0", + "symfony/http-foundation": "^5.4.21|^6.2.7", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/browser-kit": "<5.4", + "symfony/cache": "<5.0", + "symfony/config": "<5.0", + "symfony/console": "<4.4", + "symfony/dependency-injection": "<5.3", + "symfony/doctrine-bridge": "<5.0", + "symfony/form": "<5.0", + "symfony/http-client": "<5.0", + "symfony/mailer": "<5.0", + "symfony/messenger": "<5.0", + "symfony/translation": "<5.0", + "symfony/twig-bridge": "<5.0", + "symfony/validator": "<5.0", + "twig/twig": "<2.13" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^5.4|^6.0", + "symfony/config": "^5.0|^6.0", + "symfony/console": "^4.4|^5.0|^6.0", + "symfony/css-selector": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^5.3|^6.0", + "symfony/dom-crawler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/routing": "^4.4|^5.0|^6.0", + "symfony/stopwatch": "^4.4|^5.0|^6.0", + "symfony/translation": "^4.4|^5.0|^6.0", + "symfony/translation-contracts": "^1.1|^2|^3", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v5.4.27" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-31T10:18:38+00:00" + }, + { + "name": "symfony/mime", + "version": "v5.4.26", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "2ea06dfeee20000a319d8407cea1d47533d5a9d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/2ea06dfeee20000a319d8407cea1d47533d5a9d2", + "reference": "2ea06dfeee20000a319d8407cea1d47533d5a9d2", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<4.4", + "symfony/serializer": "<5.4.26|>=6,<6.2.13|>=6.3,<6.3.2" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1|^4", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/property-access": "^4.4|^5.1|^6.0", + "symfony/property-info": "^4.4|^5.1|^6.0", + "symfony/serializer": "^5.4.26|~6.2.13|^6.3.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v5.4.26" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-27T06:29:31+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-iconv", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-iconv.git", + "reference": "927013f3aac555983a5059aada98e1907d842695" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/927013f3aac555983a5059aada98e1907d842695", + "reference": "927013f3aac555983a5059aada98e1907d842695", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-iconv": "*" + }, + "suggest": { + "ext-iconv": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Iconv\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Iconv extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "iconv", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "639084e360537a19f9ee352433b84ce831f3d2da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da", + "reference": "639084e360537a19f9ee352433b84ce831f3d2da", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97", + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9", + "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/process", + "version": "v5.4.26", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "1a44dc377ec86a50fab40d066cd061e28a6b482f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/1a44dc377ec86a50fab40d066cd061e28a6b482f", + "reference": "1a44dc377ec86a50fab40d066cd061e28a6b482f", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v5.4.26" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-12T15:44:31+00:00" + }, + { + "name": "symfony/routing", + "version": "v5.4.26", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "853fc7df96befc468692de0a48831b38f04d2cb2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/853fc7df96befc468692de0a48831b38f04d2cb2", + "reference": "853fc7df96befc468692de0a48831b38f04d2cb2", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "doctrine/annotations": "<1.12", + "symfony/config": "<5.3", + "symfony/dependency-injection": "<4.4", + "symfony/yaml": "<4.4" + }, + "require-dev": { + "doctrine/annotations": "^1.12|^2", + "psr/log": "^1|^2|^3", + "symfony/config": "^5.3|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/yaml": "^4.4|^5.0|^6.0" + }, + "suggest": { + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v5.4.26" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-24T13:28:37+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v2.5.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c", + "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.1", + "symfony/deprecation-contracts": "^2.1|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v2.5.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-30T19:17:29+00:00" + }, + { + "name": "symfony/string", + "version": "v5.4.26", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "1181fe9270e373537475e826873b5867b863883c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/1181fe9270e373537475e826873b5867b863883c", + "reference": "1181fe9270e373537475e826873b5867b863883c", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" + }, + "conflict": { + "symfony/translation-contracts": ">=3.0" + }, + "require-dev": { + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/http-client": "^4.4|^5.0|^6.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0|^6.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v5.4.26" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-06-28T12:46:07+00:00" + }, + { + "name": "symfony/translation", + "version": "v5.4.24", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "de237e59c5833422342be67402d487fbf50334ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/de237e59c5833422342be67402d487fbf50334ff", + "reference": "de237e59c5833422342be67402d487fbf50334ff", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation-contracts": "^2.3" + }, + "conflict": { + "symfony/config": "<4.4", + "symfony/console": "<5.3", + "symfony/dependency-injection": "<5.0", + "symfony/http-kernel": "<5.0", + "symfony/twig-bundle": "<5.0", + "symfony/yaml": "<4.4" + }, + "provide": { + "symfony/translation-implementation": "2.3" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/http-client-contracts": "^1.1|^2.0|^3.0", + "symfony/http-kernel": "^5.0|^6.0", + "symfony/intl": "^4.4|^5.0|^6.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/service-contracts": "^1.1.2|^2|^3", + "symfony/yaml": "^4.4|^5.0|^6.0" + }, + "suggest": { + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v5.4.24" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-05-19T12:34:17+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v2.5.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/136b19dd05cdf0709db6537d058bcab6dd6e2dbe", + "reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v2.5.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-06-27T16:58:25+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v5.4.26", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "e706c99b4a6f4d9383b52b80dd8c74880501e314" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/e706c99b4a6f4d9383b52b80dd8c74880501e314", + "reference": "e706c99b4a6f4d9383b52b80dd8c74880501e314", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/console": "<4.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/uid": "^5.1|^6.0", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v5.4.26" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-13T07:32:46+00:00" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "2.2.6", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/c42125b83a4fa63b187fdf29f9c93cb7733da30c", + "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^5.5 || ^7.0 || ^8.0", + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" + } + ], + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.6" + }, + "time": "2023-01-03T09:29:04+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.4.1", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/264dce589e7ce37a7ba99cb901eed8249fbec92f", + "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.0.2", + "php": "^7.1.3 || ^8.0", + "phpoption/phpoption": "^1.8", + "symfony/polyfill-ctype": "^1.23", + "symfony/polyfill-mbstring": "^1.23.1", + "symfony/polyfill-php80": "^1.23.1" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-filter": "*", + "phpunit/phpunit": "^7.5.20 || ^8.5.21 || ^9.5.10" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.4-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.4.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2021-12-12T23:22:04+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "1.6.1", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/87337c91b9dfacee02452244ee14ab3c43bc485a", + "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, + "type": "library", + "autoload": { + "psr-4": { + "voku\\": "src/voku/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Moelleken", + "homepage": "http://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": [ + "ascii", + "clean", + "php" + ], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/1.6.1" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "time": "2022-01-24T18:55:24+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9 || ^11", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.30 || ^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.5.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-12-30T00:15:36+00:00" + }, + { + "name": "facade/flare-client-php", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/facade/flare-client-php.git", + "reference": "213fa2c69e120bca4c51ba3e82ed1834ef3f41b8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/facade/flare-client-php/zipball/213fa2c69e120bca4c51ba3e82ed1834ef3f41b8", + "reference": "213fa2c69e120bca4c51ba3e82ed1834ef3f41b8", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "facade/ignition-contracts": "~1.0", + "illuminate/pipeline": "^5.5|^6.0|^7.0|^8.0", + "php": "^7.1|^8.0", + "symfony/http-foundation": "^3.3|^4.1|^5.0", + "symfony/mime": "^3.4|^4.0|^5.1", + "symfony/var-dumper": "^3.4|^4.0|^5.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.14", + "phpunit/phpunit": "^7.5", + "spatie/phpunit-snapshot-assertions": "^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Facade\\FlareClient\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Send PHP errors to Flare", + "homepage": "https://github.com/facade/flare-client-php", + "keywords": [ + "exception", + "facade", + "flare", + "reporting" + ], + "support": { + "issues": "https://github.com/facade/flare-client-php/issues", + "source": "https://github.com/facade/flare-client-php/tree/1.10.0" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2022-08-09T11:23:57+00:00" + }, + { + "name": "facade/ignition", + "version": "2.17.7", + "source": { + "type": "git", + "url": "https://github.com/facade/ignition.git", + "reference": "b4f5955825bb4b74cba0f94001761c46335c33e9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/facade/ignition/zipball/b4f5955825bb4b74cba0f94001761c46335c33e9", + "reference": "b4f5955825bb4b74cba0f94001761c46335c33e9", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "facade/flare-client-php": "^1.9.1", + "facade/ignition-contracts": "^1.0.2", + "illuminate/support": "^7.0|^8.0", + "monolog/monolog": "^2.0", + "php": "^7.2.5|^8.0", + "symfony/console": "^5.0", + "symfony/var-dumper": "^5.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.14", + "livewire/livewire": "^2.4", + "mockery/mockery": "^1.3", + "orchestra/testbench": "^5.0|^6.0", + "psalm/plugin-laravel": "^1.2" + }, + "suggest": { + "laravel/telescope": "^3.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Facade\\Ignition\\IgnitionServiceProvider" + ], + "aliases": { + "Flare": "Facade\\Ignition\\Facades\\Flare" + } + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Facade\\Ignition\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A beautiful error page for Laravel applications.", + "homepage": "https://github.com/facade/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], + "support": { + "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", + "forum": "https://twitter.com/flareappio", + "issues": "https://github.com/facade/ignition/issues", + "source": "https://github.com/facade/ignition" + }, + "time": "2023-01-26T12:34:59+00:00" + }, + { + "name": "facade/ignition-contracts", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/facade/ignition-contracts.git", + "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/facade/ignition-contracts/zipball/3c921a1cdba35b68a7f0ccffc6dffc1995b18267", + "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^v2.15.8", + "phpunit/phpunit": "^9.3.11", + "vimeo/psalm": "^3.17.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Facade\\IgnitionContracts\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://flareapp.io", + "role": "Developer" + } + ], + "description": "Solution contracts for Ignition", + "homepage": "https://github.com/facade/ignition-contracts", + "keywords": [ + "contracts", + "flare", + "ignition" + ], + "support": { + "issues": "https://github.com/facade/ignition-contracts/issues", + "source": "https://github.com/facade/ignition-contracts/tree/1.0.2" + }, + "time": "2020-10-16T08:27:54+00:00" + }, + { + "name": "fakerphp/faker", + "version": "v1.22.0", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "f85772abd508bd04e20bb4b1bbe260a68d0066d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/f85772abd508bd04e20bb4b1bbe260a68d0066d2", + "reference": "f85772abd508bd04e20bb4b1bbe260a68d0066d2", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.4 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", + "ext-intl": "*", + "phpunit/phpunit": "^9.5.26", + "symfony/phpunit-bridge": "^5.4.16" + }, + "suggest": { + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "v1.21-dev" + } + }, + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "support": { + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.22.0" + }, + "time": "2023-05-14T12:31:37+00:00" + }, + { + "name": "filp/whoops", + "version": "2.15.3", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "c83e88a30524f9360b11f585f71e6b17313b7187" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/c83e88a30524f9360b11f585f71e6b17313b7187", + "reference": "c83e88a30524f9360b11f585f71e6b17313b7187", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "mockery/mockery": "^0.9 || ^1.0", + "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.15.3" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "time": "2023-07-13T12:00:00+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^5.3|^7.0|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + }, + "time": "2020-07-09T08:09:16+00:00" + }, + { + "name": "laravel/sail", + "version": "v1.19.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/sail.git", + "reference": "4f230634a3163f3442def6a4e6ffdb02b02e14d6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sail/zipball/4f230634a3163f3442def6a4e6ffdb02b02e14d6", + "reference": "4f230634a3163f3442def6a4e6ffdb02b02e14d6", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "illuminate/console": "^8.0|^9.0|^10.0", + "illuminate/contracts": "^8.0|^9.0|^10.0", + "illuminate/support": "^8.0|^9.0|^10.0", + "php": "^7.3|^8.0" + }, + "bin": [ + "bin/sail" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Sail\\SailServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sail\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Docker files for running a basic Laravel application.", + "keywords": [ + "docker", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/sail/issues", + "source": "https://github.com/laravel/sail" + }, + "time": "2023-01-31T13:37:57+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.6.6", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "b8e0bb7d8c604046539c1115994632c74dcb361e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/b8e0bb7d8c604046539c1115994632c74dcb361e", + "reference": "b8e0bb7d8c604046539c1115994632c74dcb361e", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=7.3" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.6.10", + "psalm/plugin-phpunit": "^0.18.4", + "symplify/easy-coding-standard": "^11.5.0", + "vimeo/psalm": "^4.30" + }, + "type": "library", + "autoload": { + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], + "psr-4": { + "Mockery\\": "library/Mockery" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "https://github.com/padraic", + "role": "Author" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "docs": "https://docs.mockery.io/", + "issues": "https://github.com/mockery/mockery/issues", + "rss": "https://github.com/mockery/mockery/releases.atom", + "security": "https://github.com/mockery/mockery/security/advisories", + "source": "https://github.com/mockery/mockery" + }, + "time": "2023-08-09T00:03:52+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.11.1", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2023-03-08T13:26:56+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v5.11.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "8b610eef8582ccdc05d8f2ab23305e2d37049461" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/8b610eef8582ccdc05d8f2ab23305e2d37049461", + "reference": "8b610eef8582ccdc05d8f2ab23305e2d37049461", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "facade/ignition-contracts": "^1.0", + "filp/whoops": "^2.14.3", + "php": "^7.3 || ^8.0", + "symfony/console": "^5.0" + }, + "require-dev": { + "brianium/paratest": "^6.1", + "fideloper/proxy": "^4.4.1", + "fruitcake/laravel-cors": "^2.0.3", + "laravel/framework": "8.x-dev", + "nunomaduro/larastan": "^0.6.2", + "nunomaduro/mock-final-classes": "^1.0", + "orchestra/testbench": "^6.0", + "phpstan/phpstan": "^0.12.64", + "phpunit/phpunit": "^9.5.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "NunoMaduro\\Collision\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Cli error handling for console/command-line PHP applications.", + "keywords": [ + "artisan", + "cli", + "command-line", + "console", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" + ], + "support": { + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2022-01-10T16:22:52+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.3" + }, + "time": "2021-07-20T11:28:43+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.26", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", + "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.15", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.26" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-03-06T12:58:08+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-12-02T12:48:52+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T05:33:50+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:16:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "9.6.10", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "a6d351645c3fe5a30f5e86be6577d946af65a328" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a6d351645c3fe5a30f5e86be6577d946af65a328", + "reference": "a6d351645c3fe5a30f5e86be6577d946af65a328", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "doctrine/instantiator": "^1.3.1 || ^2", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpunit/php-code-coverage": "^9.2.13", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.8", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.5", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^3.2", + "sebastian/version": "^3.0.2" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.6-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.10" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2023-07-10T04:04:23+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:08:49+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:30:19+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-14T12:41:17+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "nikic/php-parser": "^4.7", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:52:27+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131", + "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-05-07T05:35:17+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:03:51+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-14T06:03:37+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bde739e7565280bda77be70044ac1047bc007e34" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bde739e7565280bda77be70044ac1047bc007e34", + "reference": "bde739e7565280bda77be70044ac1047bc007e34", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-02T09:26:13+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "nikic/php-parser": "^4.6", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-28T06:42:11+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:12:34+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:14:26+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "4.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:07:39+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:45:17+00:00" + }, + { + "name": "sebastian/type", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:13:03+00:00" + }, + { + "name": "sebastian/version", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2021-07-28T10:34:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "dev", + "stability-flags": [], + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": "^7.3|^8.0" + }, + "platform-dev": [], + "plugin-api-version": "2.3.0" +} diff --git a/Laravel/config/app.php b/Laravel/config/app.php new file mode 100644 index 0000000..ef6ebfa --- /dev/null +++ b/Laravel/config/app.php @@ -0,0 +1,249 @@ + [ + 'WxAppid' => 'wx526430047d34c85c', //岚科公众号 + 'WxAppSecret' => '975b8a8b627b1bde71bbe49149134549', //岚科公众号 + +// 'WxAppid' => 'wx8f83ab76a99ba560',//测试 +// 'WxAppSecret' => 'eebc53a9e94f676bd680d3a09eb20303',//测试 + 'BaseServerUrl' =>'http://localhostcommon', + 'WxRedirectUrl'=>'https://www.yanzai.vip/common/laravel/public/wxGetCode', //微信授权登录,重定向地址 + + 'WxReturnCodeUrl_local'=>'http://192.168.31.106:5173/#/getWxCode/', //获取code后引导返回到前端的地址 开发 + 'WxReturnCodeUrl_server'=>'https://www.yanzai.vip/common/mH5/#/getWxCode/', //获取code后引导返回到前端的地址 生产 + + + ], + + /* + |-------------------------------------------------------------------------- + | Application Name + |-------------------------------------------------------------------------- + | + | This value is the name of your application. This value is used when the + | framework needs to place the application's name in a notification or + | any other location as required by the application or its packages. + | + */ + + 'name' => env('APP_NAME', 'Laravel'), + + /* + |-------------------------------------------------------------------------- + | Application Environment + |-------------------------------------------------------------------------- + | + | This value determines the "environment" your application is currently + | running in. This may determine how you prefer to configure various + | services the application utilizes. Set this in your ".env" file. + | + */ + + 'env' => env('APP_ENV', 'production'), + + /* + |-------------------------------------------------------------------------- + | Application Debug Mode + |-------------------------------------------------------------------------- + | + | When your application is in debug mode, detailed error messages with + | stack traces will be shown on every error that occurs within your + | application. If disabled, a simple generic error page is shown. + | + */ + + 'debug' => (bool) env('APP_DEBUG', false), + + /* + |-------------------------------------------------------------------------- + | Application URL + |-------------------------------------------------------------------------- + | + | This URL is used by the console to properly generate URLs when using + | the Artisan command line tool. You should set this to the root of + | your application so that it is used when running Artisan tasks. + | + */ + + 'url' => env('APP_URL', 'http://localhost'), + + 'asset_url' => env('ASSET_URL', null), + + /* + |-------------------------------------------------------------------------- + | Application Timezone + |-------------------------------------------------------------------------- + | + | Here you may specify the default timezone for your application, which + | will be used by the PHP date and date-time functions. We have gone + | ahead and set this to a sensible default for you out of the box. + | + */ + + 'timezone' => 'UTC', + + /* + |-------------------------------------------------------------------------- + | Application Locale Configuration + |-------------------------------------------------------------------------- + | + | The application locale determines the default locale that will be used + | by the translation service provider. You are free to set this value + | to any of the locales which will be supported by the application. + | + */ + + 'locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Application Fallback Locale + |-------------------------------------------------------------------------- + | + | The fallback locale determines the locale to use when the current one + | is not available. You may change the value to correspond to any of + | the language folders that are provided through your application. + | + */ + + 'fallback_locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Faker Locale + |-------------------------------------------------------------------------- + | + | This locale will be used by the Faker PHP library when generating fake + | data for your database seeds. For example, this will be used to get + | localized telephone numbers, street address information and more. + | + */ + + 'faker_locale' => 'en_US', + + /* + |-------------------------------------------------------------------------- + | Encryption Key + |-------------------------------------------------------------------------- + | + | This key is used by the Illuminate encrypter service and should be set + | to a random, 32 character string, otherwise these encrypted strings + | will not be safe. Please do this before deploying an application! + | + */ + + 'key' => env('APP_KEY'), + + 'cipher' => 'AES-256-CBC', + + /* + |-------------------------------------------------------------------------- + | Autoloaded Service Providers + |-------------------------------------------------------------------------- + | + | The service providers listed here will be automatically loaded on the + | request to your application. Feel free to add your own services to + | this array to grant expanded functionality to your applications. + | + */ + + 'providers' => [ + + /* + * Laravel Framework Service Providers... + */ + Illuminate\Auth\AuthServiceProvider::class, + Illuminate\Broadcasting\BroadcastServiceProvider::class, + Illuminate\Bus\BusServiceProvider::class, + Illuminate\Cache\CacheServiceProvider::class, + Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, + Illuminate\Cookie\CookieServiceProvider::class, + Illuminate\Database\DatabaseServiceProvider::class, + Illuminate\Encryption\EncryptionServiceProvider::class, + Illuminate\Filesystem\FilesystemServiceProvider::class, + Illuminate\Foundation\Providers\FoundationServiceProvider::class, + Illuminate\Hashing\HashServiceProvider::class, + Illuminate\Mail\MailServiceProvider::class, + Illuminate\Notifications\NotificationServiceProvider::class, + Illuminate\Pagination\PaginationServiceProvider::class, + Illuminate\Pipeline\PipelineServiceProvider::class, + Illuminate\Queue\QueueServiceProvider::class, + Illuminate\Redis\RedisServiceProvider::class, + Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, + Illuminate\Session\SessionServiceProvider::class, + Illuminate\Translation\TranslationServiceProvider::class, + Illuminate\Validation\ValidationServiceProvider::class, + Illuminate\View\ViewServiceProvider::class, + + /* + * Package Service Providers... + */ + + /* + * Application Service Providers... + */ + App\Providers\AppServiceProvider::class, + App\Providers\AuthServiceProvider::class, + // App\Providers\BroadcastServiceProvider::class, + App\Providers\EventServiceProvider::class, + App\Providers\RouteServiceProvider::class, + + ], + + /* + |-------------------------------------------------------------------------- + | Class Aliases + |-------------------------------------------------------------------------- + | + | This array of class aliases will be registered when this application + | is started. However, feel free to register as many as you wish as + | the aliases are "lazy" loaded so they don't hinder performance. + | + */ + + 'aliases' => [ + + 'App' => Illuminate\Support\Facades\App::class, + 'Arr' => Illuminate\Support\Arr::class, + 'Artisan' => Illuminate\Support\Facades\Artisan::class, + 'Auth' => Illuminate\Support\Facades\Auth::class, + 'Blade' => Illuminate\Support\Facades\Blade::class, + 'Broadcast' => Illuminate\Support\Facades\Broadcast::class, + 'Bus' => Illuminate\Support\Facades\Bus::class, + 'Cache' => Illuminate\Support\Facades\Cache::class, + 'Config' => Illuminate\Support\Facades\Config::class, + 'Cookie' => Illuminate\Support\Facades\Cookie::class, + 'Crypt' => Illuminate\Support\Facades\Crypt::class, + 'Date' => Illuminate\Support\Facades\Date::class, + 'DB' => Illuminate\Support\Facades\DB::class, + 'Eloquent' => Illuminate\Database\Eloquent\Model::class, + 'Event' => Illuminate\Support\Facades\Event::class, + 'File' => Illuminate\Support\Facades\File::class, + 'Gate' => Illuminate\Support\Facades\Gate::class, + 'Hash' => Illuminate\Support\Facades\Hash::class, + 'Http' => Illuminate\Support\Facades\Http::class, + 'Js' => Illuminate\Support\Js::class, + 'Lang' => Illuminate\Support\Facades\Lang::class, + 'Log' => Illuminate\Support\Facades\Log::class, + 'Mail' => Illuminate\Support\Facades\Mail::class, + 'Notification' => Illuminate\Support\Facades\Notification::class, + 'Password' => Illuminate\Support\Facades\Password::class, + 'Queue' => Illuminate\Support\Facades\Queue::class, + 'RateLimiter' => Illuminate\Support\Facades\RateLimiter::class, + 'Redirect' => Illuminate\Support\Facades\Redirect::class, + // 'Redis' => Illuminate\Support\Facades\Redis::class, + 'Request' => Illuminate\Support\Facades\Request::class, + 'Response' => Illuminate\Support\Facades\Response::class, + 'Route' => Illuminate\Support\Facades\Route::class, + 'Schema' => Illuminate\Support\Facades\Schema::class, + 'Session' => Illuminate\Support\Facades\Session::class, + 'Storage' => Illuminate\Support\Facades\Storage::class, + 'Str' => Illuminate\Support\Str::class, + 'URL' => Illuminate\Support\Facades\URL::class, + 'Validator' => Illuminate\Support\Facades\Validator::class, + 'View' => Illuminate\Support\Facades\View::class, + + ], + +]; diff --git a/Laravel/config/auth.php b/Laravel/config/auth.php new file mode 100644 index 0000000..d8c6cee --- /dev/null +++ b/Laravel/config/auth.php @@ -0,0 +1,111 @@ + [ + 'guard' => 'web', + 'passwords' => 'users', + ], + + /* + |-------------------------------------------------------------------------- + | Authentication Guards + |-------------------------------------------------------------------------- + | + | Next, you may define every authentication guard for your application. + | Of course, a great default configuration has been defined for you + | here which uses session storage and the Eloquent user provider. + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | Supported: "session" + | + */ + + 'guards' => [ + 'web' => [ + 'driver' => 'session', + 'provider' => 'users', + ], + ], + + /* + |-------------------------------------------------------------------------- + | User Providers + |-------------------------------------------------------------------------- + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | If you have multiple user tables or models you may configure multiple + | sources which represent each model / table. These sources may then + | be assigned to any extra authentication guards you have defined. + | + | Supported: "database", "eloquent" + | + */ + + 'providers' => [ + 'users' => [ + 'driver' => 'eloquent', + 'model' => App\Models\User::class, + ], + + // 'users' => [ + // 'driver' => 'database', + // 'table' => 'users', + // ], + ], + + /* + |-------------------------------------------------------------------------- + | Resetting Passwords + |-------------------------------------------------------------------------- + | + | You may specify multiple password reset configurations if you have more + | than one user table or model in the application and you want to have + | separate password reset settings based on the specific user types. + | + | The expire time is the number of minutes that each reset token will be + | considered valid. This security feature keeps tokens short-lived so + | they have less time to be guessed. You may change this as needed. + | + */ + + 'passwords' => [ + 'users' => [ + 'provider' => 'users', + 'table' => 'password_resets', + 'expire' => 60, + 'throttle' => 60, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Password Confirmation Timeout + |-------------------------------------------------------------------------- + | + | Here you may define the amount of seconds before a password confirmation + | times out and the user is prompted to re-enter their password via the + | confirmation screen. By default, the timeout lasts for three hours. + | + */ + + 'password_timeout' => 10800, + +]; diff --git a/Laravel/config/broadcasting.php b/Laravel/config/broadcasting.php new file mode 100644 index 0000000..2d52982 --- /dev/null +++ b/Laravel/config/broadcasting.php @@ -0,0 +1,64 @@ + env('BROADCAST_DRIVER', 'null'), + + /* + |-------------------------------------------------------------------------- + | Broadcast Connections + |-------------------------------------------------------------------------- + | + | Here you may define all of the broadcast connections that will be used + | to broadcast events to other systems or over websockets. Samples of + | each available type of connection are provided inside this array. + | + */ + + 'connections' => [ + + 'pusher' => [ + 'driver' => 'pusher', + 'key' => env('PUSHER_APP_KEY'), + 'secret' => env('PUSHER_APP_SECRET'), + 'app_id' => env('PUSHER_APP_ID'), + 'options' => [ + 'cluster' => env('PUSHER_APP_CLUSTER'), + 'useTLS' => true, + ], + ], + + 'ably' => [ + 'driver' => 'ably', + 'key' => env('ABLY_KEY'), + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + ], + + 'log' => [ + 'driver' => 'log', + ], + + 'null' => [ + 'driver' => 'null', + ], + + ], + +]; diff --git a/Laravel/config/cache.php b/Laravel/config/cache.php new file mode 100644 index 0000000..8736c7a --- /dev/null +++ b/Laravel/config/cache.php @@ -0,0 +1,110 @@ + env('CACHE_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Cache Stores + |-------------------------------------------------------------------------- + | + | Here you may define all of the cache "stores" for your application as + | well as their drivers. You may even define multiple stores for the + | same cache driver to group types of items stored in your caches. + | + | Supported drivers: "apc", "array", "database", "file", + | "memcached", "redis", "dynamodb", "octane", "null" + | + */ + + 'stores' => [ + + 'apc' => [ + 'driver' => 'apc', + ], + + 'array' => [ + 'driver' => 'array', + 'serialize' => false, + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'cache', + 'connection' => null, + 'lock_connection' => null, + ], + + 'file' => [ + 'driver' => 'file', + 'path' => storage_path('framework/cache/data'), + ], + + 'memcached' => [ + 'driver' => 'memcached', + 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), + 'sasl' => [ + env('MEMCACHED_USERNAME'), + env('MEMCACHED_PASSWORD'), + ], + 'options' => [ + // Memcached::OPT_CONNECT_TIMEOUT => 2000, + ], + 'servers' => [ + [ + 'host' => env('MEMCACHED_HOST', '127.0.0.1'), + 'port' => env('MEMCACHED_PORT', 11211), + 'weight' => 100, + ], + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'cache', + 'lock_connection' => 'default', + ], + + 'dynamodb' => [ + 'driver' => 'dynamodb', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), + 'endpoint' => env('DYNAMODB_ENDPOINT'), + ], + + 'octane' => [ + 'driver' => 'octane', + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Cache Key Prefix + |-------------------------------------------------------------------------- + | + | When utilizing a RAM based store such as APC or Memcached, there might + | be other applications utilizing the same cache. So, we'll specify a + | value to get prefixed to all our keys so we can avoid collisions. + | + */ + + 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache'), + +]; diff --git a/Laravel/config/cors.php b/Laravel/config/cors.php new file mode 100644 index 0000000..8a39e6d --- /dev/null +++ b/Laravel/config/cors.php @@ -0,0 +1,34 @@ + ['api/*', 'sanctum/csrf-cookie'], + + 'allowed_methods' => ['*'], + + 'allowed_origins' => ['*'], + + 'allowed_origins_patterns' => [], + + 'allowed_headers' => ['*'], + + 'exposed_headers' => [], + + 'max_age' => 0, + + 'supports_credentials' => false, + +]; diff --git a/Laravel/config/database.php b/Laravel/config/database.php new file mode 100644 index 0000000..b42d9b3 --- /dev/null +++ b/Laravel/config/database.php @@ -0,0 +1,147 @@ + env('DB_CONNECTION', 'mysql'), + + /* + |-------------------------------------------------------------------------- + | Database Connections + |-------------------------------------------------------------------------- + | + | Here are each of the database connections setup for your application. + | Of course, examples of configuring each database platform that is + | supported by Laravel is shown below to make development simple. + | + | + | All database work in Laravel is done through the PHP PDO facilities + | so make sure you have the driver for your particular database of + | choice installed on your machine before you begin development. + | + */ + + 'connections' => [ + + 'sqlite' => [ + 'driver' => 'sqlite', + 'url' => env('DATABASE_URL'), + 'database' => env('DB_DATABASE', database_path('database.sqlite')), + 'prefix' => '', + 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), + ], + + 'mysql' => [ + 'driver' => 'mysql', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => 'utf8mb4', + 'collation' => 'utf8mb4_unicode_ci', + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'pgsql' => [ + 'driver' => 'pgsql', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '5432'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'prefix_indexes' => true, + 'schema' => 'public', + 'sslmode' => 'prefer', + ], + + 'sqlsrv' => [ + 'driver' => 'sqlsrv', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', 'localhost'), + 'port' => env('DB_PORT', '1433'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'prefix_indexes' => true, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Migration Repository Table + |-------------------------------------------------------------------------- + | + | This table keeps track of all the migrations that have already run for + | your application. Using this information, we can determine which of + | the migrations on disk haven't actually been run in the database. + | + */ + + 'migrations' => 'migrations', + + /* + |-------------------------------------------------------------------------- + | Redis Databases + |-------------------------------------------------------------------------- + | + | Redis is an open source, fast, and advanced key-value store that also + | provides a richer body of commands than a typical key-value system + | such as APC or Memcached. Laravel makes it easy to dig right in. + | + */ + + 'redis' => [ + + 'client' => env('REDIS_CLIENT', 'phpredis'), + + 'options' => [ + 'cluster' => env('REDIS_CLUSTER', 'redis'), + 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'), + ], + + 'default' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'password' => env('REDIS_PASSWORD', null), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_DB', '0'), + ], + + 'cache' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'password' => env('REDIS_PASSWORD', null), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_CACHE_DB', '1'), + ], + + ], + +]; diff --git a/Laravel/config/filesystems.php b/Laravel/config/filesystems.php new file mode 100644 index 0000000..760ef97 --- /dev/null +++ b/Laravel/config/filesystems.php @@ -0,0 +1,73 @@ + env('FILESYSTEM_DRIVER', 'local'), + + /* + |-------------------------------------------------------------------------- + | Filesystem Disks + |-------------------------------------------------------------------------- + | + | Here you may configure as many filesystem "disks" as you wish, and you + | may even configure multiple disks of the same driver. Defaults have + | been setup for each driver as an example of the required options. + | + | Supported Drivers: "local", "ftp", "sftp", "s3" + | + */ + + 'disks' => [ + + 'local' => [ + 'driver' => 'local', + 'root' => storage_path('app'), + ], + + 'public' => [ + 'driver' => 'local', + 'root' => storage_path('app/public'), + 'url' => env('APP_URL').'/storage', + 'visibility' => 'public', + ], + + 's3' => [ + 'driver' => 's3', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION'), + 'bucket' => env('AWS_BUCKET'), + 'url' => env('AWS_URL'), + 'endpoint' => env('AWS_ENDPOINT'), + 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Symbolic Links + |-------------------------------------------------------------------------- + | + | Here you may configure the symbolic links that will be created when the + | `storage:link` Artisan command is executed. The array keys should be + | the locations of the links and the values should be their targets. + | + */ + + 'links' => [ + public_path('storage') => storage_path('app/public'), + ], + +]; diff --git a/Laravel/config/hashing.php b/Laravel/config/hashing.php new file mode 100644 index 0000000..bcd3be4 --- /dev/null +++ b/Laravel/config/hashing.php @@ -0,0 +1,52 @@ + 'bcrypt', + + /* + |-------------------------------------------------------------------------- + | Bcrypt Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Bcrypt algorithm. This will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'bcrypt' => [ + 'rounds' => env('BCRYPT_ROUNDS', 10), + ], + + /* + |-------------------------------------------------------------------------- + | Argon Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Argon algorithm. These will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'argon' => [ + 'memory' => 65536, + 'threads' => 1, + 'time' => 4, + ], + +]; diff --git a/Laravel/config/logging.php b/Laravel/config/logging.php new file mode 100644 index 0000000..880cd92 --- /dev/null +++ b/Laravel/config/logging.php @@ -0,0 +1,118 @@ + env('LOG_CHANNEL', 'stack'), + + /* + |-------------------------------------------------------------------------- + | Deprecations Log Channel + |-------------------------------------------------------------------------- + | + | This option controls the log channel that should be used to log warnings + | regarding deprecated PHP and library features. This allows you to get + | your application ready for upcoming major versions of dependencies. + | + */ + + 'deprecations' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), + + /* + |-------------------------------------------------------------------------- + | Log Channels + |-------------------------------------------------------------------------- + | + | Here you may configure the log channels for your application. Out of + | the box, Laravel uses the Monolog PHP logging library. This gives + | you a variety of powerful log handlers / formatters to utilize. + | + | Available Drivers: "single", "daily", "slack", "syslog", + | "errorlog", "monolog", + | "custom", "stack" + | + */ + + 'channels' => [ + 'stack' => [ + 'driver' => 'stack', + 'channels' => ['single'], + 'ignore_exceptions' => false, + ], + + 'single' => [ + 'driver' => 'single', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'daily' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'days' => 14, + ], + + 'slack' => [ + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'username' => 'Laravel Log', + 'emoji' => ':boom:', + 'level' => env('LOG_LEVEL', 'critical'), + ], + + 'papertrail' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => SyslogUdpHandler::class, + 'handler_with' => [ + 'host' => env('PAPERTRAIL_URL'), + 'port' => env('PAPERTRAIL_PORT'), + ], + ], + + 'stderr' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => StreamHandler::class, + 'formatter' => env('LOG_STDERR_FORMATTER'), + 'with' => [ + 'stream' => 'php://stderr', + ], + ], + + 'syslog' => [ + 'driver' => 'syslog', + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'errorlog' => [ + 'driver' => 'errorlog', + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'null' => [ + 'driver' => 'monolog', + 'handler' => NullHandler::class, + ], + + 'emergency' => [ + 'path' => storage_path('logs/laravel.log'), + ], + ], + +]; diff --git a/Laravel/config/mail.php b/Laravel/config/mail.php new file mode 100644 index 0000000..f96c6c7 --- /dev/null +++ b/Laravel/config/mail.php @@ -0,0 +1,118 @@ + env('MAIL_MAILER', 'smtp'), + + /* + |-------------------------------------------------------------------------- + | Mailer Configurations + |-------------------------------------------------------------------------- + | + | Here you may configure all of the mailers used by your application plus + | their respective settings. Several examples have been configured for + | you and you are free to add your own as your application requires. + | + | Laravel supports a variety of mail "transport" drivers to be used while + | sending an e-mail. You will specify which one you are using for your + | mailers below. You are free to add additional mailers as required. + | + | Supported: "smtp", "sendmail", "mailgun", "ses", + | "postmark", "log", "array", "failover" + | + */ + + 'mailers' => [ + 'smtp' => [ + 'transport' => 'smtp', + 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), + 'port' => env('MAIL_PORT', 587), + 'encryption' => env('MAIL_ENCRYPTION', 'tls'), + 'username' => env('MAIL_USERNAME'), + 'password' => env('MAIL_PASSWORD'), + 'timeout' => null, + 'auth_mode' => null, + ], + + 'ses' => [ + 'transport' => 'ses', + ], + + 'mailgun' => [ + 'transport' => 'mailgun', + ], + + 'postmark' => [ + 'transport' => 'postmark', + ], + + 'sendmail' => [ + 'transport' => 'sendmail', + 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -t -i'), + ], + + 'log' => [ + 'transport' => 'log', + 'channel' => env('MAIL_LOG_CHANNEL'), + ], + + 'array' => [ + 'transport' => 'array', + ], + + 'failover' => [ + 'transport' => 'failover', + 'mailers' => [ + 'smtp', + 'log', + ], + ], + ], + + /* + |-------------------------------------------------------------------------- + | Global "From" Address + |-------------------------------------------------------------------------- + | + | You may wish for all e-mails sent by your application to be sent from + | the same address. Here, you may specify a name and address that is + | used globally for all e-mails that are sent by your application. + | + */ + + 'from' => [ + 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), + 'name' => env('MAIL_FROM_NAME', 'Example'), + ], + + /* + |-------------------------------------------------------------------------- + | Markdown Mail Settings + |-------------------------------------------------------------------------- + | + | If you are using Markdown based email rendering, you may configure your + | theme and component paths here, allowing you to customize the design + | of the emails. Or, you may simply stick with the Laravel defaults! + | + */ + + 'markdown' => [ + 'theme' => 'default', + + 'paths' => [ + resource_path('views/vendor/mail'), + ], + ], + +]; diff --git a/Laravel/config/queue.php b/Laravel/config/queue.php new file mode 100644 index 0000000..25ea5a8 --- /dev/null +++ b/Laravel/config/queue.php @@ -0,0 +1,93 @@ + env('QUEUE_CONNECTION', 'sync'), + + /* + |-------------------------------------------------------------------------- + | Queue Connections + |-------------------------------------------------------------------------- + | + | Here you may configure the connection information for each server that + | is used by your application. A default configuration has been added + | for each back-end shipped with Laravel. You are free to add more. + | + | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null" + | + */ + + 'connections' => [ + + 'sync' => [ + 'driver' => 'sync', + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'jobs', + 'queue' => 'default', + 'retry_after' => 90, + 'after_commit' => false, + ], + + 'beanstalkd' => [ + 'driver' => 'beanstalkd', + 'host' => 'localhost', + 'queue' => 'default', + 'retry_after' => 90, + 'block_for' => 0, + 'after_commit' => false, + ], + + 'sqs' => [ + 'driver' => 'sqs', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), + 'queue' => env('SQS_QUEUE', 'default'), + 'suffix' => env('SQS_SUFFIX'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'after_commit' => false, + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + 'queue' => env('REDIS_QUEUE', 'default'), + 'retry_after' => 90, + 'block_for' => null, + 'after_commit' => false, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Failed Queue Jobs + |-------------------------------------------------------------------------- + | + | These options configure the behavior of failed queue job logging so you + | can control which database and table are used to store the jobs that + | have failed. You may change them to any database / table you wish. + | + */ + + 'failed' => [ + 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), + 'database' => env('DB_CONNECTION', 'mysql'), + 'table' => 'failed_jobs', + ], + +]; diff --git a/Laravel/config/sanctum.php b/Laravel/config/sanctum.php new file mode 100644 index 0000000..9281c92 --- /dev/null +++ b/Laravel/config/sanctum.php @@ -0,0 +1,65 @@ + explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf( + '%s%s', + 'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1', + env('APP_URL') ? ','.parse_url(env('APP_URL'), PHP_URL_HOST) : '' + ))), + + /* + |-------------------------------------------------------------------------- + | Sanctum Guards + |-------------------------------------------------------------------------- + | + | This array contains the authentication guards that will be checked when + | Sanctum is trying to authenticate a request. If none of these guards + | are able to authenticate the request, Sanctum will use the bearer + | token that's present on an incoming request for authentication. + | + */ + + 'guard' => ['web'], + + /* + |-------------------------------------------------------------------------- + | Expiration Minutes + |-------------------------------------------------------------------------- + | + | This value controls the number of minutes until an issued token will be + | considered expired. If this value is null, personal access tokens do + | not expire. This won't tweak the lifetime of first-party sessions. + | + */ + + 'expiration' => null, + + /* + |-------------------------------------------------------------------------- + | Sanctum Middleware + |-------------------------------------------------------------------------- + | + | When authenticating your first-party SPA with Sanctum you may need to + | customize some of the middleware Sanctum uses while processing the + | request. You may change the middleware listed below as required. + | + */ + + 'middleware' => [ + 'verify_csrf_token' => App\Http\Middleware\VerifyCsrfToken::class, + 'encrypt_cookies' => App\Http\Middleware\EncryptCookies::class, + ], + +]; diff --git a/Laravel/config/services.php b/Laravel/config/services.php new file mode 100644 index 0000000..2a1d616 --- /dev/null +++ b/Laravel/config/services.php @@ -0,0 +1,33 @@ + [ + 'domain' => env('MAILGUN_DOMAIN'), + 'secret' => env('MAILGUN_SECRET'), + 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), + ], + + 'postmark' => [ + 'token' => env('POSTMARK_TOKEN'), + ], + + 'ses' => [ + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + ], + +]; diff --git a/Laravel/config/session.php b/Laravel/config/session.php new file mode 100644 index 0000000..ac0802b --- /dev/null +++ b/Laravel/config/session.php @@ -0,0 +1,201 @@ + env('SESSION_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Session Lifetime + |-------------------------------------------------------------------------- + | + | Here you may specify the number of minutes that you wish the session + | to be allowed to remain idle before it expires. If you want them + | to immediately expire on the browser closing, set that option. + | + */ + + 'lifetime' => env('SESSION_LIFETIME', 120), + + 'expire_on_close' => false, + + /* + |-------------------------------------------------------------------------- + | Session Encryption + |-------------------------------------------------------------------------- + | + | This option allows you to easily specify that all of your session data + | should be encrypted before it is stored. All encryption will be run + | automatically by Laravel and you can use the Session like normal. + | + */ + + 'encrypt' => false, + + /* + |-------------------------------------------------------------------------- + | Session File Location + |-------------------------------------------------------------------------- + | + | When using the native session driver, we need a location where session + | files may be stored. A default has been set for you but a different + | location may be specified. This is only needed for file sessions. + | + */ + + 'files' => storage_path('framework/sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Database Connection + |-------------------------------------------------------------------------- + | + | When using the "database" or "redis" session drivers, you may specify a + | connection that should be used to manage these sessions. This should + | correspond to a connection in your database configuration options. + | + */ + + 'connection' => env('SESSION_CONNECTION', null), + + /* + |-------------------------------------------------------------------------- + | Session Database Table + |-------------------------------------------------------------------------- + | + | When using the "database" session driver, you may specify the table we + | should use to manage the sessions. Of course, a sensible default is + | provided for you; however, you are free to change this as needed. + | + */ + + 'table' => 'sessions', + + /* + |-------------------------------------------------------------------------- + | Session Cache Store + |-------------------------------------------------------------------------- + | + | While using one of the framework's cache driven session backends you may + | list a cache store that should be used for these sessions. This value + | must match with one of the application's configured cache "stores". + | + | Affects: "apc", "dynamodb", "memcached", "redis" + | + */ + + 'store' => env('SESSION_STORE', null), + + /* + |-------------------------------------------------------------------------- + | Session Sweeping Lottery + |-------------------------------------------------------------------------- + | + | Some session drivers must manually sweep their storage location to get + | rid of old sessions from storage. Here are the chances that it will + | happen on a given request. By default, the odds are 2 out of 100. + | + */ + + 'lottery' => [2, 100], + + /* + |-------------------------------------------------------------------------- + | Session Cookie Name + |-------------------------------------------------------------------------- + | + | Here you may change the name of the cookie used to identify a session + | instance by ID. The name specified here will get used every time a + | new session cookie is created by the framework for every driver. + | + */ + + 'cookie' => env( + 'SESSION_COOKIE', + Str::slug(env('APP_NAME', 'laravel'), '_').'_session' + ), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Path + |-------------------------------------------------------------------------- + | + | The session cookie path determines the path for which the cookie will + | be regarded as available. Typically, this will be the root path of + | your application but you are free to change this when necessary. + | + */ + + 'path' => '/', + + /* + |-------------------------------------------------------------------------- + | Session Cookie Domain + |-------------------------------------------------------------------------- + | + | Here you may change the domain of the cookie used to identify a session + | in your application. This will determine which domains the cookie is + | available to in your application. A sensible default has been set. + | + */ + + 'domain' => env('SESSION_DOMAIN', null), + + /* + |-------------------------------------------------------------------------- + | HTTPS Only Cookies + |-------------------------------------------------------------------------- + | + | By setting this option to true, session cookies will only be sent back + | to the server if the browser has a HTTPS connection. This will keep + | the cookie from being sent to you when it can't be done securely. + | + */ + + 'secure' => env('SESSION_SECURE_COOKIE'), + + /* + |-------------------------------------------------------------------------- + | HTTP Access Only + |-------------------------------------------------------------------------- + | + | Setting this value to true will prevent JavaScript from accessing the + | value of the cookie and the cookie will only be accessible through + | the HTTP protocol. You are free to modify this option if needed. + | + */ + + 'http_only' => true, + + /* + |-------------------------------------------------------------------------- + | Same-Site Cookies + |-------------------------------------------------------------------------- + | + | This option determines how your cookies behave when cross-site requests + | take place, and can be used to mitigate CSRF attacks. By default, we + | will set this value to "lax" since this is a secure default value. + | + | Supported: "lax", "strict", "none", null + | + */ + + 'same_site' => 'lax', + +]; diff --git a/Laravel/config/view.php b/Laravel/config/view.php new file mode 100644 index 0000000..22b8a18 --- /dev/null +++ b/Laravel/config/view.php @@ -0,0 +1,36 @@ + [ + resource_path('views'), + ], + + /* + |-------------------------------------------------------------------------- + | Compiled View Path + |-------------------------------------------------------------------------- + | + | This option determines where all the compiled Blade templates will be + | stored for your application. Typically, this is within the storage + | directory. However, as usual, you are free to change this value. + | + */ + + 'compiled' => env( + 'VIEW_COMPILED_PATH', + realpath(storage_path('framework/views')) + ), + +]; diff --git a/Laravel/database/.gitignore b/Laravel/database/.gitignore new file mode 100644 index 0000000..9b19b93 --- /dev/null +++ b/Laravel/database/.gitignore @@ -0,0 +1 @@ +*.sqlite* diff --git a/Laravel/database/factories/UserFactory.php b/Laravel/database/factories/UserFactory.php new file mode 100644 index 0000000..a3eb239 --- /dev/null +++ b/Laravel/database/factories/UserFactory.php @@ -0,0 +1,39 @@ + $this->faker->name(), + 'email' => $this->faker->unique()->safeEmail(), + 'email_verified_at' => now(), + 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password + 'remember_token' => Str::random(10), + ]; + } + + /** + * Indicate that the model's email address should be unverified. + * + * @return \Illuminate\Database\Eloquent\Factories\Factory + */ + public function unverified() + { + return $this->state(function (array $attributes) { + return [ + 'email_verified_at' => null, + ]; + }); + } +} diff --git a/Laravel/database/migrations/2014_10_12_000000_create_users_table.php b/Laravel/database/migrations/2014_10_12_000000_create_users_table.php new file mode 100644 index 0000000..621a24e --- /dev/null +++ b/Laravel/database/migrations/2014_10_12_000000_create_users_table.php @@ -0,0 +1,36 @@ +id(); + $table->string('name'); + $table->string('email')->unique(); + $table->timestamp('email_verified_at')->nullable(); + $table->string('password'); + $table->rememberToken(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('users'); + } +} diff --git a/Laravel/database/migrations/2014_10_12_100000_create_password_resets_table.php b/Laravel/database/migrations/2014_10_12_100000_create_password_resets_table.php new file mode 100644 index 0000000..0ee0a36 --- /dev/null +++ b/Laravel/database/migrations/2014_10_12_100000_create_password_resets_table.php @@ -0,0 +1,32 @@ +string('email')->index(); + $table->string('token'); + $table->timestamp('created_at')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('password_resets'); + } +} diff --git a/Laravel/database/migrations/2019_08_19_000000_create_failed_jobs_table.php b/Laravel/database/migrations/2019_08_19_000000_create_failed_jobs_table.php new file mode 100644 index 0000000..6aa6d74 --- /dev/null +++ b/Laravel/database/migrations/2019_08_19_000000_create_failed_jobs_table.php @@ -0,0 +1,36 @@ +id(); + $table->string('uuid')->unique(); + $table->text('connection'); + $table->text('queue'); + $table->longText('payload'); + $table->longText('exception'); + $table->timestamp('failed_at')->useCurrent(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('failed_jobs'); + } +} diff --git a/Laravel/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php b/Laravel/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php new file mode 100644 index 0000000..4315e16 --- /dev/null +++ b/Laravel/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php @@ -0,0 +1,36 @@ +id(); + $table->morphs('tokenable'); + $table->string('name'); + $table->string('token', 64)->unique(); + $table->text('abilities')->nullable(); + $table->timestamp('last_used_at')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('personal_access_tokens'); + } +} diff --git a/Laravel/database/seeders/DatabaseSeeder.php b/Laravel/database/seeders/DatabaseSeeder.php new file mode 100644 index 0000000..57b73b5 --- /dev/null +++ b/Laravel/database/seeders/DatabaseSeeder.php @@ -0,0 +1,18 @@ +create(); + } +} diff --git a/Laravel/package.json b/Laravel/package.json new file mode 100644 index 0000000..00c6506 --- /dev/null +++ b/Laravel/package.json @@ -0,0 +1,18 @@ +{ + "private": true, + "scripts": { + "dev": "npm run development", + "development": "mix", + "watch": "mix watch", + "watch-poll": "mix watch -- --watch-options-poll=1000", + "hot": "mix watch --hot", + "prod": "npm run production", + "production": "mix --production" + }, + "devDependencies": { + "axios": "^0.21", + "laravel-mix": "^6.0.6", + "lodash": "^4.17.19", + "postcss": "^8.1.14" + } +} diff --git a/Laravel/phpunit.xml b/Laravel/phpunit.xml new file mode 100644 index 0000000..4ae4d97 --- /dev/null +++ b/Laravel/phpunit.xml @@ -0,0 +1,31 @@ + + + + + ./tests/Unit + + + ./tests/Feature + + + + + ./app + + + + + + + + + + + + + + diff --git a/Laravel/public/.htaccess b/Laravel/public/.htaccess new file mode 100644 index 0000000..e69de29 diff --git a/Laravel/public/favicon.ico b/Laravel/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/Laravel/public/index.php b/Laravel/public/index.php new file mode 100644 index 0000000..1d69f3a --- /dev/null +++ b/Laravel/public/index.php @@ -0,0 +1,55 @@ +make(Kernel::class); + +$response = $kernel->handle( + $request = Request::capture() +)->send(); + +$kernel->terminate($request, $response); diff --git a/Laravel/public/nginx.htaccess b/Laravel/public/nginx.htaccess new file mode 100644 index 0000000..743de63 --- /dev/null +++ b/Laravel/public/nginx.htaccess @@ -0,0 +1,8 @@ +location / { + # root html; + index index.php index.html index.htm; + + try_files $uri $uri/ /index.php$is_args$query_string; + + + } \ No newline at end of file diff --git a/Laravel/public/report.pdf b/Laravel/public/report.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ef330bd3717a992414147facef6e174f7abcda68 GIT binary patch literal 115311 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 C%zKmo literal 0 HcmV?d00001 diff --git a/Laravel/public/robots.txt b/Laravel/public/robots.txt new file mode 100644 index 0000000..eb05362 --- /dev/null +++ b/Laravel/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/Laravel/resources/css/app.css b/Laravel/resources/css/app.css new file mode 100644 index 0000000..e69de29 diff --git a/Laravel/resources/js/app.js b/Laravel/resources/js/app.js new file mode 100644 index 0000000..40c55f6 --- /dev/null +++ b/Laravel/resources/js/app.js @@ -0,0 +1 @@ +require('./bootstrap'); diff --git a/Laravel/resources/js/bootstrap.js b/Laravel/resources/js/bootstrap.js new file mode 100644 index 0000000..6922577 --- /dev/null +++ b/Laravel/resources/js/bootstrap.js @@ -0,0 +1,28 @@ +window._ = require('lodash'); + +/** + * We'll load the axios HTTP library which allows us to easily issue requests + * to our Laravel back-end. This library automatically handles sending the + * CSRF token as a header based on the value of the "XSRF" token cookie. + */ + +window.axios = require('axios'); + +window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; + +/** + * Echo exposes an expressive API for subscribing to channels and listening + * for events that are broadcast by Laravel. Echo and event broadcasting + * allows your team to easily build robust real-time web applications. + */ + +// import Echo from 'laravel-echo'; + +// window.Pusher = require('pusher-js'); + +// window.Echo = new Echo({ +// broadcaster: 'pusher', +// key: process.env.MIX_PUSHER_APP_KEY, +// cluster: process.env.MIX_PUSHER_APP_CLUSTER, +// forceTLS: true +// }); diff --git a/Laravel/resources/lang/en/auth.php b/Laravel/resources/lang/en/auth.php new file mode 100644 index 0000000..6598e2c --- /dev/null +++ b/Laravel/resources/lang/en/auth.php @@ -0,0 +1,20 @@ + 'These credentials do not match our records.', + 'password' => 'The provided password is incorrect.', + 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', + +]; diff --git a/Laravel/resources/lang/en/pagination.php b/Laravel/resources/lang/en/pagination.php new file mode 100644 index 0000000..d481411 --- /dev/null +++ b/Laravel/resources/lang/en/pagination.php @@ -0,0 +1,19 @@ + '« Previous', + 'next' => 'Next »', + +]; diff --git a/Laravel/resources/lang/en/passwords.php b/Laravel/resources/lang/en/passwords.php new file mode 100644 index 0000000..2345a56 --- /dev/null +++ b/Laravel/resources/lang/en/passwords.php @@ -0,0 +1,22 @@ + 'Your password has been reset!', + 'sent' => 'We have emailed your password reset link!', + 'throttled' => 'Please wait before retrying.', + 'token' => 'This password reset token is invalid.', + 'user' => "We can't find a user with that email address.", + +]; diff --git a/Laravel/resources/lang/en/validation.php b/Laravel/resources/lang/en/validation.php new file mode 100644 index 0000000..783003c --- /dev/null +++ b/Laravel/resources/lang/en/validation.php @@ -0,0 +1,163 @@ + 'The :attribute must be accepted.', + 'accepted_if' => 'The :attribute must be accepted when :other is :value.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'after_or_equal' => 'The :attribute must be a date after or equal to :date.', + 'alpha' => 'The :attribute must only contain letters.', + 'alpha_dash' => 'The :attribute must only contain letters, numbers, dashes and underscores.', + 'alpha_num' => 'The :attribute must only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'before_or_equal' => 'The :attribute must be a date before or equal to :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'current_password' => 'The password is incorrect.', + 'date' => 'The :attribute is not a valid date.', + 'date_equals' => 'The :attribute must be a date equal to :date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'declined' => 'The :attribute must be declined.', + 'declined_if' => 'The :attribute must be declined when :other is :value.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'dimensions' => 'The :attribute has invalid image dimensions.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'email' => 'The :attribute must be a valid email address.', + 'ends_with' => 'The :attribute must end with one of the following: :values.', + 'enum' => 'The selected :attribute is invalid.', + 'exists' => 'The selected :attribute is invalid.', + 'file' => 'The :attribute must be a file.', + 'filled' => 'The :attribute field must have a value.', + 'gt' => [ + 'numeric' => 'The :attribute must be greater than :value.', + 'file' => 'The :attribute must be greater than :value kilobytes.', + 'string' => 'The :attribute must be greater than :value characters.', + 'array' => 'The :attribute must have more than :value items.', + ], + 'gte' => [ + 'numeric' => 'The :attribute must be greater than or equal to :value.', + 'file' => 'The :attribute must be greater than or equal to :value kilobytes.', + 'string' => 'The :attribute must be greater than or equal to :value characters.', + 'array' => 'The :attribute must have :value items or more.', + ], + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'ipv4' => 'The :attribute must be a valid IPv4 address.', + 'ipv6' => 'The :attribute must be a valid IPv6 address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'lt' => [ + 'numeric' => 'The :attribute must be less than :value.', + 'file' => 'The :attribute must be less than :value kilobytes.', + 'string' => 'The :attribute must be less than :value characters.', + 'array' => 'The :attribute must have less than :value items.', + ], + 'lte' => [ + 'numeric' => 'The :attribute must be less than or equal to :value.', + 'file' => 'The :attribute must be less than or equal to :value kilobytes.', + 'string' => 'The :attribute must be less than or equal to :value characters.', + 'array' => 'The :attribute must not have more than :value items.', + ], + 'mac_address' => 'The :attribute must be a valid MAC address.', + 'max' => [ + 'numeric' => 'The :attribute must not be greater than :max.', + 'file' => 'The :attribute must not be greater than :max kilobytes.', + 'string' => 'The :attribute must not be greater than :max characters.', + 'array' => 'The :attribute must not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'mimetypes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'multiple_of' => 'The :attribute must be a multiple of :value.', + 'not_in' => 'The selected :attribute is invalid.', + 'not_regex' => 'The :attribute format is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'password' => 'The password is incorrect.', + 'present' => 'The :attribute field must be present.', + 'prohibited' => 'The :attribute field is prohibited.', + 'prohibited_if' => 'The :attribute field is prohibited when :other is :value.', + 'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.', + 'prohibits' => 'The :attribute field prohibits :other from being present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_array_keys' => 'The :attribute field must contain entries for: :values.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values are present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'starts_with' => 'The :attribute must start with one of the following: :values.', + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid timezone.', + 'unique' => 'The :attribute has already been taken.', + 'uploaded' => 'The :attribute failed to upload.', + 'url' => 'The :attribute must be a valid URL.', + 'uuid' => 'The :attribute must be a valid UUID.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. + | + */ + + 'attributes' => [], + +]; diff --git a/Laravel/resources/views/welcome.blade.php b/Laravel/resources/views/welcome.blade.php new file mode 100644 index 0000000..dd6a45d --- /dev/null +++ b/Laravel/resources/views/welcome.blade.php @@ -0,0 +1,132 @@ + + + + + + + Laravel + + + + + + + + + + +
+ @if (Route::has('login')) + + @endif + +
+
+ + + + + +
+ +
+
+
+ + +
+
+ Laravel has wonderful, thorough documentation covering every aspect of the framework. Whether you are new to the framework or have previous experience with Laravel, we recommend reading all of the documentation from beginning to end. +
+
+
+ +
+
+ + +
+ +
+
+ Laracasts offers thousands of video tutorials on Laravel, PHP, and JavaScript development. Check them out, see for yourself, and massively level up your development skills in the process. +
+
+
+ +
+
+ + +
+ +
+
+ Laravel News is a community driven portal and newsletter aggregating all of the latest and most important news in the Laravel ecosystem, including new package releases and tutorials. +
+
+
+ +
+
+ +
Vibrant Ecosystem
+
+ +
+
+ Laravel's robust library of first-party tools and libraries, such as Forge, Vapor, Nova, and Envoyer help you take your projects to the next level. Pair them with powerful open source libraries like Cashier, Dusk, Echo, Horizon, Sanctum, Telescope, and more. +
+
+
+
+
+ +
+
+
+ + + + + + Shop + + + + + + + + Sponsor + +
+
+ +
+ Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }}) +
+
+
+
+ + diff --git a/Laravel/routes/api.php b/Laravel/routes/api.php new file mode 100644 index 0000000..2c9d0b8 --- /dev/null +++ b/Laravel/routes/api.php @@ -0,0 +1,62 @@ +get('/user', function (Request $request) { + return $request->user(); +}); + + +Route::post('admin/login','App\Http\Controllers\API\Admin\LoginController@Login')->middleware('log'); //登录 +Route::post('/tokenRefresh','App\Http\Controllers\API\TokenController@TokenRefresh')->middleware('log'); //刷新token + +Route::group(['middleware'=>['checktoken','log'],'prefix'=>'v1'],function () { //路由分组 + Route::post('admin/getBaseMenuList','App\Http\Controllers\API\Admin\BaseInfoController@GetBaseMenuList'); //登录后获取admin后台用户对应菜单列表 + Route::post('admin/GetBaseUserInfo','App\Http\Controllers\API\Admin\BaseInfoController@GetBaseUserInfo'); //获取admin用户基本信息 + Route::post('admin/getMenuList','App\Http\Controllers\API\Admin\MenuController@GetList'); //admin后台所有菜单管理 + Route::post('admin/GetFatherMenuList','App\Http\Controllers\API\Admin\MenuController@GetFatherMenuList'); //admin后台获取一级菜单 + Route::post('admin/AddMenu','App\Http\Controllers\API\Admin\MenuController@AddMenu'); //admin后台添加菜单 + Route::post('admin/EditMenu','App\Http\Controllers\API\Admin\MenuController@EditMenu'); //admin后台修改菜单 + Route::post('admin/getUserList','App\Http\Controllers\API\Admin\UserController@GetInfoList'); //admin后台获取用户列表 + Route::post('admin/GetSystemUserDetail','App\Http\Controllers\API\Admin\UserController@GetDetail'); //admin后台获取用户详情 + Route::post('admin/adminChangePwd','App\Http\Controllers\API\Admin\UserController@ChangePwd'); //admin后台修改密码 + Route::post('admin/SaveSystemUserInfo','App\Http\Controllers\API\Admin\UserController@Save'); //admin后台保存用户信息 + Route::post('admin/getGroupList','App\Http\Controllers\API\Admin\GroupController@GetList'); //admin后台组列表 + Route::post('admin/GroupChangeMenu','App\Http\Controllers\API\Admin\GroupController@ChangeMenu'); //admin后台组列表 + Route::post('admin/GetGroupMenuList','App\Http\Controllers\API\Admin\GroupController@GetGroupMenuList'); //管理员查询分组使用的菜单 + Route::post('admin/SaveGroup','App\Http\Controllers\API\Admin\GroupController@Save'); //admin后台组列表 + Route::post('admin/CheckMenuAuth','App\Http\Controllers\API\Admin\BaseInfoController@CheckMenuAuth'); //admin后台检查用户菜单权限 + Route::post('UpFile','App\Http\Controllers\API\UpLoadController@UpFile'); //上传文件 + Route::post('admin/ChangInfo','App\Http\Controllers\API\Admin\UserController@ChangInfo'); //修改自身用户信息 + Route::post('admin/GetConfigInfo','App\Http\Controllers\API\Admin\ConfigController@GetConfigInfo'); //获取配置信息 + Route::post('admin/SaveConfigInfo','App\Http\Controllers\API\Admin\ConfigController@SaveConfig'); //保存配置信息 + Route::post('admin/SystemLogGetList','App\Http\Controllers\API\LogController@GetList');//admin后台获取日志列表 + Route::post('admin/GetLogTableName','App\Http\Controllers\API\LogController@GetLogTableName');//admin后台获取日志表名 + //--------------以上为系统基本接口 + Route::post('admin/GetHealthOrganizationEnableList','App\Http\Controllers\API\Admin\YeWu\HealthOrganizationController@GetEnableList'); //admin后台获取可用体检机构列表 + Route::post('admin/CreateCalendar','App\Http\Controllers\API\Admin\YeWu\healthCalendarController@CreateCalendar'); //admin后台创建日历 + Route::post('admin/CalendarGetList','App\Http\Controllers\API\Admin\YeWu\healthCalendarController@getList'); //admin后台获取日历列表 + Route::post('admin/CalendarListDel','App\Http\Controllers\API\Admin\YeWu\healthCalendarController@Del'); //admin后台删除日历 + Route::post('admin/CalendarChangeInfo','App\Http\Controllers\API\Admin\YeWu\healthCalendarController@ChangeInfo'); //admin后台更新日历 + + +}); + + + + + + + diff --git a/Laravel/routes/channels.php b/Laravel/routes/channels.php new file mode 100644 index 0000000..5d451e1 --- /dev/null +++ b/Laravel/routes/channels.php @@ -0,0 +1,18 @@ +id === (int) $id; +}); diff --git a/Laravel/routes/console.php b/Laravel/routes/console.php new file mode 100644 index 0000000..e05f4c9 --- /dev/null +++ b/Laravel/routes/console.php @@ -0,0 +1,19 @@ +comment(Inspiring::quote()); +})->purpose('Display an inspiring quote'); diff --git a/Laravel/routes/web.php b/Laravel/routes/web.php new file mode 100644 index 0000000..08abe1d --- /dev/null +++ b/Laravel/routes/web.php @@ -0,0 +1,28 @@ + + */ + +$uri = urldecode( + parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) ?? '' +); + +// This file allows us to emulate Apache's "mod_rewrite" functionality from the +// built-in PHP web server. This provides a convenient way to test a Laravel +// application without having installed a "real" web server software here. +if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) { + return false; +} + +require_once __DIR__.'/public/index.php'; diff --git a/Laravel/storage/app/.gitignore b/Laravel/storage/app/.gitignore new file mode 100644 index 0000000..8f4803c --- /dev/null +++ b/Laravel/storage/app/.gitignore @@ -0,0 +1,3 @@ +* +!public/ +!.gitignore diff --git a/Laravel/storage/framework/.gitignore b/Laravel/storage/framework/.gitignore new file mode 100644 index 0000000..05c4471 --- /dev/null +++ b/Laravel/storage/framework/.gitignore @@ -0,0 +1,9 @@ +compiled.php +config.php +down +events.scanned.php +maintenance.php +routes.php +routes.scanned.php +schedule-* +services.json diff --git a/Laravel/storage/framework/cache/.gitignore b/Laravel/storage/framework/cache/.gitignore new file mode 100644 index 0000000..01e4a6c --- /dev/null +++ b/Laravel/storage/framework/cache/.gitignore @@ -0,0 +1,3 @@ +* +!data/ +!.gitignore diff --git a/Laravel/storage/framework/cache/data/.gitignore b/Laravel/storage/framework/cache/data/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/Laravel/storage/framework/cache/data/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/Laravel/storage/framework/sessions/.gitignore b/Laravel/storage/framework/sessions/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/Laravel/storage/framework/sessions/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/Laravel/storage/framework/testing/.gitignore b/Laravel/storage/framework/testing/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/Laravel/storage/framework/testing/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/Laravel/storage/framework/views/.gitignore b/Laravel/storage/framework/views/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/Laravel/storage/framework/views/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/Laravel/storage/logs/.gitignore b/Laravel/storage/logs/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/Laravel/storage/logs/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/Laravel/tests/CreatesApplication.php b/Laravel/tests/CreatesApplication.php new file mode 100644 index 0000000..547152f --- /dev/null +++ b/Laravel/tests/CreatesApplication.php @@ -0,0 +1,22 @@ +make(Kernel::class)->bootstrap(); + + return $app; + } +} diff --git a/Laravel/tests/Feature/ExampleTest.php b/Laravel/tests/Feature/ExampleTest.php new file mode 100644 index 0000000..4ae02bc --- /dev/null +++ b/Laravel/tests/Feature/ExampleTest.php @@ -0,0 +1,21 @@ +get('/'); + + $response->assertStatus(200); + } +} diff --git a/Laravel/tests/TestCase.php b/Laravel/tests/TestCase.php new file mode 100644 index 0000000..2932d4a --- /dev/null +++ b/Laravel/tests/TestCase.php @@ -0,0 +1,10 @@ +assertTrue(true); + } +} diff --git a/Laravel/webpack.mix.js b/Laravel/webpack.mix.js new file mode 100644 index 0000000..2a22dc1 --- /dev/null +++ b/Laravel/webpack.mix.js @@ -0,0 +1,17 @@ +const mix = require('laravel-mix'); + +/* + |-------------------------------------------------------------------------- + | Mix Asset Management + |-------------------------------------------------------------------------- + | + | Mix provides a clean, fluent API for defining some Webpack build steps + | for your Laravel applications. By default, we are compiling the CSS + | file for the application as well as bundling up all the JS files. + | + */ + +mix.js('resources/js/app.js', 'public/js') + .postCss('resources/css/app.css', 'public/css', [ + // + ]); diff --git a/admin/.env.development b/admin/.env.development new file mode 100644 index 0000000..81d4aaa --- /dev/null +++ b/admin/.env.development @@ -0,0 +1,3 @@ +ENV = 'development' +VITE_APP_API = '/api/' +VITE_APP_FILE = 'http://tongyonghoutai' \ No newline at end of file diff --git a/admin/.env.production b/admin/.env.production new file mode 100644 index 0000000..1a89d63 --- /dev/null +++ b/admin/.env.production @@ -0,0 +1,4 @@ +ENV = 'production' +VITE_APP_API = 'https://www.yanzai.vip/common/laravel/public/api/' +VITE_APP_FILE = 'https://www.yanzai.vip/common/laravel/public' + diff --git a/admin/.eslintrc.cjs b/admin/.eslintrc.cjs new file mode 100644 index 0000000..b64731a --- /dev/null +++ b/admin/.eslintrc.cjs @@ -0,0 +1,14 @@ +/* eslint-env node */ +require('@rushstack/eslint-patch/modern-module-resolution') + +module.exports = { + root: true, + 'extends': [ + 'plugin:vue/vue3-essential', + 'eslint:recommended', + '@vue/eslint-config-prettier/skip-formatting' + ], + parserOptions: { + ecmaVersion: 'latest' + } +} diff --git a/admin/.gitignore b/admin/.gitignore new file mode 100644 index 0000000..38adffa --- /dev/null +++ b/admin/.gitignore @@ -0,0 +1,28 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/admin/.prettierrc.json b/admin/.prettierrc.json new file mode 100644 index 0000000..66e2335 --- /dev/null +++ b/admin/.prettierrc.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://json.schemastore.org/prettierrc", + "semi": false, + "tabWidth": 2, + "singleQuote": true, + "printWidth": 100, + "trailingComma": "none" +} \ No newline at end of file diff --git a/admin/.vscode/extensions.json b/admin/.vscode/extensions.json new file mode 100644 index 0000000..009a534 --- /dev/null +++ b/admin/.vscode/extensions.json @@ -0,0 +1,8 @@ +{ + "recommendations": [ + "Vue.volar", + "Vue.vscode-typescript-vue-plugin", + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode" + ] +} diff --git a/admin/README.md b/admin/README.md new file mode 100644 index 0000000..eeed457 --- /dev/null +++ b/admin/README.md @@ -0,0 +1,35 @@ +# el-admin + +This template should help get you started developing with Vue 3 in Vite. + +## Recommended IDE Setup + +[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin). + +## Customize configuration + +See [Vite Configuration Reference](https://vitejs.dev/config/). + +## Project Setup + +```sh +npm install +``` + +### Compile and Hot-Reload for Development + +```sh +npm run dev +``` + +### Compile and Minify for Production + +```sh +npm run build +``` + +### Lint with [ESLint](https://eslint.org/) + +```sh +npm run lint +``` diff --git a/admin/index.html b/admin/index.html new file mode 100644 index 0000000..03cdc53 --- /dev/null +++ b/admin/index.html @@ -0,0 +1,13 @@ + + + + + + + 体检平台 + + +
+ + + diff --git a/admin/package-lock.json b/admin/package-lock.json new file mode 100644 index 0000000..c2d3307 --- /dev/null +++ b/admin/package-lock.json @@ -0,0 +1,3349 @@ +{ + "name": "el-admin", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "el-admin", + "version": "0.0.0", + "dependencies": { + "@element-plus/icons-vue": "^2.1.0", + "@vueuse/core": "^10.4.1", + "axios": "^1.5.1", + "echarts": "^5.4.3", + "element-plus": "^2.3.14", + "pinia": "^2.1.6", + "qrcode": "^1.5.3", + "vue": "^3.3.4", + "vue-router": "^4.2.4" + }, + "devDependencies": { + "@rushstack/eslint-patch": "^1.3.3", + "@vitejs/plugin-vue": "^4.3.4", + "@vue/eslint-config-prettier": "^8.0.0", + "eslint": "^8.49.0", + "eslint-plugin-vue": "^9.17.0", + "prettier": "^3.0.3", + "vite": "^4.4.9" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@element-plus/icons-vue": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.1.0.tgz", + "integrity": "sha512-PSBn3elNoanENc1vnCfh+3WA9fimRC7n+fWkf3rE5jvv+aBohNHABC/KAR5KWPecxWxDTVT1ERpRbOMRcOV/vA==", + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.0.tgz", + "integrity": "sha512-zJmuCWj2VLBt4c25CfBIbMZLGLyhkvs7LznyVX5HfpzeocThgIj5XQK4L+g3U36mMcx8bPMhGyPpwCATamC4jQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.50.0.tgz", + "integrity": "sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.0.tgz", + "integrity": "sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==", + "dependencies": { + "@floating-ui/utils": "^0.1.3" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz", + "integrity": "sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==", + "dependencies": { + "@floating-ui/core": "^1.4.2", + "@floating-ui/utils": "^0.1.3" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.4.tgz", + "integrity": "sha512-qprfWkn82Iw821mcKofJ5Pk9wgioHicxcQMxx+5zt5GSKoqdWvgG5AxVmpmUUjzTLPVSH5auBrhI93Deayn/DA==" + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", + "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgr/utils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", + "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@popperjs/core": { + "name": "@sxzz/popperjs-es", + "version": "2.11.7", + "resolved": "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz", + "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.5.0.tgz", + "integrity": "sha512-EF3948ckf3f5uPgYbQ6GhyA56Dmv8yg0+ir+BroRjwdxyZJsekhZzawOecC2rOTPCz173t7ZcR1HHZu0dZgOCw==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.14.199", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.199.tgz", + "integrity": "sha512-Vrjz5N5Ia4SEzWWgIVwnHNEnb1UE1XMkvY5DGXrAeOGE9imk0hgTHh5GyDjLDJi9OTCn9oo9dXH1uToK1VRfrg==" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.9", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.9.tgz", + "integrity": "sha512-ZTcmhiI3NNU7dEvWLZJkzG6ao49zOIjEgIE0RgV7wbPxU0f2xT3VSAHw2gmst8swH6V0YkLRGp4qPlX/6I90MQ==", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.17", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz", + "integrity": "sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.3.4.tgz", + "integrity": "sha512-ciXNIHKPriERBisHFBvnTbfKa6r9SAesOYXeGDzgegcvy9Q4xdScSHAmKbNT0M3O0S9LKhIf5/G+UYG4NnnzYw==", + "dev": true, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz", + "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==", + "dependencies": { + "@babel/parser": "^7.21.3", + "@vue/shared": "3.3.4", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz", + "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==", + "dependencies": { + "@vue/compiler-core": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz", + "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==", + "dependencies": { + "@babel/parser": "^7.20.15", + "@vue/compiler-core": "3.3.4", + "@vue/compiler-dom": "3.3.4", + "@vue/compiler-ssr": "3.3.4", + "@vue/reactivity-transform": "3.3.4", + "@vue/shared": "3.3.4", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.0", + "postcss": "^8.1.10", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz", + "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==", + "dependencies": { + "@vue/compiler-dom": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz", + "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==" + }, + "node_modules/@vue/eslint-config-prettier": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-8.0.0.tgz", + "integrity": "sha512-55dPqtC4PM/yBjhAr+yEw6+7KzzdkBuLmnhBrDfp4I48+wy+Giqqj9yUr5T2uD/BkBROjjmqnLZmXRdOx/VtQg==", + "dev": true, + "dependencies": { + "eslint-config-prettier": "^8.8.0", + "eslint-plugin-prettier": "^5.0.0" + }, + "peerDependencies": { + "eslint": ">= 8.0.0", + "prettier": ">= 3.0.0" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz", + "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==", + "dependencies": { + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/reactivity-transform": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz", + "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==", + "dependencies": { + "@babel/parser": "^7.20.15", + "@vue/compiler-core": "3.3.4", + "@vue/shared": "3.3.4", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.0" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz", + "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==", + "dependencies": { + "@vue/reactivity": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz", + "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==", + "dependencies": { + "@vue/runtime-core": "3.3.4", + "@vue/shared": "3.3.4", + "csstype": "^3.1.1" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz", + "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==", + "dependencies": { + "@vue/compiler-ssr": "3.3.4", + "@vue/shared": "3.3.4" + }, + "peerDependencies": { + "vue": "3.3.4" + } + }, + "node_modules/@vue/shared": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz", + "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==" + }, + "node_modules/@vueuse/core": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.4.1.tgz", + "integrity": "sha512-DkHIfMIoSIBjMgRRvdIvxsyboRZQmImofLyOHADqiVbQVilP8VVHDhBX2ZqoItOgu7dWa8oXiNnScOdPLhdEXg==", + "dependencies": { + "@types/web-bluetooth": "^0.0.17", + "@vueuse/metadata": "10.4.1", + "@vueuse/shared": "10.4.1", + "vue-demi": ">=0.14.5" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.4.1.tgz", + "integrity": "sha512-2Sc8X+iVzeuMGHr6O2j4gv/zxvQGGOYETYXEc41h0iZXIRnRbJZGmY/QP8dvzqUelf8vg0p/yEA5VpCEu+WpZg==", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.4.1.tgz", + "integrity": "sha512-vz5hbAM4qA0lDKmcr2y3pPdU+2EVw/yzfRsBdu+6+USGa4PxqSQRYIUC9/NcT06y+ZgaTsyURw2I9qOFaaXHAg==", + "dependencies": { + "vue-demi": ">=0.14.5" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz", + "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "dev": true, + "dependencies": { + "big-integer": "^1.6.44" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bundle-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", + "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", + "dev": true, + "dependencies": { + "run-applescript": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + }, + "node_modules/dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/default-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", + "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", + "dev": true, + "dependencies": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "dev": true, + "dependencies": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dijkstrajs": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz", + "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==" + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/echarts": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.4.3.tgz", + "integrity": "sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==", + "dependencies": { + "tslib": "2.3.0", + "zrender": "5.4.4" + } + }, + "node_modules/echarts/node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + }, + "node_modules/element-plus": { + "version": "2.3.14", + "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.3.14.tgz", + "integrity": "sha512-9yvxUaU4jXf2ZNPdmIxoj/f8BG8CDcGM6oHa9JIqxLjQlfY4bpzR1E5CjNimnOX3rxO93w1TQ0jTVt0RSxh9kA==", + "dependencies": { + "@ctrl/tinycolor": "^3.4.1", + "@element-plus/icons-vue": "^2.0.6", + "@floating-ui/dom": "^1.0.1", + "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7", + "@types/lodash": "^4.14.182", + "@types/lodash-es": "^4.17.6", + "@vueuse/core": "^9.1.0", + "async-validator": "^4.2.5", + "dayjs": "^1.11.3", + "escape-html": "^1.0.3", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "lodash-unified": "^1.0.2", + "memoize-one": "^6.0.0", + "normalize-wheel-es": "^1.2.0" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/element-plus/node_modules/@types/web-bluetooth": { + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz", + "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==" + }, + "node_modules/element-plus/node_modules/@vueuse/core": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-9.13.0.tgz", + "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==", + "dependencies": { + "@types/web-bluetooth": "^0.0.16", + "@vueuse/metadata": "9.13.0", + "@vueuse/shared": "9.13.0", + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/element-plus/node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/element-plus/node_modules/@vueuse/metadata": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-9.13.0.tgz", + "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/element-plus/node_modules/@vueuse/shared": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-9.13.0.tgz", + "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==", + "dependencies": { + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/element-plus/node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encode-utf8": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" + }, + "node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz", + "integrity": "sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.50.0", + "@humanwhocodes/config-array": "^0.11.11", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", + "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.0.tgz", + "integrity": "sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.5" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-vue": { + "version": "9.17.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.17.0.tgz", + "integrity": "sha512-r7Bp79pxQk9I5XDP0k2dpUC7Ots3OSWgvGZNu3BxmKK6Zg7NgVtcOB6OCna5Kb9oQwJPl5hq183WD0SY5tZtIQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.13", + "semver": "^7.5.4", + "vue-eslint-parser": "^9.3.1", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", + "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", + "dev": true, + "dependencies": { + "flatted": "^3.2.7", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.22.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", + "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-wsl/node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/keyv": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/lodash-unified": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.3.tgz", + "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==", + "peerDependencies": { + "@types/lodash-es": "*", + "lodash": "*", + "lodash-es": "*" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-string": { + "version": "0.30.4", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.4.tgz", + "integrity": "sha512-Q/TKtsC5BPm0kGqgBIF9oXAs/xEf2vRKiIB4wCRQTJOQIByZ1d+NnUOotvJOvNpi5RNIgVOMC3pOuaP1ZTDlVg==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/normalize-wheel-es": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", + "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==" + }, + "node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "dev": true, + "dependencies": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pinia": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.1.6.tgz", + "integrity": "sha512-bIU6QuE5qZviMmct5XwCesXelb5VavdOWKWaB17ggk++NUwQWWbP5YnsONTk3b752QkW9sACiR81rorpeOMSvQ==", + "dependencies": { + "@vue/devtools-api": "^6.5.0", + "vue-demi": ">=0.14.5" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "@vue/composition-api": "^1.4.0", + "typescript": ">=4.4.4", + "vue": "^2.6.14 || ^3.3.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/pinia/node_modules/vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/pngjs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", + "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qrcode": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.3.tgz", + "integrity": "sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==", + "dependencies": { + "dijkstrajs": "^1.0.1", + "encode-utf8": "^1.0.3", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "qrcode": "bin/qrcode" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-applescript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", + "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/run-applescript/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/run-applescript/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/run-applescript/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/run-applescript/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/synckit": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", + "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", + "dev": true, + "dependencies": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/titleize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", + "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/vite": { + "version": "4.4.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", + "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", + "dev": true, + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz", + "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==", + "dependencies": { + "@vue/compiler-dom": "3.3.4", + "@vue/compiler-sfc": "3.3.4", + "@vue/runtime-dom": "3.3.4", + "@vue/server-renderer": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "node_modules/vue-eslint-parser": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.1.tgz", + "integrity": "sha512-Clr85iD2XFZ3lJ52/ppmUDG/spxQu6+MAeHXjjyI4I1NUYZ9xmenQp4N0oaHJhrA8OOxltCVxMRfANGa70vU0g==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/vue-router": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.5.tgz", + "integrity": "sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==", + "dependencies": { + "@vue/devtools-api": "^6.5.0" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zrender": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.4.4.tgz", + "integrity": "sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==", + "dependencies": { + "tslib": "2.3.0" + } + }, + "node_modules/zrender/node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + } + } +} diff --git a/admin/package.json b/admin/package.json new file mode 100644 index 0000000..a35e531 --- /dev/null +++ b/admin/package.json @@ -0,0 +1,32 @@ +{ + "name": "el-admin", + "version": "0.0.0", + "private": true, + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview", + "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore", + "format": "prettier --write src/" + }, + "dependencies": { + "@element-plus/icons-vue": "^2.1.0", + "@vueuse/core": "^10.4.1", + "axios": "^1.5.1", + "echarts": "^5.4.3", + "element-plus": "^2.3.14", + "pinia": "^2.1.6", + "qrcode": "^1.5.3", + "vue": "^3.3.4", + "vue-router": "^4.2.4" + }, + "devDependencies": { + "@rushstack/eslint-patch": "^1.3.3", + "@vitejs/plugin-vue": "^4.3.4", + "@vue/eslint-config-prettier": "^8.0.0", + "eslint": "^8.49.0", + "eslint-plugin-vue": "^9.17.0", + "prettier": "^3.0.3", + "vite": "^4.4.9" + } +} diff --git a/admin/public/favicon.ico b/admin/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2 GIT binary patch literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S literal 0 HcmV?d00001 diff --git a/admin/public/js/xtxsync.js b/admin/public/js/xtxsync.js new file mode 100644 index 0000000..de4ab8b --- /dev/null +++ b/admin/public/js/xtxsync.js @@ -0,0 +1,984 @@ +/* + -------------------------------------------------------------- + * FileName:xtxsync.js + * This Javascript provides synchronous interfaces + * Support bjca client version 3.4.1 and later + * Author:BJCA-zys + * Date: 2021-05-06 + * + -------------------------------------------------------------- + */ + +(function() { +if (typeof xtxsync === 'undefined') { + xtxsync = {}; +} +})(); + +// initialize xtxsync hashMap object +(function() { + +function xtxsyncHashMap(){ + this.map = {}; +} + +xtxsyncHashMap.prototype = { + put : function(key , value){ + this.map[key] = value; + }, + + get : function(key){ + if(this.map.hasOwnProperty(key)){ + return this.map[key]; + } + return null; + }, + + remove : function(key){ + if(this.map.hasOwnProperty(key)){ + return delete this.map[key]; + } + return false; + }, + + removeAll : function(){ + this.map = {}; + }, + + keySet : function(){ + var _keys = []; + for(var i in this.map){ + _keys.push(i); + } + return _keys; + } +}; + +xtxsyncHashMap.prototype.constructor = xtxsyncHashMap; + +xtxsync.HashMap = xtxsyncHashMap; +})(); + +// initialize xtxsync util object +(function() { + +function initUtilObject(xtxsync) { + + var util = xtxsync.util = xtxsync.util || {}; + + util.checkBrowserISIE = function() { + return (!!window.ActiveXObject || 'ActiveXObject' in window) ? true : false; + } + + util.checkLocationIsHttps = function() { + return 'https:' == document.location.protocol ? true: false; + } + + util.evalFunction = function (func) { + if (typeof func === 'function') { + return func; + } else if (typeof func === 'string') { + cb = eval(func); + } else { + return null; + } + } + + util.consolelog = function(param) { + if (window.console == undefined || window.console.log == undefined) { + return; + } + console.log(param); + } + + util.isEmpty = function(param) { + if (!param) { + return true; + } + if (typeof param == 'string' && param == "") { + return true; + } + + return false; + } + + util.loadIECtl = function(clsid, ctlName, checkFunc) { + if (!util.checkBrowserISIE()) { + return null; + } + var ctl = document.getElementById(ctlName); + if (ctl) { + return ctl; + } + try { + var loadObjString = ''; + loadObjString += ''; + document.write(loadObjString); + if (checkFunc != null && checkFunc != "" && eval(ctlName + "." + checkFunc) == undefined) { + return null; + } + } catch (e) { + util.consolelog(e); + return null; + } + return document.getElementById(ctlName); + } + + util.getAutoExecFunctionString = function (func) { + var ret = "("; + ret += func.toString(); + ret += ")()"; + + return ret; + } + + util.attachIEEvent = function(ctlName, eventName, eventFunc) { + var ctl; + if (typeof ctlName === 'string') { + ctl = eval(ctlName); + } else { + ctl = ctlName; + } + eventName = eventName.toLowerCase(); + + var cb = util.evalFunction(eventFunc); + if (cb == null) { + return; + } + + if (ctl.attachEvent) { + ctl.attachEvent(eventName, cb); + } else { // IE11 not support attachEvent, and addEventListener do not work well, so addEvent ourself + var handler = document.createElement("script"); + handler.setAttribute("for", ctlName); + handler.setAttribute("event", eventName); + var eventScript = util.getAutoExecFunctionString(eventFunc); + handler.appendChild(document.createTextNode(eventScript)); + document.getElementsByTagName("head")[0].appendChild(handler); + } + } + + util.loadWebSocketCtl = function(wsUrl, wssUrl) { + if (xtxsync.wsObject) { + return xtxsync.wsObject; + } + var url; + if (util.checkLocationIsHttps()) { + url = "wss://" + wssUrl; + } else { + url = "ws://" + wsUrl; + } + + var wsObject = { + socket : undefined, + wsEventQueue : new xtxsync.HashMap(), + wsURL : url + }; + xtxsync.wsObject = wsObject; + xtxsync.wsObject.wsEventQueue.put("onusbkeychange", util.evalFunction(xtxsync.custom.defaultUsbkeyChange)); + + try { + wsObject.socket = new WebSocket(url); + } catch (e) { + util.consolelog(e); + return null; + } + + wsObject.socket.onopen = function(evt) { + xtxsync.util.consolelog("open websocket[" + url + "] ok..."); + xtxsync.util.consolelog("SOF_GetVersion:(" + xtxsync.SOF_GetVersion() + ")"); + } + wsObject.socket.onclose = function(evt) { + util.consolelog("websocket[" + url + "] closed, reopen it..."); + xtxsync.wsObject = undefined; + xtxsync.XTXAppWebSocket = xtxsync.util.loadWebSocketCtl(wsUrl, wssUrl); + }; + wsObject.socket.onmessage = function(evt) { + var eventCmd = false; + if (xtxsync.util.isEmpty(evt.data)) { + util.consolelog("onmessage evt.data is NULL or empty!!!"); + return; + } + try { + var res = JSON.parse(evt.data); + var cmdId = undefined; + if (res['call_cmd_id']) { + cmdId = res['call_cmd_id']; + } else { + util.consolelog("return JSON not include call_cmd_id!!!"); + return; + } + + var retVal = ""; + if (res['retVal']) { + retVal = res['retVal']; + } else if (res['retValue']) { + retVal = res['retValue']; + } + + var execFunc = xtxsync.wsObject.wsEventQueue.get(cmdId.toLowerCase()); + if (execFunc && typeof execFunc == 'function') { // event + execFunc(retVal); + } + } catch (e) { + return; + } + }; + wsObject.socket.onerror = function(evt) { + xtxsync.util.consolelog(evt.data); + }; + + return wsObject; + } + + util.attachWebSocketEvent = function(wsObject, eventName, eventFunc) { + if (wsObject == null) { + return; + } + wsObject.wsEventQueue.put(eventName.toLowerCase(), util.evalFunction(eventFunc)); + } + + util.createHttpRequest = function() { + if (window.XMLHttpRequest) { + return new XMLHttpRequest(); + } else { + return new ActiveXObject("Microsoft.XMLHTTP"); + } + } + + util.ajaxSyncall = function(clsid, methodName, outPramType, argsArray) { + var defaultErrRet; + if (outPramType == 'bool') { + defaultErrRet = false; + } else if (outPramType == 'number') { + defaultErrRet = -1; + } else { + defaultErrRet = ""; + } + try { + var xhr = xtxsync.util.createHttpRequest(); + var strUrl = "http://127.0.0.1:21051/synctl"; + if (util.checkLocationIsHttps()) { + strUrl = "https://127.0.0.1:21061/synctl"; + } + xhr.open("POST", strUrl, false); + xhr.setRequestHeader("Content-type","application/json"); + var sendArray = { + url:window.location.href, + clsid:clsid, + func:methodName, + param:argsArray + }; + var token = xtxsync.custom.getToken(); + if (token != "") { + sendArray.token = token; + } + + xhr.send(JSON.stringify(sendArray)); + if (xhr.status != 200) { + if (methodName == 'SOF_Login' || methodName == 'SOF_LoginEx') { + xtxsync.custom.setToken(""); + } + return defaultErrRet; + } + + var res = JSON.parse(xhr.responseText); + if (res.token) { + xtxsync.custom.setToken(res.token); + } + + var ret = defaultErrRet; + if (res.hasOwnProperty('retValue')) { + ret = res.retValue; + } else if (res.hasOwnProperty('retVal')) { + if (outPramType == "bool"){ + if (typeof(res.retVal) == 'string') { + ret = res.retVal == "true" ? true : false; + } else { + ret = res.retVal; + } + } else if (outPramType == "number"){ + if (typeof(res.retVal) == 'string') { + ret = Number(res.retVal); + } else { + ret = res.retVal; + } + } else{ + ret = res.retVal; + } + } + if (ret == undefined) { + ret = defaultErrRet; + } + if (((methodName == 'SOF_Login' || methodName == 'SOF_LoginEx') && !ret) || (methodName == 'SOF_Logout' && ret)) { + xtxsync.custom.setToken(""); + } + return ret; + } catch (e) { + return defaultErrRet; + } + } +} + +return initUtilObject(xtxsync); +})(); + +// initialize index page and other custom action +(function() { + +function initCustomActions(xtxsync) { + var custom = xtxsync.custom = xtxsync.custom || {}; + + custom.softCertListID = ""; + custom.hardCertListID = ""; + custom.allCertListID = ""; + custom.loginCertID = ""; + custom.logoutFunc = null; + custom.UsbkeyChangeFunc = null; + custom.loginToken = ""; + + custom.errorReportFunc = function(msg) { + alert(msg); + } + + custom.setAutoLogoutParameter = function(strCertID, logoutFunc) { + var custom = xtxsync.custom; + custom.loginCertID = strCertID; + custom.logoutFunc = logoutFunc; + } + + custom.clearDropList = function(dropListId) { + if (dropListId == "") { + return; + } + + var obj = document.getElementById(dropListId); + if (obj == undefined) { + obj = eval(dropListId); + } + if (obj == undefined) { + return; + } + + var i, n = obj.length; + for (i = 0; i < n; i++) { + obj.remove(0); + } + } + + custom.pushOneDropListBox = function(userListArray, strListID) + { + var obj = document.getElementById(strListID); + if (obj == undefined) { + obj = eval(strListID); + } + if (obj == undefined) { + return; + } + + for (var i = 0; i < userListArray.length; i++) { + var certObj = userListArray[i]; + var objItem = new Option(certObj.certName, certObj.certID); + obj.options.add(objItem); + } + return; + } + + custom.pushUserListToAllDroplist = function(strUserList) { + var custom = xtxsync.custom; + + custom.clearDropList(custom.softCertListID); + custom.clearDropList(custom.hardCertListID); + custom.clearDropList(custom.allCertListID); + + var allListArray = []; + while (true) { + var i = strUserList.indexOf("&&&"); + if (i <= 0 ) { + break; + } + var strOneUser = strUserList.substring(0, i); + var strName = strOneUser.substring(0, strOneUser.indexOf("||")); + var strCertID = strOneUser.substring(strOneUser.indexOf("||") + 2, strOneUser.length); + allListArray.push({certName:strName, certID:strCertID}); + + if (custom.hardCertListID != "") { + var devType = xtxsync.GetDeviceInfo(strCertID, 7); + if (devType == "HARD") { + custom.pushOneDropListBox([{certName:strName, certID:strCertID}], custom.hardCertListID); + } + } + + if (custom.softCertListID != "") { + var devType = xtxsync.GetDeviceInfo(strCertID, 7); + if (devType == "SOFT") { + custom.pushOneDropListBox([{certName:strName, certID:strCertID}], custom.softCertListID); + } + } + var len = strUserList.length; + strUserList = strUserList.substring(i + 3, len); + } + + if (custom.allCertListID != "") { + custom.pushOneDropListBox(allListArray, custom.allCertListID); + } + } + + custom.setUserCertList = function(certListId, certType) { + var custom = xtxsync.custom; + + if (certType == CERT_TYPE_ALL || certType == undefined) { + custom.allCertListID = certListId; + } + + if (certType == CERT_TYPE_HARD) { + custom.hardCertListID = certListId; + } + + if (certType == CERT_TYPE_SOFT) { + custom.softCertListID = certListId; + } + custom.pushUserListToAllDroplist(xtxsync.SOF_GetUserList()); + } + + custom.setOnUsbKeyChangeCallBack = function(callback) { + xtxsync.custom.UsbkeyChangeFunc = callback; + } + + custom.setErrorReportFunc = function(errFunc) { + xtxsync.custom.errorReportFunc = errFunc; + } + + custom.autoLogoutCallBack = function(strUserList) { + var custom = xtxsync.custom; + if (strUserList.indexOf(custom.loginCertID) <= 0) { + custom.logoutFunc(); + } + } + + custom.defaultUsbkeyChange = function() { + var custom = xtxsync.custom; + custom.pushUserListToAllDroplist(xtxsync.SOF_GetUserList()); + + if (typeof custom.UsbkeyChangeFunc == 'function') { + custom.UsbkeyChangeFunc(); + } + + if (custom.loginCertID != "" && typeof custom.logoutFunc == 'function') { + custom.autoLogoutCallBack(xtxsync.SOF_GetUserList()); + } + } + + custom.getToken = function() { + return custom.loginToken; + } + + custom.setToken = function(token) { + custom.loginToken = token; + } +} + +return initCustomActions(xtxsync); +})(); + +// initialize xtxappcom object +(function() { + +function initXTXAppCOM(xtxsync) { + var util = xtxsync.util; + var custom = xtxsync.custom; + + xtxsync.XTXAppCOM = util.loadIECtl(xtxsync.xtx_clsid, "XTXAppObj", "SOF_GetVersion()"); + if (xtxsync.XTXAppCOM == null) { + custom.errorReportFunc("加载XTXAppCOM控件失败,请确认已正确安装BJCA证书应用环境!"); + return false; + } + var XTXAppCOM = xtxsync.XTXAppCOM; + + util.attachIEEvent("XTXAppObj", "onUsbkeyChange", xtxsync.custom.defaultUsbkeyChange); + + // get key pic interface + var GetPicObj = util.loadIECtl(xtxsync.getpic_clsid, "GetPicObj", "Hash('0')"); + if (GetPicObj == null) { + //custom.errorReportFunc("加载GetKeyPic控件失败,请确认已正确安装GetKeyPic控件!"); + } else { + XTXAppCOM.GetPic = function(strCertID) { + return GetPicObj.GetPic(strCertID); + } + XTXAppCOM.Hash = function(inData) { + return GetPicObj.Hash(inData); + } + XTXAppCOM.ConvertPicFormat = function(inData, type) { + return GetPicObj.ConvertPicFormat(inData, type); + } + XTXAppCOM.ConvertGif2Jpg = function(inData) { + return GetPicObj.ConvertGif2Jpg(inData); + } + XTXAppCOM.GetPic1 = function(strCertID) { + return GetPicObj.GetPic1(strCertID); + } + XTXAppCOM.ConvertPicSize = function(strPicture, w, h) { + return GetPicObj.ConvertPicSize(strPicture, w, h); + } + } + + // xtxversion interface + var XTXVersionOBJ = util.loadIECtl(xtxsync.xtx_version_clsid, "XTXVersionOBJ", "GetEnvVersion()"); + if (XTXVersionOBJ == null) { + //custom.errorReportFunc("加载XTXVersion控件失败,请确认已正确安装证书应用环境!"); + } else { + XTXAppCOM.GetEnvVersion = function() { + return XTXVersionOBJ.GetEnvVersion(); + } + } + + return true; +} + +function initXTXAppWebSocket(xtxsync) { + xtxsync.XTXAppWebSocket = xtxsync.util.loadWebSocketCtl("127.0.0.1:21051/xtxapp/", "127.0.0.1:21061/xtxapp/"); + if (xtxsync.XTXAppWebSocket == null) { + custom.errorReportFunc("连接XTXAppCOM服务失败,请确认已正确安装BJCA证书应用环境!"); + return false; + } + + return true; +} + +function initXTXAppObject(xtxsync) { + var util = xtxsync.util; + xtxsync.xtx_clsid = "3F367B74-92D9-4C5E-AB93-234F8A91D5E6"; + xtxsync.getpic_clsid = "3BC3C868-95B5-47ED-8686-E0E3E94EF366"; + xtxsync.xtx_version_clsid = "574887FB-22A5-488B-A49C-2CF25F56BE68"; + var getImplmentFunction; + + if (util.checkBrowserISIE()) { // IE + if (!initXTXAppCOM(xtxsync)) { + return false; + } + getImplmentFunction = function(methodInfo) { + if (methodInfo.inParams == '') { // 0 input param + window[methodInfo.funcName] = new Function('return xtxsync.XTXAppCOM.' + methodInfo.funcName + '();'); + } else { + window[methodInfo.funcName] = new Function(methodInfo.inParams, + 'return xtxsync.XTXAppCOM.' + methodInfo.funcName + '(' + methodInfo.inParams + ');'); + } + } + } else { // other brower + if (!initXTXAppWebSocket(xtxsync)) { + return false; + } + getImplmentFunction = function(methodInfo) { + if (methodInfo.inParams == '') { // 0 input param + window[methodInfo.funcName] = new Function( + "return xtxsync.util.ajaxSyncall('" + + methodInfo.clsid + "', '" + methodInfo.funcName + "', '" + methodInfo.outParamType + "');"); + } else { + window[methodInfo.funcName] = new Function(methodInfo.inParams, + "return xtxsync.util.ajaxSyncall('" + methodInfo.clsid + "', '" + + methodInfo.funcName + "','" + methodInfo.outParamType + "', [" + methodInfo.inParams + "]);"); + } + } + } + + var export_functions = [ + {funcName:'SOF_SetSignMethod', inParams:'SignMethod', outParamType:'number', clsid:xtxsync.xtx_clsid, aliasName:'SetSignMethod'}, + {funcName:'SOF_GetSignMethod', inParams:'', outParamType:'number', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SetEncryptMethod', inParams:'EncryptMethod', outParamType:'number', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_GetEncryptMethod', inParams:'', outParamType:'number', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_GetUserList', inParams:'', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'GetUserList'}, + {funcName:'SOF_ExportUserCert', inParams:'CertID', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'GetSignCert'}, + {funcName:'SOF_Login', inParams:'CertID, PassWd', outParamType:'bool', clsid:xtxsync.xtx_clsid, aliasName:'VerifyUserPIN'}, + {funcName:'SOF_GetPinRetryCount', inParams:'CertID', outParamType:'number', clsid:xtxsync.xtx_clsid, aliasName:'GetUserPINRetryCount'}, + {funcName:'SOF_ChangePassWd', inParams:'CertID, oldPass, newPass', outParamType:'bool', clsid:xtxsync.xtx_clsid, aliasName:'ChangeUserPassword'}, + {funcName:'SOF_GetCertInfo', inParams:'Cert, type', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'GetCertBasicinfo'}, + {funcName:'SOF_GetCertInfoByOid', inParams:'Cert, Oid', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'GetExtCertInfoByOID'}, + {funcName:'SOF_SignData', inParams:'CertID, InData', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'SignedData'}, + {funcName:'SOF_VerifySignedData', inParams:'Cert, InData, SignValue', outParamType:'bool', clsid:xtxsync.xtx_clsid, aliasName:'VerifySignedData'}, + {funcName:'SOF_SignFile', inParams:'CertID, InFile', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'SOF_SignFile'}, + {funcName:'SOF_VerifySignedFile', inParams:'Cert, InFile, SignValue', outParamType:'bool', clsid:xtxsync.xtx_clsid, aliasName:'VerifySignFile'}, + {funcName:'SOF_EncryptData', inParams:'Cert, InData', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'EncodeP7Enveloped'}, + {funcName:'SOF_DecryptData', inParams:'CertID, InData', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'DecodeP7Enveloped'}, + {funcName:'SOF_EncryptFile', inParams:'Cert, InFile, OutFile', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_DecryptFile', inParams:'CertID, InFile, OutFile', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SignMessage', inParams:'dwFlag, CertID, InData', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_VerifySignedMessage', inParams:'MessageData, InData', outParamType:'bool', clsid:xtxsync.xtx_clsid, aliasName:'VerifyDatabyP7'}, + {funcName:'SOF_GetInfoFromSignedMessage', inParams:'SignedMessage, type', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SignDataXML', inParams:'CertID, InData', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_VerifySignedDataXML', inParams:'InData', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_GetXMLSignatureInfo', inParams:'XMLSignedData, type', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_GenRandom', inParams:'RandomLen', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'GenerateRandom'}, + {funcName:'SOF_PubKeyEncrypt', inParams:'Cert, InData', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'PubKeyEncrypt'}, + {funcName:'SOF_PriKeyDecrypt', inParams:'CertID, InData', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'PriKeyDecrypt'}, + {funcName:'SOF_SecertSegment', inParams:'Secert, m, n, k', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SecertRecovery', inParams:'Seg', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_GetLastError', inParams:'', outParamType:'number', clsid:xtxsync.xtx_clsid}, + {funcName:'GetDeviceCount', inParams:'', outParamType:'number', clsid:xtxsync.xtx_clsid}, + {funcName:'GetAllDeviceSN', inParams:'', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'GetDeviceSNByIndex', inParams:'iIndex', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'GetDeviceInfo', inParams:'sDeviceSN, iType', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'ChangeAdminPass', inParams:'sDeviceSN, sOldPass, sNewPass', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'UnlockUserPass', inParams:'sDeviceSN, sAdminPass, sNewUserPass', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'GenerateKeyPair', inParams:'sDeviceSN, sContainerName, iKeyType, bSign', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'ExportPubKey', inParams:'sDeviceSN, sContainerName, bSign', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'ImportSignCert', inParams:'sDeviceSN, sContainerName, sCert', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'ImportEncCert', inParams:'sDeviceSN, sContainerName, sCert, sPriKeyCipher', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'ReadFile', inParams:'sDeviceSN, sFileName', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'readFile'}, + {funcName:'WriteFile', inParams:'sDeviceSN, sFileName, sContent, bPrivate', outParamType:'bool', clsid:xtxsync.xtx_clsid, aliasName:'writeFile'}, + {funcName:'IsContainerExist', inParams:'sDeviceSN, sContainerName', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'DeleteContainer', inParams:'sDeviceSN, sContainerName', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'ExportPKCS10', inParams:'sDeviceSN, sContainerName, sDN, bSign', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'InitDevice', inParams:'sDeviceSN, sAdminPass', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'AddSignInfo', inParams:'sUserPass', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_GetVersion', inParams:'', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_ExportExChangeUserCert', inParams:'CertID', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'GetExchCert'}, + {funcName:'SOF_ValidateCert', inParams:'Cert', outParamType:'number', clsid:xtxsync.xtx_clsid, aliasName:'ValidateCert'}, + {funcName:'GetENVSN', inParams:'sDeviceSN', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SetENVSN', inParams:'sDeviceSN, sEnvsn', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'IsDeviceExist', inParams:'sDeviceSN', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'GetContainerCount', inParams:'sDeviceSN', outParamType:'number', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SymEncryptData', inParams:'sKey, indata', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'EncryptData'}, + {funcName:'SOF_SymDecryptData', inParams:'sKey, indata', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'DecryptData'}, + {funcName:'SOF_SymEncryptFile', inParams:'sKey, inFile, outFile', outParamType:'bool', clsid:xtxsync.xtx_clsid, aliasName:'EncryptFile'}, + {funcName:'SOF_SymDecryptFile', inParams:'sKey, inFile, outFile', outParamType:'bool', clsid:xtxsync.xtx_clsid, aliasName:'DecryptFile'}, + {funcName:'SOF_GetLastErrMsg', inParams:'', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_Base64Encode', inParams:'sIndata', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_Base64Decode', inParams:'sIndata', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_HashData', inParams:'hashAlg, sInData', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_HashFile', inParams:'hashAlg, inFile', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'UnlockUserPassEx', inParams:'sDeviceSN, sAdminPin, sNewUserPass', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'DeleteOldContainer', inParams:'sDeviceSN', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'WriteFileEx', inParams:'sDeviceSN, sFileName, sContent', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'ReadFileEx', inParams:'sDeviceSN, sFileName', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'WriteFileBase64', inParams:'sDeviceSN, sFileName, sContent', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'DeleteFile', inParams:'sDeviceSN, sFileName', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_EncryptDataEx', inParams:'Cert, InData', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'Base64EncodeFile', inParams:'sInFile', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_GetRetryCount', inParams:'CertID', outParamType:'number', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_GetAllContainerName', inParams:'sDeviceSN', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'CreateSoftDevice', inParams:'sDeviceSN, sLabel', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'DeleteSoftDevice', inParams:'sDeviceSN, sPasswd', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'EnableSoftDevice', inParams:'enable, sDeviceSN', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SoftDeviceBackup', inParams:'sDeviceSN, sPasswd', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SoftDeviceRestore', inParams:'sDeviceSN, sPasswd, sInFilePath', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_Logout', inParams:'CertID', outParamType:'bool', clsid:xtxsync.xtx_clsid, aliasName:'Logout'}, + {funcName:'SetUserConfig', inParams:'type, strConfig', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SignByteData', inParams:'CertID, byteLen', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_VerifySignedByteData', inParams:'Cert, byteLen, SignValue', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'OTP_GetChallengeCode', inParams:'sCertID', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'ImportEncCertEx', inParams:'sDeviceSN, sContainerName, sCert, sPriKeyCipher, ulSymAlg', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_GetCertEntity', inParams:'sCert', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'GetCertEntity'}, + {funcName:'SOF_HMAC', inParams:'hashid, key, indata', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SignDataByPriKey', inParams:'sPriKey, sCert, sInData', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'ImportKeyCertToSoftDevice', inParams:'sDeviceSN, sContainerName, sPriKey, sCert, bSign', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'InitDeviceEx', inParams:'sDeviceSN, sAdminPass, sUserPin, sKeyLabel, adminPinMaxRetry, userPinMaxRetry', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SelectFile', inParams:'', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SignHashData', inParams:'CertID, b64ashData, hashAlg', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'SignHashData'}, + {funcName:'SOF_VerifySignedHashData', inParams:'Cert, b64ashData, SignValue, hashAlg', outParamType:'bool', clsid:xtxsync.xtx_clsid, aliasName:'VerifySignedHashData'}, + {funcName:'CheckSoftDeviceEnv', inParams:'', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'ImportPfxToDevice', inParams:'sDeviceSN, sContainerName, bSign, strPfx, strPfxPass', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_HashDataEx', inParams:'hashAlg, sInData, sCert, sID', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_HashFileEx', inParams:'hashAlg, inFile, sCert, sID', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'GetDeviceCountEx', inParams:'type', outParamType:'number', clsid:xtxsync.xtx_clsid}, + {funcName:'GetAllDeviceSNEx', inParams:'type', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_UpdateCert', inParams:'CertID, type', outParamType:'number', clsid:xtxsync.xtx_clsid}, + {funcName:'OpenSpecifiedFolder', inParams:'backupFilePath', outParamType:'', clsid:xtxsync.xtx_clsid}, + {funcName:'OTP_GetChallengeCodeEx', inParams:'sCertID, szAccount, money', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'Base64DecodeFile', inParams:'sInData, sFilePath', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'EnumFilesInDevice', inParams:'sDeviceSN', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'OTP_Halt', inParams:'sCertID', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_TSGenREQ', inParams:'b64Hash, hashAlg, bReqCert, policyID, b64Nonce, b64Extension', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_TSCompareNonce', inParams:'b64TSReq, b64TSAResp', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_TSGenPDFSignature', inParams:'b64TSAResp, b64OriPDFSignature', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_TSVerifyPDFSignature', inParams:'b64TSPDFSignature', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_TSGetPDFSignatureInfo', inParams:'b64TSPDFSignature, iType', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'OTP_GetState', inParams:'sCertID, bCert', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'OTP_GetSyncCode', inParams:'sCertID, ChallengeCode', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_IsLogin', inParams:'CertID', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_LoginEx', inParams:'CertID, PassWd, updateFlag', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'EnumSupportDeviceList', inParams:'', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'ExportPfxFromDevice', inParams:'sDeviceSN, sContainerName, bSign, strPfxPass', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SignHashMessage', inParams:'CertID, InHashData, hashAlg', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'ExportPfxToFile', inParams:'sDeviceSN, sContainerName, bSign, strPfxPass', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SignAPK', inParams:'CertID, strOriSignature', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'YZT_GenerateKeyPair', inParams:'sDeviceSN, sContainerName, iKeyTypeRSA, iKeyTypeSM2', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'YZT_ExportPubKey', inParams:'sDeviceSN, sContainerName, bSign', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'YZT_ImportSignCert', inParams:'sDeviceSN, sContainerName, sRSACert, sSM2Cert', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'YZT_ImportEncCert', inParams:'sDeviceSN, sContainerName, sRSACert, sRSAPriKeyCipher, ulRSASymAlg, sSM2Cert, sSM2PriKeyCipher, ulSM2SymAlg', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_ListenUKey', inParams:'Parm', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_EnableLoginWindow', inParams:'Parm', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SignEnvelope', inParams:'CertID, Cert, InData', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_UnSignEnvelope', inParams:'CertID, InData', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'BIO_MAKExportPKCS10', inParams:'sDeviceSN, iKeyType, sDN', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'BIO_MAKImportSignEncCert', inParams:'sDeviceSN, sSignCert, sEncCert, sPriKeyCipher', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'BIO_IssueDAKCert', inParams:'sDeviceSN, iKeyType, sDN', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'BIO_InfoCollect', inParams:'', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'BIO_GetBioInfo', inParams:'sDeviceSN', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_GetLastLoginCertID', inParams:'', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_ReadESealData', inParams:'CertID, ulKeyIndex, ulKeyAlgId, ulFlags', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_ReadKFXESealData', inParams:'CertID, ulKeyIndex, ulKeyAlgId, ulFlags', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SymDecryptFileToData', inParams:'sKey, inFile', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SignMessageBase64', inParams:'dwFlag, CertID, InData', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_VerifySignedMessageBase64', inParams:'MessageData, InData', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_VerifySignedHashMessage', inParams:'MessageData, InHashData', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SignDataBase64', inParams:'CertID, InData', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_VerifySignedDataBase64', inParams:'Cert, InData, SignValue', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_HashDataExBase64', inParams:'hashAlg, sInData, sCert, sID', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_GetProductVersion', inParams:'', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_UpdateCertEx', inParams:'CertID, PassWd', outParamType:'number', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_GetLastSignDataCertID', inParams:'CertID', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'BIO_SetUserConfig', inParams:'CertID, type, strConfig', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'BIO_InvokeCommand', inParams:'CertID, bstrCommand', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_ImportSymmKey', inParams:'CertID, ulKeyIndex, InData, ulFlags', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_WriteESealData', inParams:'CertID, InData, ulFlags', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_EPS_Encrypt', inParams:'CertID, ulKeyIndex, ulKeyAlgId, IVData, DivCount, DivComponent, InData, ulFlags', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_EPS_Decrypt', inParams:'CertID, ulKeyIndex, ulKeyAlgId, IVData, DivCount, DivComponent, InData, ulFlags', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_EPS_Mac', inParams:'CertID, ulKeyIndex, ulKeyAlgId, IVData, DivCount, DivComponent, InData, ulFlags', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_PriKeyDecryptEx', inParams:'CertID, InData', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_EPS_ReadESealData', inParams:'CertID, ulKeyIndex, ulKeyAlgId, ulFlags', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_EPS_WriteESealData', inParams:'CertID, InData, ulFlags', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'EnumESeal', inParams:'sDeviceSN', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'GetPicture', inParams:'bstrConName', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SignEnvelopeFile', inParams:'CertID, Cert, InFile, OutFile', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_UnSignEnvelopeFile', inParams:'CertID, InFile, OutFile', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOFX_EncryptFile', inParams:'CertID, Cert, InFile, OutFile, ulFlags', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOFX_DecryptFile', inParams:'CertID, InFile, OutFile, ulFlags', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'GetPic', inParams:'bstrConName', outParamType:'string', clsid:xtxsync.getpic_clsid}, + {funcName:'Hash', inParams:'inData', outParamType:'string', clsid:xtxsync.getpic_clsid}, + {funcName:'ConvertPicFormat', inParams:'inData, type', outParamType:'string', clsid:xtxsync.getpic_clsid}, + {funcName:'ConvertGif2Jpg', inParams:'inData', outParamType:'string', clsid:xtxsync.getpic_clsid}, + {funcName:'GetPic1', inParams:'bstrConName', outParamType:'string', clsid:xtxsync.getpic_clsid}, + {funcName:'ConvertPicSize', inParams:'bstrPic, w, h', outParamType:'string', clsid:xtxsync.getpic_clsid}, + {funcName:'GetEnvVersion', inParams:'', outParamType:'string', clsid:xtxsync.xtx_version_clsid}, + {funcName:'InitDeviceWithParam', inParams:'sDeviceSN, sAppName, sAdminPass, sUserPin, sKeyLabel, adminPinMaxRetry, userPinMaxRetry, createFileRights', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SignDataEx', inParams:'CertID, InData,signFlag', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_VerifySignedDataEx', inParams:'Cert, InData, SignValue,signFlag', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SymEncryptDataEx', inParams:'sKey,sIV,indata', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SymDecryptDataEx', inParams:'sKey,sIV,indata', outParamType:'string', clsid:xtxsync.xtx_clsid} + ]; + + for (var i = 0; i < export_functions.length; i++) { + getImplmentFunction(export_functions[i]); + xtxsync[export_functions[i].funcName] = window[export_functions[i].funcName]; + if (export_functions[i].aliasName) { + window[export_functions[i].aliasName] = window[export_functions[i].funcName]; + xtxsync[export_functions[i].aliasName] = window[export_functions[i].funcName]; + } + + } + + return true; +} + +return initXTXAppObject(xtxsync); +})(); + +/////////////////////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////// EXPORT VAR AND FUNCTIONS /////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////// +// const var +var CERT_TYPE_HARD = 1; +var CERT_TYPE_SOFT = 2; +var CERT_TYPE_ALL = 3; + +// set auto logout parameters +function SetAutoLogoutParameter(strCertID, logoutFunc) { + xtxsync.custom.setAutoLogoutParameter(strCertID, logoutFunc); +} + +// set user cert list id +function SetUserCertList(strListID, certType) { + xtxsync.custom.setUserCertList(strListID, certType); +} + +// set custom usbkeychange callback +function SetOnUsbKeyChangeCallBack(callback) { + xtxsync.custom.setOnUsbKeyChangeCallBack(callback); +} + +// set custom alert function +function SetAlertFunction(custom_alert) { + xtxsync.custom.setErrorReportFunc(custom_alert); +} + +// get custom userlogin token +function GetLoginToken() { + return xtxsync.custom.getToken(); +} + +function SetLoginToken(tokenData) { + return xtxsync.custom.setToken(tokenData); +} + +function GetUserListByType(strType) { // strType is 'HARD' or 'SOFT' + var strUserList = xtxsync.SOF_GetUserList(); + var strReturn = ""; + while (true) { + var i = strUserList.indexOf("&&&"); + if (i <= 0 ) { + break; + } + var strOneUser = strUserList.substring(0, i); + var strName = strOneUser.substring(0, strOneUser.indexOf("||")); + var strCertID = strOneUser.substring(strOneUser.indexOf("||") + 2, strOneUser.length); + var devType = xtxsync.GetDeviceInfo(strCertID, 7); + if (devType == strType) { + strReturn += (strName + "||" + strCertID + "&&&"); + } + var len = strUserList.length; + strUserList = strUserList.substring(i + 3, len); + }; + + return strReturn; +} + +//get usbKey user list +function GetUserList_USBKey(cb, ctx) { + return GetUserListByType("HARD", cb, ctx); +} + +//get soft user list +function GetUserList_Soft() { + return GetUserListByType("SOFT", cb, ctx); +} + +//sign data with pkcs7 format +function SignByP7(strCertID, strInData, bDetach) { + return xtxsync.SOF_SignMessage(bDetach ? 1 : 0, strCertID, strInData); +} + +//get symmitric key length +//because xtx and secxv2 secx default symmitric alg is no equal +function GetSymKeyLength() { + return 24; +} + +//get device type return SOFT or HARD +function GetDeviceType(strCertID) { + return xtxsync.GetDeviceInfo(strCertID, 7); +} + +// calculate file's hash +function HashFile(strFilePath) { + return xtxsync.SOF_HashFile(2/*sha1*/, strFilePath); +} + +function ParseDateString(strDate) { + var strYear = strDate.substring(0, 4); + var strMonth = strDate.substring(4, 6); + var strDay = strDate.substring(6, 8); + var strHour = strDate.substring(8, 10); + var strMin = strDate.substring(10, 12); + var strSecond = strDate.substring(12, 14); + var RtnDate = new Date(); + RtnDate.setFullYear(Number(strYear), Number(strMonth) - 1, Number(strDay)); + RtnDate.setHours(Number(strHour)); + RtnDate.setMinutes(Number(strMin)); + RtnDate.setSeconds(Number(strSecond)); + return RtnDate; +} + +//Form login +function xtxLogin(formName, strCertID, strPin,strServerCert, strServerRan, strServerSignedData) { + var objForm = eval(formName); + if (objForm == null) { + return false; + } + if (strCertID == null || strCertID == "") { + xtxsync.custom.errorReportFunc("请输入证书密码!"); + return false; + } + if (strPin == null || strPin == "") { + xtxsync.custom.errorReportFunc("请输入证书密码!"); + return false; + } + + //Add a hidden item ... + if (objForm.UserSignedData == null) { + objForm.insertAdjacentHTML("BeforeEnd", ""); + } + if (objForm.UserCert == null) { + objForm.insertAdjacentHTML("BeforeEnd", ""); + } + if (objForm.CertID == null) { + objForm.insertAdjacentHTML("BeforeEnd", ""); + } + if (objForm.ContainerName == null) { + objForm.insertAdjacentHTML("BeforeEnd", ""); + } + if (objForm.LoginToken == null) { + objForm.insertAdjacentHTML("BeforeEnd", ""); + } + + var bRet = xtxsync.SOF_Login(strCertID, strPin); + if (!bRet) { + var retryCount = xtxsync.SOF_GetPinRetryCount(strCertID); + if (retryCount > 0) { + xtxsync.custom.errorReportFunc("校验证书密码失败!您还有" + retryCount + "次机会重试!"); + } else if (retryCount == 0) { + xtxsync.custom.errorReportFunc("您的证书密码已被锁死,请联系BJCA进行解锁!"); + } else { + xtxsync.custom.errorReportFunc("登录失败!"); + } + return false; + } + + var strClientCert = xtxsync.SOF_ExportUserCert(strCertID); + if (strClientCert == "") { + xtxsync.custom.errorReportFunc("导出用户证书失败!"); + return false; + } + + var strNotBefore = xtxsync.SOF_GetCertInfo(strClientCert, 11); + var strNotAfter = xtxsync.SOF_GetCertInfo(strClientCert, 12); + var notBeforeDate = ParseDateString(strNotBefore); + var days = parseInt((notBeforeDate.getTime() - new Date().getTime()) / (1000*60*60*24)); + if (days > 0) { + xtxsync.custom.errorReportFunc("您的证书尚未生效!距离生效日期还剩" + days + "天!"); + return false; + } + + var notAfterDate = ParseDateString(strNotAfter); + var milliseconds = notAfterDate.getTime() - new Date().getTime(); + if (milliseconds < 0) { + xtxsync.custom.errorReportFunc("您的证书已过期,请尽快到北京数字证书认证中心办理证书更新手续!"); + return false; + } + + days = parseInt(milliseconds / (1000*60*60*24)); + if (days > 0 && days <= 60) { + xtxsync.custom.errorReportFunc("您的证书还有" + days + "天过期\n请您尽快到北京数字证书认证中心办理证书更新手续!"); + } else if (days == 0) { // 证书有效期天数小于1天 + var hours = parseInt(milliseconds / (1000*60*60)); + if (hours > 0) { + xtxsync.custom.errorReportFunc("您的证书还有" + hours + "小时过期\n请您尽快到北京数字证书认证中心办理证书更新手续!"); + } + // 证书有效期小于1小时 + var minutes = parseInt(milliseconds / (1000*60)); + if (minutes > 1) { + xtxsync.custom.errorReportFunc("您的证书还有" + minutes + "分钟过期\n请您尽快到北京数字证书认证中心办理证书更新手续!"); + } else { + xtxsync.custom.errorReportFunc("您的证书已过期,请尽快到北京数字证书认证中心办理证书更新手续!"); + return false; + } + } + + bRet = xtxsync.SOF_VerifySignedData(strServerCert, strServerRan, strServerSignedData); + if (!bRet) { + xtxsync.custom.errorReportFunc("验证服务器端信息失败!"); + return false; + } + + var clientSignData = xtxsync.SOF_SignData(strCertID, strServerRan); + if (clientSignData == "") { + xtxsync.custom.errorReportFunc("客户端签名失败!"); + return false; + } + + objForm.CertID.value = strCertID; + objForm.ContainerName.value = strCertID; + objForm.UserCert.value = strClientCert; + objForm.UserSignedData.value = clientSignData; + objForm.LoginToken.value = xtxsync.custom.getToken(); + return true; +} diff --git a/admin/src/App.vue b/admin/src/App.vue new file mode 100644 index 0000000..c33cf4d --- /dev/null +++ b/admin/src/App.vue @@ -0,0 +1,90 @@ + + + + + \ No newline at end of file diff --git a/admin/src/api/api.js b/admin/src/api/api.js new file mode 100644 index 0000000..423e198 --- /dev/null +++ b/admin/src/api/api.js @@ -0,0 +1,114 @@ +import axios from "@/tools/axios.js"; +//登录 +export const Login = (data) => { + return axios({url:import.meta.env.VITE_APP_API+'admin/login',data:data}) +} +//admin后台获取当前用户菜单 +export const GetAdminBaseMenuList = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/getBaseMenuList',data:data}) +} +//Token刷新 +export const TokenRefresh = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'tokenRefresh',data:data}) +} +//获取admin后台用户list +export const getAdminUserList = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/getUserList',data:data}) +} +//admin后台获取所有菜单列表 +export const GetAdminMenuList = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/getMenuList',data:data}) +} +//admin后台获取一级菜单 +export const GetFatherMenuList = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/GetFatherMenuList',data:data}) +} +//admin后台添加菜单 +export const AddMenu = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/AddMenu',data:data}) +} +//admin后台编辑菜单 +export const EditMenu = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/EditMenu',data:data}) +} +//admin后台组列表 +export const getGroupList = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/getGroupList',data:data}) +} +//admin后台修改组菜单 +export const GroupChangeMenu = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/GroupChangeMenu',data:data}) +} +//admin后台添加组 +export const SaveGroup = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/SaveGroup',data:data}) +} +//admin后台保存用户信息 +export const SaveSystemUserInfo = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/SaveSystemUserInfo',data:data}) +} +//admin后台获取用户详细信息 +export const GetSystemUserDetail = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/GetSystemUserDetail',data:data}) +} +//admin后台修改密码 +export const adminChangePwd = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/adminChangePwd',data:data}) +} +//admin后台获取登录用户基本信息 +export const GetBaseAdminUserInfo = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/GetBaseUserInfo',data:data}) +} +//admin后台管理员查询分组使用的菜单 +export const AdminGetGroupMenuList = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/GetGroupMenuList',data:data}) +} + +//admin后台创建体检日历 +export const CreateCalendar = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/CreateCalendar',data:data}) +} +//admin后台获取日历列表 +export const CalendarGetList = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/CalendarGetList',data:data}) +} +//admin后台删除日历列表 +export const CalendarDel = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/CalendarListDel',data:data}) +} +//admin后台更新日历 +export const CalendarChangeInfo = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/CalendarChangeInfo',data:data}) +} +//admin后台更新日历 +export const CheckMenuAuth = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/CheckMenuAuth',data:data}) +} +//上传图片 +// export const UpFile = (data={}) => { +// return axios({url:import.meta.env.VITE_APP_API+'v1/UpFile',data:data}) +// } +export const UpFileUrl= () => { + return import.meta.env.VITE_APP_API+'v1/UpFile' +} + +//admin后台修改自身用户信息 +export const ChangInfo = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/ChangInfo',data:data}) +} +//admin后台获取站点配置信息 +export const GetConfigInfo = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/GetConfigInfo',data:data}) +} +//admin后台保存站点配置信息 +export const SaveConfigInfo = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/SaveConfigInfo',data:data}) +} +//获取日志列表 +export const SystemLogGetList = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/SystemLogGetList',data:data}) +} +//获取日志表名 +export const GetLogTableName = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/GetLogTableName',data:data}) +} \ No newline at end of file diff --git a/admin/src/assets/backg_l.jpg b/admin/src/assets/backg_l.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a86cc85bbdb7c82921fa51f76bda3f2cf7bb3f91 GIT binary patch literal 159532 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 z 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 g^pTF#c^yk?tm#g`iu{OWEAA@>k#c|2XKoF#rGn literal 0 HcmV?d00001 diff --git a/admin/src/assets/base.css b/admin/src/assets/base.css new file mode 100644 index 0000000..f748cd4 --- /dev/null +++ b/admin/src/assets/base.css @@ -0,0 +1,92 @@ +/* color palette from */ +:root { + --vt-c-white: #ffffff; + --vt-c-white-soft: #f8f8f8; + --vt-c-white-mute: #f2f2f2; + + --vt-c-black: #181818; + --vt-c-black-soft: #222222; + --vt-c-black-mute: #282828; + + --vt-c-indigo: #2c3e50; + + --vt-c-divider-light-1: rgba(60, 60, 60, 0.29); + --vt-c-divider-light-2: rgba(60, 60, 60, 0.12); + --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65); + --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48); + + --vt-c-text-light-1: var(--vt-c-indigo); + --vt-c-text-light-2: rgba(60, 60, 60, 0.66); + --vt-c-text-dark-1: var(--vt-c-white); + --vt-c-text-dark-2: rgba(235, 235, 235, 0.64); + --vt-c-border-light1: #eee; + --vt-c-border-dark1: #656565; +} + +/* semantic color variables for this project */ +:root { + /* --color-background: var(--vt-c-white); */ + --color-background-soft: var(--vt-c-white-soft); + --color-background-mute: var(--vt-c-white-mute); + + --color-border: var(--vt-c-divider-light-2); + --color-border-hover: var(--vt-c-divider-light-1); + + --color-heading: var(--vt-c-text-light-1); + --color-text: var(--vt-c-text-light-1); + + --section-gap: 160px; + + --color-border1:var(--vt-c-border-light1); +} + +@media (prefers-color-scheme:dark) { + :root { + --color-background: var(--vt-c-black); + --color-background-soft: var(--vt-c-black-soft); + --color-background-mute: var(--vt-c-black-mute); + + --color-border: var(--vt-c-divider-dark-2); + --color-border-hover: var(--vt-c-divider-dark-1); + + --color-heading: var(--vt-c-text-dark-1); + --color-text: var(--vt-c-text-dark-2); + + --color-border1:var(--vt-c-border-dark1); + } +} + +*, +*::before, +*::after { + box-sizing: border-box; + margin: 0; + font-weight: normal; +} + +body { + min-height: 100vh; + color: var(--color-text); + background: var(--color-background); + transition: + color 0.5s, + background-color 0.5s; + line-height: 1.6; + font-family: + Inter, + -apple-system, + BlinkMacSystemFont, + 'Segoe UI', + Roboto, + Oxygen, + Ubuntu, + Cantarell, + 'Fira Sans', + 'Droid Sans', + 'Helvetica Neue', + sans-serif; + font-size: 15px; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} diff --git a/admin/src/assets/loginBackg.png b/admin/src/assets/loginBackg.png new file mode 100644 index 0000000000000000000000000000000000000000..32d6f84eb62c3d9154a86e639c47ff4c4c4161cc GIT binary patch literal 126290 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

MqGNm)?u+oOr@!ULUi?F2;Z{_>MHR13 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

    $aZhklhwrZKm|PaHGo-0D2kF-*>AaHa?C7|~ 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 v! diff --git a/admin/src/assets/main.css b/admin/src/assets/main.css new file mode 100644 index 0000000..a208cea --- /dev/null +++ b/admin/src/assets/main.css @@ -0,0 +1,35 @@ +@import './base.css'; + +#app { + /* max-width: 1280px; */ + margin: 0 auto; + /* padding: 2rem; */ + + font-weight: normal; +} + +a, +.green { + text-decoration: none; + color: hsla(160, 100%, 37%, 1); + transition: 0.4s; +} + +@media (hover: hover) { + a:hover { + background-color: hsla(160, 100%, 37%, 0.2); + } +} +/* +@media (min-width: 1024px) { + body { + display: flex; + place-items: center; + } + + #app { + display: grid; + grid-template-columns: 1fr 1fr; + padding: 0 2rem; + } +} */ diff --git a/admin/src/assets/user.jpg b/admin/src/assets/user.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a994e90685776bb4558e0fb6792539c1c134cad3 GIT binary patch literal 36407 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 +defineProps({ + msg: { + type: String, + required: true + } +}) + + + + + diff --git a/admin/src/components/IconList.vue b/admin/src/components/IconList.vue new file mode 100644 index 0000000..291d417 --- /dev/null +++ b/admin/src/components/IconList.vue @@ -0,0 +1,66 @@ + + + + + \ No newline at end of file diff --git a/admin/src/components/TheWelcome.vue b/admin/src/components/TheWelcome.vue new file mode 100644 index 0000000..dab9536 --- /dev/null +++ b/admin/src/components/TheWelcome.vue @@ -0,0 +1,88 @@ + + + diff --git a/admin/src/components/WelcomeItem.vue b/admin/src/components/WelcomeItem.vue new file mode 100644 index 0000000..ac366d0 --- /dev/null +++ b/admin/src/components/WelcomeItem.vue @@ -0,0 +1,86 @@ + + + diff --git a/admin/src/components/icons/IconCommunity.vue b/admin/src/components/icons/IconCommunity.vue new file mode 100644 index 0000000..2dc8b05 --- /dev/null +++ b/admin/src/components/icons/IconCommunity.vue @@ -0,0 +1,7 @@ + diff --git a/admin/src/components/icons/IconDocumentation.vue b/admin/src/components/icons/IconDocumentation.vue new file mode 100644 index 0000000..6d4791c --- /dev/null +++ b/admin/src/components/icons/IconDocumentation.vue @@ -0,0 +1,7 @@ + diff --git a/admin/src/components/icons/IconEcosystem.vue b/admin/src/components/icons/IconEcosystem.vue new file mode 100644 index 0000000..c3a4f07 --- /dev/null +++ b/admin/src/components/icons/IconEcosystem.vue @@ -0,0 +1,7 @@ + diff --git a/admin/src/components/icons/IconSupport.vue b/admin/src/components/icons/IconSupport.vue new file mode 100644 index 0000000..7452834 --- /dev/null +++ b/admin/src/components/icons/IconSupport.vue @@ -0,0 +1,7 @@ + diff --git a/admin/src/components/icons/IconTooling.vue b/admin/src/components/icons/IconTooling.vue new file mode 100644 index 0000000..660598d --- /dev/null +++ b/admin/src/components/icons/IconTooling.vue @@ -0,0 +1,19 @@ + + diff --git a/admin/src/main.js b/admin/src/main.js new file mode 100644 index 0000000..e98a880 --- /dev/null +++ b/admin/src/main.js @@ -0,0 +1,23 @@ +import { createApp } from 'vue' +import { createPinia } from 'pinia' +import ElementPlus from 'element-plus' +import 'element-plus/dist/index.css' +import 'element-plus/theme-chalk/dark/css-vars.css' +import './assets/main.css' +import './style/dark/css-vars.css' +import * as ElementPlusIconsVue from '@element-plus/icons-vue' +import App from './App.vue' +import router from './router' +import zhCn from 'element-plus/dist/locale/zh-cn.mjs' + + +const app = createApp(App) +for (const [key, component] of Object.entries(ElementPlusIconsVue)) { + app.component(key, component) +} +app.use(ElementPlus, { + locale: zhCn, +}) +app.use(createPinia()) +app.use(router) +app.mount('#app') diff --git a/admin/src/router/index.js b/admin/src/router/index.js new file mode 100644 index 0000000..308e500 --- /dev/null +++ b/admin/src/router/index.js @@ -0,0 +1,145 @@ +import { + createRouter, + createWebHashHistory +} from 'vue-router' + + + +import Login from '../views/Login.vue' +import Index from '../views/Index.vue' +import MenuList from '../views/SystemMngr/Menu/List.vue' +import AdminGroupList from '../views/SystemMngr/Group/List.vue' +import AdminUserList from '../views/SystemMngr/User/List.vue' +import AdminChangPwd from '../views/SystemMngr/User/ChangPwd.vue' +import HealthCalendar from '../views/AppointmentMngr/HealthCalendar.vue' +import Dashboard from '../views/MedicalCenter/Dashboard.vue' + + +const router = createRouter({ + history: createWebHashHistory(import.meta.env.BASE_URL), + routes: [{ + path: '/', + name: 'Login1', + component: Login, + meta: { + requiresAuth: false + } + }, + { + path: '/login', + name: 'Login', + component: Login, + meta: { + requiresAuth: false + } + }, { + path: '/index', + name: 'Index', + component: Index, + children: [{ + path: '/dashboard', + name: 'Dashboard', + component: Dashboard, + meta: { + title: '数据面板' + } + }, { + path: '/menuList', + name: 'menuList', + component: MenuList, + meta: { + title: '菜单管理' + } + }, { + path: '/groupMngr', + name: 'AdminGroupList', + component: AdminGroupList, + meta: { + title: '组管理' + } + }, { + path: '/adminUserList', + name: 'AdminUserList', + component: AdminUserList, + meta: { + title: '系统用户管理' + } + }, { + path: '/adminChangPwd', + name: 'AdminChangPwd', + component: AdminChangPwd, + meta: { + title: '用户中心' + } + },{ + path: '/systemMngr/systemConfig', + name: 'SystemMngrSystemConfig', + component: () => import('../views/SystemMngr/SystemConfig.vue'), + meta: { + title: '系统参数设置' + } + }, { + path: '/healthCalendar', + name: 'HealthCalendar', + component: HealthCalendar, + meta: { + title: '体检日历' + } + }, { + path: '/yewu/mainList', + name: 'YewuManiList', + component: () => import('../views/YeWu/MainList.vue'), + meta: { + title: '主工作列表' + } + }, { + path: '/yewu/CheckItemConfig', + name: 'YewuCheckItemConfig', + component: () => import('../views/YeWu/CheckItemConfig.vue'), + meta: { + title: '检查项目设置' + } + },{ + path: '/systemMngr/systemLog', + name: 'SystemMngrsystemLog', + component: () => import('../views/SystemMngr/SystemLog.vue'), + meta: { + title: '系统日志' + } + }] + }, + + ] +}) + + +import { + CheckMenuAuth +} from "@/api/api.js"; +import { + ElMessage +} from 'element-plus' + + +router.beforeEach((to, from, next) => { + console.log(to.meta.requiresAuth) + const url = to.path + if (to.meta.requiresAuth == false) { + next() + } else { + const NewUrl = url.substring(1) + CheckMenuAuth({ + url: NewUrl + }).then(res => { + if (res.status) { + next(); + } else { + ElMessage.error(res.msg) + next('/'); + } + }) + } +}) + + +export default router \ No newline at end of file diff --git a/admin/src/stores/counter.js b/admin/src/stores/counter.js new file mode 100644 index 0000000..b6757ba --- /dev/null +++ b/admin/src/stores/counter.js @@ -0,0 +1,12 @@ +import { ref, computed } from 'vue' +import { defineStore } from 'pinia' + +export const useCounterStore = defineStore('counter', () => { + const count = ref(0) + const doubleCount = computed(() => count.value * 2) + function increment() { + count.value++ + } + + return { count, doubleCount, increment } +}) diff --git a/admin/src/stores/index.js b/admin/src/stores/index.js new file mode 100644 index 0000000..eac9e1a --- /dev/null +++ b/admin/src/stores/index.js @@ -0,0 +1,14 @@ +import { ref } from 'vue' +import { defineStore } from 'pinia' + +export const usePinia = defineStore('usePinia', () => { +//主题 + const theme=ref('light') + const themeChange=(v)=>{ + theme.value=v + } + + + + return { theme,themeChange} +}) diff --git a/admin/src/style/dark/css-vars.css b/admin/src/style/dark/css-vars.css new file mode 100644 index 0000000..1958f18 --- /dev/null +++ b/admin/src/style/dark/css-vars.css @@ -0,0 +1,15 @@ +html { + /* 自定义深色背景颜色 */ + + --color-background:#f5f7f9; + --color-background2:#fff; + --color-table-th-background:#f4f4f4; +} +html.dark { + /* 自定义深色背景颜色 */ + --color-border1: #2b2b2b; + --color-text:#cfd3dc; + --color-background:#181818; + --color-background2:#1d1d1d; + --color-table-th-background:#363636; +} \ No newline at end of file diff --git a/admin/src/tools/Tools.js b/admin/src/tools/Tools.js new file mode 100644 index 0000000..c55dc5e --- /dev/null +++ b/admin/src/tools/Tools.js @@ -0,0 +1,3 @@ +export function ToUrl(url){ + window.location.href=url +} \ No newline at end of file diff --git a/admin/src/tools/axios.js b/admin/src/tools/axios.js new file mode 100644 index 0000000..0483366 --- /dev/null +++ b/admin/src/tools/axios.js @@ -0,0 +1,117 @@ +import axios from 'axios' + + + + +//请求拦截器 +axios.interceptors.request.use( + config => { + config.headers.Authorization = 'Bearer ' + sessionStorage.getItem("token") + config.method = 'POST' + return config + }, + err => { + return Promise.reject(error) + } +) +//响应拦截器 +axios.interceptors.response.use( + async response => { + const res = response.data + console.log(response) + if (res.code !== 200) { + if (res.code == 10001) { //token验证出错 + window.location.href = "./#/login" + } + if (res.code == 10002) { //token验证超时 + //console.log(response.config); + var ss = '' + await TokenRefresh().then(async data => { + // // 使用最外层请求的返回值 + // //console.log(data) + if (data == false) { + window.location.href = "./#/login" + } + if (data == true) { + // console.log("刷新成功"); + ss = await axios(response.config) + // console.log("再次支持上此操作"); + + } + }).catch(error => { + console.log(error); + }); + //await TT(); + return ss + //console.log('我是后面的'); + + } + if (res.code == 10003) { //无访问此接口权限 + ElMessageBox.confirm( + '无权限', + '通知', { + confirmButtonText: 'OK', + cancelButtonText: 'Cancel', + type: 'warning', + showCancelButton: false, + showClose: false, + } + ) + .then(() => { + // window.location.href = "/#/login" + }) + .catch(() => { + + }) + return false + } + return Promise.reject(res.msg || 'Error').catch(err => { + console.log(err) + }) + + } else { //成功返回数据 + + return res + + + } + }, + error => { + return Promise.reject(error) + } +) +const instance = axios.create({ + // 其他配置项 + // ... + // 禁用请求拦截器 + interceptors: false +}); + +function TokenRefresh() { + + console.log("执行:TokenRefresh") + return new Promise((resolve, reject) => { + instance({ + method: 'post', + url: import.meta.env.VITE_APP_API + 'tokenRefresh', + headers: { + Authorization: 'Bearer ' + sessionStorage.getItem("refreshToken") + }, + data: {} + }).then(function(res) { + // console.log('获取到新token'); + if (res.data.status) { + sessionStorage.setItem('token', res.data.token); + sessionStorage.setItem('refreshToken', res.data.refresh_token); + + resolve(true); + } else { + + resolve(false); + } + }); + }) + +} + +export default axios \ No newline at end of file diff --git a/admin/src/views/AboutView.vue b/admin/src/views/AboutView.vue new file mode 100644 index 0000000..756ad2a --- /dev/null +++ b/admin/src/views/AboutView.vue @@ -0,0 +1,15 @@ + + + diff --git a/admin/src/views/AppointmentMngr/HealthCalendar.vue b/admin/src/views/AppointmentMngr/HealthCalendar.vue new file mode 100644 index 0000000..8d9f468 --- /dev/null +++ b/admin/src/views/AppointmentMngr/HealthCalendar.vue @@ -0,0 +1,404 @@ + + + + + \ No newline at end of file diff --git a/admin/src/views/HomeView.vue b/admin/src/views/HomeView.vue new file mode 100644 index 0000000..6bb706f --- /dev/null +++ b/admin/src/views/HomeView.vue @@ -0,0 +1,9 @@ + + + diff --git a/admin/src/views/Index.vue b/admin/src/views/Index.vue new file mode 100644 index 0000000..5c2bedf --- /dev/null +++ b/admin/src/views/Index.vue @@ -0,0 +1,330 @@ + + + + + + \ No newline at end of file diff --git a/admin/src/views/Login.vue b/admin/src/views/Login.vue new file mode 100644 index 0000000..b905173 --- /dev/null +++ b/admin/src/views/Login.vue @@ -0,0 +1,156 @@ + + + + + \ No newline at end of file diff --git a/admin/src/views/MedicalCenter/Dashboard.vue b/admin/src/views/MedicalCenter/Dashboard.vue new file mode 100644 index 0000000..e543250 --- /dev/null +++ b/admin/src/views/MedicalCenter/Dashboard.vue @@ -0,0 +1,173 @@ + + + + + \ No newline at end of file diff --git a/admin/src/views/SystemMngr/Group/List.vue b/admin/src/views/SystemMngr/Group/List.vue new file mode 100644 index 0000000..e6d446a --- /dev/null +++ b/admin/src/views/SystemMngr/Group/List.vue @@ -0,0 +1,159 @@ + + + + + \ No newline at end of file diff --git a/admin/src/views/SystemMngr/Menu/List.vue b/admin/src/views/SystemMngr/Menu/List.vue new file mode 100644 index 0000000..55753d6 --- /dev/null +++ b/admin/src/views/SystemMngr/Menu/List.vue @@ -0,0 +1,173 @@ + + + + + \ No newline at end of file diff --git a/admin/src/views/SystemMngr/SystemConfig.vue b/admin/src/views/SystemMngr/SystemConfig.vue new file mode 100644 index 0000000..3a861b1 --- /dev/null +++ b/admin/src/views/SystemMngr/SystemConfig.vue @@ -0,0 +1,129 @@ + + + + + + \ No newline at end of file diff --git a/admin/src/views/SystemMngr/SystemLog.vue b/admin/src/views/SystemMngr/SystemLog.vue new file mode 100644 index 0000000..5672993 --- /dev/null +++ b/admin/src/views/SystemMngr/SystemLog.vue @@ -0,0 +1,158 @@ + + + + + \ No newline at end of file diff --git a/admin/src/views/SystemMngr/User/ChangPwd.vue b/admin/src/views/SystemMngr/User/ChangPwd.vue new file mode 100644 index 0000000..c8f069f --- /dev/null +++ b/admin/src/views/SystemMngr/User/ChangPwd.vue @@ -0,0 +1,197 @@ + + + + + + + \ No newline at end of file diff --git a/admin/src/views/SystemMngr/User/List.vue b/admin/src/views/SystemMngr/User/List.vue new file mode 100644 index 0000000..85eef22 --- /dev/null +++ b/admin/src/views/SystemMngr/User/List.vue @@ -0,0 +1,173 @@ + + + + + diff --git a/admin/src/views/YeWu/CheckItemConfig.vue b/admin/src/views/YeWu/CheckItemConfig.vue new file mode 100644 index 0000000..f387bd2 --- /dev/null +++ b/admin/src/views/YeWu/CheckItemConfig.vue @@ -0,0 +1,27 @@ + + + + + \ No newline at end of file diff --git a/admin/src/views/YeWu/MainList.vue b/admin/src/views/YeWu/MainList.vue new file mode 100644 index 0000000..1796353 --- /dev/null +++ b/admin/src/views/YeWu/MainList.vue @@ -0,0 +1,43 @@ + + + + + \ No newline at end of file diff --git a/admin/vite.config.js b/admin/vite.config.js new file mode 100644 index 0000000..e2d600d --- /dev/null +++ b/admin/vite.config.js @@ -0,0 +1,33 @@ +import { + fileURLToPath, + URL +} from 'node:url' + +import { + defineConfig +} from 'vite' +import vue from '@vitejs/plugin-vue' + +// https://vitejs.dev/config/ +export default defineConfig({ + base: "./", + plugins: [ + vue(), + ], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + } + }, + server: { + host: "0.0.0.0", + port: 5174, + proxy: { + '/api': { + target: 'http://tongyonghoutai/api', // 实际的API服务器地址 + changeOrigin: true, + rewrite: (path) => path.replace(/^\/api/, '') // 如果API地址有前缀,可以进行转写 + } + } + } +}) \ No newline at end of file