mirror of
https://github.com/10h30/laravel-file-upload-series.git
synced 2026-06-05 15:08:44 +09:00
Update README.md to include part6
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
APP_NAME=Laravel
|
||||
APP_ENV=local
|
||||
APP_KEY=base64:etkibJ+wHd7RawDj9G36+lhFmZ+Q9DZ9pJrGRkJZnU4=
|
||||
APP_DEBUG=true
|
||||
APP_URL=http://upload.test
|
||||
|
||||
APP_LOCALE=en
|
||||
APP_FALLBACK_LOCALE=en
|
||||
APP_FAKER_LOCALE=en_US
|
||||
|
||||
APP_MAINTENANCE_DRIVER=file
|
||||
# APP_MAINTENANCE_STORE=database
|
||||
|
||||
PHP_CLI_SERVER_WORKERS=4
|
||||
|
||||
BCRYPT_ROUNDS=12
|
||||
|
||||
LOG_CHANNEL=stack
|
||||
LOG_STACK=single
|
||||
LOG_DEPRECATIONS_CHANNEL=null
|
||||
LOG_LEVEL=debug
|
||||
|
||||
DB_CONNECTION=sqlite
|
||||
# DB_HOST=127.0.0.1
|
||||
# DB_PORT=3306
|
||||
# DB_DATABASE=laravel
|
||||
# DB_USERNAME=root
|
||||
# DB_PASSWORD=
|
||||
|
||||
SESSION_DRIVER=database
|
||||
SESSION_LIFETIME=120
|
||||
SESSION_ENCRYPT=false
|
||||
SESSION_PATH=/
|
||||
SESSION_DOMAIN=null
|
||||
|
||||
BROADCAST_CONNECTION=log
|
||||
FILESYSTEM_DISK=local
|
||||
QUEUE_CONNECTION=database
|
||||
|
||||
CACHE_STORE=database
|
||||
# CACHE_PREFIX=
|
||||
|
||||
MEMCACHED_HOST=127.0.0.1
|
||||
|
||||
REDIS_CLIENT=phpredis
|
||||
REDIS_HOST=127.0.0.1
|
||||
REDIS_PASSWORD=null
|
||||
REDIS_PORT=6379
|
||||
|
||||
MAIL_MAILER=log
|
||||
MAIL_SCHEME=null
|
||||
MAIL_HOST=127.0.0.1
|
||||
MAIL_PORT=2525
|
||||
MAIL_USERNAME=null
|
||||
MAIL_PASSWORD=null
|
||||
MAIL_FROM_ADDRESS="hello@example.com"
|
||||
MAIL_FROM_NAME="${APP_NAME}"
|
||||
|
||||
AWS_ACCESS_KEY_ID=AKIA2LIPZ55FX65JVYU4
|
||||
AWS_SECRET_ACCESS_KEY=Xdm36834c/dJE/sEEuojix1KLbe0MVi2o2R7rGOr
|
||||
AWS_DEFAULT_REGION=ap-southeast-1
|
||||
AWS_BUCKET=laravel-file-upload-series
|
||||
AWS_USE_PATH_STYLE_ENDPOINT=false
|
||||
|
||||
VITE_APP_NAME="${APP_NAME}"
|
||||
|
||||
MINIO_KEY=VFfJlHiuSv9Sr9Am
|
||||
MINIO_SECRET=EEHetgd5QxMV5d1XFCTkJUm7yeBTrWMr
|
||||
MINIO_BUCKET=laravel-file-upload
|
||||
MINIO_ENDPOINT=https://minio.thuanbui.me
|
||||
MINIO_USE_SSL=true
|
||||
@@ -0,0 +1 @@
|
||||
node_modules
|
||||
@@ -4,12 +4,14 @@
|
||||
|
||||
👉 Code cho từng phần nằm ở **các branch riêng**:
|
||||
|
||||
| Phần | Tiêu đề | Branch |
|
||||
| ---- | ---------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
|
||||
| 1 | File Upload cơ bản trong Laravel | [`part-1-basic-upload`](https://github.com/10h30/laravel-file-upload-series/tree/part-1-basic-upload) |
|
||||
| 2 | Validation & Bảo mật khi upload | [`part-2-validation-security`](https://github.com/10h30/laravel-file-upload-series/tree/part-2-validation-security) |
|
||||
| 3 | Upload cùng lúc nhiều file | [`part-3-multiple-file-upload`](https://github.com/10h30/laravel-file-upload-series/tree/part-3-multiple-file-upload) |
|
||||
| 4 | Hiển thị và xoá các file đã upload | [`part-4-manage-uploads`](https://github.com/10h30/laravel-file-upload-series/tree/part-4-manage-uploads) |
|
||||
| Phần | Tiêu đề | Branch |
|
||||
| ---- | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
|
||||
| 1 | File Upload cơ bản trong Laravel | [`part-1-basic-upload`](https://github.com/10h30/laravel-file-upload-series/tree/part-1-basic-upload) |
|
||||
| 2 | Validation & Bảo mật khi upload | [`part-2-validation-security`](https://github.com/10h30/laravel-file-upload-series/tree/part-2-validation-security) |
|
||||
| 3 | Upload cùng lúc nhiều file | [`part-3-multiple-file-upload`](https://github.com/10h30/laravel-file-upload-series/tree/part-3-multiple-file-upload) |
|
||||
| 4 | Hiển thị và xoá các file đã upload | [`part-4-manage-uploads`](https://github.com/10h30/laravel-file-upload-series/tree/part-4-manage-uploads) |
|
||||
| 5 | Upload file lên Amazon S3 | [`part-5-upload-to-s3`](https://github.com/10h30/laravel-file-upload-series/tree/part-5-upload-to-s3) |
|
||||
| 6 | Temporary URL & Upload lên MinIO | [`part-6-s3-temporary-url-minio`](https://github.com/10h30/laravel-file-upload-series/tree/part-6-s3-temporary-url-minio) |
|
||||
| |
|
||||
|
||||
> 📖 Mỗi branch tương ứng với một phần trong series blog. Bạn có thể clone và chạy từng phần riêng biệt để dễ theo dõi.
|
||||
@@ -23,4 +25,4 @@
|
||||
|
||||
## 🪪 Giấy phép
|
||||
|
||||
Mã nguồn được chia sẻ với giấy phép **MIT License** – bạn có thể sử dụng trong mục đích học tập hoặc cá nhân.
|
||||
Mã nguồn được chia sẻ với giấy phép **MIT License** – bạn có thể sử dụng trong mục đích học tập hoặc cá nhân.
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
<?php return array (
|
||||
'laravel/pail' =>
|
||||
array (
|
||||
'providers' =>
|
||||
array (
|
||||
0 => 'Laravel\\Pail\\PailServiceProvider',
|
||||
),
|
||||
),
|
||||
'laravel/sail' =>
|
||||
array (
|
||||
'providers' =>
|
||||
array (
|
||||
0 => 'Laravel\\Sail\\SailServiceProvider',
|
||||
),
|
||||
),
|
||||
'laravel/tinker' =>
|
||||
array (
|
||||
'providers' =>
|
||||
array (
|
||||
0 => 'Laravel\\Tinker\\TinkerServiceProvider',
|
||||
),
|
||||
),
|
||||
'nesbot/carbon' =>
|
||||
array (
|
||||
'providers' =>
|
||||
array (
|
||||
0 => 'Carbon\\Laravel\\ServiceProvider',
|
||||
),
|
||||
),
|
||||
'nunomaduro/collision' =>
|
||||
array (
|
||||
'providers' =>
|
||||
array (
|
||||
0 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
|
||||
),
|
||||
),
|
||||
'nunomaduro/termwind' =>
|
||||
array (
|
||||
'providers' =>
|
||||
array (
|
||||
0 => 'Termwind\\Laravel\\TermwindServiceProvider',
|
||||
),
|
||||
),
|
||||
'pestphp/pest-plugin-laravel' =>
|
||||
array (
|
||||
'providers' =>
|
||||
array (
|
||||
0 => 'Pest\\Laravel\\PestServiceProvider',
|
||||
),
|
||||
),
|
||||
);
|
||||
+259
@@ -0,0 +1,259 @@
|
||||
<?php return array (
|
||||
'providers' =>
|
||||
array (
|
||||
0 => 'Illuminate\\Auth\\AuthServiceProvider',
|
||||
1 => 'Illuminate\\Broadcasting\\BroadcastServiceProvider',
|
||||
2 => 'Illuminate\\Bus\\BusServiceProvider',
|
||||
3 => 'Illuminate\\Cache\\CacheServiceProvider',
|
||||
4 => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
5 => 'Illuminate\\Concurrency\\ConcurrencyServiceProvider',
|
||||
6 => 'Illuminate\\Cookie\\CookieServiceProvider',
|
||||
7 => 'Illuminate\\Database\\DatabaseServiceProvider',
|
||||
8 => 'Illuminate\\Encryption\\EncryptionServiceProvider',
|
||||
9 => 'Illuminate\\Filesystem\\FilesystemServiceProvider',
|
||||
10 => 'Illuminate\\Foundation\\Providers\\FoundationServiceProvider',
|
||||
11 => 'Illuminate\\Hashing\\HashServiceProvider',
|
||||
12 => 'Illuminate\\Mail\\MailServiceProvider',
|
||||
13 => 'Illuminate\\Notifications\\NotificationServiceProvider',
|
||||
14 => 'Illuminate\\Pagination\\PaginationServiceProvider',
|
||||
15 => 'Illuminate\\Auth\\Passwords\\PasswordResetServiceProvider',
|
||||
16 => 'Illuminate\\Pipeline\\PipelineServiceProvider',
|
||||
17 => 'Illuminate\\Queue\\QueueServiceProvider',
|
||||
18 => 'Illuminate\\Redis\\RedisServiceProvider',
|
||||
19 => 'Illuminate\\Session\\SessionServiceProvider',
|
||||
20 => 'Illuminate\\Translation\\TranslationServiceProvider',
|
||||
21 => 'Illuminate\\Validation\\ValidationServiceProvider',
|
||||
22 => 'Illuminate\\View\\ViewServiceProvider',
|
||||
23 => 'Laravel\\Pail\\PailServiceProvider',
|
||||
24 => 'Laravel\\Sail\\SailServiceProvider',
|
||||
25 => 'Laravel\\Tinker\\TinkerServiceProvider',
|
||||
26 => 'Carbon\\Laravel\\ServiceProvider',
|
||||
27 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
|
||||
28 => 'Termwind\\Laravel\\TermwindServiceProvider',
|
||||
29 => 'Pest\\Laravel\\PestServiceProvider',
|
||||
30 => 'App\\Providers\\AppServiceProvider',
|
||||
),
|
||||
'eager' =>
|
||||
array (
|
||||
0 => 'Illuminate\\Auth\\AuthServiceProvider',
|
||||
1 => 'Illuminate\\Cookie\\CookieServiceProvider',
|
||||
2 => 'Illuminate\\Database\\DatabaseServiceProvider',
|
||||
3 => 'Illuminate\\Encryption\\EncryptionServiceProvider',
|
||||
4 => 'Illuminate\\Filesystem\\FilesystemServiceProvider',
|
||||
5 => 'Illuminate\\Foundation\\Providers\\FoundationServiceProvider',
|
||||
6 => 'Illuminate\\Notifications\\NotificationServiceProvider',
|
||||
7 => 'Illuminate\\Pagination\\PaginationServiceProvider',
|
||||
8 => 'Illuminate\\Session\\SessionServiceProvider',
|
||||
9 => 'Illuminate\\View\\ViewServiceProvider',
|
||||
10 => 'Laravel\\Pail\\PailServiceProvider',
|
||||
11 => 'Carbon\\Laravel\\ServiceProvider',
|
||||
12 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
|
||||
13 => 'Termwind\\Laravel\\TermwindServiceProvider',
|
||||
14 => 'Pest\\Laravel\\PestServiceProvider',
|
||||
15 => 'App\\Providers\\AppServiceProvider',
|
||||
),
|
||||
'deferred' =>
|
||||
array (
|
||||
'Illuminate\\Broadcasting\\BroadcastManager' => 'Illuminate\\Broadcasting\\BroadcastServiceProvider',
|
||||
'Illuminate\\Contracts\\Broadcasting\\Factory' => 'Illuminate\\Broadcasting\\BroadcastServiceProvider',
|
||||
'Illuminate\\Contracts\\Broadcasting\\Broadcaster' => 'Illuminate\\Broadcasting\\BroadcastServiceProvider',
|
||||
'Illuminate\\Bus\\Dispatcher' => 'Illuminate\\Bus\\BusServiceProvider',
|
||||
'Illuminate\\Contracts\\Bus\\Dispatcher' => 'Illuminate\\Bus\\BusServiceProvider',
|
||||
'Illuminate\\Contracts\\Bus\\QueueingDispatcher' => 'Illuminate\\Bus\\BusServiceProvider',
|
||||
'Illuminate\\Bus\\BatchRepository' => 'Illuminate\\Bus\\BusServiceProvider',
|
||||
'Illuminate\\Bus\\DatabaseBatchRepository' => 'Illuminate\\Bus\\BusServiceProvider',
|
||||
'cache' => 'Illuminate\\Cache\\CacheServiceProvider',
|
||||
'cache.store' => 'Illuminate\\Cache\\CacheServiceProvider',
|
||||
'cache.psr6' => 'Illuminate\\Cache\\CacheServiceProvider',
|
||||
'memcached.connector' => 'Illuminate\\Cache\\CacheServiceProvider',
|
||||
'Illuminate\\Cache\\RateLimiter' => 'Illuminate\\Cache\\CacheServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\AboutCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Cache\\Console\\ClearCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Cache\\Console\\ForgetCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\ClearCompiledCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Auth\\Console\\ClearResetsCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\ConfigCacheCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\ConfigClearCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\ConfigShowCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Database\\Console\\DbCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Database\\Console\\MonitorCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Database\\Console\\PruneCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Database\\Console\\ShowCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Database\\Console\\TableCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Database\\Console\\WipeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\DownCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\EnvironmentCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\EnvironmentDecryptCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\EnvironmentEncryptCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\EventCacheCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\EventClearCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\EventListCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Concurrency\\Console\\InvokeSerializedClosureCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\KeyGenerateCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\OptimizeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\OptimizeClearCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\PackageDiscoverCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Cache\\Console\\PruneStaleTagsCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Queue\\Console\\ClearCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Queue\\Console\\ListFailedCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Queue\\Console\\FlushFailedCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Queue\\Console\\ForgetFailedCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Queue\\Console\\ListenCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Queue\\Console\\MonitorCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Queue\\Console\\PruneBatchesCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Queue\\Console\\PruneFailedJobsCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Queue\\Console\\RestartCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Queue\\Console\\RetryCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Queue\\Console\\RetryBatchCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Queue\\Console\\WorkCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\RouteCacheCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\RouteClearCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\RouteListCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Database\\Console\\DumpCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Database\\Console\\Seeds\\SeedCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Console\\Scheduling\\ScheduleFinishCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Console\\Scheduling\\ScheduleListCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Console\\Scheduling\\ScheduleRunCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Console\\Scheduling\\ScheduleClearCacheCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Console\\Scheduling\\ScheduleTestCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Console\\Scheduling\\ScheduleWorkCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Console\\Scheduling\\ScheduleInterruptCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Database\\Console\\ShowModelCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\StorageLinkCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\StorageUnlinkCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\UpCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\ViewCacheCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\ViewClearCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\ApiInstallCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\BroadcastingInstallCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Cache\\Console\\CacheTableCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\CastMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\ChannelListCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\ChannelMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\ClassMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\ComponentMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\ConfigPublishCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\ConsoleMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Routing\\Console\\ControllerMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\DocsCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\EnumMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\EventGenerateCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\EventMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\ExceptionMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Database\\Console\\Factories\\FactoryMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\InterfaceMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\JobMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\JobMiddlewareMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\LangPublishCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\ListenerMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\MailMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Routing\\Console\\MiddlewareMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\ModelMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\NotificationMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Notifications\\Console\\NotificationTableCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\ObserverMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\PolicyMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\ProviderMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Queue\\Console\\FailedTableCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Queue\\Console\\TableCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Queue\\Console\\BatchesTableCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\RequestMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\ResourceMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\RuleMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\ScopeMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Database\\Console\\Seeds\\SeederMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Session\\Console\\SessionTableCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\ServeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\StubPublishCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\TestMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\TraitMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\VendorPublishCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Foundation\\Console\\ViewMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'migrator' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'migration.repository' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'migration.creator' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Database\\Migrations\\Migrator' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Database\\Console\\Migrations\\MigrateCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Database\\Console\\Migrations\\FreshCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Database\\Console\\Migrations\\InstallCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Database\\Console\\Migrations\\RefreshCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Database\\Console\\Migrations\\ResetCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Database\\Console\\Migrations\\RollbackCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Database\\Console\\Migrations\\StatusCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Database\\Console\\Migrations\\MigrateMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'composer' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||
'Illuminate\\Concurrency\\ConcurrencyManager' => 'Illuminate\\Concurrency\\ConcurrencyServiceProvider',
|
||||
'hash' => 'Illuminate\\Hashing\\HashServiceProvider',
|
||||
'hash.driver' => 'Illuminate\\Hashing\\HashServiceProvider',
|
||||
'mail.manager' => 'Illuminate\\Mail\\MailServiceProvider',
|
||||
'mailer' => 'Illuminate\\Mail\\MailServiceProvider',
|
||||
'Illuminate\\Mail\\Markdown' => 'Illuminate\\Mail\\MailServiceProvider',
|
||||
'auth.password' => 'Illuminate\\Auth\\Passwords\\PasswordResetServiceProvider',
|
||||
'auth.password.broker' => 'Illuminate\\Auth\\Passwords\\PasswordResetServiceProvider',
|
||||
'Illuminate\\Contracts\\Pipeline\\Hub' => 'Illuminate\\Pipeline\\PipelineServiceProvider',
|
||||
'pipeline' => 'Illuminate\\Pipeline\\PipelineServiceProvider',
|
||||
'queue' => 'Illuminate\\Queue\\QueueServiceProvider',
|
||||
'queue.connection' => 'Illuminate\\Queue\\QueueServiceProvider',
|
||||
'queue.failer' => 'Illuminate\\Queue\\QueueServiceProvider',
|
||||
'queue.listener' => 'Illuminate\\Queue\\QueueServiceProvider',
|
||||
'queue.worker' => 'Illuminate\\Queue\\QueueServiceProvider',
|
||||
'redis' => 'Illuminate\\Redis\\RedisServiceProvider',
|
||||
'redis.connection' => 'Illuminate\\Redis\\RedisServiceProvider',
|
||||
'translator' => 'Illuminate\\Translation\\TranslationServiceProvider',
|
||||
'translation.loader' => 'Illuminate\\Translation\\TranslationServiceProvider',
|
||||
'validator' => 'Illuminate\\Validation\\ValidationServiceProvider',
|
||||
'validation.presence' => 'Illuminate\\Validation\\ValidationServiceProvider',
|
||||
'Illuminate\\Contracts\\Validation\\UncompromisedVerifier' => 'Illuminate\\Validation\\ValidationServiceProvider',
|
||||
'Laravel\\Sail\\Console\\InstallCommand' => 'Laravel\\Sail\\SailServiceProvider',
|
||||
'Laravel\\Sail\\Console\\PublishCommand' => 'Laravel\\Sail\\SailServiceProvider',
|
||||
'command.tinker' => 'Laravel\\Tinker\\TinkerServiceProvider',
|
||||
),
|
||||
'when' =>
|
||||
array (
|
||||
'Illuminate\\Broadcasting\\BroadcastServiceProvider' =>
|
||||
array (
|
||||
),
|
||||
'Illuminate\\Bus\\BusServiceProvider' =>
|
||||
array (
|
||||
),
|
||||
'Illuminate\\Cache\\CacheServiceProvider' =>
|
||||
array (
|
||||
),
|
||||
'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider' =>
|
||||
array (
|
||||
),
|
||||
'Illuminate\\Concurrency\\ConcurrencyServiceProvider' =>
|
||||
array (
|
||||
),
|
||||
'Illuminate\\Hashing\\HashServiceProvider' =>
|
||||
array (
|
||||
),
|
||||
'Illuminate\\Mail\\MailServiceProvider' =>
|
||||
array (
|
||||
),
|
||||
'Illuminate\\Auth\\Passwords\\PasswordResetServiceProvider' =>
|
||||
array (
|
||||
),
|
||||
'Illuminate\\Pipeline\\PipelineServiceProvider' =>
|
||||
array (
|
||||
),
|
||||
'Illuminate\\Queue\\QueueServiceProvider' =>
|
||||
array (
|
||||
),
|
||||
'Illuminate\\Redis\\RedisServiceProvider' =>
|
||||
array (
|
||||
),
|
||||
'Illuminate\\Translation\\TranslationServiceProvider' =>
|
||||
array (
|
||||
),
|
||||
'Illuminate\\Validation\\ValidationServiceProvider' =>
|
||||
array (
|
||||
),
|
||||
'Laravel\\Sail\\SailServiceProvider' =>
|
||||
array (
|
||||
),
|
||||
'Laravel\\Tinker\\TinkerServiceProvider' =>
|
||||
array (
|
||||
),
|
||||
),
|
||||
);
|
||||
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"resources/css/app.css": {
|
||||
"file": "assets/app-DCMr3D7q.css",
|
||||
"src": "resources/css/app.css",
|
||||
"isEntry": true
|
||||
},
|
||||
"resources/js/app.js": {
|
||||
"file": "assets/app-T1DpEqax.js",
|
||||
"name": "app",
|
||||
"src": "resources/js/app.js",
|
||||
"isEntry": true
|
||||
}
|
||||
}
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
/Users/thuanbui/Herd/upload/storage/app/public
|
||||
@@ -0,0 +1,51 @@
|
||||
<?php if (isset($component)) { $__componentOriginal74daf2d0a9c625ad90327a6043d15980 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal74daf2d0a9c625ad90327a6043d15980 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.card','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::card'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<div class="md:flex md:items-center md:justify-between md:gap-2">
|
||||
<div class="min-w-0">
|
||||
<div class="inline-block rounded-full bg-red-500/20 px-3 py-2 max-w-full text-sm font-bold leading-5 text-red-500 truncate lg:text-base dark:bg-red-500/20">
|
||||
<span class="hidden md:inline">
|
||||
<?php echo e($exception->class()); ?>
|
||||
|
||||
</span>
|
||||
<span class="md:hidden">
|
||||
<?php echo e(implode(' ', array_slice(explode('\\', $exception->class()), -1))); ?>
|
||||
|
||||
</span>
|
||||
</div>
|
||||
<div class="mt-4 text-lg font-semibold text-gray-900 break-words dark:text-white lg:text-2xl">
|
||||
<?php echo e($exception->message()); ?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="hidden text-right shrink-0 md:block md:min-w-64 md:max-w-80">
|
||||
<div>
|
||||
<span class="inline-block rounded-full bg-gray-200 px-3 py-2 text-sm leading-5 text-gray-900 max-w-full truncate dark:bg-gray-800 dark:text-white">
|
||||
<?php echo e($exception->request()->method()); ?> <?php echo e($exception->request()->httpHost()); ?>
|
||||
|
||||
</span>
|
||||
</div>
|
||||
<div class="px-4">
|
||||
<span class="text-sm text-gray-500 dark:text-gray-400">PHP <?php echo e(PHP_VERSION); ?> — Laravel <?php echo e(app()->version()); ?></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal74daf2d0a9c625ad90327a6043d15980)): ?>
|
||||
<?php $attributes = $__attributesOriginal74daf2d0a9c625ad90327a6043d15980; ?>
|
||||
<?php unset($__attributesOriginal74daf2d0a9c625ad90327a6043d15980); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal74daf2d0a9c625ad90327a6043d15980)): ?>
|
||||
<?php $component = $__componentOriginal74daf2d0a9c625ad90327a6043d15980; ?>
|
||||
<?php unset($__componentOriginal74daf2d0a9c625ad90327a6043d15980); ?>
|
||||
<?php endif; ?>
|
||||
<?php /**PATH /Users/thuanbui/Herd/upload/vendor/laravel/framework/src/Illuminate/Foundation/Providers/../resources/exceptions/renderer/components/header.blade.php ENDPATH**/ ?>
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,5 @@
|
||||
<?php $__env->startSection('title', __('Forbidden')); ?>
|
||||
<?php $__env->startSection('code', '403'); ?>
|
||||
<?php $__env->startSection('message', __($exception->getMessage() ?: 'Forbidden')); ?>
|
||||
|
||||
<?php echo $__env->make('errors::minimal', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?><?php /**PATH /Users/thuanbui/Herd/upload/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/views/403.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,70 @@
|
||||
<?php if (isset($component)) { $__componentOriginal74daf2d0a9c625ad90327a6043d15980 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal74daf2d0a9c625ad90327a6043d15980 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.card','data' => ['class' => 'mt-6 overflow-x-auto']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::card'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['class' => 'mt-6 overflow-x-auto']); ?>
|
||||
<div
|
||||
x-data="{
|
||||
includeVendorFrames: false,
|
||||
index: <?php echo e($exception->defaultFrame()); ?>,
|
||||
}"
|
||||
>
|
||||
<div class="grid grid-cols-1 gap-6 lg:grid-cols-3" x-clock>
|
||||
<?php if (isset($component)) { $__componentOriginal92c1a431b4816bac5d5a20d0fc1238ab = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal92c1a431b4816bac5d5a20d0fc1238ab = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.trace','data' => ['exception' => $exception]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::trace'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['exception' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($exception)]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal92c1a431b4816bac5d5a20d0fc1238ab)): ?>
|
||||
<?php $attributes = $__attributesOriginal92c1a431b4816bac5d5a20d0fc1238ab; ?>
|
||||
<?php unset($__attributesOriginal92c1a431b4816bac5d5a20d0fc1238ab); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal92c1a431b4816bac5d5a20d0fc1238ab)): ?>
|
||||
<?php $component = $__componentOriginal92c1a431b4816bac5d5a20d0fc1238ab; ?>
|
||||
<?php unset($__componentOriginal92c1a431b4816bac5d5a20d0fc1238ab); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($component)) { $__componentOriginala2de13eefed6710e7b4064d57c6d0e47 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginala2de13eefed6710e7b4064d57c6d0e47 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.editor','data' => ['exception' => $exception]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::editor'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['exception' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($exception)]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginala2de13eefed6710e7b4064d57c6d0e47)): ?>
|
||||
<?php $attributes = $__attributesOriginala2de13eefed6710e7b4064d57c6d0e47; ?>
|
||||
<?php unset($__attributesOriginala2de13eefed6710e7b4064d57c6d0e47); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginala2de13eefed6710e7b4064d57c6d0e47)): ?>
|
||||
<?php $component = $__componentOriginala2de13eefed6710e7b4064d57c6d0e47; ?>
|
||||
<?php unset($__componentOriginala2de13eefed6710e7b4064d57c6d0e47); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal74daf2d0a9c625ad90327a6043d15980)): ?>
|
||||
<?php $attributes = $__attributesOriginal74daf2d0a9c625ad90327a6043d15980; ?>
|
||||
<?php unset($__attributesOriginal74daf2d0a9c625ad90327a6043d15980); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal74daf2d0a9c625ad90327a6043d15980)): ?>
|
||||
<?php $component = $__componentOriginal74daf2d0a9c625ad90327a6043d15980; ?>
|
||||
<?php unset($__componentOriginal74daf2d0a9c625ad90327a6043d15980); ?>
|
||||
<?php endif; ?>
|
||||
<?php /**PATH /Users/thuanbui/Herd/upload/vendor/laravel/framework/src/Illuminate/Foundation/Providers/../resources/exceptions/renderer/components/trace-and-editor.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-4 h-4" style="margin-bottom: -8px;">
|
||||
<path fill-rule="evenodd" d="M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd" />
|
||||
</svg>
|
||||
<?php /**PATH /Users/thuanbui/Herd/upload/vendor/laravel/framework/src/Illuminate/Foundation/Providers/../resources/exceptions/renderer/components/icons/chevron-down.blade.php ENDPATH**/ ?>
|
||||
|
After Width: | Height: | Size: 514 B |
@@ -0,0 +1,194 @@
|
||||
<script>
|
||||
|
||||
(function () {
|
||||
const darkStyles = document.querySelector('style[data-theme="dark"]')?.textContent
|
||||
const lightStyles = document.querySelector('style[data-theme="light"]')?.textContent
|
||||
|
||||
const removeStyles = () => {
|
||||
document.querySelector('style[data-theme="dark"]')?.remove()
|
||||
document.querySelector('style[data-theme="light"]')?.remove()
|
||||
}
|
||||
|
||||
removeStyles()
|
||||
|
||||
setDarkClass = () => {
|
||||
removeStyles()
|
||||
|
||||
const isDark = localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)
|
||||
|
||||
isDark ? document.documentElement.classList.add('dark') : document.documentElement.classList.remove('dark')
|
||||
|
||||
if (isDark) {
|
||||
document.head.insertAdjacentHTML('beforeend', `<style data-theme="dark">${darkStyles}</style>`)
|
||||
} else {
|
||||
document.head.insertAdjacentHTML('beforeend', `<style data-theme="light">${lightStyles}</style>`)
|
||||
}
|
||||
}
|
||||
|
||||
setDarkClass()
|
||||
|
||||
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', setDarkClass)
|
||||
})();
|
||||
</script>
|
||||
|
||||
<div
|
||||
class="relative"
|
||||
x-data="{
|
||||
menu: false,
|
||||
theme: localStorage.theme,
|
||||
darkMode() {
|
||||
this.theme = 'dark'
|
||||
localStorage.theme = 'dark'
|
||||
setDarkClass()
|
||||
},
|
||||
lightMode() {
|
||||
this.theme = 'light'
|
||||
localStorage.theme = 'light'
|
||||
setDarkClass()
|
||||
},
|
||||
systemMode() {
|
||||
this.theme = undefined
|
||||
localStorage.removeItem('theme')
|
||||
setDarkClass()
|
||||
},
|
||||
}"
|
||||
@click.outside="menu = false"
|
||||
>
|
||||
<button
|
||||
x-cloak
|
||||
class="block rounded p-1 hover:bg-gray-100 dark:hover:bg-gray-800"
|
||||
:class="theme ? 'text-gray-700 dark:text-gray-300' : 'text-gray-400 dark:text-gray-600 hover:text-gray-500 focus:text-gray-500 dark:hover:text-gray-500 dark:focus:text-gray-500'"
|
||||
@click="menu = ! menu"
|
||||
>
|
||||
<?php if (isset($component)) { $__componentOriginalbfde029a2e31d1ec96b5017ff81a67a7 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalbfde029a2e31d1ec96b5017ff81a67a7 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.icons.sun','data' => ['class' => 'block h-5 w-5 dark:hidden']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::icons.sun'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['class' => 'block h-5 w-5 dark:hidden']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalbfde029a2e31d1ec96b5017ff81a67a7)): ?>
|
||||
<?php $attributes = $__attributesOriginalbfde029a2e31d1ec96b5017ff81a67a7; ?>
|
||||
<?php unset($__attributesOriginalbfde029a2e31d1ec96b5017ff81a67a7); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalbfde029a2e31d1ec96b5017ff81a67a7)): ?>
|
||||
<?php $component = $__componentOriginalbfde029a2e31d1ec96b5017ff81a67a7; ?>
|
||||
<?php unset($__componentOriginalbfde029a2e31d1ec96b5017ff81a67a7); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($component)) { $__componentOriginal6dda8ad3ea7f20f6c0a87e7037386745 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal6dda8ad3ea7f20f6c0a87e7037386745 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.icons.moon','data' => ['class' => 'hidden h-5 w-5 dark:block']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::icons.moon'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['class' => 'hidden h-5 w-5 dark:block']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal6dda8ad3ea7f20f6c0a87e7037386745)): ?>
|
||||
<?php $attributes = $__attributesOriginal6dda8ad3ea7f20f6c0a87e7037386745; ?>
|
||||
<?php unset($__attributesOriginal6dda8ad3ea7f20f6c0a87e7037386745); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal6dda8ad3ea7f20f6c0a87e7037386745)): ?>
|
||||
<?php $component = $__componentOriginal6dda8ad3ea7f20f6c0a87e7037386745; ?>
|
||||
<?php unset($__componentOriginal6dda8ad3ea7f20f6c0a87e7037386745); ?>
|
||||
<?php endif; ?>
|
||||
</button>
|
||||
|
||||
<div
|
||||
x-show="menu"
|
||||
class="absolute right-0 z-10 flex origin-top-right flex-col rounded-md bg-white shadow-xl ring-1 ring-gray-900/5 dark:bg-gray-800"
|
||||
style="display: none"
|
||||
@click="menu = false"
|
||||
>
|
||||
<button
|
||||
class="flex items-center gap-3 px-4 py-2 hover:rounded-t-md hover:bg-gray-100 dark:hover:bg-gray-700"
|
||||
:class="theme === 'light' ? 'text-gray-900 dark:text-gray-100' : 'text-gray-500 dark:text-gray-400'"
|
||||
@click="lightMode()"
|
||||
>
|
||||
<?php if (isset($component)) { $__componentOriginalbfde029a2e31d1ec96b5017ff81a67a7 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalbfde029a2e31d1ec96b5017ff81a67a7 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.icons.sun','data' => ['class' => 'h-5 w-5']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::icons.sun'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['class' => 'h-5 w-5']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalbfde029a2e31d1ec96b5017ff81a67a7)): ?>
|
||||
<?php $attributes = $__attributesOriginalbfde029a2e31d1ec96b5017ff81a67a7; ?>
|
||||
<?php unset($__attributesOriginalbfde029a2e31d1ec96b5017ff81a67a7); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalbfde029a2e31d1ec96b5017ff81a67a7)): ?>
|
||||
<?php $component = $__componentOriginalbfde029a2e31d1ec96b5017ff81a67a7; ?>
|
||||
<?php unset($__componentOriginalbfde029a2e31d1ec96b5017ff81a67a7); ?>
|
||||
<?php endif; ?>
|
||||
Light
|
||||
</button>
|
||||
<button
|
||||
class="flex items-center gap-3 px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-700"
|
||||
:class="theme === 'dark' ? 'text-gray-900 dark:text-gray-100' : 'text-gray-500 dark:text-gray-400'"
|
||||
@click="darkMode()"
|
||||
>
|
||||
<?php if (isset($component)) { $__componentOriginal6dda8ad3ea7f20f6c0a87e7037386745 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal6dda8ad3ea7f20f6c0a87e7037386745 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.icons.moon','data' => ['class' => 'h-5 w-5']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::icons.moon'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['class' => 'h-5 w-5']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal6dda8ad3ea7f20f6c0a87e7037386745)): ?>
|
||||
<?php $attributes = $__attributesOriginal6dda8ad3ea7f20f6c0a87e7037386745; ?>
|
||||
<?php unset($__attributesOriginal6dda8ad3ea7f20f6c0a87e7037386745); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal6dda8ad3ea7f20f6c0a87e7037386745)): ?>
|
||||
<?php $component = $__componentOriginal6dda8ad3ea7f20f6c0a87e7037386745; ?>
|
||||
<?php unset($__componentOriginal6dda8ad3ea7f20f6c0a87e7037386745); ?>
|
||||
<?php endif; ?>
|
||||
Dark
|
||||
</button>
|
||||
<button
|
||||
class="flex items-center gap-3 px-4 py-2 hover:rounded-b-md hover:bg-gray-100 dark:hover:bg-gray-700"
|
||||
:class="theme === undefined ? 'text-gray-900 dark:text-gray-100' : 'text-gray-500 dark:text-gray-400'"
|
||||
@click="systemMode()"
|
||||
>
|
||||
<?php if (isset($component)) { $__componentOriginala52e607cb40b8eec566206ff9f3ca13c = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginala52e607cb40b8eec566206ff9f3ca13c = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.icons.computer-desktop','data' => ['class' => 'h-5 w-5']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::icons.computer-desktop'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['class' => 'h-5 w-5']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginala52e607cb40b8eec566206ff9f3ca13c)): ?>
|
||||
<?php $attributes = $__attributesOriginala52e607cb40b8eec566206ff9f3ca13c; ?>
|
||||
<?php unset($__attributesOriginala52e607cb40b8eec566206ff9f3ca13c); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginala52e607cb40b8eec566206ff9f3ca13c)): ?>
|
||||
<?php $component = $__componentOriginala52e607cb40b8eec566206ff9f3ca13c; ?>
|
||||
<?php unset($__componentOriginala52e607cb40b8eec566206ff9f3ca13c); ?>
|
||||
<?php endif; ?>
|
||||
System
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<?php /**PATH /Users/thuanbui/Herd/upload/vendor/laravel/framework/src/Illuminate/Foundation/Providers/../resources/exceptions/renderer/components/theme-switcher.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,60 @@
|
||||
<?php use \Illuminate\Foundation\Exceptions\Renderer\Renderer; ?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1"
|
||||
/>
|
||||
|
||||
<title><?php echo e(config('app.name', 'Laravel')); ?></title>
|
||||
|
||||
<link rel="icon" type="image/svg+xml"
|
||||
href="data:image/svg+xml,%3Csvg viewBox='0 -.11376601 49.74245785 51.31690859' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='m49.626 11.564a.809.809 0 0 1 .028.209v10.972a.8.8 0 0 1 -.402.694l-9.209 5.302v10.509c0 .286-.152.55-.4.694l-19.223 11.066c-.044.025-.092.041-.14.058-.018.006-.035.017-.054.022a.805.805 0 0 1 -.41 0c-.022-.006-.042-.018-.063-.026-.044-.016-.09-.03-.132-.054l-19.219-11.066a.801.801 0 0 1 -.402-.694v-32.916c0-.072.01-.142.028-.21.006-.023.02-.044.028-.067.015-.042.029-.085.051-.124.015-.026.037-.047.055-.071.023-.032.044-.065.071-.093.023-.023.053-.04.079-.06.029-.024.055-.05.088-.069h.001l9.61-5.533a.802.802 0 0 1 .8 0l9.61 5.533h.002c.032.02.059.045.088.068.026.02.055.038.078.06.028.029.048.062.072.094.017.024.04.045.054.071.023.04.036.082.052.124.008.023.022.044.028.068a.809.809 0 0 1 .028.209v20.559l8.008-4.611v-10.51c0-.07.01-.141.028-.208.007-.024.02-.045.028-.068.016-.042.03-.085.052-.124.015-.026.037-.047.054-.071.024-.032.044-.065.072-.093.023-.023.052-.04.078-.06.03-.024.056-.05.088-.069h.001l9.611-5.533a.801.801 0 0 1 .8 0l9.61 5.533c.034.02.06.045.09.068.025.02.054.038.077.06.028.029.048.062.072.094.018.024.04.045.054.071.023.039.036.082.052.124.009.023.022.044.028.068zm-1.574 10.718v-9.124l-3.363 1.936-4.646 2.675v9.124l8.01-4.611zm-9.61 16.505v-9.13l-4.57 2.61-13.05 7.448v9.216zm-36.84-31.068v31.068l17.618 10.143v-9.214l-9.204-5.209-.003-.002-.004-.002c-.031-.018-.057-.044-.086-.066-.025-.02-.054-.036-.076-.058l-.002-.003c-.026-.025-.044-.056-.066-.084-.02-.027-.044-.05-.06-.078l-.001-.003c-.018-.03-.029-.066-.042-.1-.013-.03-.03-.058-.038-.09v-.001c-.01-.038-.012-.078-.016-.117-.004-.03-.012-.06-.012-.09v-21.483l-4.645-2.676-3.363-1.934zm8.81-5.994-8.007 4.609 8.005 4.609 8.006-4.61-8.006-4.608zm4.164 28.764 4.645-2.674v-20.096l-3.363 1.936-4.646 2.675v20.096zm24.667-23.325-8.006 4.609 8.006 4.609 8.005-4.61zm-.801 10.605-4.646-2.675-3.363-1.936v9.124l4.645 2.674 3.364 1.937zm-18.422 20.561 11.743-6.704 5.87-3.35-8-4.606-9.211 5.303-8.395 4.833z' fill='%23ff2d20'/%3E%3C/svg%3E" />
|
||||
|
||||
<link
|
||||
href="https://fonts.bunny.net/css?family=figtree:300,400,500,600"
|
||||
rel="stylesheet"
|
||||
/>
|
||||
|
||||
<?php echo Renderer::css(); ?>
|
||||
|
||||
|
||||
<style>
|
||||
<?php $__currentLoopData = $exception->frames(); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $frame): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
#frame-<?php echo e($loop->index); ?> .hljs-ln-line[data-line-number='<?php echo e($frame->line()); ?>'] {
|
||||
background-color: rgba(242, 95, 95, 0.4);
|
||||
}
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
|
||||
</style>
|
||||
</head>
|
||||
<body class="bg-gray-200/80 font-sans antialiased dark:bg-gray-950/95">
|
||||
<?php echo e($slot); ?>
|
||||
|
||||
|
||||
<?php echo Renderer::js(); ?>
|
||||
|
||||
|
||||
<script>
|
||||
!function(r,o){"use strict";var e,i="hljs-ln",l="hljs-ln-line",h="hljs-ln-code",s="hljs-ln-numbers",c="hljs-ln-n",m="data-line-number",a=/\r\n|\r|\n/g;function u(e){for(var n=e.toString(),t=e.anchorNode;"TD"!==t.nodeName;)t=t.parentNode;for(var r=e.focusNode;"TD"!==r.nodeName;)r=r.parentNode;var o=parseInt(t.dataset.lineNumber),a=parseInt(r.dataset.lineNumber);if(o==a)return n;var i,l=t.textContent,s=r.textContent;for(a<o&&(i=o,o=a,a=i,i=l,l=s,s=i);0!==n.indexOf(l);)l=l.slice(1);for(;-1===n.lastIndexOf(s);)s=s.slice(0,-1);for(var c=l,u=function(e){for(var n=e;"TABLE"!==n.nodeName;)n=n.parentNode;return n}(t),d=o+1;d<a;++d){var f=p('.{0}[{1}="{2}"]',[h,m,d]);c+="\n"+u.querySelector(f).textContent}return c+="\n"+s}function n(e){try{var n=o.querySelectorAll("code.hljs,code.nohighlight");for(var t in n)n.hasOwnProperty(t)&&(n[t].classList.contains("nohljsln")||d(n[t],e))}catch(e){r.console.error("LineNumbers error: ",e)}}function d(e,n){"object"==typeof e&&r.setTimeout(function(){e.innerHTML=f(e,n)},0)}function f(e,n){var t,r,o=(t=e,{singleLine:function(e){return!!e.singleLine&&e.singleLine}(r=(r=n)||{}),startFrom:function(e,n){var t=1;isFinite(n.startFrom)&&(t=n.startFrom);var r=function(e,n){return e.hasAttribute(n)?e.getAttribute(n):null}(e,"data-ln-start-from");return null!==r&&(t=function(e,n){if(!e)return n;var t=Number(e);return isFinite(t)?t:n}(r,1)),t}(t,r)});return function e(n){var t=n.childNodes;for(var r in t){var o;t.hasOwnProperty(r)&&(o=t[r],0<(o.textContent.trim().match(a)||[]).length&&(0<o.childNodes.length?e(o):v(o.parentNode)))}}(e),function(e,n){var t=g(e);""===t[t.length-1].trim()&&t.pop();if(1<t.length||n.singleLine){for(var r="",o=0,a=t.length;o<a;o++)r+=p('<tr><td class="{0} {1}" {3}="{5}"><div class="{2}" {3}="{5}"></div></td><td class="{0} {4}" {3}="{5}">{6}</td></tr>',[l,s,c,m,h,o+n.startFrom,0<t[o].length?t[o]:" "]);return p('<table class="{0}">{1}</table>',[i,r])}return e}(e.innerHTML,o)}function v(e){var n=e.className;if(/hljs-/.test(n)){for(var t=g(e.innerHTML),r=0,o="";r<t.length;r++){o+=p('<span class="{0}">{1}</span>\n',[n,0<t[r].length?t[r]:" "])}e.innerHTML=o.trim()}}function g(e){return 0===e.length?[]:e.split(a)}function p(e,t){return e.replace(/\{(\d+)\}/g,function(e,n){return void 0!==t[n]?t[n]:e})}r.hljs?(r.hljs.initLineNumbersOnLoad=function(e){"interactive"===o.readyState||"complete"===o.readyState?n(e):r.addEventListener("DOMContentLoaded",function(){n(e)})},r.hljs.lineNumbersBlock=d,r.hljs.lineNumbersValue=function(e,n){if("string"!=typeof e)return;var t=document.createElement("code");return t.innerHTML=e,f(t,n)},(e=o.createElement("style")).type="text/css",e.innerHTML=p(".{0}{border-collapse:collapse}.{0} td{padding:0}.{1}:before{content:attr({2})}",[i,c,m]),o.getElementsByTagName("head")[0].appendChild(e)):r.console.error("highlight.js not detected!"),document.addEventListener("copy",function(e){var n,t=window.getSelection();!function(e){for(var n=e;n;){if(n.className&&-1!==n.className.indexOf("hljs-ln-code"))return 1;n=n.parentNode}}(t.anchorNode)||(n=-1!==window.navigator.userAgent.indexOf("Edge")?u(t):t.toString(),e.clipboardData.setData("text/plain",n),e.preventDefault())})}(window,document);
|
||||
|
||||
hljs.initLineNumbersOnLoad()
|
||||
|
||||
window.addEventListener('load', function() {
|
||||
document.querySelectorAll('.renderer').forEach(function(element, index) {
|
||||
if (index > 0) {
|
||||
element.remove();
|
||||
}
|
||||
});
|
||||
|
||||
document.querySelector('.default-highlightable-code').style.display = 'block';
|
||||
|
||||
document.querySelectorAll('.highlightable-code').forEach(function(element) {
|
||||
element.style.display = 'block';
|
||||
})
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
<?php /**PATH /Users/thuanbui/Herd/upload/vendor/laravel/framework/src/Illuminate/Foundation/Providers/../resources/exceptions/renderer/components/layout.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,164 @@
|
||||
<div class="hidden overflow-x-auto sm:col-span-1 lg:block">
|
||||
<div
|
||||
class="h-[35.5rem] scrollbar-hidden trace text-sm text-gray-400 dark:text-gray-300"
|
||||
>
|
||||
<div class="mb-2 inline-block rounded-full bg-red-500/20 px-3 py-2 dark:bg-red-500/20 sm:col-span-1">
|
||||
<button
|
||||
@click="includeVendorFrames = !includeVendorFrames"
|
||||
class="inline-flex items-center font-bold leading-5 text-red-500"
|
||||
>
|
||||
<span x-show="includeVendorFrames">Collapse</span>
|
||||
<span
|
||||
x-cloak
|
||||
x-show="!includeVendorFrames"
|
||||
>Expand</span
|
||||
>
|
||||
<span class="ml-1">vendor frames</span>
|
||||
|
||||
<div class="flex flex-col ml-1 -mt-2" x-cloak x-show="includeVendorFrames">
|
||||
<?php if (isset($component)) { $__componentOriginal707ceba27255eae48fdb0f3529710ddf = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal707ceba27255eae48fdb0f3529710ddf = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.icons.chevron-down','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::icons.chevron-down'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal707ceba27255eae48fdb0f3529710ddf)): ?>
|
||||
<?php $attributes = $__attributesOriginal707ceba27255eae48fdb0f3529710ddf; ?>
|
||||
<?php unset($__attributesOriginal707ceba27255eae48fdb0f3529710ddf); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal707ceba27255eae48fdb0f3529710ddf)): ?>
|
||||
<?php $component = $__componentOriginal707ceba27255eae48fdb0f3529710ddf; ?>
|
||||
<?php unset($__componentOriginal707ceba27255eae48fdb0f3529710ddf); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($component)) { $__componentOriginal14b1cc5db95fcca4a0f06445821cff39 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal14b1cc5db95fcca4a0f06445821cff39 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.icons.chevron-up','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::icons.chevron-up'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal14b1cc5db95fcca4a0f06445821cff39)): ?>
|
||||
<?php $attributes = $__attributesOriginal14b1cc5db95fcca4a0f06445821cff39; ?>
|
||||
<?php unset($__attributesOriginal14b1cc5db95fcca4a0f06445821cff39); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal14b1cc5db95fcca4a0f06445821cff39)): ?>
|
||||
<?php $component = $__componentOriginal14b1cc5db95fcca4a0f06445821cff39; ?>
|
||||
<?php unset($__componentOriginal14b1cc5db95fcca4a0f06445821cff39); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<div class="flex flex-col ml-1 -mt-2" x-cloak x-show="! includeVendorFrames">
|
||||
<?php if (isset($component)) { $__componentOriginal14b1cc5db95fcca4a0f06445821cff39 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal14b1cc5db95fcca4a0f06445821cff39 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.icons.chevron-up','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::icons.chevron-up'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal14b1cc5db95fcca4a0f06445821cff39)): ?>
|
||||
<?php $attributes = $__attributesOriginal14b1cc5db95fcca4a0f06445821cff39; ?>
|
||||
<?php unset($__attributesOriginal14b1cc5db95fcca4a0f06445821cff39); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal14b1cc5db95fcca4a0f06445821cff39)): ?>
|
||||
<?php $component = $__componentOriginal14b1cc5db95fcca4a0f06445821cff39; ?>
|
||||
<?php unset($__componentOriginal14b1cc5db95fcca4a0f06445821cff39); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($component)) { $__componentOriginal707ceba27255eae48fdb0f3529710ddf = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal707ceba27255eae48fdb0f3529710ddf = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.icons.chevron-down','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::icons.chevron-down'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal707ceba27255eae48fdb0f3529710ddf)): ?>
|
||||
<?php $attributes = $__attributesOriginal707ceba27255eae48fdb0f3529710ddf; ?>
|
||||
<?php unset($__attributesOriginal707ceba27255eae48fdb0f3529710ddf); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal707ceba27255eae48fdb0f3529710ddf)): ?>
|
||||
<?php $component = $__componentOriginal707ceba27255eae48fdb0f3529710ddf; ?>
|
||||
<?php unset($__componentOriginal707ceba27255eae48fdb0f3529710ddf); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="mb-12 space-y-2">
|
||||
<?php $__currentLoopData = $exception->frames(); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $frame): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<?php if(! $frame->isFromVendor()): ?>
|
||||
<?php
|
||||
$vendorFramesCollapsed = $exception->frames()->take($loop->index)->reverse()->takeUntil(fn ($frame) => ! $frame->isFromVendor());
|
||||
?>
|
||||
|
||||
<div x-show="! includeVendorFrames">
|
||||
<?php if($vendorFramesCollapsed->isNotEmpty()): ?>
|
||||
<div class="text-gray-500">
|
||||
<?php echo e($vendorFramesCollapsed->count()); ?> vendor frame<?php echo e($vendorFramesCollapsed->count() > 1 ? 's' : ''); ?> collapsed
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<button
|
||||
class="w-full text-left dark:border-gray-900"
|
||||
x-show="<?php echo e($frame->isFromVendor() ? 'includeVendorFrames' : 'true'); ?>"
|
||||
@click="index = <?php echo e($loop->index); ?>"
|
||||
>
|
||||
<div
|
||||
x-bind:class="
|
||||
index === <?php echo e($loop->index); ?>
|
||||
|
||||
? 'rounded-r-md bg-gray-100 dark:bg-gray-800 border-l dark:border dark:border-gray-700 border-l-red-500 dark:border-l-red-500'
|
||||
: 'hover:bg-gray-100/75 dark:hover:bg-gray-800/75'
|
||||
"
|
||||
>
|
||||
<div class="scrollbar-hidden overflow-x-auto border-l-2 border-transparent p-2">
|
||||
<div class="nowrap text-gray-900 dark:text-gray-300">
|
||||
<span class="inline-flex items-baseline">
|
||||
<span class="text-gray-900 dark:text-gray-300"><?php echo e($frame->source()); ?></span>
|
||||
<span class="font-mono text-xs">:<?php echo e($frame->line()); ?></span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="text-gray-500 dark:text-gray-400">
|
||||
<?php echo e($exception->frames()->get($loop->index + 1)?->callable()); ?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</button>
|
||||
|
||||
<?php if(! $frame->isFromVendor() && $exception->frames()->slice($loop->index + 1)->reject(fn ($frame) => $frame->isFromVendor())->isEmpty()): ?>
|
||||
<?php if($exception->frames()->slice($loop->index + 1)->count()): ?>
|
||||
<div x-show="! includeVendorFrames">
|
||||
<div class="text-gray-500">
|
||||
<?php echo e($exception->frames()->slice($loop->index + 1)->count()); ?> vendor
|
||||
frame<?php echo e($exception->frames()->slice($loop->index + 1)->count() > 1 ? 's' : ''); ?> collapsed
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php /**PATH /Users/thuanbui/Herd/upload/vendor/laravel/framework/src/Illuminate/Foundation/Providers/../resources/exceptions/renderer/components/trace.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,8 @@
|
||||
<section
|
||||
<?php echo e($attributes->merge(['class' => "@container flex flex-col p-6 sm:p-12 bg-white dark:bg-gray-900/80 text-gray-900 dark:text-gray-100 rounded-lg default:col-span-full default:lg:col-span-6 default:row-span-1 dark:ring-1 dark:ring-gray-800 shadow-xl"])); ?>
|
||||
|
||||
>
|
||||
<?php echo e($slot); ?>
|
||||
|
||||
</section>
|
||||
<?php /**PATH /Users/thuanbui/Herd/upload/vendor/laravel/framework/src/Illuminate/Foundation/Providers/../resources/exceptions/renderer/components/card.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,5 @@
|
||||
<?php $__env->startSection('title', __('Not Found')); ?>
|
||||
<?php $__env->startSection('code', '404'); ?>
|
||||
<?php $__env->startSection('message', __('Not Found')); ?>
|
||||
|
||||
<?php echo $__env->make('errors::minimal', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?><?php /**PATH /Users/thuanbui/Herd/upload/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/views/404.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php $__currentLoopData = $exception->frames(); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $frame): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<div
|
||||
class="sm:col-span-2"
|
||||
x-show="index === <?php echo e($loop->index); ?>"
|
||||
>
|
||||
<div class="mb-3">
|
||||
<div class="text-md text-gray-500 dark:text-gray-400">
|
||||
<div class="mb-2">
|
||||
|
||||
<?php if(config('app.editor')): ?>
|
||||
<a href="<?php echo e($frame->editorHref()); ?>" class="text-blue-500 hover:underline">
|
||||
<span class="wrap text-gray-900 dark:text-gray-300"><?php echo e($frame->file()); ?></span>
|
||||
</a>
|
||||
<?php else: ?>
|
||||
<span class="wrap text-gray-900 dark:text-gray-300"><?php echo e($frame->file()); ?></span>
|
||||
<?php endif; ?>
|
||||
|
||||
<span class="font-mono text-xs">:<?php echo e($frame->line()); ?></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pt-4 text-sm text-gray-500 dark:text-gray-400">
|
||||
<pre class="h-[32.5rem] rounded-md dark:bg-gray-800 border dark:border-gray-700"><template x-if="true"><code
|
||||
style="display: none;"
|
||||
id="frame-<?php echo e($loop->index); ?>"
|
||||
class="language-php highlightable-code <?php if($loop->index === $exception->defaultFrame()): ?> default-highlightable-code <?php endif; ?> scrollbar-hidden overflow-y-hidden"
|
||||
data-line-number="<?php echo e($frame->line()); ?>"
|
||||
data-ln-start-from="<?php echo e(max($frame->line() - 5, 1)); ?>"
|
||||
><?php echo e($frame->snippet()); ?></code></template></pre>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
|
||||
<?php /**PATH /Users/thuanbui/Herd/upload/vendor/laravel/framework/src/Illuminate/Foundation/Providers/../resources/exceptions/renderer/components/editor.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,49 @@
|
||||
<header class="mt-3 px-5 sm:mt-10">
|
||||
<div class="py-3 dark:border-gray-900 sm:py-5">
|
||||
<div class="flex items-center justify-between">
|
||||
<div class="flex items-center">
|
||||
<div class="rounded-full bg-red-500/20 p-4 dark:bg-red-500/20">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
class="h-6 w-6 fill-red-500 text-gray-50 dark:text-gray-950"
|
||||
>
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="M12 9v3.75m9-.75a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9 3.75h.008v.008H12v-.008Z" />
|
||||
</svg>
|
||||
</div>
|
||||
|
||||
<span class="text-dark ml-3 text-2xl font-bold dark:text-white sm:text-3xl">
|
||||
<?php echo e($exception->title()); ?>
|
||||
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center gap-3 sm:gap-6">
|
||||
<?php if (isset($component)) { $__componentOriginal9b6ddd2809dd60ece07dfaf1f3ef876f = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal9b6ddd2809dd60ece07dfaf1f3ef876f = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.theme-switcher','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::theme-switcher'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal9b6ddd2809dd60ece07dfaf1f3ef876f)): ?>
|
||||
<?php $attributes = $__attributesOriginal9b6ddd2809dd60ece07dfaf1f3ef876f; ?>
|
||||
<?php unset($__attributesOriginal9b6ddd2809dd60ece07dfaf1f3ef876f); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal9b6ddd2809dd60ece07dfaf1f3ef876f)): ?>
|
||||
<?php $component = $__componentOriginal9b6ddd2809dd60ece07dfaf1f3ef876f; ?>
|
||||
<?php unset($__componentOriginal9b6ddd2809dd60ece07dfaf1f3ef876f); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<?php /**PATH /Users/thuanbui/Herd/upload/vendor/laravel/framework/src/Illuminate/Foundation/Providers/../resources/exceptions/renderer/components/navigation.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,12 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
<?php echo e($attributes); ?>
|
||||
|
||||
>
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="M9 17.25v1.007a3 3 0 01-.879 2.122L7.5 21h9l-.621-.621A3 3 0 0115 18.257V17.25m6-12V15a2.25 2.25 0 01-2.25 2.25H5.25A2.25 2.25 0 013 15V5.25m18 0A2.25 2.25 0 0018.75 3H5.25A2.25 2.25 0 003 5.25m18 0V12a2.25 2.25 0 01-2.25 2.25H5.25A2.25 2.25 0 013 12V5.25" />
|
||||
</svg>
|
||||
<?php /**PATH /Users/thuanbui/Herd/upload/vendor/laravel/framework/src/Illuminate/Foundation/Providers/../resources/exceptions/renderer/components/icons/computer-desktop.blade.php ENDPATH**/ ?>
|
||||
|
After Width: | Height: | Size: 690 B |
@@ -0,0 +1,12 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
<?php echo e($attributes); ?>
|
||||
|
||||
>
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="M21.752 15.002A9.718 9.718 0 0118 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 003 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 009.002-5.998z" />
|
||||
</svg>
|
||||
<?php /**PATH /Users/thuanbui/Herd/upload/vendor/laravel/framework/src/Illuminate/Foundation/Providers/../resources/exceptions/renderer/components/icons/moon.blade.php ENDPATH**/ ?>
|
||||
|
After Width: | Height: | Size: 599 B |
@@ -0,0 +1,186 @@
|
||||
<?php use \Illuminate\Support\Str; ?>
|
||||
<?php if (isset($component)) { $__componentOriginal74daf2d0a9c625ad90327a6043d15980 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal74daf2d0a9c625ad90327a6043d15980 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.card','data' => ['class' => 'mt-6 overflow-x-auto']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::card'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['class' => 'mt-6 overflow-x-auto']); ?>
|
||||
<div>
|
||||
<span class="text-xl font-bold lg:text-2xl">Request</span>
|
||||
</div>
|
||||
|
||||
<div class="mt-2">
|
||||
<span><?php echo e($exception->request()->method()); ?></span>
|
||||
<span class="text-gray-500"><?php echo e(Str::start($exception->request()->path(), '/')); ?></span>
|
||||
</div>
|
||||
|
||||
<div class="mt-4">
|
||||
<span class="font-semibold text-gray-900 dark:text-white">Headers</span>
|
||||
</div>
|
||||
|
||||
<dl class="mt-1 grid grid-cols-1 rounded border dark:border-gray-800">
|
||||
<?php $__empty_1 = true; $__currentLoopData = $exception->requestHeaders(); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $key => $value): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); $__empty_1 = false; ?>
|
||||
<div class="flex items-center gap-2 <?php echo e($loop->first ? '' : 'border-t'); ?> dark:border-gray-800">
|
||||
<span
|
||||
data-tippy-content="<?php echo e($key); ?>"
|
||||
class="lg:text-md w-[8rem] flex-none cursor-pointer truncate border-r px-5 py-3 text-sm dark:border-gray-800 lg:w-[12rem]"
|
||||
>
|
||||
<?php echo e($key); ?>
|
||||
|
||||
</span>
|
||||
<span
|
||||
class="min-w-0 flex-grow"
|
||||
style="
|
||||
-webkit-mask-image: linear-gradient(90deg, transparent 0, #000 1rem, #000 calc(100% - 3rem), transparent calc(100% - 1rem));
|
||||
"
|
||||
>
|
||||
<pre class="scrollbar-hidden overflow-y-hidden text-xs lg:text-sm"><code class="px-5 py-3 overflow-y-hidden scrollbar-hidden max-h-32 overflow-x-scroll scrollbar-hidden-x"><?php echo e($value); ?></code></pre>
|
||||
</span>
|
||||
</div>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); if ($__empty_1): ?>
|
||||
<span
|
||||
class="min-w-0 flex-grow"
|
||||
style="-webkit-mask-image: linear-gradient(90deg, transparent 0, #000 1rem, #000 calc(100% - 3rem), transparent calc(100% - 1rem))"
|
||||
>
|
||||
<pre class="scrollbar-hidden mx-5 my-3 overflow-y-hidden text-xs lg:text-sm"><code class="overflow-y-hidden scrollbar-hidden overflow-x-scroll scrollbar-hidden-x">No headers data</code></pre>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
</dl>
|
||||
|
||||
<div class="mt-4">
|
||||
<span class="font-semibold text-gray-900 dark:text-white">Body</span>
|
||||
</div>
|
||||
|
||||
<div class="mt-1 rounded border dark:border-gray-800">
|
||||
<div class="flex items-center">
|
||||
<span
|
||||
class="min-w-0 flex-grow"
|
||||
style="-webkit-mask-image: linear-gradient(90deg, transparent 0, #000 1rem, #000 calc(100% - 3rem), transparent calc(100% - 1rem))"
|
||||
>
|
||||
<pre class="scrollbar-hidden mx-5 my-3 overflow-y-hidden text-xs lg:text-sm"><code class="overflow-y-hidden scrollbar-hidden overflow-x-scroll scrollbar-hidden-x"><?php echo e($exception->requestBody() ?: 'No body data'); ?></code></pre>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal74daf2d0a9c625ad90327a6043d15980)): ?>
|
||||
<?php $attributes = $__attributesOriginal74daf2d0a9c625ad90327a6043d15980; ?>
|
||||
<?php unset($__attributesOriginal74daf2d0a9c625ad90327a6043d15980); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal74daf2d0a9c625ad90327a6043d15980)): ?>
|
||||
<?php $component = $__componentOriginal74daf2d0a9c625ad90327a6043d15980; ?>
|
||||
<?php unset($__componentOriginal74daf2d0a9c625ad90327a6043d15980); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal74daf2d0a9c625ad90327a6043d15980 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal74daf2d0a9c625ad90327a6043d15980 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.card','data' => ['class' => 'mt-6 overflow-x-auto']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::card'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['class' => 'mt-6 overflow-x-auto']); ?>
|
||||
<div>
|
||||
<span class="text-xl font-bold lg:text-2xl">Application</span>
|
||||
</div>
|
||||
|
||||
<div class="mt-4">
|
||||
<span class="font-semibold text-gray-900 dark:text-white"> Routing </span>
|
||||
</div>
|
||||
|
||||
<dl class="mt-1 grid grid-cols-1 rounded border dark:border-gray-800">
|
||||
<?php $__empty_1 = true; $__currentLoopData = $exception->applicationRouteContext(); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $name => $value): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); $__empty_1 = false; ?>
|
||||
<div class="flex items-center gap-2 <?php echo e($loop->first ? '' : 'border-t'); ?> dark:border-gray-800">
|
||||
<span
|
||||
data-tippy-content="<?php echo e($name); ?>"
|
||||
class="lg:text-md w-[8rem] flex-none cursor-pointer truncate border-r px-5 py-3 text-sm dark:border-gray-800 lg:w-[12rem]"
|
||||
><?php echo e($name); ?></span
|
||||
>
|
||||
<span
|
||||
class="min-w-0 flex-grow"
|
||||
style="
|
||||
-webkit-mask-image: linear-gradient(90deg, transparent 0, #000 1rem, #000 calc(100% - 3rem), transparent calc(100% - 1rem));
|
||||
"
|
||||
>
|
||||
<pre class="scrollbar-hidden overflow-y-hidden text-xs lg:text-sm"><code class="px-5 py-3 overflow-y-hidden scrollbar-hidden max-h-32 overflow-x-scroll scrollbar-hidden-x"><?php echo e($value); ?></code></pre>
|
||||
</span>
|
||||
</div>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); if ($__empty_1): ?>
|
||||
<span
|
||||
class="min-w-0 flex-grow"
|
||||
style="-webkit-mask-image: linear-gradient(90deg, transparent 0, #000 1rem, #000 calc(100% - 3rem), transparent calc(100% - 1rem))"
|
||||
>
|
||||
<pre class="scrollbar-hidden mx-5 my-3 overflow-y-hidden text-xs lg:text-sm"><code class="overflow-y-hidden scrollbar-hidden overflow-x-scroll scrollbar-hidden-x">No routing data</code></pre>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
</dl>
|
||||
|
||||
<?php if($routeParametersContext = $exception->applicationRouteParametersContext()): ?>
|
||||
<div class="mt-4">
|
||||
<span class="text-gray-900 dark:text-white text-sm"> Routing Parameters </span>
|
||||
</div>
|
||||
|
||||
<div class="mt-1 rounded border dark:border-gray-800">
|
||||
<div class="flex items-center">
|
||||
<span
|
||||
class="min-w-0 flex-grow"
|
||||
style="-webkit-mask-image: linear-gradient(90deg, transparent 0, #000 1rem, #000 calc(100% - 3rem), transparent calc(100% - 1rem))"
|
||||
>
|
||||
<pre class="scrollbar-hidden mx-5 my-3 overflow-y-hidden text-xs lg:text-sm"><code class="overflow-y-hidden scrollbar-hidden overflow-x-scroll scrollbar-hidden-x"><?php echo e($routeParametersContext); ?></code></pre>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="mt-4">
|
||||
<span class="font-semibold text-gray-900 dark:text-white"> Database Queries </span>
|
||||
<span class="text-xs text-gray-500 dark:text-gray-400">
|
||||
<?php if(count($exception->applicationQueries()) === 100): ?>
|
||||
only the first 100 queries are displayed
|
||||
<?php endif; ?>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<dl class="mt-1 grid grid-cols-1 rounded border dark:border-gray-800">
|
||||
<?php $__empty_1 = true; $__currentLoopData = $exception->applicationQueries(); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as ['connectionName' => $connectionName, 'sql' => $sql, 'time' => $time]): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); $__empty_1 = false; ?>
|
||||
<div class="flex items-center gap-2 <?php echo e($loop->first ? '' : 'border-t'); ?> dark:border-gray-800">
|
||||
<div class="lg:text-md w-[8rem] flex-none truncate border-r px-5 py-3 text-sm dark:border-gray-800 lg:w-[12rem]">
|
||||
<span><?php echo e($connectionName); ?></span>
|
||||
<span class="hidden text-xs text-gray-500 lg:inline-block">(<?php echo e($time); ?> ms)</span>
|
||||
</div>
|
||||
<span
|
||||
class="min-w-0 flex-grow"
|
||||
style="
|
||||
-webkit-mask-image: linear-gradient(90deg, transparent 0, #000 1rem, #000 calc(100% - 3rem), transparent calc(100% - 1rem));
|
||||
"
|
||||
>
|
||||
<pre class="scrollbar-hidden overflow-y-hidden text-xs lg:text-sm"><code class="px-5 py-3 overflow-y-hidden scrollbar-hidden max-h-32 overflow-x-scroll scrollbar-hidden-x"><?php echo e($sql); ?></code></pre>
|
||||
</span>
|
||||
</div>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); if ($__empty_1): ?>
|
||||
<span
|
||||
class="min-w-0 flex-grow"
|
||||
style="-webkit-mask-image: linear-gradient(90deg, transparent 0, #000 1rem, #000 calc(100% - 3rem), transparent calc(100% - 1rem))"
|
||||
>
|
||||
<pre class="scrollbar-hidden mx-5 my-3 overflow-y-hidden text-xs lg:text-sm"><code class="overflow-y-hidden scrollbar-hidden overflow-x-scroll scrollbar-hidden-x">No query data</code></pre>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
</dl>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal74daf2d0a9c625ad90327a6043d15980)): ?>
|
||||
<?php $attributes = $__attributesOriginal74daf2d0a9c625ad90327a6043d15980; ?>
|
||||
<?php unset($__attributesOriginal74daf2d0a9c625ad90327a6043d15980); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal74daf2d0a9c625ad90327a6043d15980)): ?>
|
||||
<?php $component = $__componentOriginal74daf2d0a9c625ad90327a6043d15980; ?>
|
||||
<?php unset($__componentOriginal74daf2d0a9c625ad90327a6043d15980); ?>
|
||||
<?php endif; ?>
|
||||
<?php /**PATH /Users/thuanbui/Herd/upload/vendor/laravel/framework/src/Illuminate/Foundation/Providers/../resources/exceptions/renderer/components/context.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,93 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Upload File</title>
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
</head>
|
||||
|
||||
<body class="bg-gray-100 font-sans antialiased">
|
||||
<?php if($errors->has("file")): ?>
|
||||
<div
|
||||
class="container mx-auto mt-10 p-6 bg-red-100 border border-red-400 text-red-700 rounded-lg shadow-md max-w-md">
|
||||
<?php echo e($errors->first("file")); ?></div>
|
||||
<?php endif; ?>
|
||||
<div class="container mx-auto mt-10 p-6 bg-white rounded-lg shadow-md max-w-md">
|
||||
<h1 class="text-2xl font-bold mb-6 text-center text-gray-700">Upload File</h1>
|
||||
<form action="<?php echo e(route("upload.store")); ?>" method="POST" enctype="multipart/form-data" class="space-y-4">
|
||||
<?php echo csrf_field(); ?>
|
||||
<div>
|
||||
<label for="files" class="block text-sm font-medium text-gray-700 mb-1">Choose files</label>
|
||||
<input type="file" name="files[]" id="files" multiple
|
||||
class="block w-full text-sm text-gray-500
|
||||
file:mr-4 file:py-2 file:px-4
|
||||
file:rounded-full file:border-0
|
||||
file:text-sm file:font-semibold
|
||||
file:bg-blue-50 file:text-blue-700
|
||||
hover:file:bg-blue-100" />
|
||||
</div>
|
||||
<button type="submit"
|
||||
class="w-full bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded focus:outline-none focus:shadow-outline">
|
||||
Upload
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
||||
<?php if(session("success")): ?>
|
||||
<div
|
||||
class="container mx-auto mt-6 p-4 bg-green-100 border border-green-400 text-green-700 rounded-lg shadow-md max-w-md">
|
||||
<p class="font-bold">Success!</p>
|
||||
<p><?php echo e(session("success")); ?></p>
|
||||
|
||||
|
||||
<?php if(session("stored_paths") && is_array(session("stored_paths"))): ?>
|
||||
<div class="mt-4">
|
||||
<p>Uploaded Files:</p>
|
||||
|
||||
<?php $__currentLoopData = session("stored_paths"); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $index => $path): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<div class="border p-4 mt-2">
|
||||
<p class="text-sm text-gray-600">Original Filename:
|
||||
<?php echo e(session("original_filenames")[$index]); ?>
|
||||
|
||||
</p>
|
||||
<p class="text-sm text-gray-600">Stored Path: <?php echo e($path); ?></p>
|
||||
<img src="<?php echo e($path); ?>" alt="Uploaded Image <?php echo e($index + 1); ?>"
|
||||
class="mt-2 rounded max-w-full h-auto border">
|
||||
</div>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if(count($uploads) > 0): ?>
|
||||
<div class="container mx-auto mt-10 p-10 bg-white rounded-lg shadow-md max-w-md">
|
||||
<h2 class="text-xl font-semibold mb-4 text-gray-700">Previously Uploaded Files:</h2>
|
||||
<?php $__currentLoopData = $uploads; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $upload): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<ul>
|
||||
<li class="flex items-center justify-between mb-4">
|
||||
<a class="flex items-center gap-4 py-2" href="<?php echo e($upload->url); ?>" target="_blank">
|
||||
<img src="<?php echo e($upload->url); ?>" alt="<?php echo e($upload->original_filename); ?>" width="50" height="50">
|
||||
<span class="text-sm text-gray-700 hover:text-blue-600"><?php echo e($upload->original_filename); ?></span>
|
||||
</a>
|
||||
<form action="<?php echo e(route("upload.destroy", $upload->id)); ?>" method="POST"
|
||||
style="display:inline;"
|
||||
onsubmit="return confirm('Are you sure you want to delete this file?');">
|
||||
<?php echo csrf_field(); ?>
|
||||
<?php echo method_field("DELETE"); ?>
|
||||
<button type="submit"
|
||||
class="bg-red-500 hover:bg-red-700 text-white font-bold py-2 px-4 rounded">Delete</button>
|
||||
</form>
|
||||
</li>
|
||||
</ul>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
<?php /**PATH /Users/thuanbui/Herd/upload/resources/views/upload.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-4 h-4" style="margin-bottom: -8px;">
|
||||
<path fill-rule="evenodd" d="M9.47 6.47a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 1 1-1.06 1.06L10 8.06l-3.72 3.72a.75.75 0 0 1-1.06-1.06l4.25-4.25Z" clip-rule="evenodd" />
|
||||
</svg>
|
||||
<?php /**PATH /Users/thuanbui/Herd/upload/vendor/laravel/framework/src/Illuminate/Foundation/Providers/../resources/exceptions/renderer/components/icons/chevron-up.blade.php ENDPATH**/ ?>
|
||||
|
After Width: | Height: | Size: 492 B |
@@ -0,0 +1,12 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
<?php echo e($attributes); ?>
|
||||
|
||||
>
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="M12 3v2.25m6.364.386l-1.591 1.591M21 12h-2.25m-.386 6.364l-1.591-1.591M12 18.75V21m-4.773-4.227l-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0z" />
|
||||
</svg>
|
||||
<?php /**PATH /Users/thuanbui/Herd/upload/vendor/laravel/framework/src/Illuminate/Foundation/Providers/../resources/exceptions/renderer/components/icons/sun.blade.php ENDPATH**/ ?>
|
||||
|
After Width: | Height: | Size: 615 B |
@@ -0,0 +1,110 @@
|
||||
<?php if (isset($component)) { $__componentOriginalbbd4eeea836234825f7514ed20d2d52d = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalbbd4eeea836234825f7514ed20d2d52d = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.layout','data' => ['exception' => $exception]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::layout'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['exception' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($exception)]); ?>
|
||||
<div class="renderer container mx-auto lg:px-8">
|
||||
<?php if (isset($component)) { $__componentOriginal10cd8b81fdad4ce00a06c99f27003014 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal10cd8b81fdad4ce00a06c99f27003014 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.navigation','data' => ['exception' => $exception]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::navigation'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['exception' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($exception)]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal10cd8b81fdad4ce00a06c99f27003014)): ?>
|
||||
<?php $attributes = $__attributesOriginal10cd8b81fdad4ce00a06c99f27003014; ?>
|
||||
<?php unset($__attributesOriginal10cd8b81fdad4ce00a06c99f27003014); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal10cd8b81fdad4ce00a06c99f27003014)): ?>
|
||||
<?php $component = $__componentOriginal10cd8b81fdad4ce00a06c99f27003014; ?>
|
||||
<?php unset($__componentOriginal10cd8b81fdad4ce00a06c99f27003014); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<main class="px-6 pb-12 pt-6">
|
||||
<div class="container mx-auto">
|
||||
<?php if (isset($component)) { $__componentOriginal1e817eb3c41fe3ea9eb0c15213c4b557 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal1e817eb3c41fe3ea9eb0c15213c4b557 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.header','data' => ['exception' => $exception]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::header'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['exception' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($exception)]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal1e817eb3c41fe3ea9eb0c15213c4b557)): ?>
|
||||
<?php $attributes = $__attributesOriginal1e817eb3c41fe3ea9eb0c15213c4b557; ?>
|
||||
<?php unset($__attributesOriginal1e817eb3c41fe3ea9eb0c15213c4b557); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal1e817eb3c41fe3ea9eb0c15213c4b557)): ?>
|
||||
<?php $component = $__componentOriginal1e817eb3c41fe3ea9eb0c15213c4b557; ?>
|
||||
<?php unset($__componentOriginal1e817eb3c41fe3ea9eb0c15213c4b557); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal1dc7d865c9b6045c4d68faf8bde572ed = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal1dc7d865c9b6045c4d68faf8bde572ed = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.trace-and-editor','data' => ['exception' => $exception]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::trace-and-editor'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['exception' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($exception)]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal1dc7d865c9b6045c4d68faf8bde572ed)): ?>
|
||||
<?php $attributes = $__attributesOriginal1dc7d865c9b6045c4d68faf8bde572ed; ?>
|
||||
<?php unset($__attributesOriginal1dc7d865c9b6045c4d68faf8bde572ed); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal1dc7d865c9b6045c4d68faf8bde572ed)): ?>
|
||||
<?php $component = $__componentOriginal1dc7d865c9b6045c4d68faf8bde572ed; ?>
|
||||
<?php unset($__componentOriginal1dc7d865c9b6045c4d68faf8bde572ed); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal523928ff754f95aea6faf87444393a04 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal523928ff754f95aea6faf87444393a04 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.context','data' => ['exception' => $exception]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::context'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['exception' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($exception)]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal523928ff754f95aea6faf87444393a04)): ?>
|
||||
<?php $attributes = $__attributesOriginal523928ff754f95aea6faf87444393a04; ?>
|
||||
<?php unset($__attributesOriginal523928ff754f95aea6faf87444393a04); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal523928ff754f95aea6faf87444393a04)): ?>
|
||||
<?php $component = $__componentOriginal523928ff754f95aea6faf87444393a04; ?>
|
||||
<?php unset($__componentOriginal523928ff754f95aea6faf87444393a04); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalbbd4eeea836234825f7514ed20d2d52d)): ?>
|
||||
<?php $attributes = $__attributesOriginalbbd4eeea836234825f7514ed20d2d52d; ?>
|
||||
<?php unset($__attributesOriginalbbd4eeea836234825f7514ed20d2d52d); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalbbd4eeea836234825f7514ed20d2d52d)): ?>
|
||||
<?php $component = $__componentOriginalbbd4eeea836234825f7514ed20d2d52d; ?>
|
||||
<?php unset($__componentOriginalbbd4eeea836234825f7514ed20d2d52d); ?>
|
||||
<?php endif; ?>
|
||||
<?php /**PATH /Users/thuanbui/Herd/upload/vendor/laravel/framework/src/Illuminate/Foundation/Providers/../resources/exceptions/renderer/show.blade.php ENDPATH**/ ?>
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
Vendored
+11
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace Illuminate\Contracts\Auth;
|
||||
|
||||
interface Guard
|
||||
{
|
||||
/**
|
||||
* @return \App\Models\User|null
|
||||
*/
|
||||
public function user();
|
||||
}
|
||||
Vendored
+41
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace Illuminate\Support\Facades;
|
||||
|
||||
interface Auth
|
||||
{
|
||||
/**
|
||||
* @return \App\Models\User|false
|
||||
*/
|
||||
public static function loginUsingId(mixed $id, bool $remember = false);
|
||||
|
||||
/**
|
||||
* @return \App\Models\User|false
|
||||
*/
|
||||
public static function onceUsingId(mixed $id);
|
||||
|
||||
/**
|
||||
* @return \App\Models\User|null
|
||||
*/
|
||||
public static function getUser();
|
||||
|
||||
/**
|
||||
* @return \App\Models\User
|
||||
*/
|
||||
public static function authenticate();
|
||||
|
||||
/**
|
||||
* @return \App\Models\User|null
|
||||
*/
|
||||
public static function user();
|
||||
|
||||
/**
|
||||
* @return \App\Models\User|null
|
||||
*/
|
||||
public static function logoutOtherDevices(string $password);
|
||||
|
||||
/**
|
||||
* @return \App\Models\User
|
||||
*/
|
||||
public static function getLastAttempted();
|
||||
}
|
||||
+630
@@ -0,0 +1,630 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models {
|
||||
|
||||
/**
|
||||
* App\Models\Upload
|
||||
*
|
||||
* @property \Illuminate\Support\Carbon|null $updated_at
|
||||
* @property \Illuminate\Support\Carbon|null $created_at
|
||||
* @property string $original_filename
|
||||
* @property string $filename
|
||||
* @property int $id
|
||||
* @property-read mixed $url
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereFilename($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereOriginalFilename($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereCreatedAt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereUpdatedAt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload newModelQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload newQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload query()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload select(array|mixed $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload selectSub(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed>|string $query, string $as)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload selectRaw(string $expression)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload fromSub(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed>|string $query, string $as)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload fromRaw(string $expression, mixed $bindings)
|
||||
* @method static array createSub(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed>|string $query)
|
||||
* @method static array parseSub(mixed $query)
|
||||
* @method static mixed prependDatabaseNameIfCrossDatabaseQuery(mixed $query)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload addSelect(array|mixed $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload distinct()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload from(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed>|\Illuminate\Contracts\Database\Query\Expression|string $table, string|null $as)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload useIndex(string $index)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload forceIndex(string $index)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload ignoreIndex(string $index)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload join(\Illuminate\Contracts\Database\Query\Expression|string $table, \Closure|\Illuminate\Contracts\Database\Query\Expression|string $first, string|null $operator, \Illuminate\Contracts\Database\Query\Expression|string|null $second, string $type, bool $where)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload joinWhere(\Illuminate\Contracts\Database\Query\Expression|string $table, \Closure|\Illuminate\Contracts\Database\Query\Expression|string $first, string $operator, \Illuminate\Contracts\Database\Query\Expression|string $second, string $type)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload joinSub(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed>|string $query, string $as, \Closure|\Illuminate\Contracts\Database\Query\Expression|string $first, string|null $operator, \Illuminate\Contracts\Database\Query\Expression|string|null $second, string $type, bool $where)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload joinLateral(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed>|string $query)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload leftJoinLateral(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed>|string $query)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload leftJoin(\Illuminate\Contracts\Database\Query\Expression|string $table, \Closure|\Illuminate\Contracts\Database\Query\Expression|string $first, string|null $operator, \Illuminate\Contracts\Database\Query\Expression|string|null $second)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload leftJoinWhere(\Illuminate\Contracts\Database\Query\Expression|string $table, \Closure|\Illuminate\Contracts\Database\Query\Expression|string $first, string $operator, \Illuminate\Contracts\Database\Query\Expression|string|null $second)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload leftJoinSub(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed>|string $query, string $as, \Closure|\Illuminate\Contracts\Database\Query\Expression|string $first, string|null $operator, \Illuminate\Contracts\Database\Query\Expression|string|null $second)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload rightJoin(\Illuminate\Contracts\Database\Query\Expression|string $table, \Closure|string $first, string|null $operator, \Illuminate\Contracts\Database\Query\Expression|string|null $second)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload rightJoinWhere(\Illuminate\Contracts\Database\Query\Expression|string $table, \Closure|\Illuminate\Contracts\Database\Query\Expression|string $first, string $operator, \Illuminate\Contracts\Database\Query\Expression|string $second)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload rightJoinSub(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed>|string $query, string $as, \Closure|\Illuminate\Contracts\Database\Query\Expression|string $first, string|null $operator, \Illuminate\Contracts\Database\Query\Expression|string|null $second)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload crossJoin(\Illuminate\Contracts\Database\Query\Expression|string $table, \Closure|\Illuminate\Contracts\Database\Query\Expression|string|null $first, string|null $operator, \Illuminate\Contracts\Database\Query\Expression|string|null $second)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload crossJoinSub(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed>|string $query, string $as)
|
||||
* @method static \Illuminate\Database\Query\JoinClause newJoinClause(string $type, \Illuminate\Contracts\Database\Query\Expression|string $table)
|
||||
* @method static \Illuminate\Database\Query\JoinLateralClause newJoinLateralClause(string $type, \Illuminate\Contracts\Database\Query\Expression|string $table)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload mergeWheres(array $wheres, array $bindings)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload where(\Closure|string|array|\Illuminate\Contracts\Database\Query\Expression $column, mixed $operator, mixed $value, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload addArrayOfWheres(array $column, string $boolean, string $method)
|
||||
* @method static array prepareValueAndOperator(string $value, string $operator, bool $useDefault)
|
||||
* @method static bool invalidOperatorAndValue(string $operator, mixed $value)
|
||||
* @method static bool invalidOperator(string $operator)
|
||||
* @method static bool isBitwiseOperator(string $operator)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhere(\Closure|string|array|\Illuminate\Contracts\Database\Query\Expression $column, mixed $operator, mixed $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereNot(\Closure|string|array|\Illuminate\Contracts\Database\Query\Expression $column, mixed $operator, mixed $value, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereNot(\Closure|string|array|\Illuminate\Contracts\Database\Query\Expression $column, mixed $operator, mixed $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereColumn(\Illuminate\Contracts\Database\Query\Expression|string|array $first, string|null $operator, string|null $second, string|null $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereColumn(\Illuminate\Contracts\Database\Query\Expression|string|array $first, string|null $operator, string|null $second)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereRaw(string $sql, mixed $bindings, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereRaw(string $sql, mixed $bindings)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereLike(\Illuminate\Contracts\Database\Query\Expression|string $column, string $value, bool $caseSensitive, string $boolean, bool $not)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereLike(\Illuminate\Contracts\Database\Query\Expression|string $column, string $value, bool $caseSensitive)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereNotLike(\Illuminate\Contracts\Database\Query\Expression|string $column, string $value, bool $caseSensitive, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereNotLike(\Illuminate\Contracts\Database\Query\Expression|string $column, string $value, bool $caseSensitive)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereIn(\Illuminate\Contracts\Database\Query\Expression|string $column, mixed $values, string $boolean, bool $not)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereIn(\Illuminate\Contracts\Database\Query\Expression|string $column, mixed $values)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereNotIn(\Illuminate\Contracts\Database\Query\Expression|string $column, mixed $values, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereNotIn(\Illuminate\Contracts\Database\Query\Expression|string $column, mixed $values)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereIntegerInRaw(string $column, \Illuminate\Contracts\Support\Arrayable|array $values, string $boolean, bool $not)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereIntegerInRaw(string $column, \Illuminate\Contracts\Support\Arrayable|array $values)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereIntegerNotInRaw(string $column, \Illuminate\Contracts\Support\Arrayable|array $values, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereIntegerNotInRaw(string $column, \Illuminate\Contracts\Support\Arrayable|array $values)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereNull(string|array|\Illuminate\Contracts\Database\Query\Expression $columns, string $boolean, bool $not)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereNull(string|array|\Illuminate\Contracts\Database\Query\Expression $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereNotNull(string|array|\Illuminate\Contracts\Database\Query\Expression $columns, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereBetween(\Illuminate\Contracts\Database\Query\Expression|string $column, string $boolean, bool $not)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereBetweenColumns(\Illuminate\Contracts\Database\Query\Expression|string $column, string $boolean, bool $not)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereBetween(\Illuminate\Contracts\Database\Query\Expression|string $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereBetweenColumns(\Illuminate\Contracts\Database\Query\Expression|string $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereNotBetween(\Illuminate\Contracts\Database\Query\Expression|string $column, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereNotBetweenColumns(\Illuminate\Contracts\Database\Query\Expression|string $column, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereNotBetween(\Illuminate\Contracts\Database\Query\Expression|string $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereNotBetweenColumns(\Illuminate\Contracts\Database\Query\Expression|string $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereNotNull(\Illuminate\Contracts\Database\Query\Expression|string $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereDate(\Illuminate\Contracts\Database\Query\Expression|string $column, \DateTimeInterface|string|null $operator, \DateTimeInterface|string|null $value, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereDate(\Illuminate\Contracts\Database\Query\Expression|string $column, \DateTimeInterface|string|null $operator, \DateTimeInterface|string|null $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereTime(\Illuminate\Contracts\Database\Query\Expression|string $column, \DateTimeInterface|string|null $operator, \DateTimeInterface|string|null $value, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereTime(\Illuminate\Contracts\Database\Query\Expression|string $column, \DateTimeInterface|string|null $operator, \DateTimeInterface|string|null $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereDay(\Illuminate\Contracts\Database\Query\Expression|string $column, \DateTimeInterface|string|int|null $operator, \DateTimeInterface|string|int|null $value, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereDay(\Illuminate\Contracts\Database\Query\Expression|string $column, \DateTimeInterface|string|int|null $operator, \DateTimeInterface|string|int|null $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereMonth(\Illuminate\Contracts\Database\Query\Expression|string $column, \DateTimeInterface|string|int|null $operator, \DateTimeInterface|string|int|null $value, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereMonth(\Illuminate\Contracts\Database\Query\Expression|string $column, \DateTimeInterface|string|int|null $operator, \DateTimeInterface|string|int|null $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereYear(\Illuminate\Contracts\Database\Query\Expression|string $column, \DateTimeInterface|string|int|null $operator, \DateTimeInterface|string|int|null $value, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereYear(\Illuminate\Contracts\Database\Query\Expression|string $column, \DateTimeInterface|string|int|null $operator, \DateTimeInterface|string|int|null $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload addDateBasedWhere(string $type, \Illuminate\Contracts\Database\Query\Expression|string $column, string $operator, mixed $value, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereNested(string $boolean)
|
||||
* @method static \Illuminate\Database\Query\Builder forNestedWhere()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload addNestedWhereQuery(\Illuminate\Database\Query\Builder $query, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereSub(\Illuminate\Contracts\Database\Query\Expression|string $column, string $operator, \Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed> $callback, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereExists(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed> $callback, string $boolean, bool $not)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereExists(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed> $callback, bool $not)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereNotExists(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed> $callback, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereNotExists(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed> $callback)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload addWhereExistsQuery(string $boolean, bool $not)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereRowValues(array $columns, string $operator, array $values, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereRowValues(array $columns, string $operator, array $values)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereJsonContains(string $column, mixed $value, string $boolean, bool $not)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereJsonContains(string $column, mixed $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereJsonDoesntContain(string $column, mixed $value, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereJsonDoesntContain(string $column, mixed $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereJsonOverlaps(string $column, mixed $value, string $boolean, bool $not)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereJsonOverlaps(string $column, mixed $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereJsonDoesntOverlap(string $column, mixed $value, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereJsonDoesntOverlap(string $column, mixed $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereJsonContainsKey(string $column, string $boolean, bool $not)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereJsonContainsKey(string $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereJsonDoesntContainKey(string $column, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereJsonDoesntContainKey(string $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereJsonLength(string $column, mixed $operator, mixed $value, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereJsonLength(string $column, mixed $operator, mixed $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload dynamicWhere(string $method, array $parameters)
|
||||
* @method static void addDynamic(string $segment, string $connector, array $parameters, int $index)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereFullText(string|string[] $columns, string $value, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereFullText(string|string[] $columns, string $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereAll(\Illuminate\Contracts\Database\Query\Expression[]|\Closure[]|string[] $columns, mixed $operator, mixed $value, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereAll(\Illuminate\Contracts\Database\Query\Expression[]|\Closure[]|string[] $columns, mixed $operator, mixed $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereAny(\Illuminate\Contracts\Database\Query\Expression[]|\Closure[]|string[] $columns, mixed $operator, mixed $value, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereAny(\Illuminate\Contracts\Database\Query\Expression[]|\Closure[]|string[] $columns, mixed $operator, mixed $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereNone(\Illuminate\Contracts\Database\Query\Expression[]|\Closure[]|string[] $columns, mixed $operator, mixed $value, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereNone(\Illuminate\Contracts\Database\Query\Expression[]|\Closure[]|string[] $columns, mixed $operator, mixed $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload groupBy(array|\Illuminate\Contracts\Database\Query\Expression|string ...$groups)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload groupByRaw(string $sql)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload having(\Illuminate\Contracts\Database\Query\Expression|\Closure|string $column, \DateTimeInterface|string|int|float|null $operator, \Illuminate\Contracts\Database\Query\Expression|\DateTimeInterface|string|int|float|null $value, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orHaving(\Illuminate\Contracts\Database\Query\Expression|\Closure|string $column, \DateTimeInterface|string|int|float|null $operator, \Illuminate\Contracts\Database\Query\Expression|\DateTimeInterface|string|int|float|null $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload havingNested(string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload addNestedHavingQuery(\Illuminate\Database\Query\Builder $query, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload havingNull(array|string $columns, string $boolean, bool $not)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orHavingNull(string $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload havingNotNull(array|string $columns, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orHavingNotNull(string $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload havingBetween(string $column, string $boolean, bool $not)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload havingRaw(string $sql, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orHavingRaw(string $sql)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orderBy(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed>|\Illuminate\Contracts\Database\Query\Expression|string $column, string $direction)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orderByDesc(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed>|\Illuminate\Contracts\Database\Query\Expression|string $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload latest(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Contracts\Database\Query\Expression|string $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload oldest(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Contracts\Database\Query\Expression|string $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload inRandomOrder(string|int $seed)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orderByRaw(string $sql, array $bindings)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload skip(int $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload offset(int $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload take(int $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload limit(int $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload groupLimit(int $value, string $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload forPage(int $page, int $perPage)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload forPageBeforeId(int $perPage, int|null $lastId, string $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload forPageAfterId(int $perPage, int|null $lastId, string $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload reorder(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Contracts\Database\Query\Expression|string|null $column, string $direction)
|
||||
* @method static array removeExistingOrdersFor(string $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload union(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed> $query, bool $all)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload unionAll(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed> $query)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload lock(string|bool $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload lockForUpdate()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload sharedLock()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload beforeQuery()
|
||||
* @method static void applyBeforeQueryCallbacks()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload afterQuery()
|
||||
* @method static mixed applyAfterQueryCallbacks(mixed $result)
|
||||
* @method static string toSql()
|
||||
* @method static string toRawSql()
|
||||
* @method static Upload|null find(int|string $id, array|string $columns)
|
||||
* @method static mixed findOr(mixed $id, callable|list<string>|string $columns, callable|null $callback)
|
||||
* @method static mixed value(string $column)
|
||||
* @method static mixed rawValue()
|
||||
* @method static mixed soleValue(string $column)
|
||||
* @method static \Illuminate\Support\Collection<int,\stdClass> get(array|string $columns)
|
||||
* @method static array runSelect()
|
||||
* @method static \Illuminate\Support\Collection withoutGroupLimitKeys(\Illuminate\Support\Collection $items)
|
||||
* @method static \Illuminate\Pagination\LengthAwarePaginator paginate(int|\Closure $perPage, array|string $columns, string $pageName, int|null $page, \Closure|int|null $total)
|
||||
* @method static \Illuminate\Contracts\Pagination\Paginator simplePaginate(int $perPage, array|string $columns, string $pageName, int|null $page)
|
||||
* @method static \Illuminate\Contracts\Pagination\CursorPaginator cursorPaginate(int|null $perPage, array|string $columns, string $cursorName, \Illuminate\Pagination\Cursor|string|null $cursor)
|
||||
* @method static \Illuminate\Support\Collection ensureOrderForCursorPagination(bool $shouldReverse)
|
||||
* @method static int getCountForPagination(array $columns)
|
||||
* @method static array runPaginationCountQuery(array $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload cloneForPaginationCount()
|
||||
* @method static array withoutSelectAliases()
|
||||
* @method static \Illuminate\Support\LazyCollection<int,\stdClass> cursor()
|
||||
* @method static void enforceOrderBy()
|
||||
* @method static mixed pluck(\Illuminate\Contracts\Database\Query\Expression|string $column, string|null $key)
|
||||
* @method static string|null stripTableForPluck(string $column)
|
||||
* @method static \Illuminate\Support\Collection pluckFromObjectColumn(array $queryResult, string $column, string $key)
|
||||
* @method static \Illuminate\Support\Collection pluckFromArrayColumn(array $queryResult, string $column, string $key)
|
||||
* @method static string implode(string $column, string $glue)
|
||||
* @method static bool exists()
|
||||
* @method static bool doesntExist()
|
||||
* @method static mixed existsOr()
|
||||
* @method static mixed doesntExistOr()
|
||||
* @method static int count(\Illuminate\Contracts\Database\Query\Expression|string $columns)
|
||||
* @method static mixed min(\Illuminate\Contracts\Database\Query\Expression|string $column)
|
||||
* @method static mixed max(\Illuminate\Contracts\Database\Query\Expression|string $column)
|
||||
* @method static mixed sum(\Illuminate\Contracts\Database\Query\Expression|string $column)
|
||||
* @method static mixed avg(\Illuminate\Contracts\Database\Query\Expression|string $column)
|
||||
* @method static mixed average(\Illuminate\Contracts\Database\Query\Expression|string $column)
|
||||
* @method static mixed aggregate(string $function, array $columns)
|
||||
* @method static float|int numericAggregate(string $function, array $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload setAggregate(string $function, array $columns)
|
||||
* @method static mixed onceWithColumns(array $columns, callable $callback)
|
||||
* @method static bool insert()
|
||||
* @method static int insertOrIgnore()
|
||||
* @method static int insertGetId(string|null $sequence)
|
||||
* @method static int insertUsing(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed>|string $query)
|
||||
* @method static int insertOrIgnoreUsing(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed>|string $query)
|
||||
* @method static int update()
|
||||
* @method static int updateFrom()
|
||||
* @method static bool updateOrInsert()
|
||||
* @method static int upsert(array|string $uniqueBy, array|null $update)
|
||||
* @method static int increment(string $column, float|int $amount)
|
||||
* @method static int incrementEach(array<string,float|int|numeric-string> $columns, array<string,mixed> $extra)
|
||||
* @method static int decrement(string $column, float|int $amount)
|
||||
* @method static int decrementEach(array<string,float|int|numeric-string> $columns, array<string,mixed> $extra)
|
||||
* @method static int delete(mixed $id)
|
||||
* @method static void truncate()
|
||||
* @method static \Illuminate\Database\Query\Builder newQuery()
|
||||
* @method static \Illuminate\Database\Query\Builder forSubQuery()
|
||||
* @method static array getColumns()
|
||||
* @method static \Illuminate\Contracts\Database\Query\Expression raw(mixed $value)
|
||||
* @method static \Illuminate\Support\Collection getUnionBuilders()
|
||||
* @method static mixed getLimit()
|
||||
* @method static mixed getOffset()
|
||||
* @method static list getBindings()
|
||||
* @method static array{select: list, from: list, join: list, where: list, groupBy: list, having: list, order: list, union: list, unionOrder: list} getRawBindings()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload setBindings(list $bindings, string $type)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload addBinding(mixed $value, string $type)
|
||||
* @method static mixed castBinding(mixed $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload mergeBindings(self $query)
|
||||
* @method static list cleanBindings(array $bindings)
|
||||
* @method static mixed flattenValue(mixed $value)
|
||||
* @method static string defaultKeyName()
|
||||
* @method static \Illuminate\Database\ConnectionInterface getConnection()
|
||||
* @method static \Illuminate\Database\Query\Processors\Processor getProcessor()
|
||||
* @method static \Illuminate\Database\Query\Grammars\Grammar getGrammar()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload useWritePdo()
|
||||
* @method static bool isQueryable(mixed $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload clone()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload cloneWithout()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload cloneWithoutBindings()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload dump(mixed ...$args)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload dumpRawSql()
|
||||
* @method static void dd()
|
||||
* @method static void ddRawSql()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload wherePast(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereNowOrPast(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWherePast(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereNowOrPast(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereFuture(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereNowOrFuture(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereFuture(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereNowOrFuture(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload wherePastOrFuture(array|string $columns, string $operator, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereToday(array|string $columns, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereBeforeToday(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereTodayOrBefore(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereAfterToday(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereTodayOrAfter(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereToday(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereBeforeToday(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereTodayOrBefore(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereAfterToday(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload orWhereTodayOrAfter(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload whereTodayBeforeOrAfter(array|string $columns, string $operator, string $boolean)
|
||||
* @method static bool chunk(int $count, callable $callback)
|
||||
* @method static mixed chunkMap(callable $callback, int $count)
|
||||
* @method static bool each(callable $callback, int $count)
|
||||
* @method static bool chunkById(int $count, callable $callback, string|null $column, string|null $alias)
|
||||
* @method static bool chunkByIdDesc(int $count, callable $callback, string|null $column, string|null $alias)
|
||||
* @method static bool orderedChunkById(int $count, callable $callback, string|null $column, string|null $alias, bool $descending)
|
||||
* @method static bool eachById(callable $callback, int $count, string|null $column, string|null $alias)
|
||||
* @method static mixed lazy(int $chunkSize)
|
||||
* @method static mixed lazyById(int $chunkSize, string|null $column, string|null $alias)
|
||||
* @method static mixed lazyByIdDesc(int $chunkSize, string|null $column, string|null $alias)
|
||||
* @method static \Illuminate\Support\LazyCollection orderedLazyById(int $chunkSize, string|null $column, string|null $alias, bool $descending)
|
||||
* @method static Upload|null first(array|string $columns)
|
||||
* @method static Upload firstOrFail(array|string $columns, string|null $message)
|
||||
* @method static Upload sole(array|string $columns)
|
||||
* @method static \Illuminate\Contracts\Pagination\CursorPaginator paginateUsingCursor(int $perPage, array|string $columns, string $cursorName, \Illuminate\Pagination\Cursor|string|null $cursor)
|
||||
* @method static string getOriginalColumnNameForCursorPagination(\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed> $builder, string $parameter)
|
||||
* @method static \Illuminate\Pagination\LengthAwarePaginator paginator(\Illuminate\Support\Collection $items, int $total, int $perPage, int $currentPage, array $options)
|
||||
* @method static \Illuminate\Pagination\Paginator simplePaginator(\Illuminate\Support\Collection $items, int $perPage, int $currentPage, array $options)
|
||||
* @method static \Illuminate\Pagination\CursorPaginator cursorPaginator(\Illuminate\Support\Collection $items, int $perPage, \Illuminate\Pagination\Cursor $cursor, array $options)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<Upload>|Upload tap(callable $callback)
|
||||
* @method static mixed pipe(callable $callback)
|
||||
* @method static mixed when(callable|\TWhenParameter|null $value, callable|null $callback, callable|null $default)
|
||||
* @method static mixed unless(callable|\TUnlessParameter|null $value, callable|null $callback, callable|null $default)
|
||||
* @method static \Illuminate\Support\Collection explain()
|
||||
* @method static mixed forwardCallTo(mixed $object, string $method, array $parameters)
|
||||
* @method static mixed forwardDecoratedCallTo(mixed $object, string $method, array $parameters)
|
||||
* @method static void throwBadMethodCallException(string $method)
|
||||
* @method static void macro(string $name, object|callable $macro)
|
||||
* @method static void mixin(object $mixin, bool $replace)
|
||||
* @method static bool hasMacro(string $name)
|
||||
* @method static void flushMacros()
|
||||
* @method static mixed macroCall(string $method, array $parameters)
|
||||
* @mixin \Illuminate\Database\Query\Builder
|
||||
*/
|
||||
class Upload extends \Illuminate\Database\Eloquent\Model
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* App\Models\User
|
||||
*
|
||||
* @property \Illuminate\Support\Carbon|null $updated_at
|
||||
* @property \Illuminate\Support\Carbon|null $created_at
|
||||
* @property string|null $remember_token
|
||||
* @property string $password
|
||||
* @property \Illuminate\Support\Carbon|null $email_verified_at
|
||||
* @property string $email
|
||||
* @property string $name
|
||||
* @property int $id
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \Illuminate\Notifications\DatabaseNotification> $notifications
|
||||
* @property-read int|null $notifications_count
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereName($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereEmail($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereEmailVerifiedAt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User wherePassword($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereRememberToken($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereCreatedAt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereUpdatedAt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User newModelQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User newQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User query()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User select(array|mixed $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User selectSub(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed>|string $query, string $as)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User selectRaw(string $expression)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User fromSub(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed>|string $query, string $as)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User fromRaw(string $expression, mixed $bindings)
|
||||
* @method static array createSub(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed>|string $query)
|
||||
* @method static array parseSub(mixed $query)
|
||||
* @method static mixed prependDatabaseNameIfCrossDatabaseQuery(mixed $query)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User addSelect(array|mixed $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User distinct()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User from(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed>|\Illuminate\Contracts\Database\Query\Expression|string $table, string|null $as)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User useIndex(string $index)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User forceIndex(string $index)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User ignoreIndex(string $index)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User join(\Illuminate\Contracts\Database\Query\Expression|string $table, \Closure|\Illuminate\Contracts\Database\Query\Expression|string $first, string|null $operator, \Illuminate\Contracts\Database\Query\Expression|string|null $second, string $type, bool $where)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User joinWhere(\Illuminate\Contracts\Database\Query\Expression|string $table, \Closure|\Illuminate\Contracts\Database\Query\Expression|string $first, string $operator, \Illuminate\Contracts\Database\Query\Expression|string $second, string $type)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User joinSub(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed>|string $query, string $as, \Closure|\Illuminate\Contracts\Database\Query\Expression|string $first, string|null $operator, \Illuminate\Contracts\Database\Query\Expression|string|null $second, string $type, bool $where)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User joinLateral(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed>|string $query)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User leftJoinLateral(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed>|string $query)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User leftJoin(\Illuminate\Contracts\Database\Query\Expression|string $table, \Closure|\Illuminate\Contracts\Database\Query\Expression|string $first, string|null $operator, \Illuminate\Contracts\Database\Query\Expression|string|null $second)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User leftJoinWhere(\Illuminate\Contracts\Database\Query\Expression|string $table, \Closure|\Illuminate\Contracts\Database\Query\Expression|string $first, string $operator, \Illuminate\Contracts\Database\Query\Expression|string|null $second)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User leftJoinSub(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed>|string $query, string $as, \Closure|\Illuminate\Contracts\Database\Query\Expression|string $first, string|null $operator, \Illuminate\Contracts\Database\Query\Expression|string|null $second)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User rightJoin(\Illuminate\Contracts\Database\Query\Expression|string $table, \Closure|string $first, string|null $operator, \Illuminate\Contracts\Database\Query\Expression|string|null $second)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User rightJoinWhere(\Illuminate\Contracts\Database\Query\Expression|string $table, \Closure|\Illuminate\Contracts\Database\Query\Expression|string $first, string $operator, \Illuminate\Contracts\Database\Query\Expression|string $second)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User rightJoinSub(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed>|string $query, string $as, \Closure|\Illuminate\Contracts\Database\Query\Expression|string $first, string|null $operator, \Illuminate\Contracts\Database\Query\Expression|string|null $second)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User crossJoin(\Illuminate\Contracts\Database\Query\Expression|string $table, \Closure|\Illuminate\Contracts\Database\Query\Expression|string|null $first, string|null $operator, \Illuminate\Contracts\Database\Query\Expression|string|null $second)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User crossJoinSub(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed>|string $query, string $as)
|
||||
* @method static \Illuminate\Database\Query\JoinClause newJoinClause(string $type, \Illuminate\Contracts\Database\Query\Expression|string $table)
|
||||
* @method static \Illuminate\Database\Query\JoinLateralClause newJoinLateralClause(string $type, \Illuminate\Contracts\Database\Query\Expression|string $table)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User mergeWheres(array $wheres, array $bindings)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User where(\Closure|string|array|\Illuminate\Contracts\Database\Query\Expression $column, mixed $operator, mixed $value, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User addArrayOfWheres(array $column, string $boolean, string $method)
|
||||
* @method static array prepareValueAndOperator(string $value, string $operator, bool $useDefault)
|
||||
* @method static bool invalidOperatorAndValue(string $operator, mixed $value)
|
||||
* @method static bool invalidOperator(string $operator)
|
||||
* @method static bool isBitwiseOperator(string $operator)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhere(\Closure|string|array|\Illuminate\Contracts\Database\Query\Expression $column, mixed $operator, mixed $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereNot(\Closure|string|array|\Illuminate\Contracts\Database\Query\Expression $column, mixed $operator, mixed $value, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereNot(\Closure|string|array|\Illuminate\Contracts\Database\Query\Expression $column, mixed $operator, mixed $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereColumn(\Illuminate\Contracts\Database\Query\Expression|string|array $first, string|null $operator, string|null $second, string|null $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereColumn(\Illuminate\Contracts\Database\Query\Expression|string|array $first, string|null $operator, string|null $second)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereRaw(string $sql, mixed $bindings, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereRaw(string $sql, mixed $bindings)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereLike(\Illuminate\Contracts\Database\Query\Expression|string $column, string $value, bool $caseSensitive, string $boolean, bool $not)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereLike(\Illuminate\Contracts\Database\Query\Expression|string $column, string $value, bool $caseSensitive)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereNotLike(\Illuminate\Contracts\Database\Query\Expression|string $column, string $value, bool $caseSensitive, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereNotLike(\Illuminate\Contracts\Database\Query\Expression|string $column, string $value, bool $caseSensitive)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereIn(\Illuminate\Contracts\Database\Query\Expression|string $column, mixed $values, string $boolean, bool $not)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereIn(\Illuminate\Contracts\Database\Query\Expression|string $column, mixed $values)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereNotIn(\Illuminate\Contracts\Database\Query\Expression|string $column, mixed $values, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereNotIn(\Illuminate\Contracts\Database\Query\Expression|string $column, mixed $values)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereIntegerInRaw(string $column, \Illuminate\Contracts\Support\Arrayable|array $values, string $boolean, bool $not)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereIntegerInRaw(string $column, \Illuminate\Contracts\Support\Arrayable|array $values)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereIntegerNotInRaw(string $column, \Illuminate\Contracts\Support\Arrayable|array $values, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereIntegerNotInRaw(string $column, \Illuminate\Contracts\Support\Arrayable|array $values)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereNull(string|array|\Illuminate\Contracts\Database\Query\Expression $columns, string $boolean, bool $not)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereNull(string|array|\Illuminate\Contracts\Database\Query\Expression $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereNotNull(string|array|\Illuminate\Contracts\Database\Query\Expression $columns, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereBetween(\Illuminate\Contracts\Database\Query\Expression|string $column, string $boolean, bool $not)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereBetweenColumns(\Illuminate\Contracts\Database\Query\Expression|string $column, string $boolean, bool $not)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereBetween(\Illuminate\Contracts\Database\Query\Expression|string $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereBetweenColumns(\Illuminate\Contracts\Database\Query\Expression|string $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereNotBetween(\Illuminate\Contracts\Database\Query\Expression|string $column, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereNotBetweenColumns(\Illuminate\Contracts\Database\Query\Expression|string $column, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereNotBetween(\Illuminate\Contracts\Database\Query\Expression|string $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereNotBetweenColumns(\Illuminate\Contracts\Database\Query\Expression|string $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereNotNull(\Illuminate\Contracts\Database\Query\Expression|string $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereDate(\Illuminate\Contracts\Database\Query\Expression|string $column, \DateTimeInterface|string|null $operator, \DateTimeInterface|string|null $value, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereDate(\Illuminate\Contracts\Database\Query\Expression|string $column, \DateTimeInterface|string|null $operator, \DateTimeInterface|string|null $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereTime(\Illuminate\Contracts\Database\Query\Expression|string $column, \DateTimeInterface|string|null $operator, \DateTimeInterface|string|null $value, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereTime(\Illuminate\Contracts\Database\Query\Expression|string $column, \DateTimeInterface|string|null $operator, \DateTimeInterface|string|null $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereDay(\Illuminate\Contracts\Database\Query\Expression|string $column, \DateTimeInterface|string|int|null $operator, \DateTimeInterface|string|int|null $value, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereDay(\Illuminate\Contracts\Database\Query\Expression|string $column, \DateTimeInterface|string|int|null $operator, \DateTimeInterface|string|int|null $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereMonth(\Illuminate\Contracts\Database\Query\Expression|string $column, \DateTimeInterface|string|int|null $operator, \DateTimeInterface|string|int|null $value, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereMonth(\Illuminate\Contracts\Database\Query\Expression|string $column, \DateTimeInterface|string|int|null $operator, \DateTimeInterface|string|int|null $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereYear(\Illuminate\Contracts\Database\Query\Expression|string $column, \DateTimeInterface|string|int|null $operator, \DateTimeInterface|string|int|null $value, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereYear(\Illuminate\Contracts\Database\Query\Expression|string $column, \DateTimeInterface|string|int|null $operator, \DateTimeInterface|string|int|null $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User addDateBasedWhere(string $type, \Illuminate\Contracts\Database\Query\Expression|string $column, string $operator, mixed $value, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereNested(string $boolean)
|
||||
* @method static \Illuminate\Database\Query\Builder forNestedWhere()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User addNestedWhereQuery(\Illuminate\Database\Query\Builder $query, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereSub(\Illuminate\Contracts\Database\Query\Expression|string $column, string $operator, \Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed> $callback, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereExists(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed> $callback, string $boolean, bool $not)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereExists(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed> $callback, bool $not)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereNotExists(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed> $callback, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereNotExists(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed> $callback)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User addWhereExistsQuery(string $boolean, bool $not)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereRowValues(array $columns, string $operator, array $values, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereRowValues(array $columns, string $operator, array $values)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereJsonContains(string $column, mixed $value, string $boolean, bool $not)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereJsonContains(string $column, mixed $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereJsonDoesntContain(string $column, mixed $value, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereJsonDoesntContain(string $column, mixed $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereJsonOverlaps(string $column, mixed $value, string $boolean, bool $not)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereJsonOverlaps(string $column, mixed $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereJsonDoesntOverlap(string $column, mixed $value, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereJsonDoesntOverlap(string $column, mixed $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereJsonContainsKey(string $column, string $boolean, bool $not)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereJsonContainsKey(string $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereJsonDoesntContainKey(string $column, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereJsonDoesntContainKey(string $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereJsonLength(string $column, mixed $operator, mixed $value, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereJsonLength(string $column, mixed $operator, mixed $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User dynamicWhere(string $method, array $parameters)
|
||||
* @method static void addDynamic(string $segment, string $connector, array $parameters, int $index)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereFullText(string|string[] $columns, string $value, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereFullText(string|string[] $columns, string $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereAll(\Illuminate\Contracts\Database\Query\Expression[]|\Closure[]|string[] $columns, mixed $operator, mixed $value, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereAll(\Illuminate\Contracts\Database\Query\Expression[]|\Closure[]|string[] $columns, mixed $operator, mixed $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereAny(\Illuminate\Contracts\Database\Query\Expression[]|\Closure[]|string[] $columns, mixed $operator, mixed $value, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereAny(\Illuminate\Contracts\Database\Query\Expression[]|\Closure[]|string[] $columns, mixed $operator, mixed $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereNone(\Illuminate\Contracts\Database\Query\Expression[]|\Closure[]|string[] $columns, mixed $operator, mixed $value, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereNone(\Illuminate\Contracts\Database\Query\Expression[]|\Closure[]|string[] $columns, mixed $operator, mixed $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User groupBy(array|\Illuminate\Contracts\Database\Query\Expression|string ...$groups)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User groupByRaw(string $sql)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User having(\Illuminate\Contracts\Database\Query\Expression|\Closure|string $column, \DateTimeInterface|string|int|float|null $operator, \Illuminate\Contracts\Database\Query\Expression|\DateTimeInterface|string|int|float|null $value, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orHaving(\Illuminate\Contracts\Database\Query\Expression|\Closure|string $column, \DateTimeInterface|string|int|float|null $operator, \Illuminate\Contracts\Database\Query\Expression|\DateTimeInterface|string|int|float|null $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User havingNested(string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User addNestedHavingQuery(\Illuminate\Database\Query\Builder $query, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User havingNull(array|string $columns, string $boolean, bool $not)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orHavingNull(string $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User havingNotNull(array|string $columns, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orHavingNotNull(string $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User havingBetween(string $column, string $boolean, bool $not)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User havingRaw(string $sql, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orHavingRaw(string $sql)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orderBy(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed>|\Illuminate\Contracts\Database\Query\Expression|string $column, string $direction)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orderByDesc(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed>|\Illuminate\Contracts\Database\Query\Expression|string $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User latest(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Contracts\Database\Query\Expression|string $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User oldest(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Contracts\Database\Query\Expression|string $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User inRandomOrder(string|int $seed)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orderByRaw(string $sql, array $bindings)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User skip(int $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User offset(int $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User take(int $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User limit(int $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User groupLimit(int $value, string $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User forPage(int $page, int $perPage)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User forPageBeforeId(int $perPage, int|null $lastId, string $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User forPageAfterId(int $perPage, int|null $lastId, string $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User reorder(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Contracts\Database\Query\Expression|string|null $column, string $direction)
|
||||
* @method static array removeExistingOrdersFor(string $column)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User union(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed> $query, bool $all)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User unionAll(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed> $query)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User lock(string|bool $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User lockForUpdate()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User sharedLock()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User beforeQuery()
|
||||
* @method static void applyBeforeQueryCallbacks()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User afterQuery()
|
||||
* @method static mixed applyAfterQueryCallbacks(mixed $result)
|
||||
* @method static string toSql()
|
||||
* @method static string toRawSql()
|
||||
* @method static User|null find(int|string $id, array|string $columns)
|
||||
* @method static mixed findOr(mixed $id, callable|list<string>|string $columns, callable|null $callback)
|
||||
* @method static mixed value(string $column)
|
||||
* @method static mixed rawValue()
|
||||
* @method static mixed soleValue(string $column)
|
||||
* @method static \Illuminate\Support\Collection<int,\stdClass> get(array|string $columns)
|
||||
* @method static array runSelect()
|
||||
* @method static \Illuminate\Support\Collection withoutGroupLimitKeys(\Illuminate\Support\Collection $items)
|
||||
* @method static \Illuminate\Pagination\LengthAwarePaginator paginate(int|\Closure $perPage, array|string $columns, string $pageName, int|null $page, \Closure|int|null $total)
|
||||
* @method static \Illuminate\Contracts\Pagination\Paginator simplePaginate(int $perPage, array|string $columns, string $pageName, int|null $page)
|
||||
* @method static \Illuminate\Contracts\Pagination\CursorPaginator cursorPaginate(int|null $perPage, array|string $columns, string $cursorName, \Illuminate\Pagination\Cursor|string|null $cursor)
|
||||
* @method static \Illuminate\Support\Collection ensureOrderForCursorPagination(bool $shouldReverse)
|
||||
* @method static int getCountForPagination(array $columns)
|
||||
* @method static array runPaginationCountQuery(array $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User cloneForPaginationCount()
|
||||
* @method static array withoutSelectAliases()
|
||||
* @method static \Illuminate\Support\LazyCollection<int,\stdClass> cursor()
|
||||
* @method static void enforceOrderBy()
|
||||
* @method static mixed pluck(\Illuminate\Contracts\Database\Query\Expression|string $column, string|null $key)
|
||||
* @method static string|null stripTableForPluck(string $column)
|
||||
* @method static \Illuminate\Support\Collection pluckFromObjectColumn(array $queryResult, string $column, string $key)
|
||||
* @method static \Illuminate\Support\Collection pluckFromArrayColumn(array $queryResult, string $column, string $key)
|
||||
* @method static string implode(string $column, string $glue)
|
||||
* @method static bool exists()
|
||||
* @method static bool doesntExist()
|
||||
* @method static mixed existsOr()
|
||||
* @method static mixed doesntExistOr()
|
||||
* @method static int count(\Illuminate\Contracts\Database\Query\Expression|string $columns)
|
||||
* @method static mixed min(\Illuminate\Contracts\Database\Query\Expression|string $column)
|
||||
* @method static mixed max(\Illuminate\Contracts\Database\Query\Expression|string $column)
|
||||
* @method static mixed sum(\Illuminate\Contracts\Database\Query\Expression|string $column)
|
||||
* @method static mixed avg(\Illuminate\Contracts\Database\Query\Expression|string $column)
|
||||
* @method static mixed average(\Illuminate\Contracts\Database\Query\Expression|string $column)
|
||||
* @method static mixed aggregate(string $function, array $columns)
|
||||
* @method static float|int numericAggregate(string $function, array $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User setAggregate(string $function, array $columns)
|
||||
* @method static mixed onceWithColumns(array $columns, callable $callback)
|
||||
* @method static bool insert()
|
||||
* @method static int insertOrIgnore()
|
||||
* @method static int insertGetId(string|null $sequence)
|
||||
* @method static int insertUsing(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed>|string $query)
|
||||
* @method static int insertOrIgnoreUsing(\Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed>|string $query)
|
||||
* @method static int update()
|
||||
* @method static int updateFrom()
|
||||
* @method static bool updateOrInsert()
|
||||
* @method static int upsert(array|string $uniqueBy, array|null $update)
|
||||
* @method static int increment(string $column, float|int $amount)
|
||||
* @method static int incrementEach(array<string,float|int|numeric-string> $columns, array<string,mixed> $extra)
|
||||
* @method static int decrement(string $column, float|int $amount)
|
||||
* @method static int decrementEach(array<string,float|int|numeric-string> $columns, array<string,mixed> $extra)
|
||||
* @method static int delete(mixed $id)
|
||||
* @method static void truncate()
|
||||
* @method static \Illuminate\Database\Query\Builder newQuery()
|
||||
* @method static \Illuminate\Database\Query\Builder forSubQuery()
|
||||
* @method static array getColumns()
|
||||
* @method static \Illuminate\Contracts\Database\Query\Expression raw(mixed $value)
|
||||
* @method static \Illuminate\Support\Collection getUnionBuilders()
|
||||
* @method static mixed getLimit()
|
||||
* @method static mixed getOffset()
|
||||
* @method static list getBindings()
|
||||
* @method static array{select: list, from: list, join: list, where: list, groupBy: list, having: list, order: list, union: list, unionOrder: list} getRawBindings()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User setBindings(list $bindings, string $type)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User addBinding(mixed $value, string $type)
|
||||
* @method static mixed castBinding(mixed $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User mergeBindings(self $query)
|
||||
* @method static list cleanBindings(array $bindings)
|
||||
* @method static mixed flattenValue(mixed $value)
|
||||
* @method static string defaultKeyName()
|
||||
* @method static \Illuminate\Database\ConnectionInterface getConnection()
|
||||
* @method static \Illuminate\Database\Query\Processors\Processor getProcessor()
|
||||
* @method static \Illuminate\Database\Query\Grammars\Grammar getGrammar()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User useWritePdo()
|
||||
* @method static bool isQueryable(mixed $value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User clone()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User cloneWithout()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User cloneWithoutBindings()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User dump(mixed ...$args)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User dumpRawSql()
|
||||
* @method static void dd()
|
||||
* @method static void ddRawSql()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User wherePast(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereNowOrPast(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWherePast(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereNowOrPast(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereFuture(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereNowOrFuture(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereFuture(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereNowOrFuture(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User wherePastOrFuture(array|string $columns, string $operator, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereToday(array|string $columns, string $boolean)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereBeforeToday(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereTodayOrBefore(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereAfterToday(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereTodayOrAfter(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereToday(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereBeforeToday(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereTodayOrBefore(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereAfterToday(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User orWhereTodayOrAfter(array|string $columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User whereTodayBeforeOrAfter(array|string $columns, string $operator, string $boolean)
|
||||
* @method static bool chunk(int $count, callable $callback)
|
||||
* @method static mixed chunkMap(callable $callback, int $count)
|
||||
* @method static bool each(callable $callback, int $count)
|
||||
* @method static bool chunkById(int $count, callable $callback, string|null $column, string|null $alias)
|
||||
* @method static bool chunkByIdDesc(int $count, callable $callback, string|null $column, string|null $alias)
|
||||
* @method static bool orderedChunkById(int $count, callable $callback, string|null $column, string|null $alias, bool $descending)
|
||||
* @method static bool eachById(callable $callback, int $count, string|null $column, string|null $alias)
|
||||
* @method static mixed lazy(int $chunkSize)
|
||||
* @method static mixed lazyById(int $chunkSize, string|null $column, string|null $alias)
|
||||
* @method static mixed lazyByIdDesc(int $chunkSize, string|null $column, string|null $alias)
|
||||
* @method static \Illuminate\Support\LazyCollection orderedLazyById(int $chunkSize, string|null $column, string|null $alias, bool $descending)
|
||||
* @method static User|null first(array|string $columns)
|
||||
* @method static User firstOrFail(array|string $columns, string|null $message)
|
||||
* @method static User sole(array|string $columns)
|
||||
* @method static \Illuminate\Contracts\Pagination\CursorPaginator paginateUsingCursor(int $perPage, array|string $columns, string $cursorName, \Illuminate\Pagination\Cursor|string|null $cursor)
|
||||
* @method static string getOriginalColumnNameForCursorPagination(\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<mixed> $builder, string $parameter)
|
||||
* @method static \Illuminate\Pagination\LengthAwarePaginator paginator(\Illuminate\Support\Collection $items, int $total, int $perPage, int $currentPage, array $options)
|
||||
* @method static \Illuminate\Pagination\Paginator simplePaginator(\Illuminate\Support\Collection $items, int $perPage, int $currentPage, array $options)
|
||||
* @method static \Illuminate\Pagination\CursorPaginator cursorPaginator(\Illuminate\Support\Collection $items, int $perPage, \Illuminate\Pagination\Cursor $cursor, array $options)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<User>|User tap(callable $callback)
|
||||
* @method static mixed pipe(callable $callback)
|
||||
* @method static mixed when(callable|\TWhenParameter|null $value, callable|null $callback, callable|null $default)
|
||||
* @method static mixed unless(callable|\TUnlessParameter|null $value, callable|null $callback, callable|null $default)
|
||||
* @method static \Illuminate\Support\Collection explain()
|
||||
* @method static mixed forwardCallTo(mixed $object, string $method, array $parameters)
|
||||
* @method static mixed forwardDecoratedCallTo(mixed $object, string $method, array $parameters)
|
||||
* @method static void throwBadMethodCallException(string $method)
|
||||
* @method static void macro(string $name, object|callable $macro)
|
||||
* @method static void mixin(object $mixin, bool $replace)
|
||||
* @method static bool hasMacro(string $name)
|
||||
* @method static void flushMacros()
|
||||
* @method static mixed macroCall(string $method, array $parameters)
|
||||
* @mixin \Illuminate\Database\Query\Builder
|
||||
*/
|
||||
class User extends \Illuminate\Foundation\Auth\User
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
}
|
||||
Vendored
+11
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace Illuminate\Http;
|
||||
|
||||
interface Request
|
||||
{
|
||||
/**
|
||||
* @return \App\Models\User|null
|
||||
*/
|
||||
public function user($guard = null);
|
||||
}
|
||||
@@ -0,0 +1,134 @@
|
||||
<?php
|
||||
|
||||
|
||||
error_reporting(E_ERROR | E_PARSE);
|
||||
|
||||
define('LARAVEL_START', microtime(true));
|
||||
|
||||
require_once __DIR__ . '/../autoload.php';
|
||||
|
||||
class LaravelVsCode
|
||||
{
|
||||
public static function relativePath($path)
|
||||
{
|
||||
if (!str_contains($path, base_path())) {
|
||||
return (string) $path;
|
||||
}
|
||||
|
||||
return ltrim(str_replace(base_path(), '', realpath($path) ?: $path), DIRECTORY_SEPARATOR);
|
||||
}
|
||||
|
||||
public static function isVendor($path)
|
||||
{
|
||||
return str_contains($path, base_path("vendor"));
|
||||
}
|
||||
|
||||
public static function outputMarker($key)
|
||||
{
|
||||
return '__VSCODE_LARAVEL_' . $key . '__';
|
||||
}
|
||||
|
||||
public static function startupError(\Throwable $e)
|
||||
{
|
||||
throw new Error(self::outputMarker('STARTUP_ERROR') . ': ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
$app = require_once __DIR__ . '/../../bootstrap/app.php';
|
||||
} catch (\Throwable $e) {
|
||||
LaravelVsCode::startupError($e);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$app->register(new class($app) extends \Illuminate\Support\ServiceProvider
|
||||
{
|
||||
public function boot()
|
||||
{
|
||||
config([
|
||||
'logging.channels.null' => [
|
||||
'driver' => 'monolog',
|
||||
'handler' => \Monolog\Handler\NullHandler::class,
|
||||
],
|
||||
'logging.default' => 'null',
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
try {
|
||||
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
|
||||
$kernel->bootstrap();
|
||||
} catch (\Throwable $e) {
|
||||
LaravelVsCode::startupError($e);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
echo LaravelVsCode::outputMarker('START_OUTPUT');
|
||||
|
||||
echo collect(app("Illuminate\Contracts\Http\Kernel")->getMiddlewareGroups())
|
||||
->merge(app("Illuminate\Contracts\Http\Kernel")->getRouteMiddleware())
|
||||
->map(function ($middleware, $key) {
|
||||
$result = [
|
||||
"class" => null,
|
||||
"path" => null,
|
||||
"line" => null,
|
||||
"parameters" => null,
|
||||
"groups" => [],
|
||||
];
|
||||
|
||||
if (is_array($middleware)) {
|
||||
$result["groups"] = collect($middleware)->map(function ($m) {
|
||||
if (!class_exists($m)) {
|
||||
return [
|
||||
"class" => $m,
|
||||
"path" => null,
|
||||
"line" => null
|
||||
];
|
||||
}
|
||||
|
||||
$reflected = new ReflectionClass($m);
|
||||
$reflectedMethod = $reflected->getMethod("handle");
|
||||
|
||||
return [
|
||||
"class" => $m,
|
||||
"path" => LaravelVsCode::relativePath($reflected->getFileName()),
|
||||
"line" =>
|
||||
$reflectedMethod->getFileName() === $reflected->getFileName()
|
||||
? $reflectedMethod->getStartLine()
|
||||
: null
|
||||
];
|
||||
})->all();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
$reflected = new ReflectionClass($middleware);
|
||||
$reflectedMethod = $reflected->getMethod("handle");
|
||||
|
||||
$result = array_merge($result, [
|
||||
"class" => $middleware,
|
||||
"path" => LaravelVsCode::relativePath($reflected->getFileName()),
|
||||
"line" => $reflectedMethod->getStartLine(),
|
||||
]);
|
||||
|
||||
$parameters = collect($reflectedMethod->getParameters())
|
||||
->filter(function ($rc) {
|
||||
return $rc->getName() !== "request" && $rc->getName() !== "next";
|
||||
})
|
||||
->map(function ($rc) {
|
||||
return $rc->getName() . ($rc->isVariadic() ? "..." : "");
|
||||
});
|
||||
|
||||
if ($parameters->isEmpty()) {
|
||||
return $result;
|
||||
}
|
||||
|
||||
return array_merge($result, [
|
||||
"parameters" => $parameters->implode(",")
|
||||
]);
|
||||
})
|
||||
->toJson();
|
||||
|
||||
echo LaravelVsCode::outputMarker('END_OUTPUT');
|
||||
|
||||
exit(0);
|
||||
@@ -0,0 +1,165 @@
|
||||
<?php
|
||||
|
||||
|
||||
error_reporting(E_ERROR | E_PARSE);
|
||||
|
||||
define('LARAVEL_START', microtime(true));
|
||||
|
||||
require_once __DIR__ . '/../autoload.php';
|
||||
|
||||
class LaravelVsCode
|
||||
{
|
||||
public static function relativePath($path)
|
||||
{
|
||||
if (!str_contains($path, base_path())) {
|
||||
return (string) $path;
|
||||
}
|
||||
|
||||
return ltrim(str_replace(base_path(), '', realpath($path) ?: $path), DIRECTORY_SEPARATOR);
|
||||
}
|
||||
|
||||
public static function isVendor($path)
|
||||
{
|
||||
return str_contains($path, base_path("vendor"));
|
||||
}
|
||||
|
||||
public static function outputMarker($key)
|
||||
{
|
||||
return '__VSCODE_LARAVEL_' . $key . '__';
|
||||
}
|
||||
|
||||
public static function startupError(\Throwable $e)
|
||||
{
|
||||
throw new Error(self::outputMarker('STARTUP_ERROR') . ': ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
$app = require_once __DIR__ . '/../../bootstrap/app.php';
|
||||
} catch (\Throwable $e) {
|
||||
LaravelVsCode::startupError($e);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$app->register(new class($app) extends \Illuminate\Support\ServiceProvider
|
||||
{
|
||||
public function boot()
|
||||
{
|
||||
config([
|
||||
'logging.channels.null' => [
|
||||
'driver' => 'monolog',
|
||||
'handler' => \Monolog\Handler\NullHandler::class,
|
||||
],
|
||||
'logging.default' => 'null',
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
try {
|
||||
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
|
||||
$kernel->bootstrap();
|
||||
} catch (\Throwable $e) {
|
||||
LaravelVsCode::startupError($e);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
echo LaravelVsCode::outputMarker('START_OUTPUT');
|
||||
|
||||
$routes = new class {
|
||||
public function all()
|
||||
{
|
||||
return collect(app('router')->getRoutes()->getRoutes())
|
||||
->map(fn(\Illuminate\Routing\Route $route) => $this->getRoute($route))
|
||||
->merge($this->getFolioRoutes());
|
||||
}
|
||||
|
||||
protected function getFolioRoutes()
|
||||
{
|
||||
try {
|
||||
$output = new \Symfony\Component\Console\Output\BufferedOutput();
|
||||
|
||||
\Illuminate\Support\Facades\Artisan::call("folio:list", ["--json" => true], $output);
|
||||
|
||||
$mountPaths = collect(app(\Laravel\Folio\FolioManager::class)->mountPaths());
|
||||
|
||||
return collect(json_decode($output->fetch(), true))->map(fn($route) => $this->getFolioRoute($route, $mountPaths));
|
||||
} catch (\Exception | \Throwable $e) {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
protected function getFolioRoute($route, $mountPaths)
|
||||
{
|
||||
if ($mountPaths->count() === 1) {
|
||||
$mountPath = $mountPaths[0];
|
||||
} else {
|
||||
$mountPath = $mountPaths->first(fn($mp) => file_exists($mp->path . DIRECTORY_SEPARATOR . $route['view']));
|
||||
}
|
||||
|
||||
$path = $route['view'];
|
||||
|
||||
if ($mountPath) {
|
||||
$path = $mountPath->path . DIRECTORY_SEPARATOR . $path;
|
||||
}
|
||||
|
||||
return [
|
||||
'method' => $route['method'],
|
||||
'uri' => $route['uri'],
|
||||
'name' => $route['name'],
|
||||
'action' => null,
|
||||
'parameters' => [],
|
||||
'filename' => $path,
|
||||
'line' => 0,
|
||||
];
|
||||
}
|
||||
|
||||
protected function getRoute(\Illuminate\Routing\Route $route)
|
||||
{
|
||||
try {
|
||||
$reflection = $this->getRouteReflection($route);
|
||||
} catch (\Throwable $e) {
|
||||
$reflection = null;
|
||||
}
|
||||
|
||||
return [
|
||||
'method' => collect($route->methods())
|
||||
->filter(fn($method) => $method !== 'HEAD')
|
||||
->implode('|'),
|
||||
'uri' => $route->uri(),
|
||||
'name' => $route->getName(),
|
||||
'action' => $route->getActionName(),
|
||||
'parameters' => $route->parameterNames(),
|
||||
'filename' => $reflection ? $reflection->getFileName() : null,
|
||||
'line' => $reflection ? $reflection->getStartLine() : null,
|
||||
];
|
||||
}
|
||||
|
||||
protected function getRouteReflection(\Illuminate\Routing\Route $route)
|
||||
{
|
||||
if ($route->getActionName() === 'Closure') {
|
||||
return new \ReflectionFunction($route->getAction()['uses']);
|
||||
}
|
||||
|
||||
if (!str_contains($route->getActionName(), '@')) {
|
||||
return new \ReflectionClass($route->getActionName());
|
||||
}
|
||||
|
||||
try {
|
||||
return new \ReflectionMethod($route->getControllerClass(), $route->getActionMethod());
|
||||
} catch (\Throwable $e) {
|
||||
$namespace = app(\Illuminate\Routing\UrlGenerator::class)->getRootControllerNamespace()
|
||||
?? (app()->getNamespace() . 'Http\Controllers');
|
||||
|
||||
return new \ReflectionMethod(
|
||||
$namespace . '\\' . ltrim($route->getControllerClass(), '\\'),
|
||||
$route->getActionMethod(),
|
||||
);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
echo $routes->all()->toJson();
|
||||
|
||||
echo LaravelVsCode::outputMarker('END_OUTPUT');
|
||||
|
||||
exit(0);
|
||||
@@ -0,0 +1,90 @@
|
||||
<?php
|
||||
|
||||
|
||||
error_reporting(E_ERROR | E_PARSE);
|
||||
|
||||
define('LARAVEL_START', microtime(true));
|
||||
|
||||
require_once __DIR__ . '/../autoload.php';
|
||||
|
||||
class LaravelVsCode
|
||||
{
|
||||
public static function relativePath($path)
|
||||
{
|
||||
if (!str_contains($path, base_path())) {
|
||||
return (string) $path;
|
||||
}
|
||||
|
||||
return ltrim(str_replace(base_path(), '', realpath($path) ?: $path), DIRECTORY_SEPARATOR);
|
||||
}
|
||||
|
||||
public static function isVendor($path)
|
||||
{
|
||||
return str_contains($path, base_path("vendor"));
|
||||
}
|
||||
|
||||
public static function outputMarker($key)
|
||||
{
|
||||
return '__VSCODE_LARAVEL_' . $key . '__';
|
||||
}
|
||||
|
||||
public static function startupError(\Throwable $e)
|
||||
{
|
||||
throw new Error(self::outputMarker('STARTUP_ERROR') . ': ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
$app = require_once __DIR__ . '/../../bootstrap/app.php';
|
||||
} catch (\Throwable $e) {
|
||||
LaravelVsCode::startupError($e);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$app->register(new class($app) extends \Illuminate\Support\ServiceProvider
|
||||
{
|
||||
public function boot()
|
||||
{
|
||||
config([
|
||||
'logging.channels.null' => [
|
||||
'driver' => 'monolog',
|
||||
'handler' => \Monolog\Handler\NullHandler::class,
|
||||
],
|
||||
'logging.default' => 'null',
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
try {
|
||||
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
|
||||
$kernel->bootstrap();
|
||||
} catch (\Throwable $e) {
|
||||
LaravelVsCode::startupError($e);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
echo LaravelVsCode::outputMarker('START_OUTPUT');
|
||||
|
||||
echo collect(app()->getBindings())
|
||||
->filter(fn ($binding) => ($binding['concrete'] ?? null) !== null)
|
||||
->flatMap(function ($binding, $key) {
|
||||
$boundTo = new ReflectionFunction($binding['concrete']);
|
||||
|
||||
$closureClass = $boundTo->getClosureScopeClass();
|
||||
|
||||
if ($closureClass === null) {
|
||||
return [];
|
||||
}
|
||||
|
||||
return [
|
||||
$key => [
|
||||
'path' => LaravelVsCode::relativePath($closureClass->getFileName()),
|
||||
'class' => $closureClass->getName(),
|
||||
'line' => $boundTo->getStartLine(),
|
||||
],
|
||||
];
|
||||
})->toJson();
|
||||
|
||||
echo LaravelVsCode::outputMarker('END_OUTPUT');
|
||||
|
||||
exit(0);
|
||||
@@ -0,0 +1,79 @@
|
||||
<?php
|
||||
|
||||
|
||||
error_reporting(E_ERROR | E_PARSE);
|
||||
|
||||
define('LARAVEL_START', microtime(true));
|
||||
|
||||
require_once __DIR__ . '/../autoload.php';
|
||||
|
||||
class LaravelVsCode
|
||||
{
|
||||
public static function relativePath($path)
|
||||
{
|
||||
if (!str_contains($path, base_path())) {
|
||||
return (string) $path;
|
||||
}
|
||||
|
||||
return ltrim(str_replace(base_path(), '', realpath($path) ?: $path), DIRECTORY_SEPARATOR);
|
||||
}
|
||||
|
||||
public static function isVendor($path)
|
||||
{
|
||||
return str_contains($path, base_path("vendor"));
|
||||
}
|
||||
|
||||
public static function outputMarker($key)
|
||||
{
|
||||
return '__VSCODE_LARAVEL_' . $key . '__';
|
||||
}
|
||||
|
||||
public static function startupError(\Throwable $e)
|
||||
{
|
||||
throw new Error(self::outputMarker('STARTUP_ERROR') . ': ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
$app = require_once __DIR__ . '/../../bootstrap/app.php';
|
||||
} catch (\Throwable $e) {
|
||||
LaravelVsCode::startupError($e);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$app->register(new class($app) extends \Illuminate\Support\ServiceProvider
|
||||
{
|
||||
public function boot()
|
||||
{
|
||||
config([
|
||||
'logging.channels.null' => [
|
||||
'driver' => 'monolog',
|
||||
'handler' => \Monolog\Handler\NullHandler::class,
|
||||
],
|
||||
'logging.default' => 'null',
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
try {
|
||||
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
|
||||
$kernel->bootstrap();
|
||||
} catch (\Throwable $e) {
|
||||
LaravelVsCode::startupError($e);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
echo LaravelVsCode::outputMarker('START_OUTPUT');
|
||||
|
||||
echo json_encode([
|
||||
...config('inertia.testing', []),
|
||||
'page_paths' => collect(config('inertia.testing.page_paths', []))->flatMap(function($path) {
|
||||
$relativePath = LaravelVsCode::relativePath($path);
|
||||
|
||||
return [$relativePath, mb_strtolower($relativePath)];
|
||||
})->unique()->values(),
|
||||
]);
|
||||
|
||||
echo LaravelVsCode::outputMarker('END_OUTPUT');
|
||||
|
||||
exit(0);
|
||||
@@ -0,0 +1,75 @@
|
||||
<?php
|
||||
|
||||
|
||||
error_reporting(E_ERROR | E_PARSE);
|
||||
|
||||
define('LARAVEL_START', microtime(true));
|
||||
|
||||
require_once __DIR__ . '/../autoload.php';
|
||||
|
||||
class LaravelVsCode
|
||||
{
|
||||
public static function relativePath($path)
|
||||
{
|
||||
if (!str_contains($path, base_path())) {
|
||||
return (string) $path;
|
||||
}
|
||||
|
||||
return ltrim(str_replace(base_path(), '', realpath($path) ?: $path), DIRECTORY_SEPARATOR);
|
||||
}
|
||||
|
||||
public static function isVendor($path)
|
||||
{
|
||||
return str_contains($path, base_path("vendor"));
|
||||
}
|
||||
|
||||
public static function outputMarker($key)
|
||||
{
|
||||
return '__VSCODE_LARAVEL_' . $key . '__';
|
||||
}
|
||||
|
||||
public static function startupError(\Throwable $e)
|
||||
{
|
||||
throw new Error(self::outputMarker('STARTUP_ERROR') . ': ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
$app = require_once __DIR__ . '/../../bootstrap/app.php';
|
||||
} catch (\Throwable $e) {
|
||||
LaravelVsCode::startupError($e);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$app->register(new class($app) extends \Illuminate\Support\ServiceProvider
|
||||
{
|
||||
public function boot()
|
||||
{
|
||||
config([
|
||||
'logging.channels.null' => [
|
||||
'driver' => 'monolog',
|
||||
'handler' => \Monolog\Handler\NullHandler::class,
|
||||
],
|
||||
'logging.default' => 'null',
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
try {
|
||||
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
|
||||
$kernel->bootstrap();
|
||||
} catch (\Throwable $e) {
|
||||
LaravelVsCode::startupError($e);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
echo LaravelVsCode::outputMarker('START_OUTPUT');
|
||||
|
||||
echo json_encode([
|
||||
'php_version' => phpversion(),
|
||||
'laravel_version' => app()->version(),
|
||||
]);
|
||||
|
||||
echo LaravelVsCode::outputMarker('END_OUTPUT');
|
||||
|
||||
exit(0);
|
||||
@@ -0,0 +1,105 @@
|
||||
<?php
|
||||
|
||||
|
||||
error_reporting(E_ERROR | E_PARSE);
|
||||
|
||||
define('LARAVEL_START', microtime(true));
|
||||
|
||||
require_once __DIR__ . '/../autoload.php';
|
||||
|
||||
class LaravelVsCode
|
||||
{
|
||||
public static function relativePath($path)
|
||||
{
|
||||
if (!str_contains($path, base_path())) {
|
||||
return (string) $path;
|
||||
}
|
||||
|
||||
return ltrim(str_replace(base_path(), '', realpath($path) ?: $path), DIRECTORY_SEPARATOR);
|
||||
}
|
||||
|
||||
public static function isVendor($path)
|
||||
{
|
||||
return str_contains($path, base_path("vendor"));
|
||||
}
|
||||
|
||||
public static function outputMarker($key)
|
||||
{
|
||||
return '__VSCODE_LARAVEL_' . $key . '__';
|
||||
}
|
||||
|
||||
public static function startupError(\Throwable $e)
|
||||
{
|
||||
throw new Error(self::outputMarker('STARTUP_ERROR') . ': ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
$app = require_once __DIR__ . '/../../bootstrap/app.php';
|
||||
} catch (\Throwable $e) {
|
||||
LaravelVsCode::startupError($e);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$app->register(new class($app) extends \Illuminate\Support\ServiceProvider
|
||||
{
|
||||
public function boot()
|
||||
{
|
||||
config([
|
||||
'logging.channels.null' => [
|
||||
'driver' => 'monolog',
|
||||
'handler' => \Monolog\Handler\NullHandler::class,
|
||||
],
|
||||
'logging.default' => 'null',
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
try {
|
||||
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
|
||||
$kernel->bootstrap();
|
||||
} catch (\Throwable $e) {
|
||||
LaravelVsCode::startupError($e);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
echo LaravelVsCode::outputMarker('START_OUTPUT');
|
||||
|
||||
echo json_encode([
|
||||
[
|
||||
'key' => 'base_path',
|
||||
'path' => base_path(),
|
||||
],
|
||||
[
|
||||
'key' => 'resource_path',
|
||||
'path' => resource_path(),
|
||||
],
|
||||
[
|
||||
'key' => 'config_path',
|
||||
'path' => config_path(),
|
||||
],
|
||||
[
|
||||
'key' => 'app_path',
|
||||
'path' => app_path(),
|
||||
],
|
||||
[
|
||||
'key' => 'database_path',
|
||||
'path' => database_path(),
|
||||
],
|
||||
[
|
||||
'key' => 'lang_path',
|
||||
'path' => lang_path(),
|
||||
],
|
||||
[
|
||||
'key' => 'public_path',
|
||||
'path' => public_path(),
|
||||
],
|
||||
[
|
||||
'key' => 'storage_path',
|
||||
'path' => storage_path(),
|
||||
],
|
||||
]);
|
||||
|
||||
echo LaravelVsCode::outputMarker('END_OUTPUT');
|
||||
|
||||
exit(0);
|
||||
@@ -0,0 +1,179 @@
|
||||
<?php
|
||||
|
||||
|
||||
error_reporting(E_ERROR | E_PARSE);
|
||||
|
||||
define('LARAVEL_START', microtime(true));
|
||||
|
||||
require_once __DIR__ . '/../autoload.php';
|
||||
|
||||
class LaravelVsCode
|
||||
{
|
||||
public static function relativePath($path)
|
||||
{
|
||||
if (!str_contains($path, base_path())) {
|
||||
return (string) $path;
|
||||
}
|
||||
|
||||
return ltrim(str_replace(base_path(), '', realpath($path) ?: $path), DIRECTORY_SEPARATOR);
|
||||
}
|
||||
|
||||
public static function isVendor($path)
|
||||
{
|
||||
return str_contains($path, base_path("vendor"));
|
||||
}
|
||||
|
||||
public static function outputMarker($key)
|
||||
{
|
||||
return '__VSCODE_LARAVEL_' . $key . '__';
|
||||
}
|
||||
|
||||
public static function startupError(\Throwable $e)
|
||||
{
|
||||
throw new Error(self::outputMarker('STARTUP_ERROR') . ': ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
$app = require_once __DIR__ . '/../../bootstrap/app.php';
|
||||
} catch (\Throwable $e) {
|
||||
LaravelVsCode::startupError($e);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$app->register(new class($app) extends \Illuminate\Support\ServiceProvider
|
||||
{
|
||||
public function boot()
|
||||
{
|
||||
config([
|
||||
'logging.channels.null' => [
|
||||
'driver' => 'monolog',
|
||||
'handler' => \Monolog\Handler\NullHandler::class,
|
||||
],
|
||||
'logging.default' => 'null',
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
try {
|
||||
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
|
||||
$kernel->bootstrap();
|
||||
} catch (\Throwable $e) {
|
||||
LaravelVsCode::startupError($e);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
echo LaravelVsCode::outputMarker('START_OUTPUT');
|
||||
|
||||
$blade = new class {
|
||||
public function getAllViews()
|
||||
{
|
||||
$finder = app("view")->getFinder();
|
||||
|
||||
$paths = collect($finder->getPaths())->flatMap(fn($path) => $this->findViews($path));
|
||||
|
||||
$hints = collect($finder->getHints())->flatMap(
|
||||
fn($paths, $key) => collect($paths)->flatMap(
|
||||
fn($path) => collect($this->findViews($path))->map(
|
||||
fn($value) => array_merge($value, ["key" => "{$key}::{$value["key"]}"])
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
[$local, $vendor] = $paths
|
||||
->merge($hints)
|
||||
->values()
|
||||
->partition(fn($v) => !$v["isVendor"]);
|
||||
|
||||
return $local
|
||||
->sortBy("key", SORT_NATURAL)
|
||||
->merge($vendor->sortBy("key", SORT_NATURAL));
|
||||
}
|
||||
|
||||
public function getAllComponents()
|
||||
{
|
||||
$namespaced = \Illuminate\Support\Facades\Blade::getClassComponentNamespaces();
|
||||
$autoloaded = require base_path("vendor/composer/autoload_psr4.php");
|
||||
$components = [];
|
||||
|
||||
foreach ($namespaced as $key => $ns) {
|
||||
$path = null;
|
||||
|
||||
foreach ($autoloaded as $namespace => $paths) {
|
||||
if (str_starts_with($ns, $namespace)) {
|
||||
foreach ($paths as $p) {
|
||||
$test = str($ns)->replace($namespace, '')->replace('\\', '/')->prepend($p . DIRECTORY_SEPARATOR)->toString();
|
||||
|
||||
if (is_dir($test)) {
|
||||
$path = $test;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$path) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$files = \Symfony\Component\Finder\Finder::create()
|
||||
->files()
|
||||
->name("*.php")
|
||||
->in($path);
|
||||
|
||||
foreach ($files as $file) {
|
||||
$realPath = $file->getRealPath();
|
||||
|
||||
$components[] = [
|
||||
"path" => str_replace(base_path(DIRECTORY_SEPARATOR), '', $realPath),
|
||||
"isVendor" => str_contains($realPath, base_path("vendor")),
|
||||
"key" => str($realPath)
|
||||
->replace(realpath($path), "")
|
||||
->replace(".php", "")
|
||||
->ltrim(DIRECTORY_SEPARATOR)
|
||||
->replace(DIRECTORY_SEPARATOR, ".")
|
||||
->kebab()
|
||||
->prepend($key . "::"),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
return $components;
|
||||
}
|
||||
|
||||
protected function findViews($path)
|
||||
{
|
||||
$paths = [];
|
||||
|
||||
if (!is_dir($path)) {
|
||||
return $paths;
|
||||
}
|
||||
|
||||
$files = \Symfony\Component\Finder\Finder::create()
|
||||
->files()
|
||||
->name("*.blade.php")
|
||||
->in($path);
|
||||
|
||||
foreach ($files as $file) {
|
||||
$paths[] = [
|
||||
"path" => str_replace(base_path(DIRECTORY_SEPARATOR), '', $file->getRealPath()),
|
||||
"isVendor" => str_contains($file->getRealPath(), base_path("vendor")),
|
||||
"key" => str($file->getRealPath())
|
||||
->replace(realpath($path), "")
|
||||
->replace(".blade.php", "")
|
||||
->ltrim(DIRECTORY_SEPARATOR)
|
||||
->replace(DIRECTORY_SEPARATOR, ".")
|
||||
];
|
||||
}
|
||||
|
||||
return $paths;
|
||||
}
|
||||
};
|
||||
|
||||
echo json_encode($blade->getAllViews()->merge($blade->getAllComponents()));
|
||||
|
||||
echo LaravelVsCode::outputMarker('END_OUTPUT');
|
||||
|
||||
exit(0);
|
||||
@@ -0,0 +1,215 @@
|
||||
<?php
|
||||
|
||||
|
||||
error_reporting(E_ERROR | E_PARSE);
|
||||
|
||||
define('LARAVEL_START', microtime(true));
|
||||
|
||||
require_once __DIR__ . '/../autoload.php';
|
||||
|
||||
class LaravelVsCode
|
||||
{
|
||||
public static function relativePath($path)
|
||||
{
|
||||
if (!str_contains($path, base_path())) {
|
||||
return (string) $path;
|
||||
}
|
||||
|
||||
return ltrim(str_replace(base_path(), '', realpath($path) ?: $path), DIRECTORY_SEPARATOR);
|
||||
}
|
||||
|
||||
public static function isVendor($path)
|
||||
{
|
||||
return str_contains($path, base_path("vendor"));
|
||||
}
|
||||
|
||||
public static function outputMarker($key)
|
||||
{
|
||||
return '__VSCODE_LARAVEL_' . $key . '__';
|
||||
}
|
||||
|
||||
public static function startupError(\Throwable $e)
|
||||
{
|
||||
throw new Error(self::outputMarker('STARTUP_ERROR') . ': ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
$app = require_once __DIR__ . '/../../bootstrap/app.php';
|
||||
} catch (\Throwable $e) {
|
||||
LaravelVsCode::startupError($e);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$app->register(new class($app) extends \Illuminate\Support\ServiceProvider
|
||||
{
|
||||
public function boot()
|
||||
{
|
||||
config([
|
||||
'logging.channels.null' => [
|
||||
'driver' => 'monolog',
|
||||
'handler' => \Monolog\Handler\NullHandler::class,
|
||||
],
|
||||
'logging.default' => 'null',
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
try {
|
||||
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
|
||||
$kernel->bootstrap();
|
||||
} catch (\Throwable $e) {
|
||||
LaravelVsCode::startupError($e);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
echo LaravelVsCode::outputMarker('START_OUTPUT');
|
||||
|
||||
$local = collect(glob(config_path("/*.php")))
|
||||
->merge(glob(config_path("**/*.php")))
|
||||
->map(fn ($path) => [
|
||||
(string) str($path)
|
||||
->replace([config_path('/'), ".php"], "")
|
||||
->replace(DIRECTORY_SEPARATOR, "."),
|
||||
$path
|
||||
]);
|
||||
|
||||
$vendor = collect(glob(base_path("vendor/**/**/config/*.php")))->map(fn (
|
||||
$path
|
||||
) => [
|
||||
(string) str($path)
|
||||
->afterLast(DIRECTORY_SEPARATOR . "config" . DIRECTORY_SEPARATOR)
|
||||
->replace(".php", "")
|
||||
->replace(DIRECTORY_SEPARATOR, "."),
|
||||
$path
|
||||
]);
|
||||
|
||||
$configPaths = $local
|
||||
->merge($vendor)
|
||||
->groupBy(0)
|
||||
->map(fn ($items)=>$items->pluck(1));
|
||||
|
||||
$cachedContents = [];
|
||||
$cachedParsed = [];
|
||||
|
||||
function vsCodeGetConfigValue($value, $key, $configPaths) {
|
||||
$parts = explode(".", $key);
|
||||
$toFind = $key;
|
||||
$found = null;
|
||||
|
||||
while (count($parts) > 0) {
|
||||
$toFind = implode(".", $parts);
|
||||
|
||||
if ($configPaths->has($toFind)) {
|
||||
$found = $toFind;
|
||||
break;
|
||||
}
|
||||
|
||||
array_pop($parts);
|
||||
}
|
||||
|
||||
if ($found === null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$file = null;
|
||||
$line = null;
|
||||
|
||||
if ($found === $key) {
|
||||
$file = $configPaths->get($found)[0];
|
||||
} else {
|
||||
foreach ($configPaths->get($found) as $path) {
|
||||
$cachedContents[$path] ??= file_get_contents($path);
|
||||
$cachedParsed[$path] ??= token_get_all($cachedContents[$path]);
|
||||
|
||||
$keysToFind = str($key)
|
||||
->replaceFirst($found, "")
|
||||
->ltrim(".")
|
||||
->explode(".");
|
||||
|
||||
if (is_numeric($keysToFind->last())) {
|
||||
$index = $keysToFind->pop();
|
||||
|
||||
if ($index !== "0") {
|
||||
return null;
|
||||
}
|
||||
|
||||
$key = collect(explode(".", $key));
|
||||
$key->pop();
|
||||
$key = $key->implode(".");
|
||||
$value = "array(...)";
|
||||
}
|
||||
|
||||
$nextKey = $keysToFind->shift();
|
||||
$expectedDepth = 1;
|
||||
|
||||
$depth = 0;
|
||||
|
||||
foreach ($cachedParsed[$path] as $token) {
|
||||
if ($token === "[") {
|
||||
$depth++;
|
||||
}
|
||||
|
||||
if ($token === "]") {
|
||||
$depth--;
|
||||
}
|
||||
|
||||
if (!is_array($token)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$str = trim($token[1], '"\'');
|
||||
|
||||
if (
|
||||
$str === $nextKey &&
|
||||
$depth === $expectedDepth &&
|
||||
$token[0] === T_CONSTANT_ENCAPSED_STRING
|
||||
) {
|
||||
$nextKey = $keysToFind->shift();
|
||||
$expectedDepth++;
|
||||
|
||||
if ($nextKey === null) {
|
||||
$file = $path;
|
||||
$line = $token[2];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($file) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return [
|
||||
"name" => $key,
|
||||
"value" => $value,
|
||||
"file" => $file === null ? null : str_replace(base_path(DIRECTORY_SEPARATOR), '', $file),
|
||||
"line" => $line
|
||||
];
|
||||
}
|
||||
|
||||
function vsCodeUnpackDottedKey($value, $key) {
|
||||
$arr = [$key => $value];
|
||||
$parts = explode('.', $key);
|
||||
array_pop($parts);
|
||||
|
||||
while (count($parts)) {
|
||||
$arr[implode('.', $parts)] = 'array(...)';
|
||||
array_pop($parts);
|
||||
}
|
||||
|
||||
return $arr;
|
||||
}
|
||||
|
||||
echo collect(\Illuminate\Support\Arr::dot(config()->all()))
|
||||
->mapWithKeys(fn($value, $key) => vsCodeUnpackDottedKey($value, $key))
|
||||
->map(fn ($value, $key) => vsCodeGetConfigValue($value, $key, $configPaths))
|
||||
->filter()
|
||||
->values()
|
||||
->toJson();
|
||||
|
||||
echo LaravelVsCode::outputMarker('END_OUTPUT');
|
||||
|
||||
exit(0);
|
||||
@@ -0,0 +1,92 @@
|
||||
<?php
|
||||
|
||||
|
||||
error_reporting(E_ERROR | E_PARSE);
|
||||
|
||||
define('LARAVEL_START', microtime(true));
|
||||
|
||||
require_once __DIR__ . '/../autoload.php';
|
||||
|
||||
class LaravelVsCode
|
||||
{
|
||||
public static function relativePath($path)
|
||||
{
|
||||
if (!str_contains($path, base_path())) {
|
||||
return (string) $path;
|
||||
}
|
||||
|
||||
return ltrim(str_replace(base_path(), '', realpath($path) ?: $path), DIRECTORY_SEPARATOR);
|
||||
}
|
||||
|
||||
public static function isVendor($path)
|
||||
{
|
||||
return str_contains($path, base_path("vendor"));
|
||||
}
|
||||
|
||||
public static function outputMarker($key)
|
||||
{
|
||||
return '__VSCODE_LARAVEL_' . $key . '__';
|
||||
}
|
||||
|
||||
public static function startupError(\Throwable $e)
|
||||
{
|
||||
throw new Error(self::outputMarker('STARTUP_ERROR') . ': ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
$app = require_once __DIR__ . '/../../bootstrap/app.php';
|
||||
} catch (\Throwable $e) {
|
||||
LaravelVsCode::startupError($e);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$app->register(new class($app) extends \Illuminate\Support\ServiceProvider
|
||||
{
|
||||
public function boot()
|
||||
{
|
||||
config([
|
||||
'logging.channels.null' => [
|
||||
'driver' => 'monolog',
|
||||
'handler' => \Monolog\Handler\NullHandler::class,
|
||||
],
|
||||
'logging.default' => 'null',
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
try {
|
||||
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
|
||||
$kernel->bootstrap();
|
||||
} catch (\Throwable $e) {
|
||||
LaravelVsCode::startupError($e);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
echo LaravelVsCode::outputMarker('START_OUTPUT');
|
||||
|
||||
echo collect(app(\Illuminate\View\Compilers\BladeCompiler::class)->getCustomDirectives())
|
||||
->map(function ($customDirective, $name) {
|
||||
if ($customDirective instanceof \Closure) {
|
||||
return [
|
||||
'name' => $name,
|
||||
'hasParams' => (new ReflectionFunction($customDirective))->getNumberOfParameters() >= 1,
|
||||
];
|
||||
}
|
||||
|
||||
if (is_array($customDirective)) {
|
||||
return [
|
||||
'name' => $name,
|
||||
'hasParams' => (new ReflectionMethod($customDirective[0], $customDirective[1]))->getNumberOfParameters() >= 1,
|
||||
];
|
||||
}
|
||||
|
||||
return null;
|
||||
})
|
||||
->filter()
|
||||
->values()
|
||||
->toJson();
|
||||
|
||||
echo LaravelVsCode::outputMarker('END_OUTPUT');
|
||||
|
||||
exit(0);
|
||||
@@ -0,0 +1,269 @@
|
||||
<?php
|
||||
|
||||
|
||||
error_reporting(E_ERROR | E_PARSE);
|
||||
|
||||
define('LARAVEL_START', microtime(true));
|
||||
|
||||
require_once __DIR__ . '/../autoload.php';
|
||||
|
||||
class LaravelVsCode
|
||||
{
|
||||
public static function relativePath($path)
|
||||
{
|
||||
if (!str_contains($path, base_path())) {
|
||||
return (string) $path;
|
||||
}
|
||||
|
||||
return ltrim(str_replace(base_path(), '', realpath($path) ?: $path), DIRECTORY_SEPARATOR);
|
||||
}
|
||||
|
||||
public static function isVendor($path)
|
||||
{
|
||||
return str_contains($path, base_path("vendor"));
|
||||
}
|
||||
|
||||
public static function outputMarker($key)
|
||||
{
|
||||
return '__VSCODE_LARAVEL_' . $key . '__';
|
||||
}
|
||||
|
||||
public static function startupError(\Throwable $e)
|
||||
{
|
||||
throw new Error(self::outputMarker('STARTUP_ERROR') . ': ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
$app = require_once __DIR__ . '/../../bootstrap/app.php';
|
||||
} catch (\Throwable $e) {
|
||||
LaravelVsCode::startupError($e);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$app->register(new class($app) extends \Illuminate\Support\ServiceProvider
|
||||
{
|
||||
public function boot()
|
||||
{
|
||||
config([
|
||||
'logging.channels.null' => [
|
||||
'driver' => 'monolog',
|
||||
'handler' => \Monolog\Handler\NullHandler::class,
|
||||
],
|
||||
'logging.default' => 'null',
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
try {
|
||||
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
|
||||
$kernel->bootstrap();
|
||||
} catch (\Throwable $e) {
|
||||
LaravelVsCode::startupError($e);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
echo LaravelVsCode::outputMarker('START_OUTPUT');
|
||||
|
||||
if (class_exists('\phpDocumentor\Reflection\DocBlockFactory')) {
|
||||
$factory = \phpDocumentor\Reflection\DocBlockFactory::createInstance();
|
||||
} else {
|
||||
$factory = null;
|
||||
}
|
||||
|
||||
$docblocks = new class($factory) {
|
||||
public function __construct(protected $factory) {}
|
||||
|
||||
public function forMethod($method)
|
||||
{
|
||||
if ($this->factory !== null) {
|
||||
$docblock = $this->factory->create($method->getDocComment());
|
||||
$params = collect($docblock->getTagsByName("param"))->map(fn($p) => (string) $p)->all();
|
||||
$return = (string) $docblock->getTagsByName("return")[0] ?? null;
|
||||
|
||||
return [$params, $return];
|
||||
}
|
||||
|
||||
|
||||
$params = collect($method->getParameters())
|
||||
->map(function (\ReflectionParameter $param) {
|
||||
$types = match ($param?->getType()) {
|
||||
null => [],
|
||||
default => method_exists($param->getType(), "getTypes")
|
||||
? $param->getType()->getTypes()
|
||||
: [$param->getType()]
|
||||
};
|
||||
|
||||
$types = collect($types)
|
||||
->filter()
|
||||
->values()
|
||||
->map(fn($t) => $t->getName());
|
||||
|
||||
return trim($types->join("|") . " $" . $param->getName());
|
||||
})
|
||||
->all();
|
||||
|
||||
$return = $method->getReturnType()?->getName();
|
||||
|
||||
return [$params, $return];
|
||||
}
|
||||
};
|
||||
|
||||
$models = new class($factory) {
|
||||
protected $output;
|
||||
|
||||
public function __construct(protected $factory)
|
||||
{
|
||||
$this->output = new \Symfony\Component\Console\Output\BufferedOutput();
|
||||
}
|
||||
|
||||
public function all()
|
||||
{
|
||||
collect(glob(base_path('**/Models/*.php')))->each(fn($file) => include_once($file));
|
||||
|
||||
return collect(get_declared_classes())
|
||||
->filter(fn($class) => is_subclass_of($class, \Illuminate\Database\Eloquent\Model::class))
|
||||
->filter(fn($class) => !in_array($class, [\Illuminate\Database\Eloquent\Relations\Pivot::class, \Illuminate\Foundation\Auth\User::class]))
|
||||
->values()
|
||||
->flatMap(fn(string $className) => $this->getInfo($className))
|
||||
->filter();
|
||||
}
|
||||
|
||||
protected function getCastReturnType($className)
|
||||
{
|
||||
if ($className === null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
$method = (new \ReflectionClass($className))->getMethod('get');
|
||||
|
||||
if ($method->hasReturnType()) {
|
||||
return $method->getReturnType()->getName();
|
||||
}
|
||||
|
||||
return $className;
|
||||
} catch (\Exception | \Throwable $e) {
|
||||
return $className;
|
||||
}
|
||||
}
|
||||
|
||||
protected function fromArtisan($className)
|
||||
{
|
||||
try {
|
||||
\Illuminate\Support\Facades\Artisan::call(
|
||||
"model:show",
|
||||
[
|
||||
"model" => $className,
|
||||
"--json" => true,
|
||||
],
|
||||
$this->output
|
||||
);
|
||||
} catch (\Exception | \Throwable $e) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return json_decode($this->output->fetch(), true);
|
||||
}
|
||||
|
||||
protected function collectExistingProperties($reflection)
|
||||
{
|
||||
if ($this->factory === null) {
|
||||
return collect();
|
||||
}
|
||||
|
||||
if ($comment = $reflection->getDocComment()) {
|
||||
$docblock = $this->factory->create($comment);
|
||||
|
||||
$existingProperties = collect($docblock->getTagsByName("property"))->map(fn($p) => $p->getVariableName());
|
||||
$existingReadProperties = collect($docblock->getTagsByName("property-read"))->map(fn($p) => $p->getVariableName());
|
||||
|
||||
return $existingProperties->merge($existingReadProperties);
|
||||
}
|
||||
|
||||
return collect();
|
||||
}
|
||||
|
||||
protected function getParentClass(\ReflectionClass $reflection)
|
||||
{
|
||||
if (!$reflection->getParentClass()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$parent = $reflection->getParentClass()->getName();
|
||||
|
||||
if ($parent === \Illuminate\Database\Eloquent\Model::class) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return \Illuminate\Support\Str::start($parent, '\\');
|
||||
}
|
||||
|
||||
protected function getInfo($className)
|
||||
{
|
||||
if (($data = $this->fromArtisan($className)) === null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$reflection = new \ReflectionClass($className);
|
||||
|
||||
$data["extends"] = $this->getParentClass($reflection);
|
||||
|
||||
$existingProperties = $this->collectExistingProperties($reflection);
|
||||
|
||||
$data['attributes'] = collect($data['attributes'])
|
||||
->map(fn($attrs) => array_merge($attrs, [
|
||||
'title_case' => str($attrs['name'])->title()->replace('_', '')->toString(),
|
||||
'documented' => $existingProperties->contains($attrs['name']),
|
||||
'cast' => $this->getCastReturnType($attrs['cast'])
|
||||
]))
|
||||
->toArray();
|
||||
|
||||
$data['scopes'] = collect($reflection->getMethods())
|
||||
->filter(fn($method) =>!$method->isStatic() && ($method->getAttributes(\Illuminate\Database\Eloquent\Attributes\Scope::class) || ($method->isPublic() && str_starts_with($method->name, 'scope'))))
|
||||
->map(fn($method) => str($method->name)->replace('scope', '')->lcfirst()->toString())
|
||||
->values()
|
||||
->toArray();
|
||||
|
||||
$data['uri'] = $reflection->getFileName();
|
||||
|
||||
return [
|
||||
$className => $data,
|
||||
];
|
||||
}
|
||||
};
|
||||
|
||||
$builder = new class($docblocks) {
|
||||
public function __construct(protected $docblocks) {}
|
||||
|
||||
public function methods()
|
||||
{
|
||||
$reflection = new \ReflectionClass(\Illuminate\Database\Query\Builder::class);
|
||||
|
||||
return collect($reflection->getMethods(\ReflectionMethod::IS_PUBLIC | \ReflectionMethod::IS_PROTECTED))
|
||||
->filter(fn(ReflectionMethod $method) => !str_starts_with($method->getName(), "__") || (!$method->isPublic() && empty($method->getAttributes(\Illuminate\Database\Eloquent\Attributes\Scope::class))))
|
||||
->map(fn(\ReflectionMethod $method) => $this->getMethodInfo($method))
|
||||
->filter()
|
||||
->values();
|
||||
}
|
||||
|
||||
protected function getMethodInfo($method)
|
||||
{
|
||||
[$params, $return] = $this->docblocks->forMethod($method);
|
||||
|
||||
return [
|
||||
"name" => $method->getName(),
|
||||
"parameters" => $params,
|
||||
"return" => $return,
|
||||
];
|
||||
}
|
||||
};
|
||||
|
||||
echo json_encode([
|
||||
'builderMethods' => $builder->methods(),
|
||||
'models' => $models->all(),
|
||||
]);
|
||||
|
||||
echo LaravelVsCode::outputMarker('END_OUTPUT');
|
||||
|
||||
exit(0);
|
||||
@@ -0,0 +1,373 @@
|
||||
<?php
|
||||
|
||||
|
||||
error_reporting(E_ERROR | E_PARSE);
|
||||
|
||||
define('LARAVEL_START', microtime(true));
|
||||
|
||||
require_once __DIR__ . '/../autoload.php';
|
||||
|
||||
class LaravelVsCode
|
||||
{
|
||||
public static function relativePath($path)
|
||||
{
|
||||
if (!str_contains($path, base_path())) {
|
||||
return (string) $path;
|
||||
}
|
||||
|
||||
return ltrim(str_replace(base_path(), '', realpath($path) ?: $path), DIRECTORY_SEPARATOR);
|
||||
}
|
||||
|
||||
public static function isVendor($path)
|
||||
{
|
||||
return str_contains($path, base_path("vendor"));
|
||||
}
|
||||
|
||||
public static function outputMarker($key)
|
||||
{
|
||||
return '__VSCODE_LARAVEL_' . $key . '__';
|
||||
}
|
||||
|
||||
public static function startupError(\Throwable $e)
|
||||
{
|
||||
throw new Error(self::outputMarker('STARTUP_ERROR') . ': ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
$app = require_once __DIR__ . '/../../bootstrap/app.php';
|
||||
} catch (\Throwable $e) {
|
||||
LaravelVsCode::startupError($e);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$app->register(new class($app) extends \Illuminate\Support\ServiceProvider
|
||||
{
|
||||
public function boot()
|
||||
{
|
||||
config([
|
||||
'logging.channels.null' => [
|
||||
'driver' => 'monolog',
|
||||
'handler' => \Monolog\Handler\NullHandler::class,
|
||||
],
|
||||
'logging.default' => 'null',
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
try {
|
||||
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
|
||||
$kernel->bootstrap();
|
||||
} catch (\Throwable $e) {
|
||||
LaravelVsCode::startupError($e);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
echo LaravelVsCode::outputMarker('START_OUTPUT');
|
||||
|
||||
$components = new class {
|
||||
protected $autoloaded = [];
|
||||
|
||||
protected $prefixes = [];
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->autoloaded = require base_path("vendor/composer/autoload_psr4.php");
|
||||
}
|
||||
|
||||
public function all()
|
||||
{
|
||||
$components = collect(array_merge(
|
||||
$this->getStandardClasses(),
|
||||
$this->getStandardViews(),
|
||||
$this->getNamespaced(),
|
||||
$this->getAnonymousNamespaced(),
|
||||
$this->getAnonymous(),
|
||||
$this->getAliases(),
|
||||
$this->getVendorComponents(),
|
||||
))->groupBy('key')->map(fn($items) => [
|
||||
'isVendor' => $items->first()['isVendor'],
|
||||
'paths' => $items->pluck('path')->values(),
|
||||
'props' => $items->pluck('props')->values()->filter()->flatMap(fn($i) => $i),
|
||||
]);
|
||||
|
||||
return [
|
||||
'components' => $components,
|
||||
'prefixes' => $this->prefixes,
|
||||
];
|
||||
}
|
||||
|
||||
protected function getStandardViews()
|
||||
{
|
||||
$path = resource_path('views/components');
|
||||
|
||||
return $this->findFiles($path, 'blade.php');
|
||||
}
|
||||
|
||||
protected function findFiles($path, $extension, $keyCallback = null)
|
||||
{
|
||||
if (!is_dir($path)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$files = \Symfony\Component\Finder\Finder::create()
|
||||
->files()
|
||||
->name("*." . $extension)
|
||||
->in($path);
|
||||
$components = [];
|
||||
$pathRealPath = realpath($path);
|
||||
|
||||
foreach ($files as $file) {
|
||||
$realPath = $file->getRealPath();
|
||||
|
||||
$key = str($realPath)
|
||||
->replace($pathRealPath, '')
|
||||
->ltrim('/\\')
|
||||
->replace('.' . $extension, '')
|
||||
->replace(['/', '\\'], '.')
|
||||
->pipe(fn($str) => $this->handleIndexComponents($str));
|
||||
|
||||
$components[] = [
|
||||
"path" => LaravelVsCode::relativePath($realPath),
|
||||
"isVendor" => LaravelVsCode::isVendor($realPath),
|
||||
"key" => $keyCallback ? $keyCallback($key) : $key,
|
||||
];
|
||||
}
|
||||
|
||||
return $components;
|
||||
}
|
||||
|
||||
protected function getStandardClasses()
|
||||
{
|
||||
$path = app_path('View/Components');
|
||||
|
||||
$appNamespace = collect($this->autoloaded)
|
||||
->filter(fn($paths) => in_array(app_path(), $paths))
|
||||
->keys()
|
||||
->first() ?? '';
|
||||
|
||||
return collect($this->findFiles(
|
||||
$path,
|
||||
'php',
|
||||
fn($key) => $key->explode('.')
|
||||
->map(fn($p) => \Illuminate\Support\Str::kebab($p))
|
||||
->implode('.'),
|
||||
))->map(function ($item) use ($appNamespace) {
|
||||
$class = str($item['path'])
|
||||
->after('View/Components/')
|
||||
->replace('.php', '')
|
||||
->replace('/', '\\')
|
||||
->prepend($appNamespace . 'View\\Components\\')
|
||||
->toString();
|
||||
|
||||
if (!class_exists($class)) {
|
||||
return $item;
|
||||
}
|
||||
|
||||
$reflection = new \ReflectionClass($class);
|
||||
$parameters = collect($reflection->getConstructor()?->getParameters() ?? [])
|
||||
->filter(fn($p) => $p->isPromoted())
|
||||
->flatMap(fn($p) => [$p->getName() => $p->isOptional() ? $p->getDefaultValue() : null])
|
||||
->all();
|
||||
|
||||
$props = collect($reflection->getProperties())
|
||||
->filter(fn($p) => $p->isPublic() && $p->getDeclaringClass()->getName() === $class)
|
||||
->map(fn($p) => [
|
||||
'name' => \Illuminate\Support\Str::kebab($p->getName()),
|
||||
'type' => (string) ($p->getType() ?? 'mixed'),
|
||||
'default' => $p->getDefaultValue() ?? $parameters[$p->getName()] ?? null,
|
||||
]);
|
||||
|
||||
[$except, $props] = $props->partition(fn($p) => $p['name'] === 'except');
|
||||
|
||||
if ($except->isNotEmpty()) {
|
||||
$except = $except->first()['default'];
|
||||
$props = $props->reject(fn($p) => in_array($p['name'], $except));
|
||||
}
|
||||
|
||||
return [
|
||||
...$item,
|
||||
'props' => $props,
|
||||
];
|
||||
})->all();
|
||||
}
|
||||
|
||||
protected function getAliases()
|
||||
{
|
||||
$components = [];
|
||||
|
||||
foreach (\Illuminate\Support\Facades\Blade::getClassComponentAliases() as $key => $class) {
|
||||
if (class_exists($class)) {
|
||||
$reflection = new ReflectionClass($class);
|
||||
|
||||
$components[] = [
|
||||
"path" => LaravelVsCode::relativePath($reflection->getFileName()),
|
||||
"isVendor" => LaravelVsCode::isVendor($reflection->getFileName()),
|
||||
"key" => $key,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
return $components;
|
||||
}
|
||||
|
||||
protected function getAnonymousNamespaced()
|
||||
{
|
||||
$components = [];
|
||||
|
||||
foreach (\Illuminate\Support\Facades\Blade::getAnonymousComponentNamespaces() as $key => $dir) {
|
||||
$path = collect([$dir, resource_path('views/' . $dir)])->first(fn($p) => is_dir($p));
|
||||
|
||||
if (!$path) {
|
||||
continue;
|
||||
}
|
||||
|
||||
array_push(
|
||||
$components,
|
||||
...$this->findFiles(
|
||||
$path,
|
||||
'blade.php',
|
||||
fn($k) => $k->kebab()->prepend($key . "::"),
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
return $components;
|
||||
}
|
||||
|
||||
protected function getAnonymous()
|
||||
{
|
||||
$components = [];
|
||||
|
||||
foreach (\Illuminate\Support\Facades\Blade::getAnonymousComponentPaths() as $item) {
|
||||
array_push(
|
||||
$components,
|
||||
...$this->findFiles(
|
||||
$item['path'],
|
||||
'blade.php',
|
||||
fn($key) => $key
|
||||
->kebab()
|
||||
->prepend(($item['prefix'] ?? ':') . ':')
|
||||
->ltrim(':'),
|
||||
)
|
||||
);
|
||||
|
||||
if (!in_array($item['prefix'], $this->prefixes)) {
|
||||
$this->prefixes[] = $item['prefix'];
|
||||
}
|
||||
}
|
||||
|
||||
return $components;
|
||||
}
|
||||
|
||||
protected function getVendorComponents(): array
|
||||
{
|
||||
$components = [];
|
||||
|
||||
/** @var \Illuminate\View\Factory $view */
|
||||
$view = \Illuminate\Support\Facades\App::make('view');
|
||||
|
||||
/** @var \Illuminate\View\FileViewFinder $finder */
|
||||
$finder = $view->getFinder();
|
||||
|
||||
/** @var array<string, array<int, string>> $views */
|
||||
$views = $finder->getHints();
|
||||
|
||||
foreach ($views as $key => $paths) {
|
||||
// First is always optional override in the resources/views folder
|
||||
$path = $paths[0] . '/components';
|
||||
|
||||
if (!is_dir($path)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
array_push(
|
||||
$components,
|
||||
...$this->findFiles(
|
||||
$path,
|
||||
'blade.php',
|
||||
fn (\Illuminate\Support\Stringable $k) => $k->kebab()->prepend($key.'::'),
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
return $components;
|
||||
}
|
||||
|
||||
protected function handleIndexComponents($str)
|
||||
{
|
||||
if ($str->endsWith('.index')) {
|
||||
return $str->replaceLast('.index', '');
|
||||
}
|
||||
|
||||
if (!$str->contains('.')) {
|
||||
return $str;
|
||||
}
|
||||
|
||||
$parts = $str->explode('.');
|
||||
|
||||
if ($parts->slice(-2)->unique()->count() === 1) {
|
||||
$parts->pop();
|
||||
|
||||
return str($parts->implode('.'));
|
||||
}
|
||||
|
||||
return $str;
|
||||
}
|
||||
|
||||
protected function getNamespaced()
|
||||
{
|
||||
$namespaced = \Illuminate\Support\Facades\Blade::getClassComponentNamespaces();
|
||||
$components = [];
|
||||
|
||||
foreach ($namespaced as $key => $classNamespace) {
|
||||
$path = $this->getNamespacePath($classNamespace);
|
||||
|
||||
if (!$path) {
|
||||
continue;
|
||||
}
|
||||
|
||||
array_push(
|
||||
$components,
|
||||
...$this->findFiles(
|
||||
$path,
|
||||
'php',
|
||||
fn($k) => $k->kebab()->prepend($key . "::"),
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
return $components;
|
||||
}
|
||||
|
||||
protected function getNamespacePath($classNamespace)
|
||||
{
|
||||
foreach ($this->autoloaded as $ns => $paths) {
|
||||
if (!str_starts_with($classNamespace, $ns)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach ($paths as $p) {
|
||||
$dir = str($classNamespace)
|
||||
->replace($ns, '')
|
||||
->replace('\\', '/')
|
||||
->prepend($p . DIRECTORY_SEPARATOR)
|
||||
->toString();
|
||||
|
||||
if (is_dir($dir)) {
|
||||
return $dir;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
echo json_encode($components->all());
|
||||
|
||||
echo LaravelVsCode::outputMarker('END_OUTPUT');
|
||||
|
||||
exit(0);
|
||||
@@ -0,0 +1,432 @@
|
||||
<?php
|
||||
|
||||
|
||||
error_reporting(E_ERROR | E_PARSE);
|
||||
|
||||
define('LARAVEL_START', microtime(true));
|
||||
|
||||
require_once __DIR__ . '/../autoload.php';
|
||||
|
||||
class LaravelVsCode
|
||||
{
|
||||
public static function relativePath($path)
|
||||
{
|
||||
if (!str_contains($path, base_path())) {
|
||||
return (string) $path;
|
||||
}
|
||||
|
||||
return ltrim(str_replace(base_path(), '', realpath($path) ?: $path), DIRECTORY_SEPARATOR);
|
||||
}
|
||||
|
||||
public static function isVendor($path)
|
||||
{
|
||||
return str_contains($path, base_path("vendor"));
|
||||
}
|
||||
|
||||
public static function outputMarker($key)
|
||||
{
|
||||
return '__VSCODE_LARAVEL_' . $key . '__';
|
||||
}
|
||||
|
||||
public static function startupError(\Throwable $e)
|
||||
{
|
||||
throw new Error(self::outputMarker('STARTUP_ERROR') . ': ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
$app = require_once __DIR__ . '/../../bootstrap/app.php';
|
||||
} catch (\Throwable $e) {
|
||||
LaravelVsCode::startupError($e);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$app->register(new class($app) extends \Illuminate\Support\ServiceProvider
|
||||
{
|
||||
public function boot()
|
||||
{
|
||||
config([
|
||||
'logging.channels.null' => [
|
||||
'driver' => 'monolog',
|
||||
'handler' => \Monolog\Handler\NullHandler::class,
|
||||
],
|
||||
'logging.default' => 'null',
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
try {
|
||||
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
|
||||
$kernel->bootstrap();
|
||||
} catch (\Throwable $e) {
|
||||
LaravelVsCode::startupError($e);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
echo LaravelVsCode::outputMarker('START_OUTPUT');
|
||||
|
||||
$translator = new class
|
||||
{
|
||||
public $paths = [];
|
||||
|
||||
public $values = [];
|
||||
|
||||
public $paramResults = [];
|
||||
|
||||
public $params = [];
|
||||
|
||||
public $emptyParams = [];
|
||||
|
||||
public $directoriesToWatch = [];
|
||||
|
||||
public $languages = [];
|
||||
|
||||
public function all()
|
||||
{
|
||||
$final = [];
|
||||
|
||||
foreach ($this->retrieve() as $value) {
|
||||
if ($value instanceof \Illuminate\Support\LazyCollection) {
|
||||
foreach ($value as $val) {
|
||||
$dotKey = $val["k"];
|
||||
$final[$dotKey] ??= [];
|
||||
|
||||
if (!in_array($val["la"], $this->languages)) {
|
||||
$this->languages[] = $val["la"];
|
||||
}
|
||||
|
||||
$final[$dotKey][$val["la"]] = $val["vs"];
|
||||
}
|
||||
} else {
|
||||
foreach ($value["vs"] as $v) {
|
||||
$dotKey = "{$value["k"]}.{$v['k']}";
|
||||
$final[$dotKey] ??= [];
|
||||
|
||||
if (!in_array($value["la"], $this->languages)) {
|
||||
$this->languages[] = $value["la"];
|
||||
}
|
||||
|
||||
$final[$dotKey][$value["la"]] = $v['arr'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $final;
|
||||
}
|
||||
|
||||
protected function retrieve()
|
||||
{
|
||||
$loader = app("translator")->getLoader();
|
||||
$namespaces = $loader->namespaces();
|
||||
|
||||
$paths = $this->getPaths($loader);
|
||||
|
||||
$default = collect($paths)->flatMap(
|
||||
fn($path) => $this->collectFromPath($path)
|
||||
);
|
||||
|
||||
$namespaced = collect($namespaces)->flatMap(
|
||||
fn($path, $namespace) => $this->collectFromPath($path, $namespace)
|
||||
);
|
||||
|
||||
return $default->merge($namespaced);
|
||||
}
|
||||
|
||||
protected function getPaths($loader)
|
||||
{
|
||||
$reflection = new ReflectionClass($loader);
|
||||
$property = null;
|
||||
|
||||
if ($reflection->hasProperty("paths")) {
|
||||
$property = $reflection->getProperty("paths");
|
||||
} else if ($reflection->hasProperty("path")) {
|
||||
$property = $reflection->getProperty("path");
|
||||
}
|
||||
|
||||
if ($property !== null) {
|
||||
$property->setAccessible(true);
|
||||
return \Illuminate\Support\Arr::wrap($property->getValue($loader));
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
public function collectFromPath(string $path, ?string $namespace = null)
|
||||
{
|
||||
$realPath = realpath($path);
|
||||
|
||||
if (!is_dir($realPath)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
if (!LaravelVsCode::isVendor($realPath)) {
|
||||
$this->directoriesToWatch[] = LaravelVsCode::relativePath($realPath);
|
||||
}
|
||||
|
||||
return array_map(
|
||||
fn($file) => $this->fromFile($file, $path, $namespace),
|
||||
\Illuminate\Support\Facades\File::allFiles($realPath),
|
||||
);
|
||||
}
|
||||
|
||||
protected function fromFile($file, $path, $namespace)
|
||||
{
|
||||
if (pathinfo($file, PATHINFO_EXTENSION) === 'json') {
|
||||
return $this->fromJsonFile($file, $path, $namespace);
|
||||
}
|
||||
|
||||
return $this->fromPhpFile($file, $path, $namespace);
|
||||
}
|
||||
|
||||
protected function linesFromJsonFile($file)
|
||||
{
|
||||
$contents = file_get_contents($file);
|
||||
|
||||
try {
|
||||
$json = json_decode($contents, true) ?? [];
|
||||
} catch (\Throwable $e) {
|
||||
return [[], []];
|
||||
}
|
||||
|
||||
if (count($json) === 0) {
|
||||
return [[], []];
|
||||
}
|
||||
|
||||
$lines = explode(PHP_EOL, $contents);
|
||||
$encoded = array_map(
|
||||
fn($k) => [json_encode($k), $k],
|
||||
array_keys($json),
|
||||
);
|
||||
$result = [];
|
||||
$searchRange = 2;
|
||||
|
||||
foreach ($encoded as $index => $keys) {
|
||||
// Pretty likely to be on the line that is the index, go happy path first
|
||||
if (strpos($lines[$index + 1] ?? '', $keys[0]) !== false) {
|
||||
$result[$keys[1]] = $index + 2;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Search around the index, like to be within 2 lines
|
||||
$start = max(0, $index - $searchRange);
|
||||
$end = min($index + $searchRange, count($lines) - 1);
|
||||
$current = $start;
|
||||
|
||||
while ($current <= $end) {
|
||||
if (strpos($lines[$current], $keys[0]) !== false) {
|
||||
$result[$keys[1]] = $current + 1;
|
||||
break;
|
||||
}
|
||||
|
||||
$current++;
|
||||
}
|
||||
}
|
||||
|
||||
return [$json, $result];
|
||||
}
|
||||
|
||||
protected function linesFromPhpFile($file)
|
||||
{
|
||||
$tokens = token_get_all(file_get_contents($file));
|
||||
$found = [];
|
||||
|
||||
$inArrayKey = true;
|
||||
$arrayDepth = -1;
|
||||
$depthKeys = [];
|
||||
|
||||
foreach ($tokens as $token) {
|
||||
if (!is_array($token)) {
|
||||
if ($token === '[') {
|
||||
$inArrayKey = true;
|
||||
$arrayDepth++;
|
||||
}
|
||||
|
||||
if ($token === ']') {
|
||||
$inArrayKey = true;
|
||||
$arrayDepth--;
|
||||
array_pop($depthKeys);
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($token[0] === T_DOUBLE_ARROW) {
|
||||
$inArrayKey = false;
|
||||
}
|
||||
|
||||
if ($inArrayKey && $token[0] === T_CONSTANT_ENCAPSED_STRING) {
|
||||
$depthKeys[$arrayDepth] = trim($token[1], '"\'');
|
||||
|
||||
\Illuminate\Support\Arr::set($found, implode('.', $depthKeys), $token[2]);
|
||||
}
|
||||
|
||||
if (!$inArrayKey && $token[0] === T_CONSTANT_ENCAPSED_STRING) {
|
||||
$inArrayKey = true;
|
||||
}
|
||||
}
|
||||
|
||||
return \Illuminate\Support\Arr::dot($found);
|
||||
}
|
||||
|
||||
protected function getDotted($key, $lang)
|
||||
{
|
||||
try {
|
||||
return \Illuminate\Support\Arr::dot(
|
||||
\Illuminate\Support\Arr::wrap(
|
||||
__($key, [], $lang),
|
||||
),
|
||||
);
|
||||
} catch (\Throwable $e) {
|
||||
// Most likely, in this case, the lang file doesn't return an array
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
protected function getPathIndex($file)
|
||||
{
|
||||
$path = LaravelVsCode::relativePath($file);
|
||||
|
||||
$index = $this->paths[$path] ?? null;
|
||||
|
||||
if ($index !== null) {
|
||||
return $index;
|
||||
}
|
||||
|
||||
$this->paths[$path] = count($this->paths);
|
||||
|
||||
return $this->paths[$path];
|
||||
}
|
||||
|
||||
protected function getValueIndex($value)
|
||||
{
|
||||
$index = $this->values[$value] ?? null;
|
||||
|
||||
if ($index !== null) {
|
||||
return $index;
|
||||
}
|
||||
|
||||
$this->values[$value] = count($this->values);
|
||||
|
||||
return $this->values[$value];
|
||||
}
|
||||
|
||||
protected function getParamIndex($key)
|
||||
{
|
||||
$processed = $this->params[$key] ?? null;
|
||||
|
||||
if ($processed) {
|
||||
return $processed[0];
|
||||
}
|
||||
|
||||
if (in_array($key, $this->emptyParams)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$params = preg_match_all("/\:([A-Za-z0-9_]+)/", $key, $matches)
|
||||
? $matches[1]
|
||||
: [];
|
||||
|
||||
if (count($params) === 0) {
|
||||
$this->emptyParams[] = $key;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
$paramKey = json_encode($params);
|
||||
|
||||
$paramIndex = $this->paramResults[$paramKey] ?? null;
|
||||
|
||||
if ($paramIndex !== null) {
|
||||
$this->params[$key] = [$paramIndex, $params];
|
||||
|
||||
return $paramIndex;
|
||||
}
|
||||
|
||||
$paramIndex = count($this->paramResults);
|
||||
|
||||
$this->paramResults[$paramKey] = $paramIndex;
|
||||
|
||||
$this->params[$key] = [$paramIndex, $params];
|
||||
|
||||
return $paramIndex;
|
||||
}
|
||||
|
||||
protected function fromJsonFile($file, $path, $namespace)
|
||||
{
|
||||
$lang = pathinfo($file, PATHINFO_FILENAME);
|
||||
|
||||
$relativePath = $this->getPathIndex($file);
|
||||
|
||||
$lines = \Illuminate\Support\Facades\File::lines($file);
|
||||
|
||||
return \Illuminate\Support\LazyCollection::make(function () use ($file, $lang, $relativePath, $lines) {
|
||||
[$json, $lines] = $this->linesFromJsonFile($file);
|
||||
|
||||
foreach ($json as $key => $value) {
|
||||
yield [
|
||||
"k" => $key,
|
||||
"la" => $lang,
|
||||
"vs" => [
|
||||
$this->getValueIndex($value),
|
||||
$relativePath,
|
||||
$lines[$key] ?? null,
|
||||
$this->getParamIndex($key),
|
||||
],
|
||||
];
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
protected function fromPhpFile($file, $path, $namespace)
|
||||
{
|
||||
$key = pathinfo($file, PATHINFO_FILENAME);
|
||||
|
||||
if ($namespace) {
|
||||
$key = "{$namespace}::{$key}";
|
||||
}
|
||||
|
||||
$lang = collect(explode(DIRECTORY_SEPARATOR, str_replace($path, "", $file)))
|
||||
->filter()
|
||||
->slice(-2, 1)
|
||||
->first();
|
||||
|
||||
$relativePath = $this->getPathIndex($file);
|
||||
$lines = $this->linesFromPhpFile($file);
|
||||
|
||||
return [
|
||||
"k" => $key,
|
||||
"la" => $lang,
|
||||
"vs" => \Illuminate\Support\LazyCollection::make(function () use ($key, $lang, $relativePath, $lines) {
|
||||
foreach ($this->getDotted($key, [], $lang) as $key => $value) {
|
||||
if (!array_key_exists($key, $lines) || is_array($value)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
yield [
|
||||
'k' => $key,
|
||||
'arr' => [
|
||||
$this->getValueIndex($value),
|
||||
$relativePath,
|
||||
$lines[$key],
|
||||
$this->getParamIndex($value),
|
||||
],
|
||||
];
|
||||
}
|
||||
}),
|
||||
];
|
||||
}
|
||||
};
|
||||
|
||||
echo json_encode([
|
||||
'default' => \Illuminate\Support\Facades\App::currentLocale(),
|
||||
'translations' => $translator->all(),
|
||||
'languages' => $translator->languages,
|
||||
'paths' => array_keys($translator->paths),
|
||||
'values' => array_keys($translator->values),
|
||||
'params' => array_map(fn($p) => json_decode($p, true), array_keys($translator->paramResults)),
|
||||
'to_watch' => $translator->directoriesToWatch,
|
||||
]);
|
||||
|
||||
echo LaravelVsCode::outputMarker('END_OUTPUT');
|
||||
|
||||
exit(0);
|
||||
@@ -0,0 +1,164 @@
|
||||
<?php
|
||||
|
||||
|
||||
error_reporting(E_ERROR | E_PARSE);
|
||||
|
||||
define('LARAVEL_START', microtime(true));
|
||||
|
||||
require_once __DIR__ . '/../autoload.php';
|
||||
|
||||
class LaravelVsCode
|
||||
{
|
||||
public static function relativePath($path)
|
||||
{
|
||||
if (!str_contains($path, base_path())) {
|
||||
return (string) $path;
|
||||
}
|
||||
|
||||
return ltrim(str_replace(base_path(), '', realpath($path) ?: $path), DIRECTORY_SEPARATOR);
|
||||
}
|
||||
|
||||
public static function isVendor($path)
|
||||
{
|
||||
return str_contains($path, base_path("vendor"));
|
||||
}
|
||||
|
||||
public static function outputMarker($key)
|
||||
{
|
||||
return '__VSCODE_LARAVEL_' . $key . '__';
|
||||
}
|
||||
|
||||
public static function startupError(\Throwable $e)
|
||||
{
|
||||
throw new Error(self::outputMarker('STARTUP_ERROR') . ': ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
$app = require_once __DIR__ . '/../../bootstrap/app.php';
|
||||
} catch (\Throwable $e) {
|
||||
LaravelVsCode::startupError($e);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$app->register(new class($app) extends \Illuminate\Support\ServiceProvider
|
||||
{
|
||||
public function boot()
|
||||
{
|
||||
config([
|
||||
'logging.channels.null' => [
|
||||
'driver' => 'monolog',
|
||||
'handler' => \Monolog\Handler\NullHandler::class,
|
||||
],
|
||||
'logging.default' => 'null',
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
try {
|
||||
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
|
||||
$kernel->bootstrap();
|
||||
} catch (\Throwable $e) {
|
||||
LaravelVsCode::startupError($e);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
echo LaravelVsCode::outputMarker('START_OUTPUT');
|
||||
|
||||
collect(glob(base_path('**/Models/*.php')))->each(fn($file) => include_once($file));
|
||||
|
||||
$modelPolicies = collect(get_declared_classes())
|
||||
->filter(fn($class) => is_subclass_of($class, \Illuminate\Database\Eloquent\Model::class))
|
||||
->filter(fn($class) => !in_array($class, [
|
||||
\Illuminate\Database\Eloquent\Relations\Pivot::class,
|
||||
\Illuminate\Foundation\Auth\User::class,
|
||||
]))
|
||||
->flatMap(fn($class) => [
|
||||
$class => \Illuminate\Support\Facades\Gate::getPolicyFor($class),
|
||||
])
|
||||
->filter(fn($policy) => $policy !== null);
|
||||
|
||||
function vsCodeGetAuthenticatable() {
|
||||
try {
|
||||
$guard = auth()->guard();
|
||||
|
||||
$reflection = new \ReflectionClass($guard);
|
||||
|
||||
if (!$reflection->hasProperty("provider")) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$property = $reflection->getProperty("provider");
|
||||
$provider = $property->getValue($guard);
|
||||
|
||||
if ($provider instanceof \Illuminate\Auth\EloquentUserProvider) {
|
||||
$providerReflection = new \ReflectionClass($provider);
|
||||
$modelProperty = $providerReflection->getProperty("model");
|
||||
|
||||
return str($modelProperty->getValue($provider))->prepend("\\")->toString();
|
||||
}
|
||||
|
||||
if ($provider instanceof \Illuminate\Auth\DatabaseUserProvider) {
|
||||
return str(\Illuminate\Auth\GenericUser::class)->prepend("\\")->toString();
|
||||
}
|
||||
} catch (\Exception | \Throwable $e) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
function vsCodeGetPolicyInfo($policy, $model)
|
||||
{
|
||||
$methods = (new ReflectionClass($policy))->getMethods();
|
||||
|
||||
return collect($methods)->map(fn(ReflectionMethod $method) => [
|
||||
'key' => $method->getName(),
|
||||
'uri' => $method->getFileName(),
|
||||
'policy' => is_string($policy) ? $policy : get_class($policy),
|
||||
'model' => $model,
|
||||
'line' => $method->getStartLine(),
|
||||
])->filter(fn($ability) => !in_array($ability['key'], ['allow', 'deny']));
|
||||
}
|
||||
|
||||
echo json_encode([
|
||||
'authenticatable' => vsCodeGetAuthenticatable(),
|
||||
'policies' => collect(\Illuminate\Support\Facades\Gate::abilities())
|
||||
->map(function ($policy, $key) {
|
||||
$reflection = new \ReflectionFunction($policy);
|
||||
$policyClass = null;
|
||||
$closureThis = $reflection->getClosureThis();
|
||||
|
||||
if ($closureThis !== null) {
|
||||
if (get_class($closureThis) === \Illuminate\Auth\Access\Gate::class) {
|
||||
$vars = $reflection->getClosureUsedVariables();
|
||||
|
||||
if (isset($vars['callback'])) {
|
||||
[$policyClass, $method] = explode('@', $vars['callback']);
|
||||
|
||||
$reflection = new \ReflectionMethod($policyClass, $method);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return [
|
||||
'key' => $key,
|
||||
'uri' => $reflection->getFileName(),
|
||||
'policy' => $policyClass,
|
||||
'line' => $reflection->getStartLine(),
|
||||
];
|
||||
})
|
||||
->merge(
|
||||
collect(\Illuminate\Support\Facades\Gate::policies())->flatMap(fn($policy, $model) => vsCodeGetPolicyInfo($policy, $model)),
|
||||
)
|
||||
->merge(
|
||||
$modelPolicies->flatMap(fn($policy, $model) => vsCodeGetPolicyInfo($policy, $model)),
|
||||
)
|
||||
->values()
|
||||
->groupBy('key')
|
||||
->map(fn($item) => $item->map(fn($i) => \Illuminate\Support\Arr::except($i, 'key'))),
|
||||
]);
|
||||
|
||||
echo LaravelVsCode::outputMarker('END_OUTPUT');
|
||||
|
||||
exit(0);
|
||||
Vendored
+22
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
// autoload.php @generated by Composer
|
||||
|
||||
if (PHP_VERSION_ID < 50600) {
|
||||
if (!headers_sent()) {
|
||||
header('HTTP/1.1 500 Internal Server Error');
|
||||
}
|
||||
$err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
|
||||
if (!ini_get('display_errors')) {
|
||||
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
|
||||
fwrite(STDERR, $err);
|
||||
} elseif (!headers_sent()) {
|
||||
echo $err;
|
||||
}
|
||||
}
|
||||
throw new RuntimeException($err);
|
||||
}
|
||||
|
||||
require_once __DIR__ . '/composer/autoload_real.php';
|
||||
|
||||
return ComposerAutoloaderInit88970a0117c062eed55fa8728fc43833::getLoader();
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
## Code of Conduct
|
||||
This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct).
|
||||
For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact
|
||||
opensource-codeofconduct@amazon.com with any additional questions or comments.
|
||||
Vendored
+175
@@ -0,0 +1,175 @@
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
Vendored
+117
@@ -0,0 +1,117 @@
|
||||
# AWS Common Runtime PHP bindings
|
||||
|
||||
## Requirements
|
||||
|
||||
* PHP 5.5+ on UNIX platforms, 7.2+ on Windows
|
||||
* CMake 3.x
|
||||
* GCC 4.4+, clang 3.8+ on UNIX, Visual Studio build tools on Windows
|
||||
* Tests require [Composer](https://getcomposer.org)
|
||||
|
||||
## Installing with Composer and PECL
|
||||
|
||||
The package has two different package published to [composer](https://packagist.org/packages/aws/aws-crt-php) and [PECL](https://pecl.php.net/package/awscrt).
|
||||
|
||||
On UNIX, you can get the package from package manager or build from source:
|
||||
|
||||
```
|
||||
pecl install awscrt
|
||||
composer require aws/aws-crt-php
|
||||
```
|
||||
|
||||
On Windows, you need to build from source as instruction written below for the native extension `php_awscrt.dll` . And, follow https://www.php.net/manual/en/install.pecl.windows.php#install.pecl.windows.loading to load extension. After that:
|
||||
|
||||
```
|
||||
composer require aws/aws-crt-php
|
||||
```
|
||||
|
||||
## Building from Github source
|
||||
|
||||
```sh
|
||||
$ git clone --recursive https://github.com/awslabs/aws-crt-php.git
|
||||
$ cd aws-crt-php
|
||||
$ phpize
|
||||
$ ./configure
|
||||
$ make
|
||||
$ ./dev-scripts/run_tests.sh
|
||||
```
|
||||
|
||||
## Building on Windows
|
||||
|
||||
### Requirements for Windows
|
||||
|
||||
* Ensure you have the [windows PHP SDK](https://github.com/microsoft/php-sdk-binary-tools) (this example assumes installation of the SDK to C:\php-sdk and that you've checked out the PHP source to php-src within the build directory) and it works well on your machine.
|
||||
|
||||
* Ensure you have "Development package (SDK to develop PHP extensions)" and PHP available from your system path. You can download them from https://windows.php.net/download/. You can check if they are available by running `phpize -v` and `php -v`
|
||||
|
||||
### Instructions
|
||||
|
||||
From Command Prompt (not powershell). The instruction is based on Visual Studio 2019 on 64bit Windows.
|
||||
|
||||
```bat
|
||||
> git clone --recursive https://github.com/awslabs/aws-crt-php.git
|
||||
> git clone https://github.com/microsoft/php-sdk-binary-tools.git C:\php-sdk
|
||||
> C:\php-sdk\phpsdk-vs16-x64.bat
|
||||
|
||||
C:\php-sdk\
|
||||
$ cd <your-path-to-aws-crt-php>
|
||||
|
||||
<your-path-to-aws-crt-php>\
|
||||
$ phpize
|
||||
|
||||
# --with-prefix only required when your php runtime in system path is different than the runtime you wish to use.
|
||||
<your-path-to-aws-crt-php>\
|
||||
$ configure --enable-awscrt=shared --with-prefix=<your-path-to-php-prefix>
|
||||
|
||||
<your-path-to-aws-crt-php>\
|
||||
$ nmake
|
||||
|
||||
<your-path-to-aws-crt-php>\
|
||||
$ nmake generate-php-ini
|
||||
|
||||
# check .\php-win.ini, it now has the full path to php_awscrt.dll that you can manually load to your php runtime, or you can run the following command to run tests and load the required native extension for awscrt.
|
||||
<your-path-to-aws-crt-php>\
|
||||
$ .\dev-scripts\run_tests.bat <your-path-to-php-binary>
|
||||
```
|
||||
|
||||
Note: for VS2017, Cmake will default to build for Win32, refer to [here](https://cmake.org/cmake/help/latest/generator/Visual%20Studio%2015%202017.html). If you are building for x64 php, you can set environment variable as follow to let cmake pick x64 compiler.
|
||||
|
||||
```bat
|
||||
set CMAKE_GENERATOR=Visual Studio 15 2017
|
||||
set CMAKE_GENERATOR_PLATFORM=x64
|
||||
```
|
||||
|
||||
## Debugging
|
||||
|
||||
Using [PHPBrew](https://github.com/phpbrew/phpbrew) to build/manage multiple versions of PHP is helpful.
|
||||
|
||||
Note: You must use a debug build of PHP to debug native extensions.
|
||||
See the [PHP Internals Book](https://www.phpinternalsbook.com/php7/build_system/building_php.html) for more info
|
||||
|
||||
```shell
|
||||
# PHP 8 example
|
||||
$ phpbrew install --stdout -j 8 8.0 +default -- CFLAGS=-Wno-error --disable-cgi --enable-debug
|
||||
# PHP 5.5 example
|
||||
$ phpbrew install --stdout -j 8 5.5 +default -openssl -mbstring -- CFLAGS="-w -Wno-error" --enable-debug --with-zlib=/usr/local/opt/zlib
|
||||
$ phpbrew switch php-8.0.6 # or whatever version is current, it'll be at the end of the build output
|
||||
$ phpize
|
||||
$ ./configure
|
||||
$ make CMAKE_BUILD_TYPE=Debug
|
||||
```
|
||||
|
||||
Ensure that the php you launch from your debugger is the result of `which php` , not just
|
||||
the system default php.
|
||||
|
||||
## Security
|
||||
|
||||
See [CONTRIBUTING](CONTRIBUTING.md#security-issue-notifications) for more information.
|
||||
|
||||
## Known OpenSSL related issue (Unix only)
|
||||
|
||||
* When your php loads a different version of openssl than your system openssl version, awscrt may fail to load or weirdly crash. You can find the openssl version php linked via: `php -i | grep 'OpenSSL'`, and awscrt linked from the build log, which will be `Found OpenSSL: * (found version *)`
|
||||
|
||||
The easiest workaround to those issue is to build from source and get aws-lc for awscrt to depend on instead.
|
||||
TO do that, same instructions as [here](#building-from-github-source), but use `USE_OPENSSL=OFF make` instead of `make`
|
||||
|
||||
## License
|
||||
|
||||
This project is licensed under the Apache-2.0 License.
|
||||
Vendored
+35
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"name": "aws/aws-crt-php",
|
||||
"homepage": "https://github.com/awslabs/aws-crt-php",
|
||||
"description": "AWS Common Runtime for PHP",
|
||||
"keywords": ["aws","amazon","sdk","crt"],
|
||||
"type": "library",
|
||||
"authors": [
|
||||
{
|
||||
"name": "AWS SDK Common Runtime Team",
|
||||
"email": "aws-sdk-common-runtime@amazon.com"
|
||||
}
|
||||
],
|
||||
"minimum-stability": "alpha",
|
||||
"require": {
|
||||
"php": ">=5.5"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit":"^4.8.35||^5.6.3||^9.5",
|
||||
"yoast/phpunit-polyfills": "^1.0"
|
||||
},
|
||||
"autoload": {
|
||||
"classmap": [
|
||||
"src/"
|
||||
]
|
||||
},
|
||||
"suggest": {
|
||||
"ext-awscrt": "Make sure you install awscrt native extension to use any of the functionality."
|
||||
},
|
||||
"scripts": {
|
||||
"test": "./dev-scripts/run_tests.sh",
|
||||
"test-extension": "@test",
|
||||
"test-win": ".\\dev-scripts\\run_tests.bat"
|
||||
},
|
||||
"license": "Apache-2.0"
|
||||
}
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
#!/usr/bin/env python3
|
||||
import argparse
|
||||
import os
|
||||
from pathlib import Path
|
||||
import re
|
||||
from subprocess import list2cmdline, run
|
||||
from tempfile import NamedTemporaryFile
|
||||
|
||||
CLANG_FORMAT_VERSION = '18.1.6'
|
||||
|
||||
INCLUDE_REGEX = re.compile(r'^ext/.*\.(c|h|inl)$')
|
||||
EXCLUDE_REGEX = re.compile(r'^$')
|
||||
|
||||
arg_parser = argparse.ArgumentParser(description="Check with clang-format")
|
||||
arg_parser.add_argument('-i', '--inplace-edit', action='store_true',
|
||||
help="Edit files inplace")
|
||||
args = arg_parser.parse_args()
|
||||
|
||||
os.chdir(Path(__file__).parent)
|
||||
|
||||
# create file containing list of all files to format
|
||||
filepaths_file = NamedTemporaryFile(delete=False)
|
||||
for dirpath, dirnames, filenames in os.walk('.'):
|
||||
for filename in filenames:
|
||||
# our regexes expect filepath to use forward slash
|
||||
filepath = Path(dirpath, filename).as_posix()
|
||||
if not INCLUDE_REGEX.match(filepath):
|
||||
continue
|
||||
if EXCLUDE_REGEX.match(filepath):
|
||||
continue
|
||||
|
||||
filepaths_file.write(f"{filepath}\n".encode())
|
||||
filepaths_file.close()
|
||||
|
||||
# use pipx to run clang-format from PyPI
|
||||
# this is a simple way to run the same clang-format version regardless of OS
|
||||
cmd = ['pipx', 'run', f'clang-format=={CLANG_FORMAT_VERSION}',
|
||||
f'--files={filepaths_file.name}']
|
||||
if args.inplace_edit:
|
||||
cmd += ['-i']
|
||||
else:
|
||||
cmd += ['--Werror', '--dry-run']
|
||||
|
||||
print(f"{Path.cwd()}$ {list2cmdline(cmd)}")
|
||||
if run(cmd).returncode:
|
||||
exit(1)
|
||||
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0.
|
||||
*/
|
||||
namespace AWS\CRT\Auth;
|
||||
|
||||
use AWS\CRT\NativeResource as NativeResource;
|
||||
use AWS\CRT\Options as Options;
|
||||
|
||||
/**
|
||||
* Represents a set of AWS credentials
|
||||
*
|
||||
* @param array options:
|
||||
* - string access_key_id - AWS Access Key Id
|
||||
* - string secret_access_key - AWS Secret Access Key
|
||||
* - string session_token - Optional STS session token
|
||||
* - int expiration_timepoint_seconds - Optional time to expire these credentials
|
||||
*/
|
||||
final class AwsCredentials extends NativeResource {
|
||||
|
||||
static function defaults() {
|
||||
return [
|
||||
'access_key_id' => '',
|
||||
'secret_access_key' => '',
|
||||
'session_token' => '',
|
||||
'expiration_timepoint_seconds' => 0,
|
||||
];
|
||||
}
|
||||
|
||||
private $access_key_id;
|
||||
private $secret_access_key;
|
||||
private $session_token;
|
||||
private $expiration_timepoint_seconds = 0;
|
||||
|
||||
public function __get($name) {
|
||||
return $this->$name;
|
||||
}
|
||||
|
||||
function __construct(array $options = []) {
|
||||
parent::__construct();
|
||||
|
||||
$options = new Options($options, self::defaults());
|
||||
$this->access_key_id = $options->access_key_id->asString();
|
||||
$this->secret_access_key = $options->secret_access_key->asString();
|
||||
$this->session_token = $options->session_token ? $options->session_token->asString() : null;
|
||||
$this->expiration_timepoint_seconds = $options->expiration_timepoint_seconds->asInt();
|
||||
|
||||
if (strlen($this->access_key_id) == 0) {
|
||||
throw new \InvalidArgumentException("access_key_id must be provided");
|
||||
}
|
||||
if (strlen($this->secret_access_key) == 0) {
|
||||
throw new \InvalidArgumentException("secret_access_key must be provided");
|
||||
}
|
||||
|
||||
$creds_options = self::$crt->aws_credentials_options_new();
|
||||
self::$crt->aws_credentials_options_set_access_key_id($creds_options, $this->access_key_id);
|
||||
self::$crt->aws_credentials_options_set_secret_access_key($creds_options, $this->secret_access_key);
|
||||
self::$crt->aws_credentials_options_set_session_token($creds_options, $this->session_token);
|
||||
self::$crt->aws_credentials_options_set_expiration_timepoint_seconds($creds_options, $this->expiration_timepoint_seconds);
|
||||
$this->acquire(self::$crt->aws_credentials_new($creds_options));
|
||||
self::$crt->aws_credentials_options_release($creds_options);
|
||||
}
|
||||
|
||||
function __destruct() {
|
||||
self::$crt->aws_credentials_release($this->release());
|
||||
parent::__destruct();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0.
|
||||
*/
|
||||
namespace AWS\CRT\Auth;
|
||||
|
||||
use AWS\CRT\NativeResource as NativeResource;
|
||||
|
||||
/**
|
||||
* Base class for credentials providers
|
||||
*/
|
||||
abstract class CredentialsProvider extends NativeResource {
|
||||
|
||||
function __construct(array $options = []) {
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
function __destruct() {
|
||||
self::$crt->credentials_provider_release($this->release());
|
||||
parent::__destruct();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0.
|
||||
*/
|
||||
namespace AWS\CRT\Auth;
|
||||
|
||||
use AWS\CRT\IO\InputStream;
|
||||
use AWS\CRT\NativeResource as NativeResource;
|
||||
|
||||
class Signable extends NativeResource {
|
||||
|
||||
public static function fromHttpRequest($http_message) {
|
||||
return new Signable(function() use ($http_message) {
|
||||
return self::$crt->signable_new_from_http_request($http_message->native);
|
||||
});
|
||||
}
|
||||
|
||||
public static function fromChunk($chunk_stream, $previous_signature="") {
|
||||
if (!($chunk_stream instanceof InputStream)) {
|
||||
$chunk_stream = new InputStream($chunk_stream);
|
||||
}
|
||||
return new Signable(function() use($chunk_stream, $previous_signature) {
|
||||
return self::$crt->signable_new_from_chunk($chunk_stream->native, $previous_signature);
|
||||
});
|
||||
}
|
||||
|
||||
public static function fromCanonicalRequest($canonical_request) {
|
||||
return new Signable(function() use($canonical_request) {
|
||||
return self::$crt->signable_new_from_canonical_request($canonical_request);
|
||||
});
|
||||
}
|
||||
|
||||
protected function __construct($ctor) {
|
||||
parent::__construct();
|
||||
$this->acquire($ctor());
|
||||
}
|
||||
|
||||
function __destruct() {
|
||||
self::$crt->signable_release($this->release());
|
||||
parent::__destruct();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0.
|
||||
*/
|
||||
namespace AWS\CRT\Auth;
|
||||
|
||||
class SignatureType {
|
||||
const HTTP_REQUEST_HEADERS = 0;
|
||||
const HTTP_REQUEST_QUERY_PARAMS = 1;
|
||||
const HTTP_REQUEST_CHUNK = 2;
|
||||
const HTTP_REQUEST_EVENT = 3;
|
||||
const CANONICAL_REQUEST_HEADERS = 4;
|
||||
const CANONICAL_REQUEST_QUERY_PARAMS = 5;
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0.
|
||||
*/
|
||||
namespace AWS\CRT\Auth;
|
||||
|
||||
class SignedBodyHeaderType {
|
||||
const NONE = 0;
|
||||
const X_AMZ_CONTENT_SHA256 = 1;
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0.
|
||||
*/
|
||||
namespace AWS\CRT\Auth;
|
||||
|
||||
use AWS\CRT\NativeResource;
|
||||
|
||||
abstract class Signing extends NativeResource {
|
||||
static function signRequestAws($signable, $signing_config, $on_complete) {
|
||||
return self::$crt->sign_request_aws($signable->native, $signing_config->native,
|
||||
function($result, $error_code) use ($on_complete) {
|
||||
$signing_result = SigningResult::fromNative($result);
|
||||
$on_complete($signing_result, $error_code);
|
||||
}, null);
|
||||
}
|
||||
|
||||
static function testVerifySigV4ASigning($signable, $signing_config, $expected_canonical_request, $signature, $ecc_key_pub_x, $ecc_key_pub_y) {
|
||||
return self::$crt->test_verify_sigv4a_signing($signable, $signing_config, $expected_canonical_request, $signature, $ecc_key_pub_x, $ecc_key_pub_y);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0.
|
||||
*/
|
||||
namespace AWS\CRT\Auth;
|
||||
|
||||
class SigningAlgorithm {
|
||||
const SIGv4 = 0;
|
||||
const SIGv4_ASYMMETRIC = 1;
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0.
|
||||
*/
|
||||
namespace AWS\CRT\Auth;
|
||||
|
||||
use AWS\CRT\NativeResource as NativeResource;
|
||||
use AWS\CRT\Options as Options;
|
||||
|
||||
class SigningConfigAWS extends NativeResource {
|
||||
|
||||
public static function defaults() {
|
||||
return [
|
||||
'algorithm' => SigningAlgorithm::SIGv4,
|
||||
'signature_type' => SignatureType::HTTP_REQUEST_HEADERS,
|
||||
'credentials_provider' => null,
|
||||
'region' => null,
|
||||
'service' => null,
|
||||
'use_double_uri_encode' => false,
|
||||
'should_normalize_uri_path' => false,
|
||||
'omit_session_token' => false,
|
||||
'signed_body_value' => null,
|
||||
'signed_body_header_type' => SignedBodyHeaderType::NONE,
|
||||
'expiration_in_seconds' => 0,
|
||||
'date' => time(),
|
||||
'should_sign_header' => null,
|
||||
];
|
||||
}
|
||||
|
||||
private $options;
|
||||
|
||||
public function __construct(array $options = []) {
|
||||
parent::__construct();
|
||||
$this->options = $options = new Options($options, self::defaults());
|
||||
$sc = $this->acquire(self::$crt->signing_config_aws_new());
|
||||
self::$crt->signing_config_aws_set_algorithm($sc, $options->algorithm->asInt());
|
||||
self::$crt->signing_config_aws_set_signature_type($sc, $options->signature_type->asInt());
|
||||
if ($credentials_provider = $options->credentials_provider->asObject()) {
|
||||
self::$crt->signing_config_aws_set_credentials_provider(
|
||||
$sc,
|
||||
$credentials_provider->native);
|
||||
}
|
||||
self::$crt->signing_config_aws_set_region(
|
||||
$sc, $options->region->asString());
|
||||
self::$crt->signing_config_aws_set_service(
|
||||
$sc, $options->service->asString());
|
||||
self::$crt->signing_config_aws_set_use_double_uri_encode(
|
||||
$sc, $options->use_double_uri_encode->asBool());
|
||||
self::$crt->signing_config_aws_set_should_normalize_uri_path(
|
||||
$sc, $options->should_normalize_uri_path->asBool());
|
||||
self::$crt->signing_config_aws_set_omit_session_token(
|
||||
$sc, $options->omit_session_token->asBool());
|
||||
self::$crt->signing_config_aws_set_signed_body_value(
|
||||
$sc, $options->signed_body_value->asString());
|
||||
self::$crt->signing_config_aws_set_signed_body_header_type(
|
||||
$sc, $options->signed_body_header_type->asInt());
|
||||
self::$crt->signing_config_aws_set_expiration_in_seconds(
|
||||
$sc, $options->expiration_in_seconds->asInt());
|
||||
self::$crt->signing_config_aws_set_date($sc, $options->date->asInt());
|
||||
if ($should_sign_header = $options->should_sign_header->asCallable()) {
|
||||
self::$crt->signing_config_aws_set_should_sign_header_fn($sc, $should_sign_header);
|
||||
}
|
||||
}
|
||||
|
||||
function __destruct()
|
||||
{
|
||||
self::$crt->signing_config_aws_release($this->release());
|
||||
parent::__destruct();
|
||||
}
|
||||
|
||||
public function __get($name) {
|
||||
return $this->options->get($name);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0.
|
||||
*/
|
||||
namespace AWS\CRT\Auth;
|
||||
|
||||
use AWS\CRT\NativeResource;
|
||||
use AWS\CRT\HTTP\Request;
|
||||
|
||||
class SigningResult extends NativeResource {
|
||||
protected function __construct($native) {
|
||||
parent::__construct();
|
||||
|
||||
$this->acquire($native);
|
||||
}
|
||||
|
||||
function __destruct() {
|
||||
// No destruction necessary, SigningResults are transient, just release
|
||||
$this->release();
|
||||
parent::__destruct();
|
||||
}
|
||||
|
||||
public static function fromNative($ptr) {
|
||||
return new SigningResult($ptr);
|
||||
}
|
||||
|
||||
public function applyToHttpRequest(&$http_request) {
|
||||
self::$crt->signing_result_apply_to_http_request($this->native, $http_request->native);
|
||||
// Update http_request from native
|
||||
$http_request = Request::unmarshall($http_request->toBlob());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0.
|
||||
*/
|
||||
namespace AWS\CRT\Auth;
|
||||
|
||||
/**
|
||||
* Provides a static set of AWS credentials
|
||||
*
|
||||
* @param array options:
|
||||
* - string access_key_id - AWS Access Key Id
|
||||
* - string secret_access_key - AWS Secret Access Key
|
||||
* - string session_token - Optional STS session token
|
||||
*/
|
||||
final class StaticCredentialsProvider extends CredentialsProvider {
|
||||
|
||||
private $credentials;
|
||||
|
||||
public function __get($name) {
|
||||
return $this->$name;
|
||||
}
|
||||
|
||||
function __construct(array $options = []) {
|
||||
parent::__construct();
|
||||
$this->credentials = new AwsCredentials($options);
|
||||
|
||||
$provider_options = self::$crt->credentials_provider_static_options_new();
|
||||
self::$crt->credentials_provider_static_options_set_access_key_id($provider_options, $this->credentials->access_key_id);
|
||||
self::$crt->credentials_provider_static_options_set_secret_access_key($provider_options, $this->credentials->secret_access_key);
|
||||
self::$crt->credentials_provider_static_options_set_session_token($provider_options, $this->credentials->session_token);
|
||||
$this->acquire(self::$crt->credentials_provider_static_new($provider_options));
|
||||
self::$crt->credentials_provider_static_options_release($provider_options);
|
||||
}
|
||||
}
|
||||
+358
@@ -0,0 +1,358 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0.
|
||||
*/
|
||||
namespace AWS\CRT;
|
||||
|
||||
use AWS\CRT\Internal\Extension;
|
||||
|
||||
use \RuntimeException;
|
||||
|
||||
/**
|
||||
* Wrapper for the interface to the CRT. There only ever needs to be one of these, but
|
||||
* additional instances won't cost anything other than their memory.
|
||||
* Creating an instance of any NativeResource will activate the CRT binding. User code
|
||||
* should only need to create one of these if they are only accessing CRT:: static functions.
|
||||
*/
|
||||
final class CRT {
|
||||
|
||||
private static $impl = null;
|
||||
private static $refcount = 0;
|
||||
|
||||
function __construct() {
|
||||
if (is_null(self::$impl)) {
|
||||
try {
|
||||
self::$impl = new Extension();
|
||||
} catch (RuntimeException $rex) {
|
||||
throw new RuntimeException("Unable to initialize AWS CRT via awscrt extension: \n$rex", -1);
|
||||
}
|
||||
}
|
||||
++self::$refcount;
|
||||
}
|
||||
|
||||
function __destruct() {
|
||||
if (--self::$refcount == 0) {
|
||||
self::$impl = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool whether or not the CRT is currently loaded
|
||||
*/
|
||||
public static function isLoaded() {
|
||||
return !is_null(self::$impl);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool whether or not the CRT is available via one of the possible backends
|
||||
*/
|
||||
public static function isAvailable() {
|
||||
try {
|
||||
new CRT();
|
||||
return true;
|
||||
} catch (RuntimeException $ex) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return integer last error code reported within the CRT
|
||||
*/
|
||||
public static function last_error() {
|
||||
return self::$impl->aws_crt_last_error();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param integer $error Error code from the CRT, usually delivered via callback or {@see last_error}
|
||||
* @return string Human-readable description of the provided error code
|
||||
*/
|
||||
public static function error_str($error) {
|
||||
return self::$impl->aws_crt_error_str((int) $error);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param integer $error Error code from the CRT, usually delivered via callback or {@see last_error}
|
||||
* @return string Name/enum identifier for the provided error code
|
||||
*/
|
||||
public static function error_name($error) {
|
||||
return self::$impl->aws_crt_error_name((int) $error);
|
||||
}
|
||||
|
||||
public static function log_to_stdout() {
|
||||
return self::$impl->aws_crt_log_to_stdout();
|
||||
}
|
||||
|
||||
public static function log_to_stderr() {
|
||||
return self::$impl->aws_crt_log_to_stderr();
|
||||
}
|
||||
|
||||
public static function log_to_file($filename) {
|
||||
return self::$impl->aws_crt_log_to_file($filename);
|
||||
}
|
||||
|
||||
public static function log_to_stream($stream) {
|
||||
return self::$impl->aws_crt_log_to_stream($stream);
|
||||
}
|
||||
|
||||
public static function log_set_level($level) {
|
||||
return self::$impl->aws_crt_log_set_level($level);
|
||||
}
|
||||
|
||||
public static function log_stop() {
|
||||
return self::$impl->aws_crt_log_stop();
|
||||
}
|
||||
|
||||
public static function log_message($level, $message) {
|
||||
return self::$impl->aws_crt_log_message($level, $message);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return object Pointer to native event_loop_group_options
|
||||
*/
|
||||
function event_loop_group_options_new() {
|
||||
return self::$impl->aws_crt_event_loop_group_options_new();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param object $elg_options Pointer to native event_loop_group_options
|
||||
*/
|
||||
function event_loop_group_options_release($elg_options) {
|
||||
self::$impl->aws_crt_event_loop_group_options_release($elg_options);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param object $elg_options Pointer to native event_loop_group_options
|
||||
* @param integer $max_threads Maximum number of threads to allow the event loop group to use, default: 0/1 per CPU core
|
||||
*/
|
||||
function event_loop_group_options_set_max_threads($elg_options, $max_threads) {
|
||||
self::$impl->aws_crt_event_loop_group_options_set_max_threads($elg_options, (int)$max_threads);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param object Pointer to event_loop_group_options, {@see event_loop_group_options_new}
|
||||
* @return object Pointer to the new event loop group
|
||||
*/
|
||||
function event_loop_group_new($options) {
|
||||
return self::$impl->aws_crt_event_loop_group_new($options);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param object $elg Pointer to the event loop group to release
|
||||
*/
|
||||
function event_loop_group_release($elg) {
|
||||
self::$impl->aws_crt_event_loop_group_release($elg);
|
||||
}
|
||||
|
||||
/**
|
||||
* return object Pointer to native AWS credentials options
|
||||
*/
|
||||
function aws_credentials_options_new() {
|
||||
return self::$impl->aws_crt_credentials_options_new();
|
||||
}
|
||||
|
||||
function aws_credentials_options_release($options) {
|
||||
self::$impl->aws_crt_credentials_options_release($options);
|
||||
}
|
||||
|
||||
function aws_credentials_options_set_access_key_id($options, $access_key_id) {
|
||||
self::$impl->aws_crt_credentials_options_set_access_key_id($options, $access_key_id);
|
||||
}
|
||||
|
||||
function aws_credentials_options_set_secret_access_key($options, $secret_access_key) {
|
||||
self::$impl->aws_crt_credentials_options_set_secret_access_key($options, $secret_access_key);
|
||||
}
|
||||
|
||||
function aws_credentials_options_set_session_token($options, $session_token) {
|
||||
self::$impl->aws_crt_credentials_options_set_session_token($options, $session_token);
|
||||
}
|
||||
|
||||
function aws_credentials_options_set_expiration_timepoint_seconds($options, $expiration_timepoint_seconds) {
|
||||
self::$impl->aws_crt_credentials_options_set_expiration_timepoint_seconds($options, $expiration_timepoint_seconds);
|
||||
}
|
||||
|
||||
function aws_credentials_new($options) {
|
||||
return self::$impl->aws_crt_credentials_new($options);
|
||||
}
|
||||
|
||||
function aws_credentials_release($credentials) {
|
||||
self::$impl->aws_crt_credentials_release($credentials);
|
||||
}
|
||||
|
||||
function credentials_provider_release($provider) {
|
||||
self::$impl->aws_crt_credentials_provider_release($provider);
|
||||
}
|
||||
|
||||
function credentials_provider_static_options_new() {
|
||||
return self::$impl->aws_crt_credentials_provider_static_options_new();
|
||||
}
|
||||
|
||||
function credentials_provider_static_options_release($options) {
|
||||
self::$impl->aws_crt_credentials_provider_static_options_release($options);
|
||||
}
|
||||
|
||||
function credentials_provider_static_options_set_access_key_id($options, $access_key_id) {
|
||||
self::$impl->aws_crt_credentials_provider_static_options_set_access_key_id($options, $access_key_id);
|
||||
}
|
||||
|
||||
function credentials_provider_static_options_set_secret_access_key($options, $secret_access_key) {
|
||||
self::$impl->aws_crt_credentials_provider_static_options_set_secret_access_key($options, $secret_access_key);
|
||||
}
|
||||
|
||||
function credentials_provider_static_options_set_session_token($options, $session_token) {
|
||||
self::$impl->aws_crt_credentials_provider_static_options_set_session_token($options, $session_token);
|
||||
}
|
||||
|
||||
function credentials_provider_static_new($options) {
|
||||
return self::$impl->aws_crt_credentials_provider_static_new($options);
|
||||
}
|
||||
|
||||
function input_stream_options_new() {
|
||||
return self::$impl->aws_crt_input_stream_options_new();
|
||||
}
|
||||
|
||||
function input_stream_options_release($options) {
|
||||
self::$impl->aws_crt_input_stream_options_release($options);
|
||||
}
|
||||
|
||||
function input_stream_options_set_user_data($options, $user_data) {
|
||||
self::$impl->aws_crt_input_stream_options_set_user_data($options, $user_data);
|
||||
}
|
||||
|
||||
function input_stream_new($options) {
|
||||
return self::$impl->aws_crt_input_stream_new($options);
|
||||
}
|
||||
|
||||
function input_stream_release($stream) {
|
||||
self::$impl->aws_crt_input_stream_release($stream);
|
||||
}
|
||||
|
||||
function input_stream_seek($stream, $offset, $basis) {
|
||||
return self::$impl->aws_crt_input_stream_seek($stream, $offset, $basis);
|
||||
}
|
||||
|
||||
function input_stream_read($stream, $length) {
|
||||
return self::$impl->aws_crt_input_stream_read($stream, $length);
|
||||
}
|
||||
|
||||
function input_stream_eof($stream) {
|
||||
return self::$impl->aws_crt_input_stream_eof($stream);
|
||||
}
|
||||
|
||||
function input_stream_get_length($stream) {
|
||||
return self::$impl->aws_crt_input_stream_get_length($stream);
|
||||
}
|
||||
|
||||
function http_message_new_from_blob($blob) {
|
||||
return self::$impl->aws_crt_http_message_new_from_blob($blob);
|
||||
}
|
||||
|
||||
function http_message_to_blob($message) {
|
||||
return self::$impl->aws_crt_http_message_to_blob($message);
|
||||
}
|
||||
|
||||
function http_message_release($message) {
|
||||
self::$impl->aws_crt_http_message_release($message);
|
||||
}
|
||||
|
||||
function signing_config_aws_new() {
|
||||
return self::$impl->aws_crt_signing_config_aws_new();
|
||||
}
|
||||
|
||||
function signing_config_aws_release($signing_config) {
|
||||
return self::$impl->aws_crt_signing_config_aws_release($signing_config);
|
||||
}
|
||||
|
||||
function signing_config_aws_set_algorithm($signing_config, $algorithm) {
|
||||
self::$impl->aws_crt_signing_config_aws_set_algorithm($signing_config, (int)$algorithm);
|
||||
}
|
||||
|
||||
function signing_config_aws_set_signature_type($signing_config, $signature_type) {
|
||||
self::$impl->aws_crt_signing_config_aws_set_signature_type($signing_config, (int)$signature_type);
|
||||
}
|
||||
|
||||
function signing_config_aws_set_credentials_provider($signing_config, $credentials_provider) {
|
||||
self::$impl->aws_crt_signing_config_aws_set_credentials_provider($signing_config, $credentials_provider);
|
||||
}
|
||||
|
||||
function signing_config_aws_set_region($signing_config, $region) {
|
||||
self::$impl->aws_crt_signing_config_aws_set_region($signing_config, $region);
|
||||
}
|
||||
|
||||
function signing_config_aws_set_service($signing_config, $service) {
|
||||
self::$impl->aws_crt_signing_config_aws_set_service($signing_config, $service);
|
||||
}
|
||||
|
||||
function signing_config_aws_set_use_double_uri_encode($signing_config, $use_double_uri_encode) {
|
||||
self::$impl->aws_crt_signing_config_aws_set_use_double_uri_encode($signing_config, $use_double_uri_encode);
|
||||
}
|
||||
|
||||
function signing_config_aws_set_should_normalize_uri_path($signing_config, $should_normalize_uri_path) {
|
||||
self::$impl->aws_crt_signing_config_aws_set_should_normalize_uri_path($signing_config, $should_normalize_uri_path);
|
||||
}
|
||||
|
||||
function signing_config_aws_set_omit_session_token($signing_config, $omit_session_token) {
|
||||
self::$impl->aws_crt_signing_config_aws_set_omit_session_token($signing_config, $omit_session_token);
|
||||
}
|
||||
|
||||
function signing_config_aws_set_signed_body_value($signing_config, $signed_body_value) {
|
||||
self::$impl->aws_crt_signing_config_aws_set_signed_body_value($signing_config, $signed_body_value);
|
||||
}
|
||||
|
||||
function signing_config_aws_set_signed_body_header_type($signing_config, $signed_body_header_type) {
|
||||
self::$impl->aws_crt_signing_config_aws_set_signed_body_header_type($signing_config, $signed_body_header_type);
|
||||
}
|
||||
|
||||
function signing_config_aws_set_expiration_in_seconds($signing_config, $expiration_in_seconds) {
|
||||
self::$impl->aws_crt_signing_config_aws_set_expiration_in_seconds($signing_config, $expiration_in_seconds);
|
||||
}
|
||||
|
||||
function signing_config_aws_set_date($signing_config, $timestamp) {
|
||||
self::$impl->aws_crt_signing_config_aws_set_date($signing_config, $timestamp);
|
||||
}
|
||||
|
||||
function signing_config_aws_set_should_sign_header_fn($signing_config, $should_sign_header_fn) {
|
||||
self::$impl->aws_crt_signing_config_aws_set_should_sign_header_fn($signing_config, $should_sign_header_fn);
|
||||
}
|
||||
|
||||
function signable_new_from_http_request($http_message) {
|
||||
return self::$impl->aws_crt_signable_new_from_http_request($http_message);
|
||||
}
|
||||
|
||||
function signable_new_from_chunk($chunk_stream, $previous_signature) {
|
||||
return self::$impl->aws_crt_signable_new_from_chunk($chunk_stream, $previous_signature);
|
||||
}
|
||||
|
||||
function signable_new_from_canonical_request($canonical_request) {
|
||||
return self::$impl->aws_crt_signable_new_from_canonical_request($canonical_request);
|
||||
}
|
||||
|
||||
function signable_release($signable) {
|
||||
self::$impl->aws_crt_signable_release($signable);
|
||||
}
|
||||
|
||||
function signing_result_release($signing_result) {
|
||||
self::$impl->aws_crt_signing_result_release($signing_result);
|
||||
}
|
||||
|
||||
function signing_result_apply_to_http_request($signing_result, $http_message) {
|
||||
return self::$impl->aws_crt_signing_result_apply_to_http_request(
|
||||
$signing_result, $http_message);
|
||||
}
|
||||
|
||||
function sign_request_aws($signable, $signing_config, $on_complete, $user_data) {
|
||||
return self::$impl->aws_crt_sign_request_aws($signable, $signing_config, $on_complete, $user_data);
|
||||
}
|
||||
|
||||
function test_verify_sigv4a_signing($signable, $signing_config, $expected_canonical_request, $signature, $ecc_key_pub_x, $ecc_key_pub_y) {
|
||||
return self::$impl->aws_crt_test_verify_sigv4a_signing($signable, $signing_config, $expected_canonical_request, $signature, $ecc_key_pub_x, $ecc_key_pub_y);
|
||||
}
|
||||
|
||||
public static function crc32($input, $previous = 0) {
|
||||
return self::$impl->aws_crt_crc32($input, $previous);
|
||||
}
|
||||
|
||||
public static function crc32c($input, $previous = 0) {
|
||||
return self::$impl->aws_crt_crc32c($input, $previous);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0.
|
||||
*/
|
||||
namespace AWS\CRT\HTTP;
|
||||
|
||||
use AWS\CRT\Internal\Encoding;
|
||||
|
||||
final class Headers {
|
||||
private $headers;
|
||||
|
||||
public function __construct($headers = []) {
|
||||
$this->headers = $headers;
|
||||
}
|
||||
|
||||
public static function marshall($headers) {
|
||||
$buf = "";
|
||||
foreach ($headers->headers as $header => $value) {
|
||||
$buf .= Encoding::encodeString($header);
|
||||
$buf .= Encoding::encodeString($value);
|
||||
}
|
||||
return $buf;
|
||||
}
|
||||
|
||||
public static function unmarshall($buf) {
|
||||
$strings = Encoding::readStrings($buf);
|
||||
$headers = [];
|
||||
for ($idx = 0; $idx < count($strings);) {
|
||||
$headers[$strings[$idx++]] = $strings[$idx++];
|
||||
}
|
||||
return new Headers($headers);
|
||||
}
|
||||
|
||||
public function count() {
|
||||
return count($this->headers);
|
||||
}
|
||||
|
||||
public function get($header) {
|
||||
return isset($this->headers[$header]) ? $this->headers[$header] : null;
|
||||
}
|
||||
|
||||
public function set($header, $value) {
|
||||
$this->headers[$header] = $value;
|
||||
}
|
||||
|
||||
public function toArray() {
|
||||
return $this->headers;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0.
|
||||
*/
|
||||
namespace AWS\CRT\HTTP;
|
||||
|
||||
use AWS\CRT\NativeResource;
|
||||
use AWS\CRT\Internal\Encoding;
|
||||
|
||||
abstract class Message extends NativeResource {
|
||||
private $method;
|
||||
private $path;
|
||||
private $query;
|
||||
private $headers;
|
||||
|
||||
public function __construct($method, $path, $query = [], $headers = []) {
|
||||
parent::__construct();
|
||||
$this->method = $method;
|
||||
$this->path = $path;
|
||||
$this->query = $query;
|
||||
$this->headers = new Headers($headers);
|
||||
$this->acquire(self::$crt->http_message_new_from_blob(self::marshall($this)));
|
||||
}
|
||||
|
||||
public function __destruct() {
|
||||
self::$crt->http_message_release($this->release());
|
||||
parent::__destruct();
|
||||
}
|
||||
|
||||
public function toBlob() {
|
||||
return self::$crt->http_message_to_blob($this->native);
|
||||
}
|
||||
|
||||
protected static function marshall($msg) {
|
||||
$buf = "";
|
||||
$buf .= Encoding::encodeString($msg->method);
|
||||
$buf .= Encoding::encodeString($msg->pathAndQuery());
|
||||
$buf .= Headers::marshall($msg->headers);
|
||||
return $buf;
|
||||
}
|
||||
|
||||
protected static function _unmarshall($buf, $class=Message::class) {
|
||||
$method = Encoding::readString($buf);
|
||||
$path_and_query = Encoding::readString($buf);
|
||||
$parts = explode("?", $path_and_query, 2);
|
||||
$path = isset($parts[0]) ? $parts[0] : "";
|
||||
$query = isset($parts[1]) ? $parts[1] : "";
|
||||
$headers = Headers::unmarshall($buf);
|
||||
|
||||
// Turn query params back into a dictionary
|
||||
if (strlen($query)) {
|
||||
$query = rawurldecode($query);
|
||||
$query = explode("&", $query);
|
||||
$query = array_reduce($query, function($params, $pair) {
|
||||
list($param, $value) = explode("=", $pair, 2);
|
||||
$params[$param] = $value;
|
||||
return $params;
|
||||
}, []);
|
||||
} else {
|
||||
$query = [];
|
||||
}
|
||||
|
||||
return new $class($method, $path, $query, $headers->toArray());
|
||||
}
|
||||
|
||||
public function pathAndQuery() {
|
||||
$path = $this->path;
|
||||
$queries = [];
|
||||
foreach ($this->query as $param => $value) {
|
||||
$queries []= urlencode($param) . "=" . urlencode($value);
|
||||
}
|
||||
$query = implode("&", $queries);
|
||||
if (strlen($query)) {
|
||||
$path = implode("?", [$path, $query]);
|
||||
}
|
||||
return $path;
|
||||
}
|
||||
|
||||
public function method() {
|
||||
return $this->method;
|
||||
}
|
||||
|
||||
public function path() {
|
||||
return $this->path;
|
||||
}
|
||||
|
||||
public function query() {
|
||||
return $this->query;
|
||||
}
|
||||
|
||||
public function headers() {
|
||||
return $this->headers;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0.
|
||||
*/
|
||||
namespace AWS\CRT\HTTP;
|
||||
|
||||
use AWS\CRT\IO\InputStream;
|
||||
|
||||
class Request extends Message {
|
||||
private $body_stream = null;
|
||||
|
||||
public function __construct($method, $path, $query = [], $headers = [], $body_stream = null) {
|
||||
parent::__construct($method, $path, $query, $headers);
|
||||
if (!is_null($body_stream) && !($body_stream instanceof InputStream)) {
|
||||
throw new \InvalidArgumentException('body_stream must be an instance of ' . InputStream::class);
|
||||
}
|
||||
$this->body_stream = $body_stream;
|
||||
}
|
||||
|
||||
public static function marshall($request) {
|
||||
return parent::marshall($request);
|
||||
}
|
||||
|
||||
public static function unmarshall($buf) {
|
||||
return parent::_unmarshall($buf, Request::class);
|
||||
}
|
||||
|
||||
public function body_stream() {
|
||||
return $this->body_stream;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0.
|
||||
*/
|
||||
namespace AWS\CRT\HTTP;
|
||||
|
||||
class Response extends Message {
|
||||
private $status_code;
|
||||
|
||||
public function __construct($method, $path, $query, $headers, $status_code) {
|
||||
parent::__construct($method, $path, $query, $headers);
|
||||
$this->status_code = $status_code;
|
||||
}
|
||||
|
||||
public static function marshall($response) {
|
||||
return parent::marshall($response);
|
||||
}
|
||||
|
||||
public static function unmarshall($buf) {
|
||||
return parent::_unmarshall($buf, Response::class);
|
||||
}
|
||||
|
||||
public function status_code() {
|
||||
return $this->status_code;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0.
|
||||
*/
|
||||
namespace AWS\CRT\IO;
|
||||
|
||||
use AWS\CRT\NativeResource as NativeResource;
|
||||
use AWS\CRT\Options as Options;
|
||||
|
||||
/**
|
||||
* Represents 1 or more event loops (1 per thread) for doing I/O and background tasks.
|
||||
* Typically, every application has one EventLoopGroup.
|
||||
*
|
||||
* @param array options:
|
||||
* - int num_threads - Number of worker threads in the EventLoopGroup. Defaults to 0/1 per logical core.
|
||||
*/
|
||||
final class EventLoopGroup extends NativeResource {
|
||||
|
||||
static function defaults() {
|
||||
return [
|
||||
'max_threads' => 0,
|
||||
];
|
||||
}
|
||||
|
||||
function __construct(array $options = []) {
|
||||
parent::__construct();
|
||||
$options = new Options($options, self::defaults());
|
||||
$elg_options = self::$crt->event_loop_group_options_new();
|
||||
self::$crt->event_loop_group_options_set_max_threads($elg_options, $options->getInt('max_threads'));
|
||||
$this->acquire(self::$crt->event_loop_group_new($elg_options));
|
||||
self::$crt->event_loop_group_options_release($elg_options);
|
||||
}
|
||||
|
||||
function __destruct() {
|
||||
self::$crt->event_loop_group_release($this->release());
|
||||
parent::__destruct();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0.
|
||||
*/
|
||||
namespace AWS\CRT\IO;
|
||||
|
||||
use AWS\CRT\NativeResource as NativeResource;
|
||||
|
||||
final class InputStream extends NativeResource {
|
||||
private $stream = null;
|
||||
|
||||
const SEEK_BEGIN = 0;
|
||||
const SEEK_END = 2;
|
||||
|
||||
public function __construct($stream) {
|
||||
parent::__construct();
|
||||
$this->stream = $stream;
|
||||
$options = self::$crt->input_stream_options_new();
|
||||
// The stream implementation in native just converts the PHP stream into
|
||||
// a native php_stream* and executes operations entirely in native
|
||||
self::$crt->input_stream_options_set_user_data($options, $stream);
|
||||
$this->acquire(self::$crt->input_stream_new($options));
|
||||
self::$crt->input_stream_options_release($options);
|
||||
}
|
||||
|
||||
public function __destruct() {
|
||||
$this->release();
|
||||
parent::__destruct();
|
||||
}
|
||||
|
||||
public function eof() {
|
||||
return self::$crt->input_stream_eof($this->native);
|
||||
}
|
||||
|
||||
public function length() {
|
||||
return self::$crt->input_stream_get_length($this->native);
|
||||
}
|
||||
|
||||
public function read($length = 0) {
|
||||
if ($length == 0) {
|
||||
$length = $this->length();
|
||||
}
|
||||
return self::$crt->input_stream_read($this->native, $length);
|
||||
}
|
||||
|
||||
public function seek($offset, $basis) {
|
||||
return self::$crt->input_stream_seek($this->native, $offset, $basis);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0.
|
||||
*/
|
||||
namespace AWS\CRT\Internal;
|
||||
|
||||
final class Encoding {
|
||||
public static function readString(&$buffer) {
|
||||
list($len, $str) = self::decodeString($buffer);
|
||||
// Advance by sizeof(length) + strlen(str)
|
||||
$buffer = substr($buffer, 4 + $len);
|
||||
return $str;
|
||||
}
|
||||
|
||||
public static function readStrings($buffer) {
|
||||
$strings = [];
|
||||
while (strlen($buffer)) {
|
||||
$strings []= self::readString($buffer);
|
||||
}
|
||||
return $strings;
|
||||
}
|
||||
|
||||
public static function decodeString($buffer) {
|
||||
$len = unpack("N", $buffer)[1];
|
||||
$buffer = substr($buffer, 4);
|
||||
$str = unpack("a{$len}", $buffer)[1];
|
||||
return [$len, $str];
|
||||
}
|
||||
|
||||
public static function encodeString($str) {
|
||||
if (is_array($str)) {
|
||||
$str = $str[0];
|
||||
}
|
||||
return pack("Na*", strlen($str), $str);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0.
|
||||
*/
|
||||
namespace AWS\CRT\Internal;
|
||||
|
||||
use \RuntimeException;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
* Forwards calls on to awscrt PHP extension functions
|
||||
*/
|
||||
final class Extension {
|
||||
function __construct() {
|
||||
if (!extension_loaded('awscrt')) {
|
||||
throw new RuntimeException('awscrt extension is not loaded');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Forwards any call made on this object to the extension function of the
|
||||
* same name with the supplied arguments. Argument type hinting and checking
|
||||
* occurs at the CRT wrapper.
|
||||
*/
|
||||
function __call($name, $args) {
|
||||
return call_user_func_array($name, $args);
|
||||
}
|
||||
}
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0.
|
||||
*/
|
||||
namespace AWS\CRT;
|
||||
use AWS\CRT\CRT;
|
||||
|
||||
final class Log {
|
||||
const NONE = 0;
|
||||
const FATAL = 1;
|
||||
const ERROR = 2;
|
||||
const WARN = 3;
|
||||
const INFO = 4;
|
||||
const DEBUG = 5;
|
||||
const TRACE = 6;
|
||||
|
||||
public static function toStdout() {
|
||||
CRT::log_to_stdout();
|
||||
}
|
||||
|
||||
public static function toStderr() {
|
||||
CRT::log_to_stderr();
|
||||
}
|
||||
|
||||
public static function toFile($filename) {
|
||||
CRT::log_to_file($filename);
|
||||
}
|
||||
|
||||
public static function toStream($stream) {
|
||||
assert(get_resource_type($stream) == "stream");
|
||||
CRT::log_to_stream($stream);
|
||||
}
|
||||
|
||||
public static function stop() {
|
||||
CRT::log_stop();
|
||||
}
|
||||
|
||||
public static function setLogLevel($level) {
|
||||
assert($level >= self::NONE && $level <= self::TRACE);
|
||||
CRT::log_set_level($level);
|
||||
}
|
||||
|
||||
public static function log($level, $message) {
|
||||
CRT::log_message($level, $message);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0.
|
||||
*/
|
||||
namespace AWS\CRT;
|
||||
|
||||
use AWS\CRT\CRT as CRT;
|
||||
|
||||
/**
|
||||
* Base class for all native resources, tracks all outstanding resources
|
||||
* and provides basic leak checking
|
||||
*/
|
||||
abstract class NativeResource {
|
||||
protected static $crt = null;
|
||||
protected static $resources = [];
|
||||
protected $native = null;
|
||||
|
||||
protected function __construct() {
|
||||
if (is_null(self::$crt)) {
|
||||
self::$crt = new CRT();
|
||||
}
|
||||
|
||||
self::$resources[spl_object_hash($this)] = 1;
|
||||
}
|
||||
|
||||
protected function acquire($handle) {
|
||||
return $this->native = $handle;
|
||||
}
|
||||
|
||||
protected function release() {
|
||||
$native = $this->native;
|
||||
$this->native = null;
|
||||
return $native;
|
||||
}
|
||||
|
||||
function __destruct() {
|
||||
// Should have been destroyed and released by derived resource
|
||||
assert($this->native == null);
|
||||
unset(self::$resources[spl_object_hash($this)]);
|
||||
}
|
||||
}
|
||||
+77
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0.
|
||||
*/
|
||||
namespace AWS\CRT;
|
||||
|
||||
final class OptionValue {
|
||||
private $value;
|
||||
function __construct($value) {
|
||||
$this->value = $value;
|
||||
}
|
||||
|
||||
public function asObject() {
|
||||
return $this->value;
|
||||
}
|
||||
|
||||
public function asMixed() {
|
||||
return $this->value;
|
||||
}
|
||||
|
||||
public function asInt() {
|
||||
return empty($this->value) ? 0 : (int)$this->value;
|
||||
}
|
||||
|
||||
public function asBool() {
|
||||
return boolval($this->value);
|
||||
}
|
||||
|
||||
public function asString() {
|
||||
return !empty($this->value) ? strval($this->value) : "";
|
||||
}
|
||||
|
||||
public function asArray() {
|
||||
return is_array($this->value) ? $this->value : (!empty($this->value) ? [$this->value] : []);
|
||||
}
|
||||
|
||||
public function asCallable() {
|
||||
return is_callable($this->value) ? $this->value : null;
|
||||
}
|
||||
}
|
||||
|
||||
final class Options {
|
||||
private $options;
|
||||
|
||||
public function __construct($opts = [], $defaults = []) {
|
||||
$this->options = array_replace($defaults, empty($opts) ? [] : $opts);
|
||||
}
|
||||
|
||||
public function __get($name) {
|
||||
return $this->get($name);
|
||||
}
|
||||
|
||||
public function asArray() {
|
||||
return $this->options;
|
||||
}
|
||||
|
||||
public function toArray() {
|
||||
return array_merge_recursive([], $this->options);
|
||||
}
|
||||
|
||||
public function get($name) {
|
||||
return new OptionValue($this->options[$name]);
|
||||
}
|
||||
|
||||
public function getInt($name) {
|
||||
return $this->get($name)->asInt();
|
||||
}
|
||||
|
||||
public function getString($name) {
|
||||
return $this->get($name)->asString();
|
||||
}
|
||||
|
||||
public function getBool($name) {
|
||||
return $this->get($name)->asBool();
|
||||
}
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
## Code of Conduct
|
||||
This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct).
|
||||
For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact
|
||||
opensource-codeofconduct@amazon.com with any additional questions or comments.
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
## Building and enabling the Common Run Time
|
||||
|
||||
1. **Follow instructions on crt repo** – Clone and build the repo as shown [here][https://github.com/awslabs/aws-crt-php].
|
||||
1. **Enable the CRT** – add the following line to your php.ini file `extension=path/to/aws-crt-php/modules/awscrt.so`
|
||||
Vendored
+141
@@ -0,0 +1,141 @@
|
||||
# Apache License
|
||||
Version 2.0, January 2004
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
## 1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1
|
||||
through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the
|
||||
License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled
|
||||
by, or are under common control with that entity. For the purposes of this definition, "control" means
|
||||
(i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract
|
||||
or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial
|
||||
ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications, including but not limited to software
|
||||
source code, documentation source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form,
|
||||
including but not limited to compiled object code, generated documentation, and conversions to other media
|
||||
types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License,
|
||||
as indicated by a copyright notice that is included in or attached to the work (an example is provided in the
|
||||
Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from)
|
||||
the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent,
|
||||
as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not
|
||||
include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work
|
||||
and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including the original version of the Work and any
|
||||
modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to
|
||||
Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to
|
||||
submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of
|
||||
electronic, verbal, or written communication sent to the Licensor or its representatives, including but not
|
||||
limited to communication on electronic mailing lists, source code control systems, and issue tracking systems
|
||||
that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise designated in writing by the copyright
|
||||
owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been
|
||||
received by Licensor and subsequently incorporated within the Work.
|
||||
|
||||
## 2. Grant of Copyright License.
|
||||
|
||||
Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare
|
||||
Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such
|
||||
Derivative Works in Source or Object form.
|
||||
|
||||
## 3. Grant of Patent License.
|
||||
|
||||
Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent
|
||||
license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such
|
||||
license applies only to those patent claims licensable by such Contributor that are necessarily infringed by
|
||||
their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such
|
||||
Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim
|
||||
or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work
|
||||
constitutes direct or contributory patent infringement, then any patent licenses granted to You under this
|
||||
License for that Work shall terminate as of the date such litigation is filed.
|
||||
|
||||
## 4. Redistribution.
|
||||
|
||||
You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You meet the following conditions:
|
||||
|
||||
1. You must give any other recipients of the Work or Derivative Works a copy of this License; and
|
||||
|
||||
2. You must cause any modified files to carry prominent notices stating that You changed the files; and
|
||||
|
||||
3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent,
|
||||
trademark, and attribution notices from the Source form of the Work, excluding those notices that do
|
||||
not pertain to any part of the Derivative Works; and
|
||||
|
||||
4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that
|
||||
You distribute must include a readable copy of the attribution notices contained within such NOTICE
|
||||
file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed as part of the Derivative Works; within
|
||||
the Source form or documentation, if provided along with the Derivative Works; or, within a display
|
||||
generated by the Derivative Works, if and wherever such third-party notices normally appear. The
|
||||
contents of the NOTICE file are for informational purposes only and do not modify the License. You may
|
||||
add Your own attribution notices within Derivative Works that You distribute, alongside or as an
|
||||
addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be
|
||||
construed as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and may provide additional or different license
|
||||
terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative
|
||||
Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the
|
||||
conditions stated in this License.
|
||||
|
||||
## 5. Submission of Contributions.
|
||||
|
||||
Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by
|
||||
You to the Licensor shall be under the terms and conditions of this License, without any additional terms or
|
||||
conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate
|
||||
license agreement you may have executed with Licensor regarding such Contributions.
|
||||
|
||||
## 6. Trademarks.
|
||||
|
||||
This License does not grant permission to use the trade names, trademarks, service marks, or product names of
|
||||
the Licensor, except as required for reasonable and customary use in describing the origin of the Work and
|
||||
reproducing the content of the NOTICE file.
|
||||
|
||||
## 7. Disclaimer of Warranty.
|
||||
|
||||
Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor
|
||||
provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT,
|
||||
MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of
|
||||
permissions under this License.
|
||||
|
||||
## 8. Limitation of Liability.
|
||||
|
||||
In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless
|
||||
required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any
|
||||
Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential
|
||||
damages of any character arising as a result of this License or out of the use or inability to use the Work
|
||||
(including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or
|
||||
any and all other commercial damages or losses), even if such Contributor has been advised of the possibility
|
||||
of such damages.
|
||||
|
||||
## 9. Accepting Warranty or Additional Liability.
|
||||
|
||||
While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for,
|
||||
acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole
|
||||
responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold
|
||||
each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
Vendored
+17
@@ -0,0 +1,17 @@
|
||||
# AWS SDK for PHP
|
||||
|
||||
<http://aws.amazon.com/php>
|
||||
|
||||
Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License").
|
||||
You may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
+84
@@ -0,0 +1,84 @@
|
||||
The AWS SDK for PHP includes the following third-party software/licensing:
|
||||
|
||||
|
||||
** Guzzle - https://github.com/guzzle/guzzle
|
||||
|
||||
Copyright (c) 2014 Michael Dowling, https://github.com/mtdowling
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
----------------
|
||||
|
||||
** jmespath.php - https://github.com/mtdowling/jmespath.php
|
||||
|
||||
Copyright (c) 2014 Michael Dowling, https://github.com/mtdowling
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
----------------
|
||||
|
||||
** phpunit-mock-objects -- https://github.com/sebastianbergmann/phpunit-mock-objects
|
||||
|
||||
Copyright (c) 2002-2018, Sebastian Bergmann <sebastian@phpunit.de>.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
|
||||
* Neither the name of Sebastian Bergmann nor the names of his
|
||||
contributors may be used to endorse or promote products derived
|
||||
from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
Vendored
+73
@@ -0,0 +1,73 @@
|
||||
{
|
||||
"name": "aws/aws-sdk-php",
|
||||
"homepage": "http://aws.amazon.com/sdkforphp",
|
||||
"description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project",
|
||||
"keywords": ["aws","amazon","sdk","s3","ec2","dynamodb","cloud","glacier"],
|
||||
"type": "library",
|
||||
"license": "Apache-2.0",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Amazon Web Services",
|
||||
"homepage": "http://aws.amazon.com"
|
||||
}
|
||||
],
|
||||
"support": {
|
||||
"forum": "https://github.com/aws/aws-sdk-php/discussions",
|
||||
"issues": "https://github.com/aws/aws-sdk-php/issues"
|
||||
},
|
||||
"require": {
|
||||
"php": ">=8.1",
|
||||
"guzzlehttp/guzzle": "^7.4.5",
|
||||
"guzzlehttp/psr7": "^2.4.5",
|
||||
"guzzlehttp/promises": "^2.0",
|
||||
"mtdowling/jmespath.php": "^2.8.0",
|
||||
"ext-pcre": "*",
|
||||
"ext-json": "*",
|
||||
"ext-simplexml": "*",
|
||||
"aws/aws-crt-php": "^1.2.3",
|
||||
"psr/http-message": "^2.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"composer/composer" : "^2.7.8",
|
||||
"ext-openssl": "*",
|
||||
"ext-dom": "*",
|
||||
"ext-pcntl": "*",
|
||||
"ext-sockets": "*",
|
||||
"phpunit/phpunit": "^5.6.3 || ^8.5 || ^9.5",
|
||||
"behat/behat": "~3.0",
|
||||
"doctrine/cache": "~1.4",
|
||||
"aws/aws-php-sns-message-validator": "~1.0",
|
||||
"andrewsville/php-token-reflection": "^1.4",
|
||||
"psr/cache": "^2.0 || ^3.0",
|
||||
"psr/simple-cache": "^2.0 || ^3.0",
|
||||
"sebastian/comparator": "^1.2.3 || ^4.0 || ^5.0",
|
||||
"symfony/filesystem": "^v6.4.0 || ^v7.1.0",
|
||||
"yoast/phpunit-polyfills": "^2.0",
|
||||
"dms/phpunit-arraysubset-asserts": "^0.4.0"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages",
|
||||
"ext-curl": "To send requests using cURL",
|
||||
"ext-sockets": "To use client-side monitoring",
|
||||
"doctrine/cache": "To use the DoctrineCacheAdapter",
|
||||
"aws/aws-php-sns-message-validator": "To validate incoming SNS notifications"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Aws\\": "src/"
|
||||
},
|
||||
"files": ["src/functions.php"],
|
||||
"exclude-from-classmap": ["src/data/"]
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"Aws\\Test\\": "tests/"
|
||||
},
|
||||
"classmap": ["build/"]
|
||||
},
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "3.0-dev"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
namespace Aws\ACMPCA;
|
||||
|
||||
use Aws\AwsClient;
|
||||
|
||||
/**
|
||||
* This client is used to interact with the **AWS Certificate Manager Private Certificate Authority** service.
|
||||
* @method \Aws\Result createCertificateAuthority(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createCertificateAuthorityAsync(array $args = [])
|
||||
* @method \Aws\Result createCertificateAuthorityAuditReport(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createCertificateAuthorityAuditReportAsync(array $args = [])
|
||||
* @method \Aws\Result createPermission(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createPermissionAsync(array $args = [])
|
||||
* @method \Aws\Result deleteCertificateAuthority(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteCertificateAuthorityAsync(array $args = [])
|
||||
* @method \Aws\Result deletePermission(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deletePermissionAsync(array $args = [])
|
||||
* @method \Aws\Result deletePolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deletePolicyAsync(array $args = [])
|
||||
* @method \Aws\Result describeCertificateAuthority(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeCertificateAuthorityAsync(array $args = [])
|
||||
* @method \Aws\Result describeCertificateAuthorityAuditReport(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeCertificateAuthorityAuditReportAsync(array $args = [])
|
||||
* @method \Aws\Result getCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result getCertificateAuthorityCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getCertificateAuthorityCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result getCertificateAuthorityCsr(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getCertificateAuthorityCsrAsync(array $args = [])
|
||||
* @method \Aws\Result getPolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getPolicyAsync(array $args = [])
|
||||
* @method \Aws\Result importCertificateAuthorityCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise importCertificateAuthorityCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result issueCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise issueCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result listCertificateAuthorities(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listCertificateAuthoritiesAsync(array $args = [])
|
||||
* @method \Aws\Result listPermissions(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listPermissionsAsync(array $args = [])
|
||||
* @method \Aws\Result listTags(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTagsAsync(array $args = [])
|
||||
* @method \Aws\Result putPolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putPolicyAsync(array $args = [])
|
||||
* @method \Aws\Result restoreCertificateAuthority(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise restoreCertificateAuthorityAsync(array $args = [])
|
||||
* @method \Aws\Result revokeCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise revokeCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result tagCertificateAuthority(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise tagCertificateAuthorityAsync(array $args = [])
|
||||
* @method \Aws\Result untagCertificateAuthority(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise untagCertificateAuthorityAsync(array $args = [])
|
||||
* @method \Aws\Result updateCertificateAuthority(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateCertificateAuthorityAsync(array $args = [])
|
||||
*/
|
||||
class ACMPCAClient extends AwsClient {}
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
namespace Aws\ACMPCA\Exception;
|
||||
|
||||
use Aws\Exception\AwsException;
|
||||
|
||||
/**
|
||||
* Represents an error interacting with the **AWS Certificate Manager Private Certificate Authority** service.
|
||||
*/
|
||||
class ACMPCAException extends AwsException {}
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
namespace Aws\ARCZonalShift;
|
||||
|
||||
use Aws\AwsClient;
|
||||
|
||||
/**
|
||||
* This client is used to interact with the **AWS ARC - Zonal Shift** service.
|
||||
* @method \Aws\Result cancelZonalShift(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise cancelZonalShiftAsync(array $args = [])
|
||||
* @method \Aws\Result createPracticeRunConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createPracticeRunConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result deletePracticeRunConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deletePracticeRunConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result getAutoshiftObserverNotificationStatus(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getAutoshiftObserverNotificationStatusAsync(array $args = [])
|
||||
* @method \Aws\Result getManagedResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getManagedResourceAsync(array $args = [])
|
||||
* @method \Aws\Result listAutoshifts(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listAutoshiftsAsync(array $args = [])
|
||||
* @method \Aws\Result listManagedResources(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listManagedResourcesAsync(array $args = [])
|
||||
* @method \Aws\Result listZonalShifts(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listZonalShiftsAsync(array $args = [])
|
||||
* @method \Aws\Result startZonalShift(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startZonalShiftAsync(array $args = [])
|
||||
* @method \Aws\Result updateAutoshiftObserverNotificationStatus(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateAutoshiftObserverNotificationStatusAsync(array $args = [])
|
||||
* @method \Aws\Result updatePracticeRunConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updatePracticeRunConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result updateZonalAutoshiftConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateZonalAutoshiftConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result updateZonalShift(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateZonalShiftAsync(array $args = [])
|
||||
*/
|
||||
class ARCZonalShiftClient extends AwsClient {}
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
namespace Aws\ARCZonalShift\Exception;
|
||||
|
||||
use Aws\Exception\AwsException;
|
||||
|
||||
/**
|
||||
* Represents an error interacting with the **AWS ARC - Zonal Shift** service.
|
||||
*/
|
||||
class ARCZonalShiftException extends AwsException {}
|
||||
@@ -0,0 +1,157 @@
|
||||
<?php
|
||||
namespace Aws;
|
||||
|
||||
use GuzzleHttp\Promise;
|
||||
|
||||
/**
|
||||
* A configuration provider is a function that returns a promise that is
|
||||
* fulfilled with a configuration object. This class provides base functionality
|
||||
* usable by specific configuration provider implementations
|
||||
*/
|
||||
abstract class AbstractConfigurationProvider
|
||||
{
|
||||
const ENV_PROFILE = 'AWS_PROFILE';
|
||||
const ENV_CONFIG_FILE = 'AWS_CONFIG_FILE';
|
||||
|
||||
public static $cacheKey;
|
||||
|
||||
protected static $interfaceClass;
|
||||
protected static $exceptionClass;
|
||||
|
||||
/**
|
||||
* Wraps a config provider and saves provided configuration in an
|
||||
* instance of Aws\CacheInterface. Forwards calls when no config found
|
||||
* in cache and updates cache with the results.
|
||||
*
|
||||
* @param callable $provider Configuration provider function to wrap
|
||||
* @param CacheInterface $cache Cache to store configuration
|
||||
* @param string|null $cacheKey (optional) Cache key to use
|
||||
*
|
||||
* @return callable
|
||||
*/
|
||||
public static function cache(
|
||||
callable $provider,
|
||||
CacheInterface $cache,
|
||||
$cacheKey = null
|
||||
) {
|
||||
$cacheKey = $cacheKey ?: static::$cacheKey;
|
||||
|
||||
return function () use ($provider, $cache, $cacheKey) {
|
||||
$found = $cache->get($cacheKey);
|
||||
if ($found instanceof static::$interfaceClass) {
|
||||
return Promise\Create::promiseFor($found);
|
||||
}
|
||||
|
||||
return $provider()
|
||||
->then(function ($config) use (
|
||||
$cache,
|
||||
$cacheKey
|
||||
) {
|
||||
$cache->set($cacheKey, $config);
|
||||
return $config;
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an aggregate configuration provider that invokes the provided
|
||||
* variadic providers one after the other until a provider returns
|
||||
* configuration.
|
||||
*
|
||||
* @return callable
|
||||
*/
|
||||
public static function chain()
|
||||
{
|
||||
$links = func_get_args();
|
||||
if (empty($links)) {
|
||||
throw new \InvalidArgumentException('No providers in chain');
|
||||
}
|
||||
|
||||
return function () use ($links) {
|
||||
/** @var callable $parent */
|
||||
$parent = array_shift($links);
|
||||
$promise = $parent();
|
||||
while ($next = array_shift($links)) {
|
||||
$promise = $promise->otherwise($next);
|
||||
}
|
||||
return $promise;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the environment's HOME directory if available.
|
||||
*
|
||||
* @return null|string
|
||||
*/
|
||||
protected static function getHomeDir()
|
||||
{
|
||||
// On Linux/Unix-like systems, use the HOME environment variable
|
||||
if ($homeDir = getenv('HOME')) {
|
||||
return $homeDir;
|
||||
}
|
||||
|
||||
// Get the HOMEDRIVE and HOMEPATH values for Windows hosts
|
||||
$homeDrive = getenv('HOMEDRIVE');
|
||||
$homePath = getenv('HOMEPATH');
|
||||
|
||||
return ($homeDrive && $homePath) ? $homeDrive . $homePath : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets default config file location from environment, falling back to aws
|
||||
* default location
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected static function getDefaultConfigFilename()
|
||||
{
|
||||
if ($filename = getenv(self::ENV_CONFIG_FILE)) {
|
||||
return $filename;
|
||||
}
|
||||
return self::getHomeDir() . '/.aws/config';
|
||||
}
|
||||
|
||||
/**
|
||||
* Wraps a config provider and caches previously provided configuration.
|
||||
*
|
||||
* @param callable $provider Config provider function to wrap.
|
||||
*
|
||||
* @return callable
|
||||
*/
|
||||
public static function memoize(callable $provider)
|
||||
{
|
||||
return function () use ($provider) {
|
||||
static $result;
|
||||
static $isConstant;
|
||||
|
||||
// Constant config will be returned constantly.
|
||||
if ($isConstant) {
|
||||
return $result;
|
||||
}
|
||||
|
||||
// Create the initial promise that will be used as the cached value
|
||||
if (null === $result) {
|
||||
$result = $provider();
|
||||
}
|
||||
|
||||
// Return config and set flag that provider is already set
|
||||
return $result
|
||||
->then(function ($config) use (&$isConstant) {
|
||||
$isConstant = true;
|
||||
return $config;
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Reject promise with standardized exception.
|
||||
*
|
||||
* @param $msg
|
||||
* @return Promise\RejectedPromise
|
||||
*/
|
||||
protected static function reject($msg)
|
||||
{
|
||||
$exceptionClass = static::$exceptionClass;
|
||||
return new Promise\RejectedPromise(new $exceptionClass($msg));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
<?php
|
||||
namespace Aws\AccessAnalyzer;
|
||||
|
||||
use Aws\AwsClient;
|
||||
|
||||
/**
|
||||
* This client is used to interact with the **Access Analyzer** service.
|
||||
* @method \Aws\Result applyArchiveRule(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise applyArchiveRuleAsync(array $args = [])
|
||||
* @method \Aws\Result cancelPolicyGeneration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise cancelPolicyGenerationAsync(array $args = [])
|
||||
* @method \Aws\Result checkAccessNotGranted(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise checkAccessNotGrantedAsync(array $args = [])
|
||||
* @method \Aws\Result checkNoNewAccess(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise checkNoNewAccessAsync(array $args = [])
|
||||
* @method \Aws\Result checkNoPublicAccess(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise checkNoPublicAccessAsync(array $args = [])
|
||||
* @method \Aws\Result createAccessPreview(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createAccessPreviewAsync(array $args = [])
|
||||
* @method \Aws\Result createAnalyzer(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createAnalyzerAsync(array $args = [])
|
||||
* @method \Aws\Result createArchiveRule(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createArchiveRuleAsync(array $args = [])
|
||||
* @method \Aws\Result deleteAnalyzer(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteAnalyzerAsync(array $args = [])
|
||||
* @method \Aws\Result deleteArchiveRule(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteArchiveRuleAsync(array $args = [])
|
||||
* @method \Aws\Result generateFindingRecommendation(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise generateFindingRecommendationAsync(array $args = [])
|
||||
* @method \Aws\Result getAccessPreview(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getAccessPreviewAsync(array $args = [])
|
||||
* @method \Aws\Result getAnalyzedResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getAnalyzedResourceAsync(array $args = [])
|
||||
* @method \Aws\Result getAnalyzer(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getAnalyzerAsync(array $args = [])
|
||||
* @method \Aws\Result getArchiveRule(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getArchiveRuleAsync(array $args = [])
|
||||
* @method \Aws\Result getFinding(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getFindingAsync(array $args = [])
|
||||
* @method \Aws\Result getFindingRecommendation(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getFindingRecommendationAsync(array $args = [])
|
||||
* @method \Aws\Result getFindingV2(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getFindingV2Async(array $args = [])
|
||||
* @method \Aws\Result getFindingsStatistics(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getFindingsStatisticsAsync(array $args = [])
|
||||
* @method \Aws\Result getGeneratedPolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getGeneratedPolicyAsync(array $args = [])
|
||||
* @method \Aws\Result listAccessPreviewFindings(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listAccessPreviewFindingsAsync(array $args = [])
|
||||
* @method \Aws\Result listAccessPreviews(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listAccessPreviewsAsync(array $args = [])
|
||||
* @method \Aws\Result listAnalyzedResources(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listAnalyzedResourcesAsync(array $args = [])
|
||||
* @method \Aws\Result listAnalyzers(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listAnalyzersAsync(array $args = [])
|
||||
* @method \Aws\Result listArchiveRules(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listArchiveRulesAsync(array $args = [])
|
||||
* @method \Aws\Result listFindings(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listFindingsAsync(array $args = [])
|
||||
* @method \Aws\Result listFindingsV2(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listFindingsV2Async(array $args = [])
|
||||
* @method \Aws\Result listPolicyGenerations(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listPolicyGenerationsAsync(array $args = [])
|
||||
* @method \Aws\Result listTagsForResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
|
||||
* @method \Aws\Result startPolicyGeneration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startPolicyGenerationAsync(array $args = [])
|
||||
* @method \Aws\Result startResourceScan(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startResourceScanAsync(array $args = [])
|
||||
* @method \Aws\Result tagResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = [])
|
||||
* @method \Aws\Result untagResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise untagResourceAsync(array $args = [])
|
||||
* @method \Aws\Result updateAnalyzer(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateAnalyzerAsync(array $args = [])
|
||||
* @method \Aws\Result updateArchiveRule(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateArchiveRuleAsync(array $args = [])
|
||||
* @method \Aws\Result updateFindings(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateFindingsAsync(array $args = [])
|
||||
* @method \Aws\Result validatePolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise validatePolicyAsync(array $args = [])
|
||||
*/
|
||||
class AccessAnalyzerClient extends AwsClient {}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
namespace Aws\AccessAnalyzer\Exception;
|
||||
|
||||
use Aws\Exception\AwsException;
|
||||
|
||||
/**
|
||||
* Represents an error interacting with the **Access Analyzer** service.
|
||||
*/
|
||||
class AccessAnalyzerException extends AwsException {}
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
namespace Aws\Account;
|
||||
|
||||
use Aws\AwsClient;
|
||||
|
||||
/**
|
||||
* This client is used to interact with the **AWS Account** service.
|
||||
* @method \Aws\Result acceptPrimaryEmailUpdate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise acceptPrimaryEmailUpdateAsync(array $args = [])
|
||||
* @method \Aws\Result deleteAlternateContact(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteAlternateContactAsync(array $args = [])
|
||||
* @method \Aws\Result disableRegion(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise disableRegionAsync(array $args = [])
|
||||
* @method \Aws\Result enableRegion(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise enableRegionAsync(array $args = [])
|
||||
* @method \Aws\Result getAccountInformation(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getAccountInformationAsync(array $args = [])
|
||||
* @method \Aws\Result getAlternateContact(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getAlternateContactAsync(array $args = [])
|
||||
* @method \Aws\Result getContactInformation(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getContactInformationAsync(array $args = [])
|
||||
* @method \Aws\Result getPrimaryEmail(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getPrimaryEmailAsync(array $args = [])
|
||||
* @method \Aws\Result getRegionOptStatus(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getRegionOptStatusAsync(array $args = [])
|
||||
* @method \Aws\Result listRegions(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listRegionsAsync(array $args = [])
|
||||
* @method \Aws\Result putAccountName(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putAccountNameAsync(array $args = [])
|
||||
* @method \Aws\Result putAlternateContact(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putAlternateContactAsync(array $args = [])
|
||||
* @method \Aws\Result putContactInformation(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putContactInformationAsync(array $args = [])
|
||||
* @method \Aws\Result startPrimaryEmailUpdate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startPrimaryEmailUpdateAsync(array $args = [])
|
||||
*/
|
||||
class AccountClient extends AwsClient {}
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
namespace Aws\Account\Exception;
|
||||
|
||||
use Aws\Exception\AwsException;
|
||||
|
||||
/**
|
||||
* Represents an error interacting with the **AWS Account** service.
|
||||
*/
|
||||
class AccountException extends AwsException {}
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
namespace Aws\Acm;
|
||||
|
||||
use Aws\AwsClient;
|
||||
|
||||
/**
|
||||
* This client is used to interact with the **AWS Certificate Manager** service.
|
||||
*
|
||||
* @method \Aws\Result addTagsToCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise addTagsToCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result deleteCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result describeCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result exportCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise exportCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result getAccountConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getAccountConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result getCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result importCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise importCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result listCertificates(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listCertificatesAsync(array $args = [])
|
||||
* @method \Aws\Result listTagsForCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTagsForCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result putAccountConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putAccountConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result removeTagsFromCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise removeTagsFromCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result renewCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise renewCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result requestCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise requestCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result resendValidationEmail(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise resendValidationEmailAsync(array $args = [])
|
||||
* @method \Aws\Result updateCertificateOptions(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateCertificateOptionsAsync(array $args = [])
|
||||
*/
|
||||
class AcmClient extends AwsClient {}
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
namespace Aws\Acm\Exception;
|
||||
|
||||
use Aws\Exception\AwsException;
|
||||
|
||||
/**
|
||||
* Represents an error interacting with the **AWS Certificate Manager** service.
|
||||
*/
|
||||
class AcmException extends AwsException {}
|
||||
@@ -0,0 +1,83 @@
|
||||
<?php
|
||||
namespace Aws\Amplify;
|
||||
|
||||
use Aws\AwsClient;
|
||||
|
||||
/**
|
||||
* This client is used to interact with the **AWS Amplify** service.
|
||||
* @method \Aws\Result createApp(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createAppAsync(array $args = [])
|
||||
* @method \Aws\Result createBackendEnvironment(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createBackendEnvironmentAsync(array $args = [])
|
||||
* @method \Aws\Result createBranch(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createBranchAsync(array $args = [])
|
||||
* @method \Aws\Result createDeployment(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createDeploymentAsync(array $args = [])
|
||||
* @method \Aws\Result createDomainAssociation(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createDomainAssociationAsync(array $args = [])
|
||||
* @method \Aws\Result createWebhook(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createWebhookAsync(array $args = [])
|
||||
* @method \Aws\Result deleteApp(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteAppAsync(array $args = [])
|
||||
* @method \Aws\Result deleteBackendEnvironment(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteBackendEnvironmentAsync(array $args = [])
|
||||
* @method \Aws\Result deleteBranch(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteBranchAsync(array $args = [])
|
||||
* @method \Aws\Result deleteDomainAssociation(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteDomainAssociationAsync(array $args = [])
|
||||
* @method \Aws\Result deleteJob(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteJobAsync(array $args = [])
|
||||
* @method \Aws\Result deleteWebhook(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteWebhookAsync(array $args = [])
|
||||
* @method \Aws\Result generateAccessLogs(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise generateAccessLogsAsync(array $args = [])
|
||||
* @method \Aws\Result getApp(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getAppAsync(array $args = [])
|
||||
* @method \Aws\Result getArtifactUrl(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getArtifactUrlAsync(array $args = [])
|
||||
* @method \Aws\Result getBackendEnvironment(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getBackendEnvironmentAsync(array $args = [])
|
||||
* @method \Aws\Result getBranch(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getBranchAsync(array $args = [])
|
||||
* @method \Aws\Result getDomainAssociation(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getDomainAssociationAsync(array $args = [])
|
||||
* @method \Aws\Result getJob(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getJobAsync(array $args = [])
|
||||
* @method \Aws\Result getWebhook(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getWebhookAsync(array $args = [])
|
||||
* @method \Aws\Result listApps(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listAppsAsync(array $args = [])
|
||||
* @method \Aws\Result listArtifacts(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listArtifactsAsync(array $args = [])
|
||||
* @method \Aws\Result listBackendEnvironments(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listBackendEnvironmentsAsync(array $args = [])
|
||||
* @method \Aws\Result listBranches(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listBranchesAsync(array $args = [])
|
||||
* @method \Aws\Result listDomainAssociations(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listDomainAssociationsAsync(array $args = [])
|
||||
* @method \Aws\Result listJobs(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listJobsAsync(array $args = [])
|
||||
* @method \Aws\Result listTagsForResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
|
||||
* @method \Aws\Result listWebhooks(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listWebhooksAsync(array $args = [])
|
||||
* @method \Aws\Result startDeployment(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startDeploymentAsync(array $args = [])
|
||||
* @method \Aws\Result startJob(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startJobAsync(array $args = [])
|
||||
* @method \Aws\Result stopJob(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise stopJobAsync(array $args = [])
|
||||
* @method \Aws\Result tagResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = [])
|
||||
* @method \Aws\Result untagResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise untagResourceAsync(array $args = [])
|
||||
* @method \Aws\Result updateApp(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateAppAsync(array $args = [])
|
||||
* @method \Aws\Result updateBranch(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateBranchAsync(array $args = [])
|
||||
* @method \Aws\Result updateDomainAssociation(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateDomainAssociationAsync(array $args = [])
|
||||
* @method \Aws\Result updateWebhook(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateWebhookAsync(array $args = [])
|
||||
*/
|
||||
class AmplifyClient extends AwsClient {}
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
namespace Aws\Amplify\Exception;
|
||||
|
||||
use Aws\Exception\AwsException;
|
||||
|
||||
/**
|
||||
* Represents an error interacting with the **AWS Amplify** service.
|
||||
*/
|
||||
class AmplifyException extends AwsException {}
|
||||
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
namespace Aws\AmplifyBackend;
|
||||
|
||||
use Aws\AwsClient;
|
||||
|
||||
/**
|
||||
* This client is used to interact with the **AmplifyBackend** service.
|
||||
* @method \Aws\Result cloneBackend(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise cloneBackendAsync(array $args = [])
|
||||
* @method \Aws\Result createBackend(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createBackendAsync(array $args = [])
|
||||
* @method \Aws\Result createBackendAPI(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createBackendAPIAsync(array $args = [])
|
||||
* @method \Aws\Result createBackendAuth(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createBackendAuthAsync(array $args = [])
|
||||
* @method \Aws\Result createBackendConfig(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createBackendConfigAsync(array $args = [])
|
||||
* @method \Aws\Result createBackendStorage(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createBackendStorageAsync(array $args = [])
|
||||
* @method \Aws\Result createToken(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createTokenAsync(array $args = [])
|
||||
* @method \Aws\Result deleteBackend(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteBackendAsync(array $args = [])
|
||||
* @method \Aws\Result deleteBackendAPI(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteBackendAPIAsync(array $args = [])
|
||||
* @method \Aws\Result deleteBackendAuth(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteBackendAuthAsync(array $args = [])
|
||||
* @method \Aws\Result deleteBackendStorage(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteBackendStorageAsync(array $args = [])
|
||||
* @method \Aws\Result deleteToken(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteTokenAsync(array $args = [])
|
||||
* @method \Aws\Result generateBackendAPIModels(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise generateBackendAPIModelsAsync(array $args = [])
|
||||
* @method \Aws\Result getBackend(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getBackendAsync(array $args = [])
|
||||
* @method \Aws\Result getBackendAPI(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getBackendAPIAsync(array $args = [])
|
||||
* @method \Aws\Result getBackendAPIModels(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getBackendAPIModelsAsync(array $args = [])
|
||||
* @method \Aws\Result getBackendAuth(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getBackendAuthAsync(array $args = [])
|
||||
* @method \Aws\Result getBackendJob(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getBackendJobAsync(array $args = [])
|
||||
* @method \Aws\Result getBackendStorage(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getBackendStorageAsync(array $args = [])
|
||||
* @method \Aws\Result getToken(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getTokenAsync(array $args = [])
|
||||
* @method \Aws\Result importBackendAuth(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise importBackendAuthAsync(array $args = [])
|
||||
* @method \Aws\Result importBackendStorage(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise importBackendStorageAsync(array $args = [])
|
||||
* @method \Aws\Result listBackendJobs(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listBackendJobsAsync(array $args = [])
|
||||
* @method \Aws\Result listS3Buckets(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listS3BucketsAsync(array $args = [])
|
||||
* @method \Aws\Result removeAllBackends(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise removeAllBackendsAsync(array $args = [])
|
||||
* @method \Aws\Result removeBackendConfig(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise removeBackendConfigAsync(array $args = [])
|
||||
* @method \Aws\Result updateBackendAPI(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateBackendAPIAsync(array $args = [])
|
||||
* @method \Aws\Result updateBackendAuth(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateBackendAuthAsync(array $args = [])
|
||||
* @method \Aws\Result updateBackendConfig(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateBackendConfigAsync(array $args = [])
|
||||
* @method \Aws\Result updateBackendJob(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateBackendJobAsync(array $args = [])
|
||||
* @method \Aws\Result updateBackendStorage(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateBackendStorageAsync(array $args = [])
|
||||
*/
|
||||
class AmplifyBackendClient extends AwsClient {}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
namespace Aws\AmplifyBackend\Exception;
|
||||
|
||||
use Aws\Exception\AwsException;
|
||||
|
||||
/**
|
||||
* Represents an error interacting with the **AmplifyBackend** service.
|
||||
*/
|
||||
class AmplifyBackendException extends AwsException {}
|
||||
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
namespace Aws\AmplifyUIBuilder;
|
||||
|
||||
use Aws\AwsClient;
|
||||
|
||||
/**
|
||||
* This client is used to interact with the **AWS Amplify UI Builder** service.
|
||||
* @method \Aws\Result createComponent(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createComponentAsync(array $args = [])
|
||||
* @method \Aws\Result createForm(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createFormAsync(array $args = [])
|
||||
* @method \Aws\Result createTheme(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createThemeAsync(array $args = [])
|
||||
* @method \Aws\Result deleteComponent(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteComponentAsync(array $args = [])
|
||||
* @method \Aws\Result deleteForm(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteFormAsync(array $args = [])
|
||||
* @method \Aws\Result deleteTheme(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteThemeAsync(array $args = [])
|
||||
* @method \Aws\Result exchangeCodeForToken(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise exchangeCodeForTokenAsync(array $args = [])
|
||||
* @method \Aws\Result exportComponents(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise exportComponentsAsync(array $args = [])
|
||||
* @method \Aws\Result exportForms(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise exportFormsAsync(array $args = [])
|
||||
* @method \Aws\Result exportThemes(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise exportThemesAsync(array $args = [])
|
||||
* @method \Aws\Result getCodegenJob(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getCodegenJobAsync(array $args = [])
|
||||
* @method \Aws\Result getComponent(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getComponentAsync(array $args = [])
|
||||
* @method \Aws\Result getForm(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getFormAsync(array $args = [])
|
||||
* @method \Aws\Result getMetadata(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getMetadataAsync(array $args = [])
|
||||
* @method \Aws\Result getTheme(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getThemeAsync(array $args = [])
|
||||
* @method \Aws\Result listCodegenJobs(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listCodegenJobsAsync(array $args = [])
|
||||
* @method \Aws\Result listComponents(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listComponentsAsync(array $args = [])
|
||||
* @method \Aws\Result listForms(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listFormsAsync(array $args = [])
|
||||
* @method \Aws\Result listTagsForResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
|
||||
* @method \Aws\Result listThemes(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listThemesAsync(array $args = [])
|
||||
* @method \Aws\Result putMetadataFlag(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putMetadataFlagAsync(array $args = [])
|
||||
* @method \Aws\Result refreshToken(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise refreshTokenAsync(array $args = [])
|
||||
* @method \Aws\Result startCodegenJob(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startCodegenJobAsync(array $args = [])
|
||||
* @method \Aws\Result tagResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = [])
|
||||
* @method \Aws\Result untagResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise untagResourceAsync(array $args = [])
|
||||
* @method \Aws\Result updateComponent(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateComponentAsync(array $args = [])
|
||||
* @method \Aws\Result updateForm(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateFormAsync(array $args = [])
|
||||
* @method \Aws\Result updateTheme(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateThemeAsync(array $args = [])
|
||||
*/
|
||||
class AmplifyUIBuilderClient extends AwsClient {}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
namespace Aws\AmplifyUIBuilder\Exception;
|
||||
|
||||
use Aws\Exception\AwsException;
|
||||
|
||||
/**
|
||||
* Represents an error interacting with the **AWS Amplify UI Builder** service.
|
||||
*/
|
||||
class AmplifyUIBuilderException extends AwsException {}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user