From 499cb76d994991e3c933bb773b67e36ab89e9060 Mon Sep 17 00:00:00 2001 From: boy_yan Date: Thu, 12 Oct 2023 20:33:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0?= 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 | 29 + .../Controllers/API/Admin/GroupController.php | 45 + .../Controllers/API/Admin/LoginController.php | 18 + .../Controllers/API/Admin/MenuController.php | 45 + .../Controllers/API/Admin/UserController.php | 39 + .../YeWu/HealthOrganizationController.php | 21 + .../Admin/YeWu/healthCalendarController.php | 47 + .../Http/Controllers/API/TokenController.php | 23 + .../Controllers/API/mH5/LoginController.php | 66 + .../API/mH5/OrganizationController.php | 42 + .../Controllers/API/mH5/PersonController.php | 24 + Laravel/app/Http/Controllers/Controller.php | 13 + Laravel/app/Http/Kernel.php | 69 + Laravel/app/Http/Middleware/Authenticate.php | 21 + Laravel/app/Http/Middleware/CheckToken.php | 32 + .../app/Http/Middleware/EncryptCookies.php | 17 + Laravel/app/Http/Middleware/Log.php | 56 + .../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/JWT.php | 132 + Laravel/app/Lib/Yz.php | 29 + 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 | 122 + Laravel/app/Services/Admin/UserService.php | 92 + .../Admin/YeWu/HealthCalendarService.php | 137 + .../Admin/YeWu/HealthOrganizationService.php | 30 + Laravel/app/Services/LogService.php | 57 + Laravel/app/Services/Login/LoginService.php | 77 + Laravel/app/Services/TokenService.php | 43 + .../app/Services/mH5/OrganizationService.php | 121 + Laravel/app/Services/mH5/PersonService.php | 81 + 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/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 | 58 + Laravel/routes/channels.php | 18 + Laravel/routes/console.php | 19 + Laravel/routes/web.php | 27 + Laravel/server.php | 21 + Laravel/storage/app/.gitignore | 3 + Laravel/storage/app/public/.gitignore | 2 + 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 + el-admin/.env.development | 2 + el-admin/.env.production | 4 + el-admin/.eslintrc.cjs | 14 + el-admin/.gitignore | 28 + el-admin/.prettierrc.json | 8 + el-admin/.vscode/extensions.json | 8 + el-admin/README.md | 35 + el-admin/index.html | 13 + el-admin/package-lock.json | 3129 ++++++ el-admin/package.json | 31 + el-admin/public/favicon.ico | Bin 0 -> 4286 bytes el-admin/src/App.vue | 90 + el-admin/src/api/api.js | 85 + el-admin/src/assets/backg_l.jpg | Bin 0 -> 159532 bytes el-admin/src/assets/base.css | 92 + el-admin/src/assets/loginBackg.png | Bin 0 -> 126290 bytes el-admin/src/assets/logo.png | Bin 0 -> 7050 bytes el-admin/src/assets/logo.svg | 1 + el-admin/src/assets/main.css | 35 + el-admin/src/assets/user.jpg | Bin 0 -> 36407 bytes el-admin/src/components/HelloWorld.vue | 44 + el-admin/src/components/IconList.vue | 66 + el-admin/src/components/TheWelcome.vue | 88 + el-admin/src/components/WelcomeItem.vue | 86 + .../src/components/icons/IconCommunity.vue | 7 + .../components/icons/IconDocumentation.vue | 7 + .../src/components/icons/IconEcosystem.vue | 7 + el-admin/src/components/icons/IconSupport.vue | 7 + el-admin/src/components/icons/IconTooling.vue | 19 + el-admin/src/main.js | 24 + el-admin/src/router/index.js | 90 + el-admin/src/stores/counter.js | 12 + el-admin/src/stores/index.js | 16 + el-admin/src/style/dark/css-vars.css | 15 + el-admin/src/tools/Tools.js | 3 + el-admin/src/tools/axios.js | 117 + el-admin/src/views/AboutView.vue | 15 + .../views/AppointmentMngr/HealthCalendar.vue | 416 + el-admin/src/views/HomeView.vue | 9 + el-admin/src/views/Index.vue | 295 + el-admin/src/views/Login.vue | 133 + .../src/views/MedicalCenter/Dashboard.vue | 173 + .../views/MedicalCenter/HealthCheckList.vue | 64 + el-admin/src/views/SystemMngr/Group/List.vue | 159 + el-admin/src/views/SystemMngr/Menu/List.vue | 163 + .../src/views/SystemMngr/User/ChangPwd.vue | 65 + el-admin/src/views/SystemMngr/User/List.vue | 170 + el-admin/vite.config.js | 33 + mH5/.env.development | 3 + mH5/.env.production | 4 + mH5/.eslintrc.cjs | 14 + mH5/.gitignore | 28 + mH5/.prettierrc.json | 8 + mH5/.vscode/extensions.json | 8 + mH5/README.md | 35 + mH5/index.html | 13 + mH5/package-lock.json | 2824 ++++++ mH5/package.json | 28 + mH5/public/favicon.ico | Bin 0 -> 4286 bytes mH5/src/App.vue | 84 + mH5/src/api/api.js | 26 + mH5/src/assets/base.css | 86 + mH5/src/assets/image/food.png | Bin 0 -> 9324 bytes mH5/src/assets/image/gonggong.png | Bin 0 -> 16923 bytes mH5/src/assets/image/huazhuangpin.png | Bin 0 -> 11151 bytes mH5/src/assets/image/login.jpg | Bin 0 -> 252643 bytes mH5/src/assets/image/map.png | Bin 0 -> 21972 bytes mH5/src/assets/image/r_head.jpg | Bin 0 -> 118164 bytes mH5/src/assets/image/r_head2.jpg | Bin 0 -> 52431 bytes mH5/src/assets/image/success.jpg | Bin 0 -> 20323 bytes mH5/src/assets/image/xiaodu.png | Bin 0 -> 15443 bytes mH5/src/assets/image/yinyongshui.png | Bin 0 -> 12140 bytes mH5/src/assets/logo.svg | 1 + mH5/src/assets/main.css | 35 + mH5/src/components/HelloWorld.vue | 44 + mH5/src/components/Loading.vue | 38 + mH5/src/components/TheWelcome.vue | 88 + mH5/src/components/WelcomeItem.vue | 86 + mH5/src/components/icons/IconCommunity.vue | 7 + .../components/icons/IconDocumentation.vue | 7 + mH5/src/components/icons/IconEcosystem.vue | 7 + mH5/src/components/icons/IconSupport.vue | 7 + mH5/src/components/icons/IconTooling.vue | 19 + mH5/src/main.js | 38 + mH5/src/router/index.js | 46 + mH5/src/stores/index.js | 15 + mH5/src/tools/Tools.js | 3 + mH5/src/tools/axios.js | 117 + mH5/src/views/DocumentSubmit.vue | 174 + mH5/src/views/GetWxCode.vue | 59 + mH5/src/views/Login.vue | 50 + mH5/src/views/Register.vue | 133 + mH5/src/views/SelectDate.vue | 201 + mH5/src/views/SelectOrganization.vue | 158 + mH5/src/views/YuYueSuccess.vue | 48 + mH5/vite.config.js | 33 + 208 files changed, 23779 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/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/HealthOrganizationController.php create mode 100644 Laravel/app/Http/Controllers/API/Admin/YeWu/healthCalendarController.php create mode 100644 Laravel/app/Http/Controllers/API/TokenController.php create mode 100644 Laravel/app/Http/Controllers/API/mH5/LoginController.php create mode 100644 Laravel/app/Http/Controllers/API/mH5/OrganizationController.php create mode 100644 Laravel/app/Http/Controllers/API/mH5/PersonController.php create mode 100644 Laravel/app/Http/Controllers/Controller.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/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/JWT.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/Admin/YeWu/HealthOrganizationService.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/app/Services/mH5/OrganizationService.php create mode 100644 Laravel/app/Services/mH5/PersonService.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/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/app/public/.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 el-admin/.env.development create mode 100644 el-admin/.env.production create mode 100644 el-admin/.eslintrc.cjs create mode 100644 el-admin/.gitignore create mode 100644 el-admin/.prettierrc.json create mode 100644 el-admin/.vscode/extensions.json create mode 100644 el-admin/README.md create mode 100644 el-admin/index.html create mode 100644 el-admin/package-lock.json create mode 100644 el-admin/package.json create mode 100644 el-admin/public/favicon.ico create mode 100644 el-admin/src/App.vue create mode 100644 el-admin/src/api/api.js create mode 100644 el-admin/src/assets/backg_l.jpg create mode 100644 el-admin/src/assets/base.css create mode 100644 el-admin/src/assets/loginBackg.png create mode 100644 el-admin/src/assets/logo.png create mode 100644 el-admin/src/assets/logo.svg create mode 100644 el-admin/src/assets/main.css create mode 100644 el-admin/src/assets/user.jpg create mode 100644 el-admin/src/components/HelloWorld.vue create mode 100644 el-admin/src/components/IconList.vue create mode 100644 el-admin/src/components/TheWelcome.vue create mode 100644 el-admin/src/components/WelcomeItem.vue create mode 100644 el-admin/src/components/icons/IconCommunity.vue create mode 100644 el-admin/src/components/icons/IconDocumentation.vue create mode 100644 el-admin/src/components/icons/IconEcosystem.vue create mode 100644 el-admin/src/components/icons/IconSupport.vue create mode 100644 el-admin/src/components/icons/IconTooling.vue create mode 100644 el-admin/src/main.js create mode 100644 el-admin/src/router/index.js create mode 100644 el-admin/src/stores/counter.js create mode 100644 el-admin/src/stores/index.js create mode 100644 el-admin/src/style/dark/css-vars.css create mode 100644 el-admin/src/tools/Tools.js create mode 100644 el-admin/src/tools/axios.js create mode 100644 el-admin/src/views/AboutView.vue create mode 100644 el-admin/src/views/AppointmentMngr/HealthCalendar.vue create mode 100644 el-admin/src/views/HomeView.vue create mode 100644 el-admin/src/views/Index.vue create mode 100644 el-admin/src/views/Login.vue create mode 100644 el-admin/src/views/MedicalCenter/Dashboard.vue create mode 100644 el-admin/src/views/MedicalCenter/HealthCheckList.vue create mode 100644 el-admin/src/views/SystemMngr/Group/List.vue create mode 100644 el-admin/src/views/SystemMngr/Menu/List.vue create mode 100644 el-admin/src/views/SystemMngr/User/ChangPwd.vue create mode 100644 el-admin/src/views/SystemMngr/User/List.vue create mode 100644 el-admin/vite.config.js create mode 100644 mH5/.env.development create mode 100644 mH5/.env.production create mode 100644 mH5/.eslintrc.cjs create mode 100644 mH5/.gitignore create mode 100644 mH5/.prettierrc.json create mode 100644 mH5/.vscode/extensions.json create mode 100644 mH5/README.md create mode 100644 mH5/index.html create mode 100644 mH5/package-lock.json create mode 100644 mH5/package.json create mode 100644 mH5/public/favicon.ico create mode 100644 mH5/src/App.vue create mode 100644 mH5/src/api/api.js create mode 100644 mH5/src/assets/base.css create mode 100644 mH5/src/assets/image/food.png create mode 100644 mH5/src/assets/image/gonggong.png create mode 100644 mH5/src/assets/image/huazhuangpin.png create mode 100644 mH5/src/assets/image/login.jpg create mode 100644 mH5/src/assets/image/map.png create mode 100644 mH5/src/assets/image/r_head.jpg create mode 100644 mH5/src/assets/image/r_head2.jpg create mode 100644 mH5/src/assets/image/success.jpg create mode 100644 mH5/src/assets/image/xiaodu.png create mode 100644 mH5/src/assets/image/yinyongshui.png create mode 100644 mH5/src/assets/logo.svg create mode 100644 mH5/src/assets/main.css create mode 100644 mH5/src/components/HelloWorld.vue create mode 100644 mH5/src/components/Loading.vue create mode 100644 mH5/src/components/TheWelcome.vue create mode 100644 mH5/src/components/WelcomeItem.vue create mode 100644 mH5/src/components/icons/IconCommunity.vue create mode 100644 mH5/src/components/icons/IconDocumentation.vue create mode 100644 mH5/src/components/icons/IconEcosystem.vue create mode 100644 mH5/src/components/icons/IconSupport.vue create mode 100644 mH5/src/components/icons/IconTooling.vue create mode 100644 mH5/src/main.js create mode 100644 mH5/src/router/index.js create mode 100644 mH5/src/stores/index.js create mode 100644 mH5/src/tools/Tools.js create mode 100644 mH5/src/tools/axios.js create mode 100644 mH5/src/views/DocumentSubmit.vue create mode 100644 mH5/src/views/GetWxCode.vue create mode 100644 mH5/src/views/Login.vue create mode 100644 mH5/src/views/Register.vue create mode 100644 mH5/src/views/SelectDate.vue create mode 100644 mH5/src/views/SelectOrganization.vue create mode 100644 mH5/src/views/YuYueSuccess.vue create mode 100644 mH5/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..86b8da1 --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Admin/BaseInfoController.php @@ -0,0 +1,29 @@ +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]); + + } +} 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..0e60ef4 --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Admin/LoginController.php @@ -0,0 +1,18 @@ +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..f8593cc --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Admin/UserController.php @@ -0,0 +1,39 @@ +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("参数不完整"); + } + + } +} diff --git a/Laravel/app/Http/Controllers/API/Admin/YeWu/HealthOrganizationController.php b/Laravel/app/Http/Controllers/API/Admin/YeWu/HealthOrganizationController.php new file mode 100644 index 0000000..ace9fe6 --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Admin/YeWu/HealthOrganizationController.php @@ -0,0 +1,21 @@ +get('userid');//中间件产生的参数 + $group = $request->get('role');//中间件产生的参数 + if($group<>1 or $group<>7) \Yz::echoError('无此接口访问权限'); + + $s=app()->make(HealthOrganizationService::class); + return $s->GetList(['type'=>'enable','group'=>$group,'userid'=>$userid]); + + } +} 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..f444e7a --- /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 or $group<>7) \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/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/mH5/LoginController.php b/Laravel/app/Http/Controllers/API/mH5/LoginController.php new file mode 100644 index 0000000..e20da75 --- /dev/null +++ b/Laravel/app/Http/Controllers/API/mH5/LoginController.php @@ -0,0 +1,66 @@ +query('code'); + + $env= $request->query('state'); + if($env=='production'){ + return redirect(config('app.globals.WxReturnCodeUrl_server').$code); + }else{ + return redirect(config('app.globals.WxReturnCodeUrl_local').$code); + } + + + } + + //微信登录授权获取openid + public function wxGetOpenid(){ + $result=array(); + $code =request('code'); + $url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=".config('app.globals.WxAppid')."&secret=".config('app.globals.WxAppSecret')."&code=".$code."&grant_type=authorization_code"; + $response = Http::get($url); + if ($response->successful()) { + $data = $response->json(); // 获取响应的 JSON 数据 + //dd($data['openid']); + $openid=$data['openid']; + + $accessTimeout = JWT::GetGetSecretTimeOut(); + $refreshTimeout = JWT::GetRefreshTokenTimeOut(); + $access_token = JWT::BuildJWT('yz','access',$openid,'mH5user',$accessTimeout); + $refresh_token = JWT::BuildJWT('yz','refresh',$openid,'',$refreshTimeout); + $s=app()->make(PersonService::class); + $c= $s->checkRegister(['openid'=>$openid]); + if($c){ //判断是否注册过 + DB::table('persons')->where(['openid'=>$openid,'status'=>1])->update(['token'=>md5($refresh_token)]); + $result['isRegister']=true; + }else{ + $result['isRegister']=false; + } + $result['token']=$access_token; + $result['refresh_token']=$refresh_token; + $result['status']='ok'; + + + } else { + // 请求失败处理... + $result['msg']='获取openid失败'; + $result['status']='ok'; + } + return $result; + } + + +} diff --git a/Laravel/app/Http/Controllers/API/mH5/OrganizationController.php b/Laravel/app/Http/Controllers/API/mH5/OrganizationController.php new file mode 100644 index 0000000..c0e9843 --- /dev/null +++ b/Laravel/app/Http/Controllers/API/mH5/OrganizationController.php @@ -0,0 +1,42 @@ +make(OrganizationService::class); + return $s->GetList(['type'=>'enable']); + } + //获取单独体检机构可预约日历时间表 + public function GetEnableCalendar(){ + $org_id=request('org_id'); + $institutionalId =request('id'); //机构id + $s=app()->make(OrganizationService::class); + return $s->GetCalendar(['type'=>'enable','institutionalId'=>$institutionalId,'org_id'=>$org_id]); + } + + //开始预约 + public function StartYuYue(Request $request){ + $openid = $request->get('userid');//中间件产生的参数 + $group = $request->get('role');//中间件产生的参数 + $subinfo=request('subinfo'); + if(isset($openid) and isset($subinfo)){ + foreach ($subinfo as $info){ + if(!isset($info)) return \Yz::echoError1("部分参数不完整"); + + } + $s=app()->make(OrganizationService::class); + return $s->StartYuYue(['openid'=>$openid,'group'=>$group,'info'=>$subinfo]); + }else{ + return \Yz::echoError1("参数不完整"); + } + + } + +} diff --git a/Laravel/app/Http/Controllers/API/mH5/PersonController.php b/Laravel/app/Http/Controllers/API/mH5/PersonController.php new file mode 100644 index 0000000..089c601 --- /dev/null +++ b/Laravel/app/Http/Controllers/API/mH5/PersonController.php @@ -0,0 +1,24 @@ +get('userid');//中间件产生的参数 + $info =request('info'); + $s=app()->make(PersonService::class); + return $s->Register(['openid'=>$openid,'info'=>$info]); + } + public function GetPersonRecode(Request $request){ + $openid = $request->get('userid');//中间件产生的参数 + $group = $request->get('role');//中间件产生的参数 + $s=app()->make(PersonService::class); + return $s->GetPersonRecode(['openid'=>$openid,'group'=>$group]); + } +} 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 @@ + + */ + 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, + ]; +} 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/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..88aed36 --- /dev/null +++ b/Laravel/app/Http/Middleware/Log.php @@ -0,0 +1,56 @@ +getContent(); + $data = json_decode($content, true); // 解码响应内容为关联数组 + + // 在关联数组中添加 code 字段 + $data['code'] = 200; + + $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, + ]); + } + + + return $response; + } + public static function getTrustedProxiesIp(){ //获取用户真实ip + \request()->setTrustedProxies(\request()->getClientIps(),Request::HEADER_X_FORWARDED_FOR); + return \request()->getClientIp(); + } +} 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/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/Yz.php b/Laravel/app/Lib/Yz.php new file mode 100644 index 0000000..5286392 --- /dev/null +++ b/Laravel/app/Lib/Yz.php @@ -0,0 +1,29 @@ +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..861a853 --- /dev/null +++ b/Laravel/app/Services/Admin/MenuService.php @@ -0,0 +1,122 @@ +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",[$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 = ?".$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, + '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, + // '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 + ]); + 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'] + ]); + 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..5e22ae1 --- /dev/null +++ b/Laravel/app/Services/Admin/UserService.php @@ -0,0 +1,92 @@ +c; + return $result; + } + public function Save($arr){ + 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'], + ]); + }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 + ]); + if($arr['info']['groupId']==7){ //如果是新建体检机构,则在体检机构表插入数据 + DB::table('medical_institution')->insert([ + 'org_name' => $arr['info']['cname'], + 'link_user_id'=>$id, + '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; + } +} 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/Admin/YeWu/HealthOrganizationService.php b/Laravel/app/Services/Admin/YeWu/HealthOrganizationService.php new file mode 100644 index 0000000..5110a93 --- /dev/null +++ b/Laravel/app/Services/Admin/YeWu/HealthOrganizationService.php @@ -0,0 +1,30 @@ +'enable','group'=>$group,'userid'=>$userid + //获取体检机构列表 + //如果需要获取可用的列表 需要传参[‘type’=>'enable'] + //获取全部 [‘type’=>'all'] + //如果gropid==7 则查询单条 + //userid 确认身份 + public function GetList($arr){ + $result=array(); + if($arr['type']=='enable' ){ + $s=[1]; + } + if($arr['type']=='all'){ + $s=[0,1]; + } + if($arr['group']==7){ + + $query=DB::table('medical_institution')->where(['status'=>1,'link_user_id'=>$arr['userid']])->get(); + }else{ + $query=DB::table('medical_institution')->whereIn('status',$s)->get(); + } + + return \Yz::Return(true,'ok',$query); + + } +} diff --git a/Laravel/app/Services/LogService.php b/Laravel/app/Services/LogService.php new file mode 100644 index 0000000..3e937ab --- /dev/null +++ b/Laravel/app/Services/LogService.php @@ -0,0 +1,57 @@ +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) { + $post_data["$key"] = 'Row 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/app/Services/mH5/OrganizationService.php b/Laravel/app/Services/mH5/OrganizationService.php new file mode 100644 index 0000000..1d0a59a --- /dev/null +++ b/Laravel/app/Services/mH5/OrganizationService.php @@ -0,0 +1,121 @@ +where(['status'=>1])->get(); + } + if ($arr['type']=='all'){ + $list=DB::table('medical_institution')->whereIn('status',[0,1])->get(); + } + if(count($list)>0){ + $result['status']=true; + $result['list']=$list; + }else{ + $result['msg']='未找到有效机构'; + $result['status']=false; + } + }else{ + $result['msg']='未设置查询参数'; + $result['status']=false; + } + return $result; + + } + + //获取体检机构可预约日历时间表 + public function GetCalendar($arr){ + $result=array(); + date_default_timezone_set('PRC'); + $nowtime=date("Y-m-d H:i:s"); + if($arr['type']){ + if ($arr['type']=='enable'){ + $list=DB::table('institutional_calendar')->where(['status'=>1,'institution_id'=>$arr['org_id']])->where('end_time','>',$nowtime)->get(); + if(count($list)>0){ + $result['list']=$list; + $result['status']=true; + }else{ + $result['status']=false; + $result['msg']="无可预约日期"; + } + } + return $result; + + + }else{ + $result['msg']='未设置查询参数'; + $result['status']=false; + } + return $result; + } + //开始预约 + public function StartYuYue($arr){ + $result=array(); + $openid=$arr['openid']; + $group=$arr['group']; + $info=$arr['info']; + //判断用户是否有效 + $cha_info=DB::table('persons')->select(['id','name','id_card_num'])->where(['openid'=>$openid,'status'=>1])->get(); + if(!count($cha_info)){ + return \Yz::Return(false,'未找到有效用户'); + } + //判断用户是否预约过 + date_default_timezone_set('PRC'); + $nowtime=date("Y-m-d H:i:s"); + $currentYear = date('Y'); + $firstDay = date('Y-01-01', strtotime($currentYear)); + $lastDay = date('Y-12-31', strtotime($currentYear)); + + $cha=DB::table('appointment_record')->where([['id_card_num','=',$cha_info[0]->id_card_num],['created_at','>',$firstDay],['created_at','<',$lastDay]])->whereIn('status',[1,2])->get(); + if(count($cha)) { + return \Yz::Return(false,'本年度已经预约过,无法继续预约'); + } + //判断是否体检过 + $s=app()->make(PersonService::class); + $char=$s->GetPersonRecode(['openid'=>$openid,'group'=>$group]); + + if(!$char['status']){ + return \Yz::Return(false,$char['msg']); + } + //判断预约的时间是否可行 + $q_date=DB::table('institutional_calendar')->select(['date','time','count'])->where(['id'=>$info['calendar_id'],'status'=>1])->where('end_time','>',$nowtime)->get(); + if(!count($q_date)){ + return \Yz::Return(false,'预约时间无效,或已截止预约'); + } + //判断预约数量是否达到设定值 + $q_count=DB::table('appointment_record')->where(['calendar_id'=>$info['calendar_id']])->count(); + if($q_count>=$q_date[0]->count){ + return \Yz::Return(false,'当前时间段预约已满'); + } + + //如果都通过则继续 + + $i=DB::table('appointment_record')->insert( + [ + 'calendar_id' => $info['calendar_id'], + 'name' => $cha_info[0]->name, + 'id_card_num' => $cha_info[0]->id_card_num, + 'person_id'=>$cha_info[0]->id, + 'openid'=>$openid, + 'date'=>$q_date[0]->date, + 'time'=>$q_date[0]->time, + 'doc_type_id'=>$info['doc_id'], + 'doc_type_name'=>$info['doc_name'], + 'org_id'=>$info['org_id'], + 'status'=>1 + ] + ); + if($i){ + return \Yz::Return(true,'预约完成'); + }else{ + return \Yz::Return(false,'预约失败'); + } + + } +} diff --git a/Laravel/app/Services/mH5/PersonService.php b/Laravel/app/Services/mH5/PersonService.php new file mode 100644 index 0000000..d415597 --- /dev/null +++ b/Laravel/app/Services/mH5/PersonService.php @@ -0,0 +1,81 @@ +where(['openid'=>$openid])->get(); + if(count($c)){ + return true; + }else{ + return false; + } + } + //注册 + public function Register($arr){ + $result=array(); + $c= $this->checkRegister(['openid'=>$arr['openid']]); + if($c){ + $result['status']=false; + $result['msg']='已注册过,无需进行此操作'; + }else{ + $i=DB::table('persons')->insert([ + 'name' => $arr['info']['name'], + 'sex' => $arr['info']['sex'], + 'id_card_num' => $arr['info']['sfz'], + 'tel' => $arr['info']['tel'], + 'openid' => $arr['openid'], + 'status'=>1 + ]); + if($i){ + $result['status']=true; + $result['msg']='创建成功'; + }else{ + $result['status']=false; + $result['msg']='操作失败'; + } + } + return $result; + } + public function GetPersonRecode($arr){ + $result=array(); + $id_num=''; + + if(isset($arr['group']) and $arr['group']=='mH5user'){ //如果是本地项目请求(非对外接口) + $openid=$arr['openid']; + $c=DB::table('persons')->select(['id_card_num'])->where(['openid'=>$openid,'status'=>1])->get(); + if(count($c)>0){ + $id_num=$c[0]->id_card_num; + }else{ + $result['status']=false; + $result['msg']='未找到有效用户'; + } + }else{ //对外接口,直接获取证件IdNum + $id_num=$arr['id_num']; + } + + if(strlen($id_num)>0){ + date_default_timezone_set('PRC'); + $currentYear = date('Y'); + $firstDay = date('Y-01-01', strtotime($currentYear)); + $lastDay = date('Y-12-31', strtotime($currentYear)); + + $c=DB::table('examination_records')->select(['id','id_card_num','created_at as insertime'])->where([['id_card_num','=',$id_num],['created_at','>',$firstDay],['created_at','<',$lastDay]])->get(); + if(count($c)>0){ + $result['status']=false; + $result['msg']='已体检过'; + $result['info']=$c; + }else{ + $result['status']=true; + $result['msg']='可以继续,本年度无体检记录'; + } + }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..a7c6be2 --- /dev/null +++ b/Laravel/config/app.php @@ -0,0 +1,249 @@ + [ + 'WxAppid' => 'wx526430047d34c85c', //岚科公众号 + 'WxAppSecret' => '975b8a8b627b1bde71bbe49149134549', //岚科公众号 + +// 'WxAppid' => 'wx8f83ab76a99ba560',//测试 +// 'WxAppSecret' => 'eebc53a9e94f676bd680d3a09eb20303',//测试 + + '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/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..55fdff8 --- /dev/null +++ b/Laravel/routes/api.php @@ -0,0 +1,58 @@ +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/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后台更新日历 +}); + + +Route::post('wxGetOpenid','App\Http\Controllers\API\mH5\LoginController@wxGetOpenid')->middleware('log'); //mH5手机用户获取openid + +Route::group(['middleware'=>['checktoken','log'],'prefix'=>'v1/mH5'],function () { //手机H5路由分组 + Route::post('Register','App\Http\Controllers\API\mH5\PersonController@Register'); //手机H5端用户注册 + Route::post('GetPersonRecode','App\Http\Controllers\API\mH5\PersonController@GetPersonRecode'); //查询用户本年度体检记录 + Route::post('GetOrgEnableList','App\Http\Controllers\API\mH5\OrganizationController@GetEnableList'); //获取可用体检机构 + Route::post('GetEnableCalendar','App\Http\Controllers\API\mH5\OrganizationController@GetEnableCalendar'); //获取可用体检机构日历 + Route::post('StartYuYue','App\Http\Controllers\API\mH5\OrganizationController@StartYuYue'); //开始预约 +}); 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..057690e --- /dev/null +++ b/Laravel/routes/web.php @@ -0,0 +1,27 @@ + + */ + +$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/app/public/.gitignore b/Laravel/storage/app/public/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/Laravel/storage/app/public/.gitignore @@ -0,0 +1,2 @@ +* +!.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/el-admin/.env.development b/el-admin/.env.development new file mode 100644 index 0000000..8bf461b --- /dev/null +++ b/el-admin/.env.development @@ -0,0 +1,2 @@ +ENV = 'development' +VITE_APP_API = '/api/' diff --git a/el-admin/.env.production b/el-admin/.env.production new file mode 100644 index 0000000..6d8ddb9 --- /dev/null +++ b/el-admin/.env.production @@ -0,0 +1,4 @@ +ENV = 'production' +VITE_APP_API = 'https://www.yanzai.vip/common/laravel/public/api/' + + diff --git a/el-admin/.eslintrc.cjs b/el-admin/.eslintrc.cjs new file mode 100644 index 0000000..b64731a --- /dev/null +++ b/el-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/el-admin/.gitignore b/el-admin/.gitignore new file mode 100644 index 0000000..38adffa --- /dev/null +++ b/el-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/el-admin/.prettierrc.json b/el-admin/.prettierrc.json new file mode 100644 index 0000000..66e2335 --- /dev/null +++ b/el-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/el-admin/.vscode/extensions.json b/el-admin/.vscode/extensions.json new file mode 100644 index 0000000..009a534 --- /dev/null +++ b/el-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/el-admin/README.md b/el-admin/README.md new file mode 100644 index 0000000..eeed457 --- /dev/null +++ b/el-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/el-admin/index.html b/el-admin/index.html new file mode 100644 index 0000000..03cdc53 --- /dev/null +++ b/el-admin/index.html @@ -0,0 +1,13 @@ + + + + + + + 体检平台 + + +
+ + + diff --git a/el-admin/package-lock.json b/el-admin/package-lock.json new file mode 100644 index 0000000..c0626a5 --- /dev/null +++ b/el-admin/package-lock.json @@ -0,0 +1,3129 @@ +{ + "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", + "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==", + "dev": true, + "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==", + "dev": true, + "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/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/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==", + "dev": true, + "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==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "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/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/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/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-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-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/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==", + "dev": true, + "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/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/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/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/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/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=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/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/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/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/el-admin/package.json b/el-admin/package.json new file mode 100644 index 0000000..659ce61 --- /dev/null +++ b/el-admin/package.json @@ -0,0 +1,31 @@ +{ + "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", + "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/el-admin/public/favicon.ico b/el-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/el-admin/src/App.vue b/el-admin/src/App.vue new file mode 100644 index 0000000..c33cf4d --- /dev/null +++ b/el-admin/src/App.vue @@ -0,0 +1,90 @@ + + + + + \ No newline at end of file diff --git a/el-admin/src/api/api.js b/el-admin/src/api/api.js new file mode 100644 index 0000000..6b5f274 --- /dev/null +++ b/el-admin/src/api/api.js @@ -0,0 +1,85 @@ +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 GetHealthOrganizationEnableList = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/GetHealthOrganizationEnableList',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}) +} \ No newline at end of file diff --git a/el-admin/src/assets/backg_l.jpg b/el-admin/src/assets/backg_l.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a86cc85bbdb7c82921fa51f76bda3f2cf7bb3f91 GIT binary patch literal 159532 zcma&O2|QKZ_dmYxbqT31MIzi#$()i>a#IOKlv##CWzLkDqv2^Zlu(3QDw&JS8J;H* zC1ff?iXvppkW9a|uX;Y8@9*{d{$Kx9_nbYQefD1Kz1LcMI2PV7d`A5Hz3omSq^T*1 z*wKGz;XC5q=V|TWgGh)1$-59*_{<`A+QZ|FvYec=yXQq-2$KC{>Mw4H{po9$6w9erzG2kRX+ zqN=-TyS$aXoz6JfdK{;DJ2^VLD|@SmGAmbxFiw^er7??mIH-v3!EdD*YwObXy13cW zcF4-hSj)@H)0B3|ZdTfCt)O)B_z7v6g1mx)ocwmV&D&%Y6qL6pDsSCP`%R+oLN}X} z%18F8|9&0BR78LG%gf74)@zHbi`yx=%{zANkds%CQ&5nB5;E>S&K}3TWt`o`{?xF~ z*4^68?u>_>i!%+^c>IKmr-zCtG>O<}97 zJWayL&e_Jr%Y75`0c~w%O=owHX*@ zzkT0+^&RpG+ZFbz%PZ~QyZ_I#`&_I&oot;w{yb~*pJ%uIug_vQIGuqv@3VEYJ8NsB z?&jh|WA<6u?tgE~mjAWB-_P3o?`_%ozdkDmjgiBW{Vz%XNdoxb;J?s?$iLvXbq2({ z0kju}&~heVkxdy4A<{w{x`5ay6bdVajg^&+gAIO5+1c3GmvV7(F6HFpqH-~b%C&q2 zb;WY7l`B`RTDfwqprGJdk$;J_WXY0cT+8^WRDJ1 znPuH(${rrQ?QTN_r5|9RAR06 zE+?pDgaim&lf<$z6fTAchB29h=m;6m5J{f|8K6QCNd(b&5i|}mFf-ut3qnA;v}IOH zEP=C_1xtYeG#v&NAu(N~M9N3(Y=jscIKX2Y>kt(|oybZN*CVk) zo(4A!97e40<8PZ%1uk?oy zLfi0#x(Y6IDy|rD0bewD5n}m)GnVKgekxi+62}rjE9BuqCi$XpQRpp6mjjXMP|^x* zgc}egc-5;_OTrQEEf*1oJP?bnG>IP&#?DHrgDYnlp$}L?WjCRkMg+{aq9f=$Ns#my zo|oqVsZ)sX&3QwRj%WyZBGN5(q`cT{C;`O47ZZfe!P5v}ga8)!1-Oqm3*IS74%fsX z$ize@7T*FvcC?g+*@4OkMAAhY2oua9PRQB7*hm+GmV9HSYtsStz;WOTmOk(RMgb2Z zTYyU#5JvnIRz&%RLp07jREEg*Xh|6-g+!wPJD?G07r}t*K01aDiXrJzm*PMf zB8{>L{$~iv1F#X}vIJFv%IqcRnLiLDaCs~W++z>{mLLuT``9Ir*kW;z0R|bU23&wn zN9Z*0Wsx@<7`n>{5Ex|O2Z87ak!V;ItwP-Ll4R0Z5H2%MfCyg(OeHfQ@6Y2>pk-)C zgAF(WX)EX)!E};xFvtsuFpv;vL8M)Xl?wxMS?B=CKn5Lxh=49rkuGD88jmjRG7K|l z8XoivsGn00#6ekgABtfaG70+2geHZ2l};vUA+@DgI&{#mRKx|yqaqFx4N@qGM8FM+ zLp#vot5``is0VP0tJ?-V!sG!z4rmwDOBXJ~DZr634IBXOBGTh!AkU?`Nca=-B)>vp zrUZGYj9_MxY&d9q3|!p=Qw&i0TE{N{2eS@fs}=d;ei{kbD?w%KH)aR;;VPMgfyiVg zbuqpU7u^Z<~ceFzH%@InJ4LzzHjB&5!O`@h2xLO>)2uAMGKCt0Mi zl_7b|5r#M(p-j+2-daQ#XLoC(LQH*w$D}8Y(D3Dd64nFo8r)I_Hf)QzIs|&mg7p-EkQO3RblJ!>PJ*OJKuLch9{NWofw@`Ez(rUP+qR%B z6TdlxNI?K;oUSVxyaGhSd=(x$@Ja&kCjs4%z%210As=ov0#P_5;%!zjNK{<{o?6Au zpu-LKl|;YEif0{=@IR4P52+0!1ojM;=5qLpB zxWVura0CdTr$B9ZAklF0Dt3%mq>ODd7eT>Fo0A4rlhFNewX2s&9Ci1SQ3_R`ir6G= z5=9pkIaqUMKXBa;U_oTyI}OK}M1xuhhRUBP^N!mGFv5??(ZLx(WqZl;oOA|VwhTJ3 z$O9(E%7E2d@sP#b=qH1oVLryjKt+Hb0_n=<4maZ3pcC*U{*MPF#<>Ky76r$!4VKU# zvx6H6d;=W<#w?sczKoX8nHrHSp$jmfBUX0c0Jt~UJh9fXlL-7Q4PO>j2HZKwc-Zpb z$G}%6KwR+qFCqodnK2kapv9TeB#9$Fx(3t=kOe?u0RwYZPZOt?0OWXsp*$WZ4$yuO z0z#zq!6BvYf5wyvybuVq8YWH#88>c`;MF*|3SGbh0^LV60!1C-yb5FB0b-@lZ(c>T z{bXDvljP_$#6?En1~UZ>{sn_6BWBluJ1VG?40}-4^+eU(Z zGZqT%Ta1z3payaZi`VLU>j(Lvj6!(y|78bG2PS-8D;ydw(n+kb}~CgEaOSsJq7 zim(FbFWM_nbRRkegohfw$8ll}gy`S&*r9y@1Rhor4FU`kawKGD(GeMsM|ui3Vm0Ju znm9y8;m|;MoOSlOvG9SSx%xqi4+ka`4BBcY#zuui*3~SasGqk=oh3gE)UOx05}&7V zH)z^{#WgA_bH7tvU!TPSVwqQ)v@i^lIi;zcQeZon6GzyAhb$n8mAZ1ECb5FWC03Far))5sSC1jW1A4_Iz#|Y9 z@c^@cIgI1~;(IZl34A=zK}5meqE?gilF8rp0S+&cVS*G4eiyJ2z%NPDB~cKC{T_4B zQ7*viNQQKh4TT7ozJ<8?=unQLaCwy|veCOng9xHh2rFnTNtdTNU2^zTn`wXB2h#Kc z`WQ4Oyj#)f<>XX{SCZS0cbX1It(BKxxt^^+(6_drYf^^7>B} z*%r3n8Z<%S6XE0&^wR7cwyE)SK(TgAs5%r7T(i?`gc=I-&RfU@qIa6 z*)~_YfFw=RPxL%)buw|V6n<3rV?eHME^|oEaZ1|$y}P01dG*3t;RJ_HpMHG}8o`h4 z^lApQn?Xk~Xo1n#=mIf02zM5`bnxy!DHH-D0?Ygr19I@&WRLKieh=XrNkdZi8fMgmN6L1~y#u|qeMi*cDY~ESC(|6A`i?o-oE6lU=oRfJB=Siq*>;J*d$XGZ6QB*LL?u z>9*M|FUtHj_fO0fb@;R&%K2p?nK>@D~#t)S_7BM;)V0`|$Nv1y*ThGcNdU3B616`$~t28R-9;{Iix^MckZ{~Yy z|EKe2J!b|=Y=w`MjTN^HEuhnrvresZEoO3K>l@tpN@Zq>hUdNVO}fiEHk%$F$a@fx z9;8%e+oL@b_sDjq_ph6UCtXv9`}JNltr>WfWPRjCheoS-v2}gNV0?YTZs%&fO3j9& z0u33vT~fOJHXK`f>QJQS-b-Dsg}z(jcgcDQDhbyXrnk%;{CV=LRzsynPK$?5&38j{ zr>;90VWXiJB)c9-*=VP)@xAM7?Ak2ZKh>%%red)(zhvOeiLn*!PH0;EAhf{@rS3;w_!>^XMQ zNCZvGt%dq#(3n24SUSUqUUKB$=Giqla7S%Dh-^P-}ubc;#i*6ugMHXpyqJGm};S0mdWv|@u$VH z9hpL0ISL~(Q-=#ro;BHFn6p7Fv#ciLeYtyvQ&w)emrs1J-7J^N%FUHEIce!_$^#w! zIns|3UuEaHn=1>rdXBnUu0Ijs9K)X%`XS7(Rpn}PQB~yWXXzH5!L??dw*!pw`~r7* zy-Nu?%o17b5g;t$QZbTZTIl)SHP+&A!CanMQ{jUaeS7bnExq#tg9Y2yMjII>E7uvTK5v$ccRuCsE9osQ+wnaw_6fAbHn3@=rDqss6akLbBkx&=>Sm@xHszHEEHK0qd z?crR9wI>ZpLM@2Ik9f#*tjeK&>d!hd33z$%h8a^ z630*}{Wg}7u;Te|RYP}Ylr873=HDMpsC(_UTk}hFil58QEJd+99jR)KuE{1wGATv5 zW}?P@aY|FEk8f++UoV{T3=?UK_wzEF%Q6n7bW{cpws_a8mJLXSK5gj_vJa}d z?Zca~+~IpwZ(f%}#%kVQD+D7ezgnBfo0}-gUwvVNNbJBye)uueK~jsv!a%Yx9GN41 zap(#Ft960pZj?q?3K4{9IV>E49R9dqYi}gm$sJ?xH>ilzW&z8 z%$WiRe^JbE1H*{ctvg&t(j@>2>cjuB>uP=F+HtAk!eyF*7 zRmA;|+m`M4q1Lo5+LFHYd90$-+Ihw>Yi!=+o1Y#V`J5Umr=(K;ITKZPFzUyIZ(!%} zv!tPhm(DFZmsE~-ikxx^=q*x|Iq08N`1-G353K7;155Wz`bpm&{o*&7oUk&&Yjm*X zRReEU)Ft+`X5sEi6Zy7+jfVH;MPDdRukN_(S@C7ETq?KS=~<$&i%U$2{iBqUwFQ218~oANsBC zIHu}ek$hv<+FK=#UY%n*wLN>9rTv^sS1lm&6G9!NAcTPV|AUxuHUcKibCAPA7lB*` zT_D&498N?oTMdZ>EHGeF42PviSS&=aLJ#Xv`YexO>qd8@8`k=YkQQcS&%oU1lXy>0IovhQ=vR;{mxtnQ$2GB(Tom0;ge_3D$E-G!q27 zF$nB-I0Y2PGXIkO-t7)OC0CQ5sKy75Prdd_DC&9D=G_!`x=?Ka-4nR+!`bg){;0V| z!`9ezizz|2g;#Qd0- z=goAbhtXeJ4zuvKt!S99of14*dC2JCevvypjbjr%KLeaRb1w)wl=kaqTo2jh)ONbD zVMXQq0_r_pTkTPC>s`OVSY69oxdsanUcV_*!*^cYRo|;RnqHQ=RGv69>EIvR-0FX@ zKS(P~G2`7?hr`!1kBr8aJhitNN!nK$u8|WdQhvj_d9uX!g=hQ6*i8Q0n;(zQj?W1W z9$P>i?+kceX4Whhep0J4YH`g^IPAIQ^3`TmS5Kv#H7!&eRsZVN>^m9wVP>-NdzW9t zwbDr2`RIX9UT@>IyThKph+Xb0)s^LWvi*)c2n4p8=>HcAsK8uKf++-0#dre-=`Kfv z2$l+_MK6xR`X0jYI9@3u!^#C{dJO2w;RPnap-1~BiOJm3NY zo~X)1KfsGUm<}tqI7dI62j-?~I7sp#!jUdJC;15Z6$d-3E~^^dH`s>4pzu2DjjE0X zwJ!}GH0*v?A0g^6GCs>;sLGY&W|LQwURV;p!R$uHdpCmuGfyFh=5)J&l$^M~#g;Z# z{Zw83WbL&5{Zmzpn$tred^P^N*W1P`8aa6!{`8FVLv+Mnxr3Gk6~!CNml^x`7B z`g6VSyY$WScvnyFm(&BVjh*r>4#c`xNR3O4ZT{>UX<8!FRM~a?S=;$-Tp63cq<k0ita#@@JYY?zUtHxpj}7obW9*4-l_%&>l)pX{ns`RFaBMY?)k9w4+y%G*c3J!=5DfqN`||Bt+}9M~AJ z$AQ(i6_|7Zm|bthsS+^p!D{_qx0?deLL_6@p@p3>T_^$2A_r%57W^V`c_8rPFv0E& zs0DZt9ZE6HJ9^AC5U>=$K&*fn#Qus#!JC;Rbe)~7M!>p}7@|0%xH9pj(v&AOUU?D+ znIU%@^ukK=t5p;Nk?Fh~K*I2P{+G(TR7fG)IC3y;c%)rJ^yoq(2tFZ*}S%yL9GF=Kjt@C z?sb_ku@e?r?zOpXXJ$~ylvn$9=jRhaIxU$$JU6=vsSGr{n0jbW&}axuy_(xJF?t+iZQhO4aH5j|UPA z(mR(uo6FeP@+$4A+pXk=2dj=hP@5&zfBqSCd3kDP1UXN6aHoQhl#7z$T&C`Uv$EELpbg?DhOmImPuX&punbeAfTYwP?*G&w%P`DZlDb$GggX3+PMw_^pW`$(DVu z*JK`eKi}0e6SU6eMa0*H*0#a0Wi{2kX{yI&tcNp1@|*Lw5vDITU0LfS%t`SPcq{w0UJ*%UV$&m!Hyaw*baJ2?mjg<>}S#O z{R6Ml8U_Db6S;rcznWco!^=OaDC*ijuj=?3de7F;MU}}FUGcG@MBYKwCCK`jt_5m znt#NXT)Omq)_?Q;JWIY4Er%_3&PSduF?e*N8&*&5JS#e`;$?T5!6htd;x=ewSy=z`M_v)l&X>(uBXG&z8?Ubec z++0M6@2E;et6WrpS^Yp`U(Ap8QqAtMGj6VFw=>cb&ToCO9S%c)VgTa6m;Vp|1AGW7 z%Nf|O#hI-A%qbuC90Zx`x}Y^^2r<@SP!am9Ay%9eI1T`3RNnlq1ok4CA?%zoX>k_@ zg9R^lUo;RE0}<=eEAQ~0%zdt8`fq~W&ha}$f>Fo(dk43A=uXyDJ zK=YAknxJG5@74$xnMV?m{|Mui!QX5OPZo&ED`Vwx=zY-;QrGO|a%3AnckwrO@m z##Cgic8NBpx2gAa$m%=HdQ%6k-H7~9IMkp?YdPj0f6!piZ+iaWjo756Q8n@dU9NuZ z#arKbthYaq`S;Y?wZ3!Po<*j(KD{QiA+ha6O;@kh`=N+Dod*sXw-P7ZpRuY(gwW0} zwZ3+`n8wxQXPQu!l2W+0%}L|x=+QKv=+qVwvDWjLZHi`D^>-ZM7>m?j5i2&Ba|Y%1&-5_9-e1b49R8X66b zjIb5Kaf07fzWh(y4ZL`V|sTY zRE`r|Hlo3T$UvO7U-Pu+lwGocEegLH!$~^Y$a$NCZc;}>95e%@DjnB%XXXi5%wnJKtg9}LVUTQj8dw@%c>&}kDs0h4CZ%pOF1!Z zSZv(&d^UQpd@%bPcW-M=?$p-TULs3#8XVM2vs9M1H3-F6>~jfS`>e>>GxXtrVs=>d z>x(r`l8R<4uShj^&AoKAlYU+LAbkNT_!erb#48ny{;1z|R)_DAqf174N8-!x&(%^) zE8-nai)I~N=DmOfDK-&(fSl={c$X^{_SiHyL63^{)UcdaG{ih7RO~3kH z^P)S&Kg=}U@~DtUewduBl+@m~14}e5oNUi!I%vAoPp?iJ{XQd-Tl8fpYx+n)@^s(q z8~dUYs`SaLb89Dj73Y^o4v5$~^U8&oA5y=5*CKz*$iR$~@!@^@&m4*G{{CSB6@1DY z?{WFd)+cUDlF;X=1>`(e|6CZh%9=g zu;vG52)6$r0eqV>LKpE75W=U~z-R?Cof{!AJtP_^8iaim#(y2kj+ve#qtF}G6by_yrTwmww+Ffn?JNRxCavW<)&A#v;SvXoC<(6i8 z&|cnm%7LfHb!XQI3>b_aE!f-eD(!uJpo*fO!+q1}w9%S~WvLlo_dW8@Z*Q*gW_b3G zz@qOq+16tF!Y$jBwoT=iOqG8TFKV(~K!#ysTdW^6`tk-;+wL96w~OifG_g->L)Wg4 z44c*~1ZR%tbnZ7jVP&;Q$!(&Q32!C?Ro9t3i_(s~HLfUWJUtYYt>v4CL z-rkWuW3Bl^p*{2R{Ez6eUbD#Z?DWW_9LI(xK$FbZU#D6veMXBLmbsqH$`ma$5wZo{ z)bA0u&5xIg!2IB?T*UfY*5PokTMFg_Gz+YjEbdZ*Rsq{Z)>w8HAHgCJ)3t>Zf*o`h zD`K&dfT_|&yxYoDbZk%pR>dUX3U-Z-?|*0<2Wa>r$>4w;1Ckm^m-7Om(IvRa*V!q4 zBr=1_UUr>*AAOwxKTr8%nRD?Emz8Bv=EcdhtbZhr8yybbTR`U+Vb{>(zoD zJ?N`Qm`dqzyss>CwZ^{2=4tLTy`-=^dauuAJS$z7Z=jv@>D>a_q8BqdX8xthL8-|1 zg6E9O>J5%f=^pM2Xz#YX>&4&W|Bk<1RFr(WscCnc|3-HquW_Hz(-$|%t)H$sHo*7X zi}b$R=6UrMM}xfT&k}P7bhf*>uGKawFFsKTv)oMm>Z(K0DHl2d(0Kmtse~|#*Sq`2 zKWbWMoSpg^bjGz{xq_0JT|ubgpm2utt=9(jCZ?H&<2R*F{Ai|0Z7pqNH8@-qX|O)a zLNok$1gnBkR%=uGJ=L5yiE`C#5t;R!*&T2ziy~?3oz^D0(&cQ`3_0pZ<~8G@l7pi zOQn~1-Bz2VpY*YX94|jwVGj<(x-+lI7Ls{oqmDmy642^^8h0BE;UG~L< zDEB?(J+^&l_FT?OPxG_k*IlkyPI=UOM?VbpZ&&{q%Uqt{xiQ(KdyT`%28qEgze=ev zCmD$-#jU@Dm$d(MZmqs2$J^J$KjG{&bmGhL*QSLgrk;AAUNtxtgckD~*F3oA+!=O* zvsi5Z?A0gs$MOXB?F;Umxs>ZV&FlQy_8I-)*B^Jo9A8)D`NmqC`(_?Bw{9Br+qiML zR*QiBouf@UVNQCrdhd)nW-J66$N^7UErZ_{R?IdidyLTfCLMDhncUug{r!yW5@o4n z#eBV*#~l4z+SfS6MxW}N=5IP%+ubwm?-^pYe%ylVhQ*4Fktd5bJ@hTTl3(L?{L9#O zpMk2fK{JC#g-(UaTHR@-Rx={Qhj#Z?WUOtmv`CSDZk?jkA~~bDOv^3)Z$RAQsW5;I z2VN(}#5{j!3xM?p|dY-WWf_NIH5O(Watbr zY5u7q)jRA?rA_|0rrP<4`uSa%-en&ZJ)&Q4Ih7_@D}I^D+%)DBoi&#;?eOht$T549k}r=qOkei}M6?@nZfh)P zJ|SSS>6=@l?`Hq)0Y73ZzkD4|I(O^YQGu8@)_obzl}@&8`)u~a#=|E4KzfAG;MF?< zz7u9^oHF;#ubidxc=<`Ri>*)6^xK#le6LAm{96Kp-{ys3;kJmzV%cLp`A6FJM_!AT z8MTPLKM}vV@p1p(L&xrNe{jl;vwo*p@hE-)EggDjt}t7@+AY3B-4Q@K8u0pBRpyMB zh4QyIc`YZLRb!S4Zq!!($!%;RG3s~Ab!_vI3A-lMWokxuB7(=q((-#kb{sw-))&}0 zla!TuX^2yCS|MrH`%Zzg-Gq5$)qY<^Uo(gFQ0HqEiHRhb$c4{9%Md@?z2xv|Y>`!v6q zR;GU5`6C6#N*!lZhwcgwyhu4~X&7UE*m9*?fk|b^Z%y9S$utuBXwIel-0PQj#pk7_wm*5fO$IVA-8QZ=S>H1rS-^Yq z)(s1V(%Z^o&&{N74@K2W^j7?u*)75%B6!7A^~hGw zHPaU6=x?8U-$csor~lE42&=A!zkV3j-v7DsLqYUvTZdDcOR8LN&of?a^AqRW^F6A}HaY0ueKDfEYf=TDI|4wG=?ps9Z1^n_%ybzT zD?k)5&e&BH#}Pzl?!v;IgAV(fK)M@s(Z8qJDB)Ns;zfFV3J8V6@n*bl4s{W@EO@6R zW&nIr*ehXBMIS`+k)P5?^iV`X^03fBW#>iLxlAaXXUMHY3**j6(}~iqThWm!nc27De&Y09VOo!`#y$=nN#)K<_t@djRHAUH_ci(U!J(x&h_n4^==7i-_nk};1hRz zU2^{tQf~Q}WIoBBULE;!)$tAvnZ)}eqF&nYI~(fz!#Od3Sj4 z<`hNc*j?;0<5f76oKrXoAhNi|Mwke-1o|k)W_3D1B$wa^*l)d2mBo#F(wn?y6zfpE=pnBD=#|=+QW=c7*=rXkz(f=0NG_TuaEY+Zl0Dp*Q0{ z3h(RxReZ>VFMYT%E8F@@$!t}}d0wMmIh&IX9jIvFb>jFI|51FvO+|Va>s(Smpka^w zL|w1Lv)8=^w}oX7rbngMmbIsSsJOP?SJ^B@QHsxVXfAR}XfE~k6Ps*rmxoaqVrfFz z7Uo}P4zGv|i}))qJ@Vm(m}b2^zE7aL00fUI7$}R{F&si9nl2aO2uHih5RL*t0X8x{ znTF9RFR{4evzo!2=E#+Ei40kt0Dbq{ABE3sNX+BXaNrbg2r&1EarOAvDk9V2+~FoD zD?!$xknfY!7*qmcqVf#bBoJ$qB=PfS>0MrFMd(XhXCH?t5z?T-x10Rj!Qw0|e73Mj znQFMCw{tABK>1AH%k-GDanE;&OZ%^GyS+OppfuIy*X<6k7nzDq$3jfXf8Mb#aR2nk zcSplNyR@}x!o(sga|QBj6)l?@+cQkBeBZV9ZtWSL4Vx}{DUB-IUL6S-4*xL|b!v-g zTW)4`A!n%L!A$e(A#;T?vuas-E4OsLN_=^s|D0&|qp7xJoh`!^3-QV`@ z{Gq$s+K1~zcS*KHC23kGt!)owm9a~?GBP$Mm#ri#II3V|T-Rbev8luG*VfgcX+DmL zM(w$NY6q>iDN3a-DL7f)=u|qk*78*5iz%1Kr5!;^`nN=-GY|8Qc4(cxTHScqD>Gc( zU(UV9@4$vTKU)@%(}w`9iHn~O@;QVx?fx*6aAkO{=?9CP+MMLvEQ?_N# zeSO80=R7LAd!D>=Gw?k7VNLphcd{x26=@ka-Oon;0574!DL}i!qU3tBz1`;x9`47Z zBIdsy9Zu9%UqI|iF%?;JBJ(?D;=a7J*x)DoE3kI!*~spX-g6raQqpoyr-4pEmYhHq&96(^$8-!?)!~SN_HG*eaalz<{|ol(WX@IU z6f1QK0Y|;qLjqgaS&q>>R#38vddT8z1urS}kM+@j- z!CcUdWRvEjAAU|u*5(!5eV!9^RBU?Vfu${VgK^v2OLr6x`n3)losx;HaqW0W5mKz$ znUhg&XcuVqY`-l>y0Qm*vF{sa0o(gdFB(qw(KHSp$gW#z=0C=!nb!|%A%>Dw5+Nlt zTXQqL%p+S{(~3_qR;*ZE$Gdjpr~T&7v{oB^Bbf>(5Nn!ih6QKUCKB8RS`K%y^Gy25 z++JfTWO~`u^MYQY5?@H4!1AQE(@#DY%`V$0VC3nzM19vS)5!r9WuCwLTmxRnDhX8` z7(6&GX70Dv()C5`!R_|zRcOmAEt54u1a9qleJ!$PGQ)D}n9|aMoz3a#&pD3Ei5OTG zZl0MGka|{N{O(r!wuI;_wR)Y3o!{G+y6qTG^Utx%RnNTi(XwrGCr_Hk`M^-i`X7Na z-}%00r<^^oGgP^|ucgc_AO3!Tr^DA#>GY!)D{}qAOP4g7YPM)wSUU6?ZBvaB@$?+& z5Zat1k|B~6kUjKsdUowuZ6%wB8~{35FWp z&nC|kSc5T_mhl&;P!@=T4o5Y05lStCV@i0@cp3d4*vbT(%LFg84D<4Pz5`*VWB41P zdaz%;X%F(!vRhNUEg@vC?M`G{U0fb_v zRO^HM*Zq`?_YXD5y%f`1-}6{IzZA!ej1sNi!DH^&h5rw|9hn$m*H4*q*Anqa*WG z;)?}zbG!Fk=?AI5!sB{;JtH1DgeHVHr#}m=-I=&icp{?%)jgC~vVPP5dFWME-jN?X zQ(}j@^$UYyKi%erQ@Vr}0};e^?sVZLs+pq%1+CN(SPcZKOly&Qi%k!B(lE#xMfYI!vA zY8gMlL={{Yy)^~|5a(5-28!^{vI}!+fPR*c$Fl0eXtGsPYCH6Sy7z-88?#W zN(mt;f~_T!XdLWZrgiLf{D0p%QNOQAwUM;s;#AUR*Wzf!M}m7S-`-7IKxWY==UtY} zUTrq}ITT*Fqu%=`|I;=(qiaJZqsloxn)7{@Z(fFmmCU#dS?~qEF*%ZPYH6X8L)Y80 zE3&&yLz|w7Kfksnvs(3Qf{#f-P-|0l#z4TD7Vg)c)13mLA5tGo`@}h14|DmJ@!sCD z-?pKt*L}NCNMWDQ>MtfHPkRf@hOWLiDV^Rupp?2O#6WRSnGq)m3ulUxco|0=HZQ43)Abh%}!RJM9f$-uML>#@bxy>VCISIe{l#I3{a^wW&-2) zF^)wKlE61Y7rrxqy;iaW*m>Avg9(l}tiVX(JrFpkxf!gt{AL<~%GvAGWf>>x4K7~4 z*SO-`0*c%*ygE->tNvrs8>x{y=0k0@`wT*EkA2uN@L*+#*7wTj!)#NjTdZ>(`T`sO z_H#Gdu-nvb=g+k{=H7F1s|$@p1SU(GbS%$@K3XpwC^BVP5acs7J(j9uV&}hBIIVUC z-*B`XIm6cZ+R@GZJL+X)`8^ai`W7^)Yz%snBS~=6p-}K7QFkfWN`D&t1OoWO~fIYQ?#w zF>e#cMSf1T%RZSC)bfteRAmeOkh!fl`kRY+t`rylqC!Gsngo)pyGP?k;LjnMG7Tnj zZo{z(_C0h0N8oSEFt(B*T~`2q^ow+b5dOO5G?@-*=4CgDibeYh3oHOY(0Q2fCdzL| z4@coEHaeo?5Rd?Y^uVPg9f2?%kV|0?)@O%LTaFu-Au$%J5S^mViwH%s%H@r^(!Bfx z=SzmX=PY`8U-W>kstA1LGu_dibFJuWO3Pa_%O3TF2&sX(cXA$f;yQ)-b{{7m9K3BQ z{FlezkIZ)gm(J^`3S5!9Q$D{W)?ncEyQ%A)Z8Ng|=_!w!h98wO%E#UgU+P}t)EU$4 zTeQO|{?&+OOHx_VjKgSz;`2(=k}GOIM#VgZQZqGX>ja8!4P=JthVJ@lFloN==#gx< zA7e)veIu{&KWdOvI#DAcHP9F(oe|Tq{YU4U>MU(m8K2PXd_&2z^-mNIkBu%}ZJwmj zc-2T>FUD^BC@u9-l~Wh*ts&O9-1sMDHCrcjUpRrYh5=v9Z=+vqxr# zl#{lS(1``K_z5Eh&!V@7H*e|S#Ni(mN#VaSg1-$}B!W2u0j!ZYg`f!+sPHaWf&o31 zMyGQ#HWOk;*pzRqO1TbeH!4KM+P|sx=s5p9r|L-k~}*TXW-_UglptO1pN>mRjCB6YyFv&F;%=5KE19OS7t< z+taR@fbQrWMfT6WwdYI=?e=l|JpBf~RV!#KaY9{RxWT1(DAwnX(EDT7Rl62j3i{jO?xoIvKqshu)~3KOy>MpG`F zo=ZgzPQLXFc~@)fGIFT*@j%Qkm|2;+<>!yq`{y`}s=Es``R)EEVbVDBQ%Y~$V05fY z!(5nBkGoA;q`n1|#>IX~cN~;W$#F4C^Hl!{^G%jLAlh!Z=?)MLWWBF z_12dUb~Tq-4ED}?u&npf87q9owq}#r>0aH)%2?KvuZ|8GXSd!@RBl}x?ot_}uV9$y zbnju4(>>lW1h((tt9$Tx7!;QA#fh8*HzF~9FK;3A+Xi7@2tFXkPc9NGXdw6jVRZro zE4KZ*G-eRnDhYk^JyuDIz7@O?=6C=cg2sU~IA3PI0q47nfXUDqw%nU?3*i@dRzsPZX@wkzpe(l4&{`%ejN^FZ)XKXa_rwh7pB60mrYuhIm5?eLcxapc*E~ zUS|tt|KZ3RmU=y`V5-BpR6 zxvI2jVAgZ3Mb@ztwWB59&P<*xFm7&cxwpO8!}?3NLywI^+RV4s%Rx8S)mw<%HW=1h zaVlSsx4-*-=ZHkr4jskQ=PF_gK9B@mmpMHVaQmDdU6z>HI_f`^y(xXQiMoTab!~TR zwAbZ?e>4T3*8gp19jKzBtuE!vY0{&m=%g0<(DqltvkynFRVMm1sZH#wN@||Vj0$|YBu}Typ z`ZDU0ce6l9c9FcS$YiVhsfA+ zm!$6|{>K6zh`gD7t@Ns@E3NsVRvlHMx-e@+(v15`|7tI}sH>*q+A+0#NjIkW4g`69 zIXs?Y`S-d*Pbbrga~*!ZuQC2s-BUBDJbS26{lde_9^Q+E^CT%DBTck`#Px(>nzLT{ zrzfpLJyDyVEAv71Y`9ePw)IYi^RR;`AY|IX8zuMZ{-b&}t$|s!%*OX}hm)tzCx2X- z-2Qjd^)Q=R;~fUaUw=|ANssKZvFU%4?JxEASLpxY>RaHM{=fg{R(&c-MUh(x8o%gnX^d-{HVzu)739uM2= z{eIheRIl?ox952t{Fgr9bJW(IFyfO8^bKUN$%w9#(XHbU2~9D* z?d;aN)&8=rQ^b(dL}yHdwojw?u(d?)j=EcOt<%wF&95Kb-HOXjyCEZlE?C-HZDYsS zXvI-pkl)T{Wz1?d|va#LQ$`%We4bvF)wDh$61&xp<+0BQaJstg& zTqR>wK;Kv5Eo{U$ZA!dk@TwdG+G;|MByNm!v09*7L1T;*X z0KIs`cn9p6C%}_4hoS)c5(PBZ*ByzH2i*l7rUKkze_Q#P{;dx1!T-ke!1C{b#e8S( z9X1`nI4J=+DUmx&BL;+4fI-sXxC7ue&`0VpbmTC%rRq+s2%U3?mhVf({eh(S|Iqg60pwIYXiop(4uTt{gD;kne3q z4%oSW5Ec36je>J0PB9XbI8Gip-{*eTHw8g8O=C)g;&X3k}^&RFF?-=Wj6j*z%Z+^p^ zsrf^imvj+M*UjV{){q|FF&fI~U+HRfmn{!7iNKK}gaQx0aS8bqt1V+xmyE|!fWu@% zF360M%lJSDS_`(DdE4e-OxW?*n4`KYI#Bm(H}%S_C{BrXFA?Kc1QqR6k`Ir4V;;s1axOjAZm%dC2~J+k&i(ZV^QkZK>beuVq5aZY zz)=L?dqC$1pYDRVV}X2t68pUez*+QTtEQUKq4Ir|cLh?iGJSoQxcD*f@!P(QVnT$} zgG`jp6PENd={Ga#q{BM~ORO1osU^pzKCJf6JquuHBn1GlFqz_+i3gY(vJXUbtJr9K zMbS2-GQ)MUuWAFEcG2>SKP^8!uQ#~8I8j}KSWx`4ia$K;({cW_E*8E!1~S_6{Qkx) z342v`UqtP(qzA7e3hec{g)a`uKAk|u27JF6U9}J|Gap-J0@961S+Oj2owHxwp^%+rO)zV!d#F2YgkN{r+{Ad zJ=jtrHKXoGdSP~ozBL21XeRucomS8l4fUz{$sM9R6RF>OoFB6RZMKM0Q{5=Wc>ky} zN=o(lr~={oQRPB>-qQ@p#{9^sw^=oB#`e{XlLZr-*2cX$%Gc08TEABLheq5i=tGj0 zdsDo5*3YyhU(5|iLBh12tGK|NOutf$*$r!>Tbdg?P%;70M(DAkHby=IRR1@;A#mrds{ zq!G9PT&5_dKg6uF*hSnG^PSinOpEA@H@bhzwk8X`aqaWJiuQ2 z1kkhT05_Ps3=|yA%vUmA}5fI6#g*9;g2*^Bl4h?A^w1yV3I#Dga`r0KeiSdN~Ycr}YU$z#DoHHmPo zxFzjw>d^5VUCBs!pDx==3El9C8wy6o8&qAV{=O~>%eMitl)Xk%UScHYqm>M#WXaRc zhct`H2Mv7%FhzuM**a8ivXz?NX0>^&9??c;>sGO!R8WKGE)JUFuIoT@dH3k#D zRV5>(Ey)Yp!};h~i_d+qO1fRO=%P1)R^Ns&mmjD}thy3us;I2);+-+RTHvDy(T7T8 zq3wSc?;TsHslu8J1uy&o)nu-Mm8bBj>nFI%eahbVWWB4hsz?*_DU5Fd{CmBqIDo8; z6?B;eB*M;eitRE0t6{NZfEFS^x9;6y25BG;mT!Oes5PkbWE60Nxg~?6nLG9#uwj|- z30}}I@^_JgM^Oh3-of(k3oEeMna3~lu>6kz07>ABSpg^|P~kZP+++vofX*<}nJgj) zzFHi|Ew-~FI-Kkec+Q>DsgI7m_n`mWh+x=z;g^xWwSFzHLbTp($z=_$kFH+Qp99MHhO_`6_)~tA#E*8KtmbmUA{{ zeWMe}y?Kd6W#Y$h>}%R*)m~hRZ|;OPt2GIVNGRtY06^qT9}#&Kl%M+cUym%J*Vm8M z|1Mo&Q!B5dw2S`uMvAGPGlidgTjAqWVY|>j$DsuUEB(4lXS*d zWJ?hs{PQ+JZ5{AWq54BSZH6T2?YZ6fLKFT*p(!~isT^ma^y>%rCuYXz*`Yg!_!Pz) z&|*YLDqHhR`0%`j(mq-oi{_M&1rA=yj9Sg=Xu8ZZ+i=iQs2?IH6c~XBs65-9soP`g@hAHsA{DCa$RKjr1Dvs+9h?c&k-X-^(kvxzw z1-<$Q^jm1Uh`^Jv|6DjhcW#$f!nIq|YUn$b!Jd$&y`cl#DdgJy8BN#-YKz3!-_`nt z)RgL?M7C5nCjSA6d7?4{OtjBAfNRAe!*VBXt`oXGR-wk^&Xf3n)mLMogH8(ju%pEezG$1E;hOpF)U4sV}LsdV0?_TjC z(zauctit_kIy>J?aG*|BTHiTjAfga=m%}ls&MF*b66O6XC4}L2NwsAFV|;$Al3O+2 zW2nNk^~=68_#!e(I(fKc?5-#JXq))V17tY#?5P;{;*bRNv6XSdJIN@sp2xM8nB8JI z$g7CB(5yL|jW@j%f&Qz%vjpK$CQ49tq?|=uc)Y)$Y7Q7g(fpMkA~$)`r0RyW2>Jm+ z$0r^$!JX)5b3z)sF`4}tyL~#YrN2N0t^n@Fw?&WM=B_v4Uq<8=AcLl}HQ~=~ercvn~U82#Hc}qWyicIBhr%J^rP$ zrRHJ9zojR**7)iGF4k#x1Q_;?yTy39`H zdEvrn_+D+JQDMU9d8>8{*wxEbK4szB#eYDp1G6*}nA*Z#pJ8MN0H+K`P{RxN4e2NB zq(4Z-FCpb3U;c|0)^FH^drnw1JIR_8${cXX`lV?MU?@~@zhguyz!l6&%m4~KBNhy=mhjYVki(@1T= zC{%atWmGy65M*feWD)ICoR(~t`1`zk8}Ve=Q~l1+kfpKdWSLE|6`io2Ax_3e$PFpk zoj@<1d`r6W_WF@pg1<<8x8~8_2c4(**~IQB+@PWlB zcMA#*Y5PsCyz5>RUW5Y4zB6|z)bNZYkN$}dLMgY)@QfrYaB{c9rm*v-WP`h92@%Z5 zCa6f`Aj)dNqwe?H(T`i_!>=S*;!}D_d;sPVe+(e?3SM5VSn;qp4Y;OR zGg7@h0k#_rmtPvxTKbjj2#irb3fY!h^lzzshDPdW@!ne@8 z#K=}c+W*ZKX()1aBMm@1}`doofBN;BrOAp41*b=HZ280M+8q`FM3SaBOO96$_C~E+lx2*3qssCMUg~@m>L+%TE$?(woSO zaR+Fx<)og>R2JvAw8!?rWn05Z-51s$e?_VEm_5}T*+@IGA+=5K(`>2feSX7x2=>S705R- zN9e5$QpD=%ZU26*W15z}Bbdy44^m&SfjeJP>)r5(+4XhSJa?h=C;SwDo@-)qy;3}; zF%&0mx3baXnolUwJ)t1E=8bwaUY}RM;8N1)n-dDi zr(Xd)kE3-1(W>j|eRr#XsH>LGSXJ)x5=I;Aq{J~}=nb|*S<09aN;W0)M6)|QHqG#r zXIx~~jXoWshhJqt4JZj5&YQB<|E-=_GRyrK8~7UR_+^1?BWXQ@MEF~sHh&ToaPNp_ zWXbpLA$$%}G6ipOEnutBTTY=leJQ)m`;Z{k9sPUr{p>kpmuwSiP4sKP!`yU3I!(^X zuxD0v2oWG9$9C+zkP1})j><&C7YS2VsT0oUGJSe(phRUNJk<}yw^N@Wa*LJ6wTV1} z0b9dLl z4Vo!_4v8hHE7G`-_)v(wvhvh}OFfBSk?h`-)va^R#KLuez{n?Lp?ip04X&>z9bE&$K;c{=h@lS;vF2|jYMVzdp zy^Tvjfl7CKtA^OT2C z`EuCC&^&IVWon2ee^7nBv{2-LsOh1o3_>!WRW4`-w^V z$DI_=8hblAsJ_9L=5^Raz`oU2N!nhx~ehKI`z;@~fXeedJD3Ly#jU#voKVE$;^8ogSxXpdu)~qr@ z{;oUWf+zmf8{6$!*0W=5gbO2_SFvG^nMQRBif}7fzJulR%|uOGY|Phw6ZvO% z!EA%{_2m_q$t>aBr4sY)-Qy6C(ZjvOBD%!cJlan3vsK=RDggsY_kHc(wRxUDQ;M1u zh1e%HmX`NAICHRX-EQ=q-o4#lYUSMBepuzl zcUv38jr-a2K@m3h`3JXBj&HcdT~np?erp+mO=noIcizO=4Y}}|x{`9f29J`5;XMyB zp|zvlaz{jZn#M<3tg4?r7f_k7hZ4{^xO|7RF}W35uMfcuW_x0hx+Ya8B(7yNmKO_@ zV2msks>NmP6%n(gaDPAS%|b#5mfS@v&X%tcP+tR6Kn<3d7;`|LL}i zxY?7fuoLMu=};}UCwbalxtmLTWZq|%bV522Szu)!f~JX!VYe&yUApK*k0F4tZPFyv zXOs|T?&9HI`3D3~3R>4h?cd#mozB*>hlO~Kr04H;+{SZsB#-Q9@5an)QOHpEoMVYm z7=BI8rl2~R*G>&H{E|v*e&RB?9StxQ0RuRgAaWKFrkWkT1JrJT>Obgjg! z`+$Cw=;_F5)z7Ii#Ho_jgiqh8MQwy9RDsb9T{CSEws zltS2Roz0^qNMvDW<{Oq8j-9X<`Dyd1yG@w5hP~^Jy8Mrh%eXJnk9H+U&zoH_8lFwP z?-+Q0tkh(Z<|n%wv~%T*Z3LG&va~JO=Lii(sQE# zYIzk`XWhGNH6o&s2?t5uJ~p_qdOb+Jf!1{FD0udSDBeB;_33Or9WU|JoU;&KdU@ zDyhPB(*_nBSZH>fgwfjQX_%h+Dm&|kNphabTbLsa$=K3dyb38R&Z@LNKF#*F;4IRL z0RQ)$;*d#fMMd)ScQn@e&`Mc7EpwBKMTfYS^=l8}!&o6a^E*Xp@L9K)!_k4ZVc>sA zNGVwV?jxmD`74VCb?&@siYth$iqJ}bNr)VMZq%^x1s@qzIBIMy5WHfJG%~&P#BkNm zp=x23WO^j>bN5vTfiPJk+bg7S?NrHI3lqz0G6G^iLN>%8WiB~fwH;irYH0Vt&Btd6 zDiJt(cLQsm5MPcIFsa55>@5wHs-E###PSbopGe8nLRXAVgwM?G{vlnx3E$FfWSiK5sWwQMxtta&Dopcl4Co-160M zLwcEs%Cq(W6@khT70n>x?5^~Ct*lP9|e zH8uX3uO?7^)WV($mJnR@&^ALI>b;|UQ=51{3i)>N-Qte&yCH;2>v5)82)xYd`G68+ z3CY6Tr!in~{->@JL|YMdi)8Lpuz~l_F^(Y1X0Y^_&F#R4h4vQ8r1omWNevnE%`*GC ze(T{RAVP2T_c8UYC7(>APDfsX!k|~7xRJ@Hlq0r89YZsUW5Jt zFgyTeM+Z<&z_mRC0Q-OL&j3)5zk%!j?;ZnM&T@wxVB7u%=rRbv1N>J$>6|=Rx&qB8 zpF~)00_Ok^(9--5&;ZZM0z|ca(YEs?7r{0s@BKjC!cXUnZa|Am@^FhUG$oegepmh*$MXIX_ zL9_WrgL8JLD7pFvK`aqUj$GH%$VY z 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 g^pTF#c^yk?tm#g`iu{OWEAA@>k#c|2XKoF#rGn literal 0 HcmV?d00001 diff --git a/el-admin/src/assets/base.css b/el-admin/src/assets/base.css new file mode 100644 index 0000000..f748cd4 --- /dev/null +++ b/el-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/el-admin/src/assets/loginBackg.png b/el-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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