From 68efb74369210ced2370622a8cd698370e3d0872 Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Fri, 18 Mar 2022 15:54:04 +0530 Subject: [PATCH 01/31] Initializing package --- .../GoogleSqlCommenterServiceProvider.php | 27 +++++++++++++++++++ .../GoogleSqlCommenterMiddleware.php | 21 +++++++++++++++ .../packages/sqlcommenter-laravel/README.md | 0 .../sqlcommenter-laravel/composer.json | 14 ++++++++++ 4 files changed, 62 insertions(+) create mode 100644 php/sqlcommenter-php/packages/sqlcommenter-laravel/GoogleSqlCommenterServiceProvider.php create mode 100644 php/sqlcommenter-php/packages/sqlcommenter-laravel/Middleware/GoogleSqlCommenterMiddleware.php create mode 100644 php/sqlcommenter-php/packages/sqlcommenter-laravel/README.md create mode 100644 php/sqlcommenter-php/packages/sqlcommenter-laravel/composer.json diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/GoogleSqlCommenterServiceProvider.php b/php/sqlcommenter-php/packages/sqlcommenter-laravel/GoogleSqlCommenterServiceProvider.php new file mode 100644 index 00000000..4809fdf1 --- /dev/null +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/GoogleSqlCommenterServiceProvider.php @@ -0,0 +1,27 @@ +=0.0.6" + }, + "extra": { + "laravel": { + "providers": [ + "thiyagu55\\sqlcommenter-laravel\\GoogleSqlCommenterServiceProvider" + ] + } + } +} \ No newline at end of file From 34d064f9d6332568afd69853f7d0273c24674c4b Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Fri, 18 Mar 2022 16:31:45 +0530 Subject: [PATCH 02/31] moving package composer.json to root --- .../packages/sqlcommenter-laravel/composer.json => composer.json | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename php/sqlcommenter-php/packages/sqlcommenter-laravel/composer.json => composer.json (100%) diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/composer.json b/composer.json similarity index 100% rename from php/sqlcommenter-php/packages/sqlcommenter-laravel/composer.json rename to composer.json From 3abd1a4406c55b752d9a1a99ab478b685cfa81cb Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Mon, 21 Mar 2022 21:34:24 +0530 Subject: [PATCH 03/31] moving package composer.json to root --- composer.json | 14 ----------- .../sqlcommenter-laravel/composer.json | 24 +++++++++++++++++++ .../GoogleSqlCommenterServiceProvider.php | 2 +- .../GoogleSqlCommenterMiddleware.php | 2 +- 4 files changed, 26 insertions(+), 16 deletions(-) delete mode 100644 composer.json create mode 100644 php/sqlcommenter-php/packages/sqlcommenter-laravel/composer.json rename php/sqlcommenter-php/packages/sqlcommenter-laravel/{ => src}/GoogleSqlCommenterServiceProvider.php (86%) rename php/sqlcommenter-php/packages/sqlcommenter-laravel/{ => src}/Middleware/GoogleSqlCommenterMiddleware.php (84%) diff --git a/composer.json b/composer.json deleted file mode 100644 index 3645a772..00000000 --- a/composer.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "thiyagu55/sqlcommenter-laravel", - "description": "Laravel middleware to add metrics to the sql query log", - "require": { - "open-telemetry/opentelemetry": ">=0.0.6" - }, - "extra": { - "laravel": { - "providers": [ - "thiyagu55\\sqlcommenter-laravel\\GoogleSqlCommenterServiceProvider" - ] - } - } -} \ No newline at end of file diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/composer.json b/php/sqlcommenter-php/packages/sqlcommenter-laravel/composer.json new file mode 100644 index 00000000..297f84fe --- /dev/null +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/composer.json @@ -0,0 +1,24 @@ +{ + "name": "thiyagu55/sqlcommenter-laravel", + "description": "Laravel middleware to send events to OpenTelemetry", + "type": "library", + "license": "MIT", + "require": { + "open-telemetry/opentelemetry": "dev-main" + }, + "autoload": { + "psr-4": { + "thiyagu55\\GoogleSqlCommenterLaravel\\": "src" + } + }, + "extra": { + "laravel": { + "providers": [ + "thiyagu55\\GoogleSqlCommenterLaravel\\GoogleSqlCommenterLaravelServiceProvider" + ] + } + }, + "scripts": { + "format": "phpcbf --standard=psr2 src/" + } +} diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/GoogleSqlCommenterServiceProvider.php b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/GoogleSqlCommenterServiceProvider.php similarity index 86% rename from php/sqlcommenter-php/packages/sqlcommenter-laravel/GoogleSqlCommenterServiceProvider.php rename to php/sqlcommenter-php/packages/sqlcommenter-laravel/src/GoogleSqlCommenterServiceProvider.php index 4809fdf1..102b0cea 100644 --- a/php/sqlcommenter-php/packages/sqlcommenter-laravel/GoogleSqlCommenterServiceProvider.php +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/GoogleSqlCommenterServiceProvider.php @@ -1,6 +1,6 @@ Date: Thu, 7 Apr 2022 14:37:14 +0530 Subject: [PATCH 04/31] Google SQLcomenter All Base functionalities --- README.md | 2 + .../packages/sqlcommenter-laravel/README.md | 37 +++++ .../sqlcommenter-laravel/composer.json | 12 +- .../src/Database/Connection.php | 134 ++++++++++++++++++ .../src/Database/DatabaseServiceProvider.php | 32 +++++ .../src/Database/MySqlConnection.php | 91 ++++++++++++ .../src/Database/PostgresConnection.php | 80 +++++++++++ .../src/Database/SQLiteConnection.php | 115 +++++++++++++++ .../src/Database/SqlServerConnection.php | 123 ++++++++++++++++ .../src/GoogleSqlCommenterServiceProvider.php | 17 ++- .../GoogleSqlCommenterMiddleware.php | 21 --- .../src/Opentelemetry.php | 17 +++ .../src/config/google_sqlcommenter.php | 16 +++ 13 files changed, 669 insertions(+), 28 deletions(-) create mode 100644 php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php create mode 100644 php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/DatabaseServiceProvider.php create mode 100755 php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/MySqlConnection.php create mode 100644 php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/PostgresConnection.php create mode 100755 php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/SQLiteConnection.php create mode 100755 php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/SqlServerConnection.php delete mode 100644 php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Middleware/GoogleSqlCommenterMiddleware.php create mode 100644 php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Opentelemetry.php create mode 100644 php/sqlcommenter-php/packages/sqlcommenter-laravel/src/config/google_sqlcommenter.php diff --git a/README.md b/README.md index 71662319..c885873e 100644 --- a/README.md +++ b/README.md @@ -16,3 +16,5 @@ Contains all the various `sqlcommenter-*` implementations. - [X] [Node.js](nodejs/sqlcommenter-nodejs/README.md) - [X] [Knex.js](nodejs/sqlcommenter-nodejs/packages/sqlcommenter-knex/README.md) - [X] [Sequelize.js](nodejs/sqlcommenter-nodejs/packages/sqlcommenter-sequelize/README.md) +- [X] Php + - [X] [Laravel](php/sqlcommenter-php/packages/sqlcommenter-laravel) diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/README.md b/php/sqlcommenter-php/packages/sqlcommenter-laravel/README.md index e69de29b..c6488ee5 100644 --- a/php/sqlcommenter-php/packages/sqlcommenter-laravel/README.md +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/README.md @@ -0,0 +1,37 @@ +# sqlcommenter-laravel + +sqlcommenter is a plugin/middleware/wrapper to augment SQL statements from laravel +with comments that can be used later to correlate user code with SQL statements. + + +### Installation +Add this to your composer.json +```shell +"repositories": [ + { + "type": "path", + "url": "/full/or/relative/path/to/sqlcommenter-laravel/package" + } +] +``` +Install the package +```shell +composer require "google/sqlcommenter-laravel" +``` +### Usage +Publish the config file from library to into laravel app using below command + +```shell +php artisan vendor:publish --provider="google\GoogleSqlCommenterLaravel\GoogleSqlCommenterServiceProvider" +``` + +Add the following class above ``Illuminate\Database\DatabaseServiceProvider::class, +`` in config/app.php +```php +'providers' => [ + ... + Google\GoogleSqlCommenterLaravel\Database\DatabaseServiceProvider::class, + Illuminate\Database\DatabaseServiceProvider::class, + ... +] +``` diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/composer.json b/php/sqlcommenter-php/packages/sqlcommenter-laravel/composer.json index 297f84fe..383daec1 100644 --- a/php/sqlcommenter-php/packages/sqlcommenter-laravel/composer.json +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/composer.json @@ -1,20 +1,26 @@ { - "name": "thiyagu55/sqlcommenter-laravel", + "name": "google/sqlcommenter-laravel", "description": "Laravel middleware to send events to OpenTelemetry", "type": "library", "license": "MIT", + "authors": [ + { + "name": "Google Developers", + "email": "sqlcommenter@googlegroups.com", + "role": "Developer" + }], "require": { "open-telemetry/opentelemetry": "dev-main" }, "autoload": { "psr-4": { - "thiyagu55\\GoogleSqlCommenterLaravel\\": "src" + "Google\\GoogleSqlCommenterLaravel\\": "src" } }, "extra": { "laravel": { "providers": [ - "thiyagu55\\GoogleSqlCommenterLaravel\\GoogleSqlCommenterLaravelServiceProvider" + "Google\\GoogleSqlCommenterLaravel\\GoogleSqlCommenterServiceProvider" ] } }, diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php new file mode 100644 index 00000000..e35a8820 --- /dev/null +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php @@ -0,0 +1,134 @@ +get_sqlcomments(); + $records = parent::select($query, $bindings, $useReadPdo); + + if (count($records) > 0) + { + return $records; + } + return null; + } + + /** + * Run a select statement against the database. + * + * @param string $query + * @param array $bindings + * @param bool $useReadPdo + * @return array + */ + public function select($query, $bindings = [], $useReadPdo = true) + { + $query .= $this->get_sqlcomments(); + $records = parent::select($query, $bindings, $useReadPdo); + return $records; + + } + + /** + * Run an insert statement against the database. + * + * @param string $query + * @param array $bindings + * @return bool + */ + public function insert($query, $bindings = []) + { + $query .= $this->get_sqlcomments(); + + $records = parent::insert($query, $bindings); + + return $records; + } + + /** + * Run an update statement against the database. + * + * @param string $query + * @param array $bindings + * @return int + */ + public function update($query, $bindings = []) + { + $query .= $this->get_sqlcomments(); + + return $this->affectingStatement($query, $bindings); + } + + /** + * Run a delete statement against the database. + * + * @param string $query + * @param array $bindings + * @return int + */ + public function delete($query, $bindings = []) + { + $query .= $this->get_sqlcomments(); + + return $this->affectingStatement($query, $bindings); + } + + public function get_sqlcomments() + { + $configurationKey = 'google_sqlcommenter.include.'; + $comment = []; + if (config($configurationKey.'framework', true)){ + $comment['framework'] = "laravel-" .app()->version(); + } + if (config($configurationKey.'controller', true)){ + $action = app('request')->route()->getAction(); + $comment['controller'] = class_basename($action['controller']); + } + if (config($configurationKey.'route', true)){ + $comment['route'] = request()->getRequestUri(); + } + if (config($configurationKey.'db_driver', true)){ + $connection = config('database.default'); + $comment['db_driver'] = config("database.connections.{$connection}.driver"); + } + if (config($configurationKey.'opentelemetry', true)){ + $carrier = Opentelemetry::get_opentelemetry_values(); + $comment = array_merge($comment,$carrier); + } + return $this->format_comments($comment); + } + public function format_comments($comment) + { + if (empty($comment)) { + return ""; + } + $lastElement = array_key_last($comment); + $sql_comment = "/*"; + foreach($comment as $key=>$value) + { + if ($key == $lastElement){ + $sql_comment .=$key ."=". "'".$value."'*/"; + } + else{ + $sql_comment .=$key ."=". "'".$value."',"; + } + } + return $sql_comment; + } + +} diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/DatabaseServiceProvider.php b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/DatabaseServiceProvider.php new file mode 100644 index 00000000..eb386101 --- /dev/null +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/DatabaseServiceProvider.php @@ -0,0 +1,32 @@ +getPdo()->getAttribute(PDO::ATTR_SERVER_VERSION), 'MariaDB'); + } + + /** + * Get the default query grammar instance. + * + * @return \Illuminate\Database\Query\Grammars\MySqlGrammar + */ + protected function getDefaultQueryGrammar() + { + return $this->withTablePrefix(new QueryGrammar); + } + + /** + * Get a schema builder instance for the connection. + * + * @return \Illuminate\Database\Schema\MySqlBuilder + */ + public function getSchemaBuilder() + { + if (is_null($this->schemaGrammar)) { + $this->useDefaultSchemaGrammar(); + } + + return new MySqlBuilder($this); + } + + /** + * Get the default schema grammar instance. + * + * @return \Illuminate\Database\Schema\Grammars\MySqlGrammar + */ + protected function getDefaultSchemaGrammar() + { + return $this->withTablePrefix(new SchemaGrammar); + } + + /** + * Get the schema state for the connection. + * + * @param \Illuminate\Filesystem\Filesystem|null $files + * @param callable|null $processFactory + * @return \Illuminate\Database\Schema\MySqlSchemaState + */ + public function getSchemaState(Filesystem $files = null, callable $processFactory = null) + { + return new MySqlSchemaState($this, $files, $processFactory); + } + + /** + * Get the default post processor instance. + * + * @return \Illuminate\Database\Query\Processors\MySqlProcessor + */ + protected function getDefaultPostProcessor() + { + return new MySqlProcessor; + } + + /** + * Get the Doctrine DBAL driver. + * + * @return \Illuminate\Database\PDO\MySqlDriver + */ + protected function getDoctrineDriver() + { + return new MySqlDriver; + } +} diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/PostgresConnection.php b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/PostgresConnection.php new file mode 100644 index 00000000..627a03c8 --- /dev/null +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/PostgresConnection.php @@ -0,0 +1,80 @@ +withTablePrefix(new QueryGrammar); + } + + /** + * Get a schema builder instance for the connection. + * + * @return \Illuminate\Database\Schema\PostgresBuilder + */ + public function getSchemaBuilder() + { + if (is_null($this->schemaGrammar)) { + $this->useDefaultSchemaGrammar(); + } + + return new PostgresBuilder($this); + } + + /** + * Get the default schema grammar instance. + * + * @return \Illuminate\Database\Schema\Grammars\PostgresGrammar + */ + protected function getDefaultSchemaGrammar() + { + return $this->withTablePrefix(new SchemaGrammar); + } + + /** + * Get the schema state for the connection. + * + * @param \Illuminate\Filesystem\Filesystem|null $files + * @param callable|null $processFactory + * @return \Illuminate\Database\Schema\PostgresSchemaState + */ + public function getSchemaState(Filesystem $files = null, callable $processFactory = null) + { + return new PostgresSchemaState($this, $files, $processFactory); + } + + /** + * Get the default post processor instance. + * + * @return \Illuminate\Database\Query\Processors\PostgresProcessor + */ + protected function getDefaultPostProcessor() + { + return new PostgresProcessor; + } + + /** + * Get the Doctrine DBAL driver. + * + * @return \Illuminate\Database\PDO\PostgresDriver + */ + protected function getDoctrineDriver() + { + return new PostgresDriver; + } +} diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/SQLiteConnection.php b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/SQLiteConnection.php new file mode 100755 index 00000000..5c15e51a --- /dev/null +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/SQLiteConnection.php @@ -0,0 +1,115 @@ +getForeignKeyConstraintsConfigurationValue(); + + if ($enableForeignKeyConstraints === null) { + return; + } + + $enableForeignKeyConstraints + ? $this->getSchemaBuilder()->enableForeignKeyConstraints() + : $this->getSchemaBuilder()->disableForeignKeyConstraints(); + } + + /** + * Get the default query grammar instance. + * + * @return \Illuminate\Database\Query\Grammars\SQLiteGrammar + */ + protected function getDefaultQueryGrammar() + { + return $this->withTablePrefix(new QueryGrammar); + } + + /** + * Get a schema builder instance for the connection. + * + * @return \Illuminate\Database\Schema\SQLiteBuilder + */ + public function getSchemaBuilder() + { + if (is_null($this->schemaGrammar)) { + $this->useDefaultSchemaGrammar(); + } + + return new SQLiteBuilder($this); + } + + /** + * Get the default schema grammar instance. + * + * @return \Illuminate\Database\Schema\Grammars\SQLiteGrammar + */ + protected function getDefaultSchemaGrammar() + { + return $this->withTablePrefix(new SchemaGrammar); + } + + /** + * Get the schema state for the connection. + * + * @param \Illuminate\Filesystem\Filesystem|null $files + * @param callable|null $processFactory + * + * @throws \RuntimeException + */ + public function getSchemaState(Filesystem $files = null, callable $processFactory = null) + { + return new SqliteSchemaState($this, $files, $processFactory); + } + + /** + * Get the default post processor instance. + * + * @return \Illuminate\Database\Query\Processors\SQLiteProcessor + */ + protected function getDefaultPostProcessor() + { + return new SQLiteProcessor; + } + + /** + * Get the Doctrine DBAL driver. + * + * @return \Illuminate\Database\PDO\SQLiteDriver + */ + protected function getDoctrineDriver() + { + return new SQLiteDriver; + } + + /** + * Get the database connection foreign key constraints configuration option. + * + * @return bool|null + */ + protected function getForeignKeyConstraintsConfigurationValue() + { + return $this->getConfig('foreign_key_constraints'); + } +} diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/SqlServerConnection.php b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/SqlServerConnection.php new file mode 100755 index 00000000..450dbaac --- /dev/null +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/SqlServerConnection.php @@ -0,0 +1,123 @@ +getDriverName() === 'sqlsrv') { + return parent::transaction($callback); + } + + $this->getPdo()->exec('BEGIN TRAN'); + + // We'll simply execute the given callback within a try / catch block + // and if we catch any exception we can rollback the transaction + // so that none of the changes are persisted to the database. + try { + $result = $callback($this); + + $this->getPdo()->exec('COMMIT TRAN'); + } + + // If we catch an exception, we will rollback so nothing gets messed + // up in the database. Then we'll re-throw the exception so it can + // be handled how the developer sees fit for their applications. + catch (Throwable $e) { + $this->getPdo()->exec('ROLLBACK TRAN'); + + throw $e; + } + + return $result; + } + } + + /** + * Get the default query grammar instance. + * + * @return \Illuminate\Database\Query\Grammars\SqlServerGrammar + */ + protected function getDefaultQueryGrammar() + { + return $this->withTablePrefix(new QueryGrammar); + } + + /** + * Get a schema builder instance for the connection. + * + * @return \Illuminate\Database\Schema\SqlServerBuilder + */ + public function getSchemaBuilder() + { + if (is_null($this->schemaGrammar)) { + $this->useDefaultSchemaGrammar(); + } + + return new SqlServerBuilder($this); + } + + /** + * Get the default schema grammar instance. + * + * @return \Illuminate\Database\Schema\Grammars\SqlServerGrammar + */ + protected function getDefaultSchemaGrammar() + { + return $this->withTablePrefix(new SchemaGrammar); + } + + /** + * Get the schema state for the connection. + * + * @param \Illuminate\Filesystem\Filesystem|null $files + * @param callable|null $processFactory + * + * @throws \RuntimeException + */ + public function getSchemaState(Filesystem $files = null, callable $processFactory = null) + { + throw new RuntimeException('Schema dumping is not supported when using SQL Server.'); + } + + /** + * Get the default post processor instance. + * + * @return \Illuminate\Database\Query\Processors\SqlServerProcessor + */ + protected function getDefaultPostProcessor() + { + return new SqlServerProcessor; + } + + /** + * Get the Doctrine DBAL driver. + * + * @return \Illuminate\Database\PDO\SqlServerDriver + */ + protected function getDoctrineDriver() + { + return new SqlServerDriver; + } +} diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/GoogleSqlCommenterServiceProvider.php b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/GoogleSqlCommenterServiceProvider.php index 102b0cea..2398227d 100644 --- a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/GoogleSqlCommenterServiceProvider.php +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/GoogleSqlCommenterServiceProvider.php @@ -1,8 +1,10 @@ publishes([ + __DIR__.'/config/google_sqlcommenter.php' => config_path('google_sqlcommenter.php') + ]); + + $this->mergeConfigFrom( + __DIR__.'/config/google_sqlcommenter.php', + 'google_sqlcommenter' + ); } } \ No newline at end of file diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Middleware/GoogleSqlCommenterMiddleware.php b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Middleware/GoogleSqlCommenterMiddleware.php deleted file mode 100644 index 5cf6313d..00000000 --- a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Middleware/GoogleSqlCommenterMiddleware.php +++ /dev/null @@ -1,21 +0,0 @@ -inject($carrier); + return $carrier; + } +} \ No newline at end of file diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/config/google_sqlcommenter.php b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/config/google_sqlcommenter.php new file mode 100644 index 00000000..3552c859 --- /dev/null +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/config/google_sqlcommenter.php @@ -0,0 +1,16 @@ + true, + 'with_controller' => true, + 'with_route' => true, + 'with_dbdriver' => true, + 'with_opentelemetry' => true, + +]; From 12e48a9e6022acc9cfb477f118a36376a6f8f601 Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Thu, 7 Apr 2022 18:53:02 +0530 Subject: [PATCH 05/31] Moving format comments to util --- .../src/Database/Connection.php | 21 ++------------- .../sqlcommenter-laravel/src/Utils.php | 26 +++++++++++++++++++ 2 files changed, 28 insertions(+), 19 deletions(-) create mode 100644 php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Utils.php diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php index e35a8820..445e4207 100644 --- a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php @@ -4,6 +4,7 @@ use Illuminate\Database\Connection as BaseConnection; use OpenTelemetry\API\Trace\Propagation\TraceContextPropagator; use Google\GoogleSqlCommenterLaravel\Opentelemetry; +use Google\GoogleSqlCommenterLaravel\Utils; class Connection extends BaseConnection @@ -110,25 +111,7 @@ public function get_sqlcomments() $carrier = Opentelemetry::get_opentelemetry_values(); $comment = array_merge($comment,$carrier); } - return $this->format_comments($comment); - } - public function format_comments($comment) - { - if (empty($comment)) { - return ""; - } - $lastElement = array_key_last($comment); - $sql_comment = "/*"; - foreach($comment as $key=>$value) - { - if ($key == $lastElement){ - $sql_comment .=$key ."=". "'".$value."'*/"; - } - else{ - $sql_comment .=$key ."=". "'".$value."',"; - } - } - return $sql_comment; + return Utils::format_comments($comment); } } diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Utils.php b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Utils.php new file mode 100644 index 00000000..04295621 --- /dev/null +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Utils.php @@ -0,0 +1,26 @@ +$value) + { + if ($key == $lastElement){ + $sql_comment .=$key ."=". "'".$value."'*/"; + } + else{ + $sql_comment .=$key ."=". "'".$value."',"; + } + } + return $sql_comment; + } + +} \ No newline at end of file From 5f87c4dd25163fa623804a5c7c94d5374b1803dd Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Fri, 8 Apr 2022 16:55:27 +0530 Subject: [PATCH 06/31] Added unit tests for Util functions --- .../packages/sqlcommenter-laravel/README.md | 10 +++++++++- .../packages/sqlcommenter-laravel/composer.json | 11 +++++++++-- .../tests/Unit/UtilsTest.php | 16 ++++++++++++++++ 3 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 php/sqlcommenter-php/packages/sqlcommenter-laravel/tests/Unit/UtilsTest.php diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/README.md b/php/sqlcommenter-php/packages/sqlcommenter-laravel/README.md index c6488ee5..47a5aa72 100644 --- a/php/sqlcommenter-php/packages/sqlcommenter-laravel/README.md +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/README.md @@ -1,10 +1,11 @@ -# sqlcommenter-laravel +# sqlcommenter-laravel [In Development] sqlcommenter is a plugin/middleware/wrapper to augment SQL statements from laravel with comments that can be used later to correlate user code with SQL statements. ### Installation + Add this to your composer.json ```shell "repositories": [ @@ -19,6 +20,7 @@ Install the package composer require "google/sqlcommenter-laravel" ``` ### Usage + Publish the config file from library to into laravel app using below command ```shell @@ -35,3 +37,9 @@ Add the following class above ``Illuminate\Database\DatabaseServiceProvider::cla ... ] ``` +### Run the tests + +Run the tests using below command +```shell +./vendor/bin/phpunit tests +``` diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/composer.json b/php/sqlcommenter-php/packages/sqlcommenter-laravel/composer.json index 383daec1..1e2fbd07 100644 --- a/php/sqlcommenter-php/packages/sqlcommenter-laravel/composer.json +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/composer.json @@ -10,12 +10,16 @@ "role": "Developer" }], "require": { - "open-telemetry/opentelemetry": "dev-main" + "open-telemetry/opentelemetry": "~0.0.9", + "php-http/guzzle7-adapter": "^1.0" }, "autoload": { "psr-4": { "Google\\GoogleSqlCommenterLaravel\\": "src" - } + }, + "classmap": [ + "src/" + ] }, "extra": { "laravel": { @@ -26,5 +30,8 @@ }, "scripts": { "format": "phpcbf --standard=psr2 src/" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" } } diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/tests/Unit/UtilsTest.php b/php/sqlcommenter-php/packages/sqlcommenter-laravel/tests/Unit/UtilsTest.php new file mode 100644 index 00000000..1c9977a8 --- /dev/null +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/tests/Unit/UtilsTest.php @@ -0,0 +1,16 @@ +assertEquals("/*key1='value1',key2='value2'*/",Utils::format_comments(array("key1"=>"value1", "key2"=>"value2"))); + } + public function testformatcommentswithoutkeys(): void + { + $this->assertEquals("",Utils::format_comments(array())); + } +} \ No newline at end of file From 02c2f81627f407d4a989d64371e3f38e03b3c846 Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Wed, 13 Apr 2022 13:55:39 +0530 Subject: [PATCH 07/31] Added Copyrights to individual packages --- .../src/Database/Connection.php | 35 ++++++++++++------ .../src/Database/DatabaseServiceProvider.php | 36 +++++++++++++------ .../src/Database/MySqlConnection.php | 15 ++++++++ .../src/Database/PostgresConnection.php | 15 ++++++++ .../src/Database/SQLiteConnection.php | 15 ++++++++ .../src/Database/SqlServerConnection.php | 15 ++++++++ .../src/GoogleSqlCommenterServiceProvider.php | 22 +++++++++--- .../src/Opentelemetry.php | 17 ++++++++- .../sqlcommenter-laravel/src/Utils.php | 30 +++++++++++----- .../src/config/google_sqlcommenter.php | 16 +++++++++ .../tests/Unit/UtilsTest.php | 21 +++++++++-- 11 files changed, 199 insertions(+), 38 deletions(-) diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php index 445e4207..ce863286 100644 --- a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php @@ -1,4 +1,20 @@ get_sqlcomments(); $records = parent::select($query, $bindings, $useReadPdo); - if (count($records) > 0) - { + if (count($records) > 0) { return $records; } return null; @@ -42,7 +57,6 @@ public function select($query, $bindings = [], $useReadPdo = true) $query .= $this->get_sqlcomments(); $records = parent::select($query, $bindings, $useReadPdo); return $records; - } /** @@ -93,25 +107,24 @@ public function get_sqlcomments() { $configurationKey = 'google_sqlcommenter.include.'; $comment = []; - if (config($configurationKey.'framework', true)){ - $comment['framework'] = "laravel-" .app()->version(); + if (config($configurationKey . 'framework', true)) { + $comment['framework'] = "laravel-" . app()->version(); } - if (config($configurationKey.'controller', true)){ + if (config($configurationKey . 'controller', true)) { $action = app('request')->route()->getAction(); $comment['controller'] = class_basename($action['controller']); } - if (config($configurationKey.'route', true)){ + if (config($configurationKey . 'route', true)) { $comment['route'] = request()->getRequestUri(); } - if (config($configurationKey.'db_driver', true)){ + if (config($configurationKey . 'db_driver', true)) { $connection = config('database.default'); $comment['db_driver'] = config("database.connections.{$connection}.driver"); } - if (config($configurationKey.'opentelemetry', true)){ + if (config($configurationKey . 'opentelemetry', true)) { $carrier = Opentelemetry::get_opentelemetry_values(); - $comment = array_merge($comment,$carrier); + $comment = array_merge($comment, $carrier); } return Utils::format_comments($comment); } - } diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/DatabaseServiceProvider.php b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/DatabaseServiceProvider.php index eb386101..3162a73c 100644 --- a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/DatabaseServiceProvider.php +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/DatabaseServiceProvider.php @@ -1,4 +1,20 @@ publishes([ - __DIR__.'/config/google_sqlcommenter.php' => config_path('google_sqlcommenter.php') + __DIR__ . '/config/google_sqlcommenter.php' => config_path('google_sqlcommenter.php') ]); $this->mergeConfigFrom( - __DIR__.'/config/google_sqlcommenter.php', + __DIR__ . '/config/google_sqlcommenter.php', 'google_sqlcommenter' ); } - -} \ No newline at end of file +} diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Opentelemetry.php b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Opentelemetry.php index b05d4e0c..e874a186 100644 --- a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Opentelemetry.php +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Opentelemetry.php @@ -1,4 +1,19 @@ inject($carrier); return $carrier; } -} \ No newline at end of file +} diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Utils.php b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Utils.php index 04295621..e81fa842 100644 --- a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Utils.php +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Utils.php @@ -1,4 +1,19 @@ $value) - { - if ($key == $lastElement){ - $sql_comment .=$key ."=". "'".$value."'*/"; - } - else{ - $sql_comment .=$key ."=". "'".$value."',"; + foreach ($comment as $key => $value) { + if ($key == $lastElement) { + $sql_comment .= $key . "=" . "'" . $value . "'*/"; + } else { + $sql_comment .= $key . "=" . "'" . $value . "',"; } } return $sql_comment; } - -} \ No newline at end of file +} diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/config/google_sqlcommenter.php b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/config/google_sqlcommenter.php index 3552c859..8fbb2232 100644 --- a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/config/google_sqlcommenter.php +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/config/google_sqlcommenter.php @@ -1,4 +1,20 @@ assertEquals("/*key1='value1',key2='value2'*/",Utils::format_comments(array("key1"=>"value1", "key2"=>"value2"))); + $this->assertEquals("/*key1='value1',key2='value2'*/", Utils::format_comments(array("key1" => "value1", "key2" => "value2"))); } public function testformatcommentswithoutkeys(): void { - $this->assertEquals("",Utils::format_comments(array())); + $this->assertEquals("", Utils::format_comments(array())); } -} \ No newline at end of file +} From 2b5d93447ee69c56eca89cc5e14b031e2310bbf2 Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Wed, 13 Apr 2022 15:49:41 +0530 Subject: [PATCH 08/31] PR code review changes --- .../sqlcommenter-laravel/src/Database/Connection.php | 6 +++--- .../src/GoogleSqlCommenterServiceProvider.php | 1 - .../packages/sqlcommenter-laravel/src/Opentelemetry.php | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php index ce863286..1fbab84d 100644 --- a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php @@ -98,12 +98,12 @@ public function update($query, $bindings = []) */ public function delete($query, $bindings = []) { - $query .= $this->get_sqlcomments(); + $query .= $this->getSqlComments(); return $this->affectingStatement($query, $bindings); } - public function get_sqlcomments() + private function getSqlComments() { $configurationKey = 'google_sqlcommenter.include.'; $comment = []; @@ -122,7 +122,7 @@ public function get_sqlcomments() $comment['db_driver'] = config("database.connections.{$connection}.driver"); } if (config($configurationKey . 'opentelemetry', true)) { - $carrier = Opentelemetry::get_opentelemetry_values(); + $carrier = Opentelemetry::getOpentelemetryValues(); $comment = array_merge($comment, $carrier); } return Utils::format_comments($comment); diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/GoogleSqlCommenterServiceProvider.php b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/GoogleSqlCommenterServiceProvider.php index c9b55070..21f214f9 100644 --- a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/GoogleSqlCommenterServiceProvider.php +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/GoogleSqlCommenterServiceProvider.php @@ -28,7 +28,6 @@ class GoogleSqlCommenterServiceProvider extends ServiceProvider */ public function register() { - // } /** diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Opentelemetry.php b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Opentelemetry.php index e874a186..051edff3 100644 --- a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Opentelemetry.php +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Opentelemetry.php @@ -21,7 +21,7 @@ class Opentelemetry { - public static function get_opentelemetry_values() + public static function getOpentelemetryValues() { $carrier = []; From 9f9d966496cf35e4c955c5eb1996f852dc8c6e63 Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Fri, 15 Apr 2022 19:35:56 +0530 Subject: [PATCH 09/31] URL Encoding for coments added --- .../sqlcommenter-laravel/src/Utils.php | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Utils.php b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Utils.php index e81fa842..5535b465 100644 --- a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Utils.php +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Utils.php @@ -19,7 +19,7 @@ class Utils { - public static function format_comments($comment) + public static function formatComments($comment) { if (empty($comment)) { return ""; @@ -28,11 +28,23 @@ public static function format_comments($comment) $sql_comment = "/*"; foreach ($comment as $key => $value) { if ($key == $lastElement) { - $sql_comment .= $key . "=" . "'" . $value . "'*/"; + $sql_comment .= Utils::customUrlEncode($key) . "=" . "'" . Utils::customUrlEncode($value) . "'*/"; } else { - $sql_comment .= $key . "=" . "'" . $value . "',"; + $sql_comment .= Utils::customUrlEncode($key) . "=" . "'" . Utils::customUrlEncode($value) . "',"; } } return $sql_comment; } + + private static function customUrlEncode($input) + { + $encodedString = urlencode($input); + + # Since SQL uses '%' as a keyword, '%' is a by-product of url quoting + # e.g. foo,bar --> foo%2Cbar + # thus in our quoting, we need to escape it too to finally give + # foo,bar --> foo%%2Cbar + + return str_replace("%", "%%", $encodedString); + } } From 5b88cb115ac10ab0891edec882d7856144d5dc3d Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Fri, 15 Apr 2022 19:37:17 +0530 Subject: [PATCH 10/31] Added additional config - action --- .../src/Database/Connection.php | 23 +++++++++----- .../src/config/google_sqlcommenter.php | 30 +++++-------------- .../tests/Unit/UtilsTest.php | 12 +++++--- 3 files changed, 31 insertions(+), 34 deletions(-) diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php index 1fbab84d..a4e9cb1c 100644 --- a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php @@ -35,7 +35,7 @@ class Connection extends BaseConnection */ public function selectOne($query, $bindings = [], $useReadPdo = true) { - $query .= $this->get_sqlcomments(); + $query .= $this->getSqlComments(); $records = parent::select($query, $bindings, $useReadPdo); if (count($records) > 0) { @@ -54,7 +54,7 @@ public function selectOne($query, $bindings = [], $useReadPdo = true) */ public function select($query, $bindings = [], $useReadPdo = true) { - $query .= $this->get_sqlcomments(); + $query .= $this->getSqlComments(); $records = parent::select($query, $bindings, $useReadPdo); return $records; } @@ -68,7 +68,7 @@ public function select($query, $bindings = [], $useReadPdo = true) */ public function insert($query, $bindings = []) { - $query .= $this->get_sqlcomments(); + $query .= $this->getSqlComments(); $records = parent::insert($query, $bindings); @@ -84,7 +84,7 @@ public function insert($query, $bindings = []) */ public function update($query, $bindings = []) { - $query .= $this->get_sqlcomments(); + $query .= $this->getSqlComments(); return $this->affectingStatement($query, $bindings); } @@ -107,12 +107,19 @@ private function getSqlComments() { $configurationKey = 'google_sqlcommenter.include.'; $comment = []; + $action = null; + + if (!empty(app('request')->route())) { + $action = app('request')->route()->getAction(); + } if (config($configurationKey . 'framework', true)) { $comment['framework'] = "laravel-" . app()->version(); } - if (config($configurationKey . 'controller', true)) { - $action = app('request')->route()->getAction(); - $comment['controller'] = class_basename($action['controller']); + if (config($configurationKey . 'controller', true) and !empty($action['controller'])) { + $comment['controller'] = explode("@", class_basename($action['controller']))[0]; + } + if (config($configurationKey . 'action', true) and !empty($action['controller'] and str_contains($action['controller'], '@'))) { + $comment['action'] = explode("@", class_basename($action['controller']))[1]; } if (config($configurationKey . 'route', true)) { $comment['route'] = request()->getRequestUri(); @@ -125,6 +132,6 @@ private function getSqlComments() $carrier = Opentelemetry::getOpentelemetryValues(); $comment = array_merge($comment, $carrier); } - return Utils::format_comments($comment); + return Utils::formatComments(array_filter(($comment))); } } diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/config/google_sqlcommenter.php b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/config/google_sqlcommenter.php index 8fbb2232..afda8bc3 100644 --- a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/config/google_sqlcommenter.php +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/config/google_sqlcommenter.php @@ -1,20 +1,4 @@ true, - 'with_controller' => true, - 'with_route' => true, - 'with_dbdriver' => true, - 'with_opentelemetry' => true, + 'include' => [ + 'framework' => true, + 'controller' => true, + 'route' => true, + 'db_driver' => true, + 'opentelemetry' => true, + 'action' => true, + ] ]; diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/tests/Unit/UtilsTest.php b/php/sqlcommenter-php/packages/sqlcommenter-laravel/tests/Unit/UtilsTest.php index 7117b3f4..32fa9de5 100644 --- a/php/sqlcommenter-php/packages/sqlcommenter-laravel/tests/Unit/UtilsTest.php +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/tests/Unit/UtilsTest.php @@ -20,12 +20,16 @@ final class UtilsTest extends TestCase { - public function testformatcommentswithkeys(): void + public function testFormatCommentsWithKeys(): void { - $this->assertEquals("/*key1='value1',key2='value2'*/", Utils::format_comments(array("key1" => "value1", "key2" => "value2"))); + $this->assertEquals("/*key1='value1',key2='value2'*/", Utils::formatComments(array("key1" => "value1", "key2" => "value2"))); } - public function testformatcommentswithoutkeys(): void + public function testFormatCommentsWithoutKeys(): void { - $this->assertEquals("", Utils::format_comments(array())); + $this->assertEquals("", Utils::formatComments(array())); + } + public function testFormatCommentsWithSpecialCharKeys(): void + { + $this->assertEquals("/*key1='value1%%40',key2='value2'*/", Utils::formatComments(array("key1" => "value1@", "key2" => "value2"))); } } From 9ef5facb3b7b0a17769772af57b75e9ba6d21304 Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Thu, 21 Apr 2022 15:25:34 +0530 Subject: [PATCH 11/31] Changing copyright year --- .../src/GoogleSqlCommenterServiceProvider.php | 2 +- .../packages/sqlcommenter-laravel/src/Opentelemetry.php | 2 +- .../packages/sqlcommenter-laravel/src/Utils.php | 2 +- .../packages/sqlcommenter-laravel/tests/Unit/UtilsTest.php | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/GoogleSqlCommenterServiceProvider.php b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/GoogleSqlCommenterServiceProvider.php index 21f214f9..644bd179 100644 --- a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/GoogleSqlCommenterServiceProvider.php +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/GoogleSqlCommenterServiceProvider.php @@ -1,6 +1,6 @@ Date: Thu, 21 Apr 2022 15:33:41 +0530 Subject: [PATCH 12/31] Changing copyright year --- .../packages/sqlcommenter-laravel/src/Database/Connection.php | 2 +- .../src/Database/DatabaseServiceProvider.php | 2 +- .../sqlcommenter-laravel/src/Database/MySqlConnection.php | 2 +- .../sqlcommenter-laravel/src/Database/PostgresConnection.php | 2 +- .../sqlcommenter-laravel/src/Database/SQLiteConnection.php | 2 +- .../sqlcommenter-laravel/src/Database/SqlServerConnection.php | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php index a4e9cb1c..c1d95c72 100644 --- a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php @@ -1,6 +1,6 @@ Date: Thu, 28 Apr 2022 14:00:52 +0530 Subject: [PATCH 13/31] Added sample for docker-laravel --- .gitignore | 2 + .phpunit.result.cache | 1 + .vscode/launch.json | 22 + .../sqlcommenter-laravel/.editorconfig | 18 + .../samples/sqlcommenter-laravel/.env.example | 52 + .../sqlcommenter-laravel/.gitattributes | 10 + .../samples/sqlcommenter-laravel/.gitignore | 14 + .../samples/sqlcommenter-laravel/.styleci.yml | 12 + .../samples/sqlcommenter-laravel/README.md | 64 + .../app/Console/Kernel.php | 32 + .../app/Exceptions/Handler.php | 50 + .../app/Http/Controllers/Controller.php | 13 + .../app/Http/Controllers/UserController.php | 30 + .../sqlcommenter-laravel/app/Http/Kernel.php | 67 + .../app/Http/Middleware/Authenticate.php | 21 + .../app/Http/Middleware/EncryptCookies.php | 17 + .../PreventRequestsDuringMaintenance.php | 17 + .../Middleware/RedirectIfAuthenticated.php | 32 + .../app/Http/Middleware/TrimStrings.php | 19 + .../app/Http/Middleware/TrustHosts.php | 20 + .../app/Http/Middleware/TrustProxies.php | 28 + .../app/Http/Middleware/VerifyCsrfToken.php | 17 + .../sqlcommenter-laravel/app/Models/User.php | 44 + .../app/Providers/AppServiceProvider.php | 28 + .../app/Providers/AuthServiceProvider.php | 30 + .../Providers/BroadcastServiceProvider.php | 21 + .../app/Providers/EventServiceProvider.php | 42 + .../app/Providers/RouteServiceProvider.php | 52 + .../samples/sqlcommenter-laravel/artisan | 53 + .../sqlcommenter-laravel/bootstrap/app.php | 55 + .../bootstrap/cache/.gitignore | 2 + .../sqlcommenter-laravel/composer.json | 68 + .../sqlcommenter-laravel/composer.lock | 7745 +++++++++++++++++ .../sqlcommenter-laravel/config/app.php | 197 + .../sqlcommenter-laravel/config/auth.php | 111 + .../config/broadcasting.php | 67 + .../sqlcommenter-laravel/config/cache.php | 110 + .../sqlcommenter-laravel/config/cors.php | 34 + .../sqlcommenter-laravel/config/database.php | 151 + .../config/filesystems.php | 76 + .../sqlcommenter-laravel/config/hashing.php | 52 + .../sqlcommenter-laravel/config/logging.php | 119 + .../sqlcommenter-laravel/config/mail.php | 117 + .../sqlcommenter-laravel/config/queue.php | 93 + .../sqlcommenter-laravel/config/sanctum.php | 67 + .../sqlcommenter-laravel/config/services.php | 34 + .../sqlcommenter-laravel/config/session.php | 201 + .../sqlcommenter-laravel/config/view.php | 36 + .../sqlcommenter-laravel/database/.gitignore | 1 + .../database/factories/UserFactory.php | 42 + .../2014_10_12_000000_create_users_table.php | 36 + ...12_100000_create_password_resets_table.php | 32 + ..._08_19_000000_create_failed_jobs_table.php | 36 + ...01_create_personal_access_tokens_table.php | 36 + .../database/seeders/DatabaseSeeder.php | 19 + .../samples/sqlcommenter-laravel/lang/en.json | 7 + .../sqlcommenter-laravel/lang/en/auth.php | 20 + .../lang/en/pagination.php | 19 + .../lang/en/passwords.php | 22 + .../lang/en/validation.php | 162 + .../samples/sqlcommenter-laravel/package.json | 18 + .../samples/sqlcommenter-laravel/phpunit.xml | 31 + .../sqlcommenter-laravel/public/.htaccess | 21 + .../sqlcommenter-laravel/public/favicon.ico | 0 .../sqlcommenter-laravel/public/index.php | 55 + .../sqlcommenter-laravel/public/robots.txt | 2 + .../resources/css/app.css | 0 .../sqlcommenter-laravel/resources/js/app.js | 1 + .../resources/js/bootstrap.js | 28 + .../resources/views/welcome.blade.php | 132 + .../sqlcommenter-laravel/routes/api.php | 23 + .../sqlcommenter-laravel/routes/channels.php | 18 + .../sqlcommenter-laravel/routes/console.php | 19 + .../sqlcommenter-laravel/routes/web.php | 18 + .../storage/app/.gitignore | 3 + .../storage/app/public/.gitignore | 2 + .../storage/framework/.gitignore | 9 + .../storage/framework/cache/.gitignore | 3 + .../storage/framework/cache/data/.gitignore | 2 + .../storage/framework/sessions/.gitignore | 2 + .../storage/framework/testing/.gitignore | 2 + .../storage/framework/views/.gitignore | 2 + .../storage/logs/.gitignore | 2 + .../tests/CreatesApplication.php | 22 + .../tests/Feature/EloquentTest.php | 31 + .../sqlcommenter-laravel/tests/TestCase.php | 10 + .../tests/Unit/ExampleTest.php | 18 + .../sqlcommenter-laravel/webpack.mix.js | 17 + 88 files changed, 11086 insertions(+) create mode 100644 .gitignore create mode 100644 .phpunit.result.cache create mode 100644 .vscode/launch.json create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/.editorconfig create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/.env.example create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/.gitattributes create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/.gitignore create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/.styleci.yml create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/README.md create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Console/Kernel.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Exceptions/Handler.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Controllers/Controller.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Controllers/UserController.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Kernel.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Middleware/Authenticate.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Middleware/EncryptCookies.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Middleware/PreventRequestsDuringMaintenance.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Middleware/RedirectIfAuthenticated.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Middleware/TrimStrings.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Middleware/TrustHosts.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Middleware/TrustProxies.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Middleware/VerifyCsrfToken.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Models/User.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Providers/AppServiceProvider.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Providers/AuthServiceProvider.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Providers/BroadcastServiceProvider.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Providers/EventServiceProvider.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Providers/RouteServiceProvider.php create mode 100755 php/sqlcommenter-php/samples/sqlcommenter-laravel/artisan create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/bootstrap/app.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/bootstrap/cache/.gitignore create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/composer.json create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/composer.lock create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/config/app.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/config/auth.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/config/broadcasting.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/config/cache.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/config/cors.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/config/database.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/config/filesystems.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/config/hashing.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/config/logging.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/config/mail.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/config/queue.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/config/sanctum.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/config/services.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/config/session.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/config/view.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/database/.gitignore create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/database/factories/UserFactory.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/database/migrations/2014_10_12_000000_create_users_table.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/database/migrations/2014_10_12_100000_create_password_resets_table.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/database/migrations/2019_08_19_000000_create_failed_jobs_table.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/database/seeders/DatabaseSeeder.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/lang/en.json create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/lang/en/auth.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/lang/en/pagination.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/lang/en/passwords.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/lang/en/validation.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/package.json create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/phpunit.xml create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/public/.htaccess create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/public/favicon.ico create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/public/index.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/public/robots.txt create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/resources/css/app.css create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/resources/js/app.js create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/resources/js/bootstrap.js create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/resources/views/welcome.blade.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/routes/api.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/routes/channels.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/routes/console.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/routes/web.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/storage/app/.gitignore create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/storage/app/public/.gitignore create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/storage/framework/.gitignore create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/storage/framework/cache/.gitignore create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/storage/framework/cache/data/.gitignore create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/storage/framework/sessions/.gitignore create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/storage/framework/testing/.gitignore create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/storage/framework/views/.gitignore create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/storage/logs/.gitignore create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/tests/CreatesApplication.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/tests/Feature/EloquentTest.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/tests/TestCase.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/tests/Unit/ExampleTest.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/webpack.mix.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..cc3016a8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +php/sqlcommenter-php/packages/sqlcommenter-laravel/vendor/* +.idea/** \ No newline at end of file diff --git a/.phpunit.result.cache b/.phpunit.result.cache new file mode 100644 index 00000000..e3d7530d --- /dev/null +++ b/.phpunit.result.cache @@ -0,0 +1 @@ +{"version":1,"defects":{"UtilsTest::testFormatCommentsWithKeys":4,"UtilsTest::testFormatCommentsWithoutKeys":4,"UtilsTest::testFormatCommentsWithSpecialCharKeys":4},"times":{"Tests\\Unit\\ExampleTest::test_that_true_is_true":0,"UtilsTest::testFormatCommentsWithKeys":0,"UtilsTest::testFormatCommentsWithoutKeys":0,"UtilsTest::testFormatCommentsWithSpecialCharKeys":0}} \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 00000000..8a7e356e --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,22 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Listen for XDebug", + "type": "php", + "request": "launch", + "port": 9003 + }, + { + "name": "Launch currently open script", + "type": "php", + "request": "launch", + "program": "${file}", + "cwd": "${fileDirname}", + "port": 9003 + } + ] +} \ No newline at end of file diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/.editorconfig b/php/sqlcommenter-php/samples/sqlcommenter-laravel/.editorconfig new file mode 100644 index 00000000..1671c9b9 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/.editorconfig @@ -0,0 +1,18 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false + +[*.{yml,yaml}] +indent_size = 2 + +[docker-compose.yml] +indent_size = 4 diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/.env.example b/php/sqlcommenter-php/samples/sqlcommenter-laravel/.env.example new file mode 100644 index 00000000..9bb1bd7c --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/.env.example @@ -0,0 +1,52 @@ +APP_NAME=Laravel +APP_ENV=local +APP_KEY= +APP_DEBUG=true +APP_URL=http://localhost + +LOG_CHANNEL=stack +LOG_DEPRECATIONS_CHANNEL=null +LOG_LEVEL=debug + +DB_CONNECTION=mysql +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_DATABASE=laravel +DB_USERNAME=root +DB_PASSWORD= + +BROADCAST_DRIVER=log +CACHE_DRIVER=file +FILESYSTEM_DISK=local +QUEUE_CONNECTION=sync +SESSION_DRIVER=file +SESSION_LIFETIME=120 + +MEMCACHED_HOST=127.0.0.1 + +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_MAILER=smtp +MAIL_HOST=mailhog +MAIL_PORT=1025 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_ENCRYPTION=null +MAIL_FROM_ADDRESS="hello@example.com" +MAIL_FROM_NAME="${APP_NAME}" + +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_DEFAULT_REGION=us-east-1 +AWS_BUCKET= +AWS_USE_PATH_STYLE_ENDPOINT=false + +PUSHER_APP_ID= +PUSHER_APP_KEY= +PUSHER_APP_SECRET= +PUSHER_APP_CLUSTER=mt1 + +MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" +MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/.gitattributes b/php/sqlcommenter-php/samples/sqlcommenter-laravel/.gitattributes new file mode 100644 index 00000000..510d9961 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/.gitattributes @@ -0,0 +1,10 @@ +* text=auto + +*.blade.php diff=html +*.css diff=css +*.html diff=html +*.md diff=markdown +*.php diff=php + +/.github export-ignore +CHANGELOG.md export-ignore diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/.gitignore b/php/sqlcommenter-php/samples/sqlcommenter-laravel/.gitignore new file mode 100644 index 00000000..bc67a663 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/.gitignore @@ -0,0 +1,14 @@ +/node_modules +/public/hot +/public/storage +/storage/*.key +/vendor +.env +.env.backup +.phpunit.result.cache +Homestead.json +Homestead.yaml +npm-debug.log +yarn-error.log +/.idea +/.vscode diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/.styleci.yml b/php/sqlcommenter-php/samples/sqlcommenter-laravel/.styleci.yml new file mode 100644 index 00000000..79f63b44 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/.styleci.yml @@ -0,0 +1,12 @@ +php: + preset: laravel + disabled: + - no_unused_imports + finder: + not-name: + - index.php +js: + finder: + not-name: + - webpack.mix.js +css: true diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/README.md b/php/sqlcommenter-php/samples/sqlcommenter-laravel/README.md new file mode 100644 index 00000000..f171ecac --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/README.md @@ -0,0 +1,64 @@ +

+ +

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

+ +## About Laravel + +Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as: + +- [Simple, fast routing engine](https://laravel.com/docs/routing). +- [Powerful dependency injection container](https://laravel.com/docs/container). +- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage. +- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent). +- Database agnostic [schema migrations](https://laravel.com/docs/migrations). +- [Robust background job processing](https://laravel.com/docs/queues). +- [Real-time event broadcasting](https://laravel.com/docs/broadcasting). + +Laravel is accessible, powerful, and provides tools required for large, robust applications. + +## Learning Laravel + +Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. + +If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains over 2000 video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library. + +## Laravel Sponsors + +We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the Laravel [Patreon page](https://patreon.com/taylorotwell). + +### Premium Partners + +- **[Vehikl](https://vehikl.com/)** +- **[Tighten Co.](https://tighten.co)** +- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)** +- **[64 Robots](https://64robots.com)** +- **[Cubet Techno Labs](https://cubettech.com)** +- **[Cyber-Duck](https://cyber-duck.co.uk)** +- **[Many](https://www.many.co.uk)** +- **[Webdock, Fast VPS Hosting](https://www.webdock.io/en)** +- **[DevSquad](https://devsquad.com)** +- **[Curotec](https://www.curotec.com/services/technologies/laravel/)** +- **[OP.GG](https://op.gg)** +- **[WebReinvent](https://webreinvent.com/?utm_source=laravel&utm_medium=github&utm_campaign=patreon-sponsors)** +- **[Lendio](https://lendio.com)** + +## Contributing + +Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions). + +## Code of Conduct + +In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct). + +## Security Vulnerabilities + +If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed. + +## License + +The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Console/Kernel.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Console/Kernel.php new file mode 100644 index 00000000..d8bc1d29 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Console/Kernel.php @@ -0,0 +1,32 @@ +command('inspire')->hourly(); + } + + /** + * Register the commands for the application. + * + * @return void + */ + protected function commands() + { + $this->load(__DIR__.'/Commands'); + + require base_path('routes/console.php'); + } +} diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Exceptions/Handler.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Exceptions/Handler.php new file mode 100644 index 00000000..008b40fa --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Exceptions/Handler.php @@ -0,0 +1,50 @@ +, \Psr\Log\LogLevel::*> + */ + protected $levels = [ + // + ]; + + /** + * A list of the exception types that are not reported. + * + * @var array> + */ + protected $dontReport = [ + // + ]; + + /** + * A list of the inputs that are never flashed for validation exceptions. + * + * @var array + */ + protected $dontFlash = [ + 'current_password', + 'password', + 'password_confirmation', + ]; + + /** + * Register the exception handling callbacks for the application. + * + * @return void + */ + public function register() + { + $this->reportable(function (Throwable $e) { + // + }); + } +} diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Controllers/Controller.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Controllers/Controller.php new file mode 100644 index 00000000..a0a2a8a3 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Controllers/Controller.php @@ -0,0 +1,13 @@ +name = 'john'; +// $user_update->email ='assss@d.com'; +// $user_update->password ='as@d.com'; +// +// $user_update->save(); + + } +} diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Kernel.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Kernel.php new file mode 100644 index 00000000..c3be2544 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Kernel.php @@ -0,0 +1,67 @@ + + */ + protected $middleware = [ + // \App\Http\Middleware\TrustHosts::class, + \App\Http\Middleware\TrustProxies::class, + \Illuminate\Http\Middleware\HandleCors::class, + \App\Http\Middleware\PreventRequestsDuringMaintenance::class, + \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, + \App\Http\Middleware\TrimStrings::class, + \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, + ]; + + /** + * The application's route middleware groups. + * + * @var array> + */ + protected $middlewareGroups = [ + 'web' => [ + \App\Http\Middleware\EncryptCookies::class, + \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, + \Illuminate\Session\Middleware\StartSession::class, + \Illuminate\View\Middleware\ShareErrorsFromSession::class, + \App\Http\Middleware\VerifyCsrfToken::class, + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + + 'api' => [ + // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, + 'throttle:api', + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + ]; + + /** + * The application's route middleware. + * + * These middleware may be assigned to groups or used individually. + * + * @var array + */ + protected $routeMiddleware = [ + 'auth' => \App\Http\Middleware\Authenticate::class, + 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, + 'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class, + 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, + 'can' => \Illuminate\Auth\Middleware\Authorize::class, + 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, + 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, + 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, + 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, + 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, + ]; +} diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Middleware/Authenticate.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Middleware/Authenticate.php new file mode 100644 index 00000000..704089a7 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Middleware/Authenticate.php @@ -0,0 +1,21 @@ +expectsJson()) { + return route('login'); + } + } +} diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Middleware/EncryptCookies.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Middleware/EncryptCookies.php new file mode 100644 index 00000000..867695bd --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Middleware/EncryptCookies.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Middleware/PreventRequestsDuringMaintenance.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Middleware/PreventRequestsDuringMaintenance.php new file mode 100644 index 00000000..74cbd9a9 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Middleware/PreventRequestsDuringMaintenance.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Middleware/RedirectIfAuthenticated.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Middleware/RedirectIfAuthenticated.php new file mode 100644 index 00000000..a2813a06 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Middleware/RedirectIfAuthenticated.php @@ -0,0 +1,32 @@ +check()) { + return redirect(RouteServiceProvider::HOME); + } + } + + return $next($request); + } +} diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Middleware/TrimStrings.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Middleware/TrimStrings.php new file mode 100644 index 00000000..88cadcaa --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Middleware/TrimStrings.php @@ -0,0 +1,19 @@ + + */ + protected $except = [ + 'current_password', + 'password', + 'password_confirmation', + ]; +} diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Middleware/TrustHosts.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Middleware/TrustHosts.php new file mode 100644 index 00000000..7186414c --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Middleware/TrustHosts.php @@ -0,0 +1,20 @@ + + */ + public function hosts() + { + return [ + $this->allSubdomainsOfApplicationUrl(), + ]; + } +} diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Middleware/TrustProxies.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Middleware/TrustProxies.php new file mode 100644 index 00000000..3391630e --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Middleware/TrustProxies.php @@ -0,0 +1,28 @@ +|string|null + */ + protected $proxies; + + /** + * The headers that should be used to detect proxies. + * + * @var int + */ + protected $headers = + Request::HEADER_X_FORWARDED_FOR | + Request::HEADER_X_FORWARDED_HOST | + Request::HEADER_X_FORWARDED_PORT | + Request::HEADER_X_FORWARDED_PROTO | + Request::HEADER_X_FORWARDED_AWS_ELB; +} diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Middleware/VerifyCsrfToken.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Middleware/VerifyCsrfToken.php new file mode 100644 index 00000000..9e865217 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Middleware/VerifyCsrfToken.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Models/User.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Models/User.php new file mode 100644 index 00000000..89963686 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Models/User.php @@ -0,0 +1,44 @@ + + */ + protected $fillable = [ + 'name', + 'email', + 'password', + ]; + + /** + * The attributes that should be hidden for serialization. + * + * @var array + */ + protected $hidden = [ + 'password', + 'remember_token', + ]; + + /** + * The attributes that should be cast. + * + * @var array + */ + protected $casts = [ + 'email_verified_at' => 'datetime', + ]; +} diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Providers/AppServiceProvider.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Providers/AppServiceProvider.php new file mode 100644 index 00000000..ee8ca5bc --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Providers/AppServiceProvider.php @@ -0,0 +1,28 @@ + + */ + protected $policies = [ + // 'App\Models\Model' => 'App\Policies\ModelPolicy', + ]; + + /** + * Register any authentication / authorization services. + * + * @return void + */ + public function boot() + { + $this->registerPolicies(); + + // + } +} diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Providers/BroadcastServiceProvider.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Providers/BroadcastServiceProvider.php new file mode 100644 index 00000000..395c518b --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Providers/BroadcastServiceProvider.php @@ -0,0 +1,21 @@ +> + */ + protected $listen = [ + Registered::class => [ + SendEmailVerificationNotification::class, + ], + ]; + + /** + * Register any events for your application. + * + * @return void + */ + public function boot() + { + // + } + + /** + * Determine if events and listeners should be automatically discovered. + * + * @return bool + */ + public function shouldDiscoverEvents() + { + return false; + } +} diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Providers/RouteServiceProvider.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Providers/RouteServiceProvider.php new file mode 100644 index 00000000..f34af12a --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Providers/RouteServiceProvider.php @@ -0,0 +1,52 @@ +configureRateLimiting(); + + $this->routes(function () { + Route::middleware('api') + ->prefix('api') + ->group(base_path('routes/api.php')); + + Route::middleware('web') + ->group(base_path('routes/web.php')); + }); + } + + /** + * Configure the rate limiters for the application. + * + * @return void + */ + protected function configureRateLimiting() + { + RateLimiter::for('api', function (Request $request) { + return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip()); + }); + } +} diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/artisan b/php/sqlcommenter-php/samples/sqlcommenter-laravel/artisan new file mode 100755 index 00000000..67a3329b --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/artisan @@ -0,0 +1,53 @@ +#!/usr/bin/env php +make(Illuminate\Contracts\Console\Kernel::class); + +$status = $kernel->handle( + $input = new Symfony\Component\Console\Input\ArgvInput, + new Symfony\Component\Console\Output\ConsoleOutput +); + +/* +|-------------------------------------------------------------------------- +| Shutdown The Application +|-------------------------------------------------------------------------- +| +| Once Artisan has finished running, we will fire off the shutdown events +| so that any final work may be done by the application before we shut +| down the process. This is the last thing to happen to the request. +| +*/ + +$kernel->terminate($input, $status); + +exit($status); diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/bootstrap/app.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/bootstrap/app.php new file mode 100644 index 00000000..037e17df --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/bootstrap/app.php @@ -0,0 +1,55 @@ +singleton( + Illuminate\Contracts\Http\Kernel::class, + App\Http\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Console\Kernel::class, + App\Console\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Debug\ExceptionHandler::class, + App\Exceptions\Handler::class +); + +/* +|-------------------------------------------------------------------------- +| Return The Application +|-------------------------------------------------------------------------- +| +| This script returns the application instance. The instance is given to +| the calling script so we can separate the building of the instances +| from the actual running of the application and sending responses. +| +*/ + +return $app; diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/bootstrap/cache/.gitignore b/php/sqlcommenter-php/samples/sqlcommenter-laravel/bootstrap/cache/.gitignore new file mode 100644 index 00000000..d6b7ef32 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/bootstrap/cache/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/composer.json b/php/sqlcommenter-php/samples/sqlcommenter-laravel/composer.json new file mode 100644 index 00000000..96ed3fbc --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/composer.json @@ -0,0 +1,68 @@ +{ + "name": "laravel/laravel", + "type": "project", + "description": "The Laravel Framework.", + "keywords": ["framework", "laravel"], + "license": "MIT", + "require": { + "php": "^8.0.2", + "guzzlehttp/guzzle": "^7.2", + "laravel/framework": "^9.2", + "laravel/sanctum": "^2.14.1", + "laravel/tinker": "^2.7", + "google/sqlcommenter-laravel": "dev-laravel" + }, + "require-dev": { + "fakerphp/faker": "^1.9.1", + "laravel/sail": "^1.0.1", + "mockery/mockery": "^1.4.4", + "nunomaduro/collision": "^6.1", + "phpunit/phpunit": "^9.5.10", + "spatie/laravel-ignition": "^1.0" + }, + "autoload": { + "psr-4": { + "App\\": "app/", + "Database\\Factories\\": "database/factories/", + "Database\\Seeders\\": "database/seeders/" + } + }, + "autoload-dev": { + "psr-4": { + "Tests\\": "tests/" + } + }, + "scripts": { + "post-autoload-dump": [ + "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", + "@php artisan package:discover --ansi" + ], + "post-update-cmd": [ + "@php artisan vendor:publish --tag=laravel-assets --ansi --force" + ], + "post-root-package-install": [ + "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" + ], + "post-create-project-cmd": [ + "@php artisan key:generate --ansi" + ] + }, + "extra": { + "laravel": { + "dont-discover": [] + } + }, + "config": { + "optimize-autoloader": true, + "preferred-install": "dist", + "sort-packages": true + }, + "minimum-stability": "dev", + "prefer-stable": true, + "repositories": [ + { + "type": "path", + "url": "../../packages/sqlcommenter-laravel" + } + ] +} diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/composer.lock b/php/sqlcommenter-php/samples/sqlcommenter-laravel/composer.lock new file mode 100644 index 00000000..35c32d62 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/composer.lock @@ -0,0 +1,7745 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "12524947d8c752f84bc21aaaede06bfa", + "packages": [ + { + "name": "brick/math", + "version": "0.9.3", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/ca57d18f028f84f777b2168cd1911b0dee2343ae", + "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", + "vimeo/psalm": "4.9.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "brick", + "math" + ], + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/0.9.3" + }, + "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/brick/math", + "type": "tidelift" + } + ], + "time": "2021-08-15T20:50:18+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "v3.0.1", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "0992cc19268b259a39e86f296da5f0677841f42c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/0992cc19268b259a39e86f296da5f0677841f42c", + "reference": "0992cc19268b259a39e86f296da5f0677841f42c", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^3.14" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.1" + }, + "time": "2021-08-13T13:06:58+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", + "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^8.2", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpstan/phpstan-strict-rules": "^0.12", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "vimeo/psalm": "^4.10" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.4" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2021-10-22T20:16:43+00:00" + }, + { + "name": "doctrine/lexer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9.0", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.11" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2022-02-28T11:07:21+00:00" + }, + { + "name": "dragonmantank/cron-expression", + "version": "v3.3.1", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "be85b3f05b46c39bbc0d95f6c071ddff669510fa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/be85b3f05b46c39bbc0d95f6c071ddff669510fa", + "reference": "be85b3f05b46c39bbc0d95f6c071ddff669510fa", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0", + "webmozart/assert": "^1.0" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-webmozart-assert": "^1.0", + "phpunit/phpunit": "^7.0|^8.0|^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.1" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2022-01-18T15:43:28+00:00" + }, + { + "name": "egulias/email-validator", + "version": "3.1.2", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "ee0db30118f661fb166bcffbf5d82032df484697" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ee0db30118f661fb166bcffbf5d82032df484697", + "reference": "ee0db30118f661fb166bcffbf5d82032df484697", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1.2", + "php": ">=7.2", + "symfony/polyfill-intl-idn": "^1.15" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^8.5.8|^9.3.3", + "vimeo/psalm": "^4" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/3.1.2" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2021-10-11T09:18:27+00:00" + }, + { + "name": "fruitcake/php-cors", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/fruitcake/php-cors.git", + "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/58571acbaa5f9f462c9c77e911700ac66f446d4e", + "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "symfony/http-foundation": "^4.4|^5.4|^6" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Fruitcake\\Cors\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fruitcake", + "homepage": "https://fruitcake.nl" + }, + { + "name": "Barryvdh", + "email": "barryvdh@gmail.com" + } + ], + "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", + "homepage": "https://github.com/fruitcake/php-cors", + "keywords": [ + "cors", + "laravel", + "symfony" + ], + "support": { + "issues": "https://github.com/fruitcake/php-cors/issues", + "source": "https://github.com/fruitcake/php-cors/tree/v1.2.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2022-02-20T15:07:15+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "v1.0.4", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "0690bde05318336c7221785f2a932467f98b64ca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/0690bde05318336c7221785f2a932467f98b64ca", + "reference": "0690bde05318336c7221785f2a932467f98b64ca", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "phpoption/phpoption": "^1.8" + }, + "require-dev": { + "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.4" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2021-11-21T21:41:47+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.4.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "ac1ec1cd9b5624694c3a40be801d94137afb12b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/ac1ec1cd9b5624694c3a40be801d94137afb12b4", + "reference": "ac1ec1cd9b5624694c3a40be801d94137afb12b4", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5", + "guzzlehttp/psr7": "^1.8.3 || ^2.1", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-curl": "*", + "php-http/client-integration-tests": "^3.0", + "phpunit/phpunit": "^8.5.5 || ^9.3.5", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.4-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.4.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2022-03-20T14:16:28+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4 || ^5.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/1.5.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2021-10-22T20:56:57+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.2.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "c94a94f120803a18554c1805ef2e539f8285f9a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/c94a94f120803a18554c1805ef2e539f8285f9a2", + "reference": "c94a94f120803a18554c1805ef2e539f8285f9a2", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.8 || ^9.3.10" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.2.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2022-03-20T21:55:58+00:00" + }, + { + "name": "laravel/framework", + "version": "v9.9.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "4d5a07640891b772188d7737348886a0222737d8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/4d5a07640891b772188d7737348886a0222737d8", + "reference": "4d5a07640891b772188d7737348886a0222737d8", + "shasum": "" + }, + "require": { + "doctrine/inflector": "^2.0", + "dragonmantank/cron-expression": "^3.1", + "egulias/email-validator": "^3.1", + "ext-mbstring": "*", + "ext-openssl": "*", + "fruitcake/php-cors": "^1.2", + "laravel/serializable-closure": "^1.0", + "league/commonmark": "^2.2", + "league/flysystem": "^3.0", + "monolog/monolog": "^2.0", + "nesbot/carbon": "^2.53.1", + "php": "^8.0.2", + "psr/container": "^1.1.1|^2.0.1", + "psr/log": "^1.0|^2.0|^3.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "ramsey/uuid": "^4.2.2", + "symfony/console": "^6.0", + "symfony/error-handler": "^6.0", + "symfony/finder": "^6.0", + "symfony/http-foundation": "^6.0", + "symfony/http-kernel": "^6.0", + "symfony/mailer": "^6.0", + "symfony/mime": "^6.0", + "symfony/process": "^6.0", + "symfony/routing": "^6.0", + "symfony/var-dumper": "^6.0", + "tijsverkoyen/css-to-inline-styles": "^2.2.2", + "vlucas/phpdotenv": "^5.4.1", + "voku/portable-ascii": "^2.0" + }, + "conflict": { + "tightenco/collect": "<5.5.33" + }, + "provide": { + "psr/container-implementation": "1.1|2.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/broadcasting": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/collections": "self.version", + "illuminate/conditionable": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/contracts": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/hashing": "self.version", + "illuminate/http": "self.version", + "illuminate/log": "self.version", + "illuminate/macroable": "self.version", + "illuminate/mail": "self.version", + "illuminate/notifications": "self.version", + "illuminate/pagination": "self.version", + "illuminate/pipeline": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/testing": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.198.1", + "doctrine/dbal": "^2.13.3|^3.1.4", + "fakerphp/faker": "^1.9.2", + "guzzlehttp/guzzle": "^7.2", + "league/flysystem-aws-s3-v3": "^3.0", + "league/flysystem-ftp": "^3.0", + "league/flysystem-sftp-v3": "^3.0", + "mockery/mockery": "^1.4.4", + "orchestra/testbench-core": "^7.1", + "pda/pheanstalk": "^4.0", + "phpstan/phpstan": "^1.4.7", + "phpunit/phpunit": "^9.5.8", + "predis/predis": "^1.1.9", + "symfony/cache": "^6.0" + }, + "suggest": { + "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.198.1).", + "brianium/paratest": "Required to run tests in parallel (^6.0).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).", + "ext-bcmath": "Required to use the multiple_of validation rule.", + "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", + "ext-pcntl": "Required to use all features of the queue worker.", + "ext-posix": "Required to use all features of the queue worker.", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", + "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "filp/whoops": "Required for friendly error pages in development (^2.14.3).", + "guzzlehttp/guzzle": "Required to use the HTTP Client and the ping methods on schedules (^7.2).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", + "mockery/mockery": "Required to use mocking (^1.4.4).", + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", + "phpunit/phpunit": "Required to use assertions and run tests (^9.5.8).", + "predis/predis": "Required to use the predis connector (^1.1.9).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^6.0).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^6.0).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^6.0).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^6.0).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^6.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.x-dev" + } + }, + "autoload": { + "files": [ + "src/Illuminate/Collections/helpers.php", + "src/Illuminate/Events/functions.php", + "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Support/helpers.php" + ], + "psr-4": { + "Illuminate\\": "src/Illuminate/", + "Illuminate\\Support\\": [ + "src/Illuminate/Macroable/", + "src/Illuminate/Collections/", + "src/Illuminate/Conditionable/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Laravel Framework.", + "homepage": "https://laravel.com", + "keywords": [ + "framework", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2022-04-19T15:01:23+00:00" + }, + { + "name": "laravel/sanctum", + "version": "v2.15.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/sanctum.git", + "reference": "31fbe6f85aee080c4dc2f9b03dc6dd5d0ee72473" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/31fbe6f85aee080c4dc2f9b03dc6dd5d0ee72473", + "reference": "31fbe6f85aee080c4dc2f9b03dc6dd5d0ee72473", + "shasum": "" + }, + "require": { + "ext-json": "*", + "illuminate/console": "^6.9|^7.0|^8.0|^9.0", + "illuminate/contracts": "^6.9|^7.0|^8.0|^9.0", + "illuminate/database": "^6.9|^7.0|^8.0|^9.0", + "illuminate/support": "^6.9|^7.0|^8.0|^9.0", + "php": "^7.2|^8.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "orchestra/testbench": "^4.0|^5.0|^6.0|^7.0", + "phpunit/phpunit": "^8.0|^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Sanctum\\SanctumServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sanctum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel Sanctum provides a featherweight authentication system for SPAs and simple APIs.", + "keywords": [ + "auth", + "laravel", + "sanctum" + ], + "support": { + "issues": "https://github.com/laravel/sanctum/issues", + "source": "https://github.com/laravel/sanctum" + }, + "time": "2022-04-08T13:39:49+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "9e4b005daa20b0c161f3845040046dc9ddc1d74e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/9e4b005daa20b0c161f3845040046dc9ddc1d74e", + "reference": "9e4b005daa20b0c161f3845040046dc9ddc1d74e", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "pestphp/pest": "^1.18", + "phpstan/phpstan": "^0.12.98", + "symfony/var-dumper": "^5.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\SerializableClosure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "nuno@laravel.com" + } + ], + "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", + "keywords": [ + "closure", + "laravel", + "serializable" + ], + "support": { + "issues": "https://github.com/laravel/serializable-closure/issues", + "source": "https://github.com/laravel/serializable-closure" + }, + "time": "2022-02-11T19:23:53+00:00" + }, + { + "name": "laravel/tinker", + "version": "v2.7.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "dff39b661e827dae6e092412f976658df82dbac5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/dff39b661e827dae6e092412f976658df82dbac5", + "reference": "dff39b661e827dae6e092412f976658df82dbac5", + "shasum": "" + }, + "require": { + "illuminate/console": "^6.0|^7.0|^8.0|^9.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0", + "php": "^7.2.5|^8.0", + "psy/psysh": "^0.10.4|^0.11.1", + "symfony/var-dumper": "^4.3.4|^5.0|^6.0" + }, + "require-dev": { + "mockery/mockery": "~1.3.3|^1.4.2", + "phpunit/phpunit": "^8.5.8|^9.3.3" + }, + "suggest": { + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Tinker\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Powerful REPL for the Laravel framework.", + "keywords": [ + "REPL", + "Tinker", + "laravel", + "psysh" + ], + "support": { + "issues": "https://github.com/laravel/tinker/issues", + "source": "https://github.com/laravel/tinker/tree/v2.7.2" + }, + "time": "2022-03-23T12:38:24+00:00" + }, + { + "name": "league/commonmark", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "32a49eb2b38fe5e5c417ab748a45d0beaab97955" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/32a49eb2b38fe5e5c417ab748a45d0beaab97955", + "reference": "32a49eb2b38fe5e5c417ab748a45d0beaab97955", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.30.0", + "commonmark/commonmark.js": "0.30.0", + "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", + "erusev/parsedown": "^1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "^1.4", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^0.12.88 || ^1.0.0", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.4-dev" + } + }, + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2022-04-07T22:37:05+00:00" + }, + { + "name": "league/config", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/config.git", + "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/config/zipball/a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e", + "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.90", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } + ], + "time": "2021-08-14T12:15:32+00:00" + }, + { + "name": "league/flysystem", + "version": "3.0.17", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "29eb78cac0be0c22237c5e0f6f98234d97037d79" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/29eb78cac0be0c22237c5e0f6f98234d97037d79", + "reference": "29eb78cac0be0c22237c5e0f6f98234d97037d79", + "shasum": "" + }, + "require": { + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "aws/aws-sdk-php": "3.209.31 || 3.210.0", + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1", + "symfony/http-client": "<5.2" + }, + "require-dev": { + "async-aws/s3": "^1.5", + "async-aws/simple-s3": "^1.0", + "aws/aws-sdk-php": "^3.198.1", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "microsoft/azure-storage-blob": "^1.1", + "phpseclib/phpseclib": "^2.0", + "phpstan/phpstan": "^0.12.26", + "phpunit/phpunit": "^9.5.11", + "sabre/dav": "^4.3.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "File storage abstraction for PHP", + "keywords": [ + "WebDAV", + "aws", + "cloud", + "file", + "files", + "filesystem", + "filesystems", + "ftp", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/3.0.17" + }, + "funding": [ + { + "url": "https://offset.earth/frankdejonge", + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2022-04-14T14:57:13+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ff6248ea87a9f116e78edd6002e39e5128a0d4dd", + "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\MimeTypeDetection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Mime-type detection for Flysystem", + "support": { + "issues": "https://github.com/thephpleague/mime-type-detection/issues", + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.11.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2022-04-17T13:12:02+00:00" + }, + { + "name": "monolog/monolog", + "version": "2.5.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "4192345e260f1d51b365536199744b987e160edc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/4192345e260f1d51b365536199744b987e160edc", + "reference": "4192345e260f1d51b365536199744b987e160edc", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7", + "graylog2/gelf-php": "^1.4.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "php-console/php-console": "^3.1.3", + "phpspec/prophecy": "^1.6.1", + "phpstan/phpstan": "^0.12.91", + "phpunit/phpunit": "^8.5", + "predis/predis": "^1.1", + "rollbar/rollbar": "^1.3 || ^2 || ^3", + "ruflin/elastica": ">=0.90@dev", + "swiftmailer/swiftmailer": "^5.3|^6.0" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "php-console/php-console": "Allow sending log messages to Google Chrome", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/2.5.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2022-04-08T15:43:54+00:00" + }, + { + "name": "nesbot/carbon", + "version": "2.57.0", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "4a54375c21eea4811dbd1149fe6b246517554e78" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4a54375c21eea4811dbd1149fe6b246517554e78", + "reference": "4a54375c21eea4811dbd1149fe6b246517554e78", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.1.8 || ^8.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" + }, + "require-dev": { + "doctrine/dbal": "^2.0 || ^3.0", + "doctrine/orm": "^2.7", + "friendsofphp/php-cs-fixer": "^3.0", + "kylekatarnls/multi-tester": "^2.0", + "phpmd/phpmd": "^2.9", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.54 || ^1.0", + "phpunit/phpunit": "^7.5.20 || ^8.5.14", + "squizlabs/php_codesniffer": "^3.4" + }, + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-3.x": "3.x-dev", + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "support": { + "docs": "https://carbon.nesbot.com/docs", + "issues": "https://github.com/briannesbitt/Carbon/issues", + "source": "https://github.com/briannesbitt/Carbon" + }, + "funding": [ + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } + ], + "time": "2022-02-13T18:13:33+00:00" + }, + { + "name": "nette/schema", + "version": "v1.2.2", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/9a39cef03a5b34c7de64f551538cbba05c2be5df", + "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df", + "shasum": "" + }, + "require": { + "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", + "php": ">=7.1 <8.2" + }, + "require-dev": { + "nette/tester": "^2.3 || ^2.4", + "phpstan/phpstan-nette": "^0.12", + "tracy/tracy": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.2.2" + }, + "time": "2021-10-15T11:40:02+00:00" + }, + { + "name": "nette/utils", + "version": "v3.2.7", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "0af4e3de4df9f1543534beab255ccf459e7a2c99" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/0af4e3de4df9f1543534beab255ccf459e7a2c99", + "reference": "0af4e3de4df9f1543534beab255ccf459e7a2c99", + "shasum": "" + }, + "require": { + "php": ">=7.2 <8.2" + }, + "conflict": { + "nette/di": "<3.0.6" + }, + "require-dev": { + "nette/tester": "~2.0", + "phpstan/phpstan": "^1.0", + "tracy/tracy": "^2.3" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()", + "ext-xml": "to use Strings::length() etc. when mbstring is not available" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v3.2.7" + }, + "time": "2022-01-24T11:29:14+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.13.2", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "210577fe3cf7badcc5814d99455df46564f3c077" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", + "reference": "210577fe3cf7badcc5814d99455df46564f3c077", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" + }, + "time": "2021-11-30T19:35:32+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.8.1", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15", + "reference": "eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.8-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.8.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2021-12-04T23:24:31+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client/tree/master" + }, + "time": "2020-06-29T06:28:15+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/master" + }, + "time": "2019-04-30T12:38:16+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/log", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.0" + }, + "time": "2021-07-14T16:46:02+00:00" + }, + { + "name": "psr/simple-cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + }, + "time": "2021-10-29T13:26:27+00:00" + }, + { + "name": "psy/psysh", + "version": "v0.11.2", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "7f7da640d68b9c9fec819caae7c744a213df6514" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/7f7da640d68b9c9fec819caae7c744a213df6514", + "reference": "7f7da640d68b9c9fec819caae7c744a213df6514", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "^4.0 || ^3.1", + "php": "^8.0 || ^7.0.8", + "symfony/console": "^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^6.0 || ^5.0 || ^4.0 || ^3.4" + }, + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2", + "hoa/console": "3.17.05.02" + }, + "suggest": { + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", + "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.", + "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.11.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.11.2" + }, + "time": "2022-02-28T15:28:54+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "ramsey/collection", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/cccc74ee5e328031b15640b51056ee8d3bb66c0a", + "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8", + "symfony/polyfill-php81": "^1.23" + }, + "require-dev": { + "captainhook/captainhook": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "ergebnis/composer-normalize": "^2.6", + "fakerphp/faker": "^1.5", + "hamcrest/hamcrest-php": "^2", + "jangregor/phpstan-prophecy": "^0.8", + "mockery/mockery": "^1.3", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/extension-installer": "^1", + "phpstan/phpstan": "^0.12.32", + "phpstan/phpstan-mockery": "^0.12.5", + "phpstan/phpstan-phpunit": "^0.12.11", + "phpunit/phpunit": "^8.5 || ^9", + "psy/psysh": "^0.10.4", + "slevomat/coding-standard": "^6.3", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Ramsey\\Collection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A PHP library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/1.2.2" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", + "type": "tidelift" + } + ], + "time": "2021-10-10T03:01:02+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.3.1", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "8505afd4fea63b81a85d3b7b53ac3cb8dc347c28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/8505afd4fea63b81a85d3b7b53ac3cb8dc347c28", + "reference": "8505afd4fea63b81a85d3b7b53ac3cb8dc347c28", + "shasum": "" + }, + "require": { + "brick/math": "^0.8 || ^0.9", + "ext-ctype": "*", + "ext-json": "*", + "php": "^8.0", + "ramsey/collection": "^1.0" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "captainhook/captainhook": "^5.10", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "doctrine/annotations": "^1.8", + "ergebnis/composer-normalize": "^2.15", + "mockery/mockery": "^1.3", + "moontoast/math": "^1.1", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.2", + "php-mock/php-mock-mockery": "^1.3", + "php-parallel-lint/php-parallel-lint": "^1.1", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-mockery": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^8.5 || ^9", + "slevomat/coding-standard": "^7.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.9" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-ctype": "Enables faster processing of character classification using ctype functions.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.3.1" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", + "type": "tidelift" + } + ], + "time": "2022-03-27T21:42:02+00:00" + }, + { + "name": "symfony/console", + "version": "v6.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "70dcf7b2ca2ea08ad6ebcc475f104a024fb5632e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/70dcf7b2ca2ea08ad6ebcc475f104a024fb5632e", + "reference": "70dcf7b2ca2ea08ad6ebcc475f104a024fb5632e", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.4|^6.0" + }, + "conflict": { + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/lock": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v6.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-03-31T17:18:25+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v6.0.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "1955d595c12c111629cc814d3f2a2ff13580508a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/1955d595c12c111629cc814d3f2a2ff13580508a", + "reference": "1955d595c12c111629cc814d3f2a2ff13580508a", + "shasum": "" + }, + "require": { + "php": ">=8.0.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v6.0.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:55:41+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.0.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", + "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", + "shasum": "" + }, + "require": { + "php": ">=8.0.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:55:41+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v6.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "e600c54e5b30555eecea3ffe4314e58f832e78ee" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/e600c54e5b30555eecea3ffe4314e58f832e78ee", + "reference": "e600c54e5b30555eecea3ffe4314e58f832e78ee", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^5.4|^6.0" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v6.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-03-18T16:21:55+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v6.0.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "6472ea2dd415e925b90ca82be64b8bc6157f3934" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/6472ea2dd415e925b90ca82be64b8bc6157f3934", + "reference": "6472ea2dd415e925b90ca82be64b8bc6157f3934", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/event-dispatcher-contracts": "^2|^3" + }, + "conflict": { + "symfony/dependency-injection": "<5.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/error-handler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^5.4|^6.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v6.0.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:55:41+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.0.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "7bc61cc2db649b4637d331240c5346dcc7708051" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7bc61cc2db649b4637d331240c5346dcc7708051", + "reference": "7bc61cc2db649b4637d331240c5346dcc7708051", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.0.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:55:41+00:00" + }, + { + "name": "symfony/finder", + "version": "v6.0.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "8661b74dbabc23223f38c9b99d3f8ade71170430" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/8661b74dbabc23223f38c9b99d3f8ade71170430", + "reference": "8661b74dbabc23223f38c9b99d3f8ade71170430", + "shasum": "" + }, + "require": { + "php": ">=8.0.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v6.0.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-26T17:23:29+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v6.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "c816b26f03b6902dba79b352c84a17f53d815f0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/c816b26f03b6902dba79b352c84a17f53d815f0d", + "reference": "c816b26f03b6902dba79b352c84a17f53d815f0d", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.1" + }, + "require-dev": { + "predis/predis": "~1.0", + "symfony/cache": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/mime": "^5.4|^6.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v6.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-03-24T14:13:59+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v6.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "9c03dab07a6aa336ffaadc15352b1d14f4ce01f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/9c03dab07a6aa336ffaadc15352b1d14f4ce01f5", + "reference": "9c03dab07a6aa336ffaadc15352b1d14f4ce01f5", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "psr/log": "^1|^2|^3", + "symfony/error-handler": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/browser-kit": "<5.4", + "symfony/cache": "<5.4", + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/doctrine-bridge": "<5.4", + "symfony/form": "<5.4", + "symfony/http-client": "<5.4", + "symfony/mailer": "<5.4", + "symfony/messenger": "<5.4", + "symfony/translation": "<5.4", + "symfony/twig-bridge": "<5.4", + "symfony/validator": "<5.4", + "twig/twig": "<2.13" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^5.4|^6.0", + "symfony/config": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/css-selector": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/dom-crawler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/process": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/translation-contracts": "^1.1|^2|^3", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v6.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-04-02T06:35:11+00:00" + }, + { + "name": "symfony/mailer", + "version": "v6.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "f7343f94e7afecca2ad840b078f9d80200e1bd27" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/f7343f94e7afecca2ad840b078f9d80200e1bd27", + "reference": "f7343f94e7afecca2ad840b078f9d80200e1bd27", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10|^3", + "php": ">=8.0.2", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/mime": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3" + }, + "conflict": { + "symfony/http-kernel": "<5.4" + }, + "require-dev": { + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/messenger": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps sending emails", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/mailer/tree/v6.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-03-18T16:06:28+00:00" + }, + { + "name": "symfony/mime", + "version": "v6.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "74266e396f812a2301536397a6360b6e6913c0d8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/74266e396f812a2301536397a6360b6e6913c0d8", + "reference": "74266e396f812a2301536397a6360b6e6913c0d8", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<5.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/property-access": "^5.4|^6.0", + "symfony/property-info": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v6.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-03-13T20:10:05+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.25.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "30885182c981ab175d4d034db0f6f469898070ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", + "reference": "30885182c981ab175d4d034db0f6f469898070ab", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-10-20T20:35:02+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.25.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "81b86b50cf841a64252b439e738e97f4a34e2783" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783", + "reference": "81b86b50cf841a64252b439e738e97f4a34e2783", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.25.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-11-23T21:10:46+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.25.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "749045c69efb97c70d25d7463abba812e91f3a44" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/749045c69efb97c70d25d7463abba812e91f3a44", + "reference": "749045c69efb97c70d25d7463abba812e91f3a44", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.25.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-09-14T14:02:44+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.25.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.25.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-02-19T12:13:01+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.25.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", + "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.25.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-11-30T18:21:41+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.25.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "9a142215a36a3888e30d0a9eeea9766764e96976" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", + "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.25.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-27T09:17:38+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.25.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c", + "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.25.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-03-04T08:16:47+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.25.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", + "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.25.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-09-13T13:58:11+00:00" + }, + { + "name": "symfony/process", + "version": "v6.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "e13f6757e267d687e20ec5b26ccfcbbe511cd8f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/e13f6757e267d687e20ec5b26ccfcbbe511cd8f4", + "reference": "e13f6757e267d687e20ec5b26ccfcbbe511cd8f4", + "shasum": "" + }, + "require": { + "php": ">=8.0.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v6.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-03-18T16:21:55+00:00" + }, + { + "name": "symfony/routing", + "version": "v6.0.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "a738b152426ac7fcb94bdab8188264652238bef1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/a738b152426ac7fcb94bdab8188264652238bef1", + "reference": "a738b152426ac7fcb94bdab8188264652238bef1", + "shasum": "" + }, + "require": { + "php": ">=8.0.2" + }, + "conflict": { + "doctrine/annotations": "<1.12", + "symfony/config": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/yaml": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.12", + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" + }, + "suggest": { + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v6.0.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-31T19:46:53+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.0.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "e517458f278c2131ca9f262f8fbaf01410f2c65c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e517458f278c2131ca9f262f8fbaf01410f2c65c", + "reference": "e517458f278c2131ca9f262f8fbaf01410f2c65c", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "psr/container": "^2.0" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.0.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-03-13T20:10:05+00:00" + }, + { + "name": "symfony/string", + "version": "v6.0.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/522144f0c4c004c80d56fa47e40e17028e2eefc2", + "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.0" + }, + "require-dev": { + "symfony/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/translation-contracts": "^2.0|^3.0", + "symfony/var-exporter": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v6.0.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:55:41+00:00" + }, + { + "name": "symfony/translation", + "version": "v6.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "b2792b39d74cf41ea3065f27fd2ddf0b556ac7a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/b2792b39d74cf41ea3065f27fd2ddf0b556ac7a1", + "reference": "b2792b39d74cf41ea3065f27fd2ddf0b556ac7a1", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.3|^3.0" + }, + "conflict": { + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/twig-bundle": "<5.4", + "symfony/yaml": "<5.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client-contracts": "^1.1|^2.0|^3.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/intl": "^5.4|^6.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/service-contracts": "^1.1.2|^2|^3", + "symfony/yaml": "^5.4|^6.0" + }, + "suggest": { + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v6.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-03-31T17:18:25+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.0.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "c4183fc3ef0f0510893cbeedc7718fb5cafc9ac9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/c4183fc3ef0f0510893cbeedc7718fb5cafc9ac9", + "reference": "c4183fc3ef0f0510893cbeedc7718fb5cafc9ac9", + "shasum": "" + }, + "require": { + "php": ">=8.0.2" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.0.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:55:41+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v6.0.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "38358405ae948963c50a3aae3dfea598223ba15e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/38358405ae948963c50a3aae3dfea598223ba15e", + "reference": "38358405ae948963c50a3aae3dfea598223ba15e", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "phpunit/phpunit": "<5.4.3", + "symfony/console": "<5.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/uid": "^5.4|^6.0", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v6.0.6" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-03-02T12:58:14+00:00" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "2.2.4", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "da444caae6aca7a19c0c140f68c6182e337d5b1c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/da444caae6aca7a19c0c140f68c6182e337d5b1c", + "reference": "da444caae6aca7a19c0c140f68c6182e337d5b1c", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^5.5 || ^7.0 || ^8.0", + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" + } + ], + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.4" + }, + "time": "2021-12-08T09:12:39+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.4.1", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/264dce589e7ce37a7ba99cb901eed8249fbec92f", + "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.0.2", + "php": "^7.1.3 || ^8.0", + "phpoption/phpoption": "^1.8", + "symfony/polyfill-ctype": "^1.23", + "symfony/polyfill-mbstring": "^1.23.1", + "symfony/polyfill-php80": "^1.23.1" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-filter": "*", + "phpunit/phpunit": "^7.5.20 || ^8.5.21 || ^9.5.10" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.4-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.4.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2021-12-12T23:22:04+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "b56450eed252f6801410d810c8e1727224ae0743" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", + "reference": "b56450eed252f6801410d810c8e1727224ae0743", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, + "type": "library", + "autoload": { + "psr-4": { + "voku\\": "src/voku/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Moelleken", + "homepage": "http://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": [ + "ascii", + "clean", + "php" + ], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/2.0.1" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "time": "2022-03-08T17:03:00+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.10.0" + }, + "time": "2021-03-09T10:59:23+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.22" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-03-03T08:28:38+00:00" + }, + { + "name": "facade/ignition-contracts", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/facade/ignition-contracts.git", + "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/facade/ignition-contracts/zipball/3c921a1cdba35b68a7f0ccffc6dffc1995b18267", + "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^v2.15.8", + "phpunit/phpunit": "^9.3.11", + "vimeo/psalm": "^3.17.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Facade\\IgnitionContracts\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://flareapp.io", + "role": "Developer" + } + ], + "description": "Solution contracts for Ignition", + "homepage": "https://github.com/facade/ignition-contracts", + "keywords": [ + "contracts", + "flare", + "ignition" + ], + "support": { + "issues": "https://github.com/facade/ignition-contracts/issues", + "source": "https://github.com/facade/ignition-contracts/tree/1.0.2" + }, + "time": "2020-10-16T08:27:54+00:00" + }, + { + "name": "fakerphp/faker", + "version": "v1.19.0", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "d7f08a622b3346766325488aa32ddc93ccdecc75" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/d7f08a622b3346766325488aa32ddc93ccdecc75", + "reference": "d7f08a622b3346766325488aa32ddc93ccdecc75", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", + "ext-intl": "*", + "symfony/phpunit-bridge": "^4.4 || ^5.2" + }, + "suggest": { + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "v1.19-dev" + } + }, + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "support": { + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.19.0" + }, + "time": "2022-02-02T17:38:57+00:00" + }, + { + "name": "filp/whoops", + "version": "2.14.5", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/a63e5e8f26ebbebf8ed3c5c691637325512eb0dc", + "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "mockery/mockery": "^0.9 || ^1.0", + "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.14.5" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "time": "2022-01-07T12:00:00+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "shasum": "" + }, + "require": { + "php": "^5.3|^7.0|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + }, + "time": "2020-07-09T08:09:16+00:00" + }, + { + "name": "laravel/sail", + "version": "v1.13.10", + "source": { + "type": "git", + "url": "https://github.com/laravel/sail.git", + "reference": "cbf55e1a392724313f7726c38578b5e008df6a0f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sail/zipball/cbf55e1a392724313f7726c38578b5e008df6a0f", + "reference": "cbf55e1a392724313f7726c38578b5e008df6a0f", + "shasum": "" + }, + "require": { + "illuminate/console": "^8.0|^9.0", + "illuminate/contracts": "^8.0|^9.0", + "illuminate/support": "^8.0|^9.0", + "php": "^7.3|^8.0" + }, + "bin": [ + "bin/sail" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Sail\\SailServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sail\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Docker files for running a basic Laravel application.", + "keywords": [ + "docker", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/sail/issues", + "source": "https://github.com/laravel/sail" + }, + "time": "2022-04-14T18:29:22+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac", + "reference": "c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": "^7.3 || ^8.0" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "psr-0": { + "Mockery": "library/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "http://blog.astrumfutura.com" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "http://davedevelopment.co.uk" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "issues": "https://github.com/mockery/mockery/issues", + "source": "https://github.com/mockery/mockery/tree/1.5.0" + }, + "time": "2022-01-20T13:18:17+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2022-03-03T13:19:32+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "c379636dc50e829edb3a8bcb944a01aa1aed8f25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/c379636dc50e829edb3a8bcb944a01aa1aed8f25", + "reference": "c379636dc50e829edb3a8bcb944a01aa1aed8f25", + "shasum": "" + }, + "require": { + "facade/ignition-contracts": "^1.0.2", + "filp/whoops": "^2.14.5", + "php": "^8.0.0", + "symfony/console": "^6.0.2" + }, + "require-dev": { + "brianium/paratest": "^6.4.1", + "laravel/framework": "^9.7", + "nunomaduro/larastan": "^1.0.2", + "nunomaduro/mock-final-classes": "^1.1.0", + "orchestra/testbench": "^7.3.0", + "phpunit/phpunit": "^9.5.11" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-develop": "6.x-dev" + }, + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "NunoMaduro\\Collision\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Cli error handling for console/command-line PHP applications.", + "keywords": [ + "artisan", + "cli", + "command-line", + "console", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" + ], + "support": { + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2022-04-05T15:31:38+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.3" + }, + "time": "2021-07-20T11:28:43+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.3.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.2", + "psalm/phar": "^4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" + }, + "time": "2021-10-19T17:43:47+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.6.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "77a32518733312af16a44300404e945338981de3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", + "reference": "77a32518733312af16a44300404e945338981de3", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "*", + "psalm/phar": "^4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" + }, + "time": "2022-03-15T21:29:03+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "v1.15.0", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", + "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.2", + "php": "^7.2 || ~8.0, <8.2", + "phpdocumentor/reflection-docblock": "^5.2", + "sebastian/comparator": "^3.0 || ^4.0", + "sebastian/recursion-context": "^3.0 || ^4.0" + }, + "require-dev": { + "phpspec/phpspec": "^6.0 || ^7.0", + "phpunit/phpunit": "^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Prophecy\\": "src/Prophecy" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "support": { + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" + }, + "time": "2021-12-08T12:19:24+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.15", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.13.0", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcov": "*", + "ext-xdebug": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-03-07T09:28:20+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-12-02T12:48:52+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T05:33:50+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:16:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "9.5.20", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba", + "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.3.1", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpspec/prophecy": "^1.12.1", + "phpunit/php-code-coverage": "^9.2.13", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.5", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.3", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^3.0", + "sebastian/version": "^3.0.2" + }, + "require-dev": { + "ext-pdo": "*", + "phpspec/prophecy-phpunit": "^2.0.1" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.5-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-04-01T12:37:26+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:08:49+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:30:19+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:49:45+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.7", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:52:27+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:10:38+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-04-03T09:37:03+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-11-11T14:18:36+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-02-14T08:28:10+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.6", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-28T06:42:11+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:12:34+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:14:26+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:17:30+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:45:17+00:00" + }, + { + "name": "sebastian/type", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", + "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-03-15T09:54:48+00:00" + }, + { + "name": "sebastian/version", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" + }, + { + "name": "spatie/backtrace", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/backtrace.git", + "reference": "4ee7d41aa5268107906ea8a4d9ceccde136dbd5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/backtrace/zipball/4ee7d41aa5268107906ea8a4d9ceccde136dbd5b", + "reference": "4ee7d41aa5268107906ea8a4d9ceccde136dbd5b", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "ext-json": "*", + "phpunit/phpunit": "^9.3", + "symfony/var-dumper": "^5.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Backtrace\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van de Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "A better backtrace", + "homepage": "https://github.com/spatie/backtrace", + "keywords": [ + "Backtrace", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/backtrace/issues", + "source": "https://github.com/spatie/backtrace/tree/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spatie", + "type": "github" + }, + { + "url": "https://spatie.be/open-source/support-us", + "type": "other" + } + ], + "time": "2021-11-09T10:57:15+00:00" + }, + { + "name": "spatie/flare-client-php", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/flare-client-php.git", + "reference": "ceab058852a1278d9f57a7b95f1c348e4956d866" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/ceab058852a1278d9f57a7b95f1c348e4956d866", + "reference": "ceab058852a1278d9f57a7b95f1c348e4956d866", + "shasum": "" + }, + "require": { + "illuminate/pipeline": "^8.0|^9.0", + "php": "^8.0", + "spatie/backtrace": "^1.2", + "symfony/http-foundation": "^5.0|^6.0", + "symfony/mime": "^5.2|^6.0", + "symfony/process": "^5.2|^6.0", + "symfony/var-dumper": "^5.2|^6.0" + }, + "require-dev": { + "dms/phpunit-arraysubset-asserts": "^0.3.0", + "pestphp/pest": "^1.20", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "spatie/phpunit-snapshot-assertions": "^4.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\FlareClient\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Send PHP errors to Flare", + "homepage": "https://github.com/spatie/flare-client-php", + "keywords": [ + "exception", + "flare", + "reporting", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/flare-client-php/issues", + "source": "https://github.com/spatie/flare-client-php/tree/1.1.0" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2022-03-11T13:21:28+00:00" + }, + { + "name": "spatie/ignition", + "version": "1.2.9", + "source": { + "type": "git", + "url": "https://github.com/spatie/ignition.git", + "reference": "db25202fab2d5c14613b8914a1bb374998bbf870" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/ignition/zipball/db25202fab2d5c14613b8914a1bb374998bbf870", + "reference": "db25202fab2d5c14613b8914a1bb374998bbf870", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "monolog/monolog": "^2.0", + "php": "^8.0", + "spatie/flare-client-php": "^1.1", + "symfony/console": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" + }, + "require-dev": { + "mockery/mockery": "^1.4", + "pestphp/pest": "^1.20", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "symfony/process": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Ignition\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Spatie", + "email": "info@spatie.be", + "role": "Developer" + } + ], + "description": "A beautiful error page for PHP applications.", + "homepage": "https://flareapp.io/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], + "support": { + "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", + "forum": "https://twitter.com/flareappio", + "issues": "https://github.com/spatie/ignition/issues", + "source": "https://github.com/spatie/ignition" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2022-04-23T20:37:21+00:00" + }, + { + "name": "spatie/laravel-ignition", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-ignition.git", + "reference": "924d1ae878874ad0bb49f63b69a9af759a34ee78" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/924d1ae878874ad0bb49f63b69a9af759a34ee78", + "reference": "924d1ae878874ad0bb49f63b69a9af759a34ee78", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "illuminate/support": "^8.77|^9.0", + "monolog/monolog": "^2.3", + "php": "^8.0", + "spatie/flare-client-php": "^1.0.1", + "spatie/ignition": "^1.2.4", + "symfony/console": "^5.0|^6.0", + "symfony/var-dumper": "^5.0|^6.0" + }, + "require-dev": { + "filp/whoops": "^2.14", + "livewire/livewire": "^2.8|dev-develop", + "mockery/mockery": "^1.4", + "nunomaduro/larastan": "^1.0", + "orchestra/testbench": "^6.23|^7.0", + "pestphp/pest": "^1.20", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "spatie/laravel-ray": "^1.27" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Spatie\\LaravelIgnition\\IgnitionServiceProvider" + ], + "aliases": { + "Flare": "Spatie\\LaravelIgnition\\Facades\\Flare" + } + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\LaravelIgnition\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Spatie", + "email": "info@spatie.be", + "role": "Developer" + } + ], + "description": "A beautiful error page for Laravel applications.", + "homepage": "https://flareapp.io/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], + "support": { + "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", + "forum": "https://twitter.com/flareappio", + "issues": "https://github.com/spatie/laravel-ignition/issues", + "source": "https://github.com/spatie/laravel-ignition" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2022-04-14T18:04:51+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2021-07-28T10:34:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "dev", + "stability-flags": [], + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": "^8.0.2" + }, + "platform-dev": [], + "plugin-api-version": "2.2.0" +} diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/app.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/app.php new file mode 100644 index 00000000..b02c7f4b --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/app.php @@ -0,0 +1,197 @@ + env('APP_NAME', 'Laravel'), + + /* + |-------------------------------------------------------------------------- + | Application Environment + |-------------------------------------------------------------------------- + | + | This value determines the "environment" your application is currently + | running in. This may determine how you prefer to configure various + | services the application utilizes. Set this in your ".env" file. + | + */ + + 'env' => env('APP_ENV', 'production'), + + /* + |-------------------------------------------------------------------------- + | Application Debug Mode + |-------------------------------------------------------------------------- + | + | When your application is in debug mode, detailed error messages with + | stack traces will be shown on every error that occurs within your + | application. If disabled, a simple generic error page is shown. + | + */ + + 'debug' => (bool) env('APP_DEBUG', false), + + /* + |-------------------------------------------------------------------------- + | Application URL + |-------------------------------------------------------------------------- + | + | This URL is used by the console to properly generate URLs when using + | the Artisan command line tool. You should set this to the root of + | your application so that it is used when running Artisan tasks. + | + */ + + 'url' => env('APP_URL', 'http://localhost'), + + 'asset_url' => env('ASSET_URL'), + + /* + |-------------------------------------------------------------------------- + | Application Timezone + |-------------------------------------------------------------------------- + | + | Here you may specify the default timezone for your application, which + | will be used by the PHP date and date-time functions. We have gone + | ahead and set this to a sensible default for you out of the box. + | + */ + + 'timezone' => 'UTC', + + /* + |-------------------------------------------------------------------------- + | Application Locale Configuration + |-------------------------------------------------------------------------- + | + | The application locale determines the default locale that will be used + | by the translation service provider. You are free to set this value + | to any of the locales which will be supported by the application. + | + */ + + 'locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Application Fallback Locale + |-------------------------------------------------------------------------- + | + | The fallback locale determines the locale to use when the current one + | is not available. You may change the value to correspond to any of + | the language folders that are provided through your application. + | + */ + + 'fallback_locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Faker Locale + |-------------------------------------------------------------------------- + | + | This locale will be used by the Faker PHP library when generating fake + | data for your database seeds. For example, this will be used to get + | localized telephone numbers, street address information and more. + | + */ + + 'faker_locale' => 'en_US', + + /* + |-------------------------------------------------------------------------- + | Encryption Key + |-------------------------------------------------------------------------- + | + | This key is used by the Illuminate encrypter service and should be set + | to a random, 32 character string, otherwise these encrypted strings + | will not be safe. Please do this before deploying an application! + | + */ + + 'key' => env('APP_KEY'), + + 'cipher' => 'AES-256-CBC', + + /* + |-------------------------------------------------------------------------- + | Autoloaded Service Providers + |-------------------------------------------------------------------------- + | + | The service providers listed here will be automatically loaded on the + | request to your application. Feel free to add your own services to + | this array to grant expanded functionality to your applications. + | + */ + + 'providers' => [ + + /* + * Laravel Framework Service Providers... + */ + Illuminate\Auth\AuthServiceProvider::class, + Illuminate\Broadcasting\BroadcastServiceProvider::class, + Illuminate\Bus\BusServiceProvider::class, + Illuminate\Cache\CacheServiceProvider::class, + Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, + Illuminate\Cookie\CookieServiceProvider::class, + Illuminate\Database\DatabaseServiceProvider::class, + Illuminate\Encryption\EncryptionServiceProvider::class, + Illuminate\Filesystem\FilesystemServiceProvider::class, + Illuminate\Foundation\Providers\FoundationServiceProvider::class, + Illuminate\Hashing\HashServiceProvider::class, + Illuminate\Mail\MailServiceProvider::class, + Illuminate\Notifications\NotificationServiceProvider::class, + Illuminate\Pagination\PaginationServiceProvider::class, + Illuminate\Pipeline\PipelineServiceProvider::class, + Illuminate\Queue\QueueServiceProvider::class, + Illuminate\Redis\RedisServiceProvider::class, + Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, + Illuminate\Session\SessionServiceProvider::class, + Illuminate\Translation\TranslationServiceProvider::class, + Illuminate\Validation\ValidationServiceProvider::class, + Illuminate\View\ViewServiceProvider::class, + + /* + * Package Service Providers... + */ + + /* + * Application Service Providers... + */ + App\Providers\AppServiceProvider::class, + App\Providers\AuthServiceProvider::class, + // App\Providers\BroadcastServiceProvider::class, + App\Providers\EventServiceProvider::class, + App\Providers\RouteServiceProvider::class, + + ], + + /* + |-------------------------------------------------------------------------- + | Class Aliases + |-------------------------------------------------------------------------- + | + | This array of class aliases will be registered when this application + | is started. However, feel free to register as many as you wish as + | the aliases are "lazy" loaded so they don't hinder performance. + | + */ + + 'aliases' => Facade::defaultAliases()->merge([ + // 'ExampleClass' => App\Example\ExampleClass::class, + ])->toArray(), + +]; diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/auth.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/auth.php new file mode 100644 index 00000000..d8c6cee7 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/auth.php @@ -0,0 +1,111 @@ + [ + 'guard' => 'web', + 'passwords' => 'users', + ], + + /* + |-------------------------------------------------------------------------- + | Authentication Guards + |-------------------------------------------------------------------------- + | + | Next, you may define every authentication guard for your application. + | Of course, a great default configuration has been defined for you + | here which uses session storage and the Eloquent user provider. + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | Supported: "session" + | + */ + + 'guards' => [ + 'web' => [ + 'driver' => 'session', + 'provider' => 'users', + ], + ], + + /* + |-------------------------------------------------------------------------- + | User Providers + |-------------------------------------------------------------------------- + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | If you have multiple user tables or models you may configure multiple + | sources which represent each model / table. These sources may then + | be assigned to any extra authentication guards you have defined. + | + | Supported: "database", "eloquent" + | + */ + + 'providers' => [ + 'users' => [ + 'driver' => 'eloquent', + 'model' => App\Models\User::class, + ], + + // 'users' => [ + // 'driver' => 'database', + // 'table' => 'users', + // ], + ], + + /* + |-------------------------------------------------------------------------- + | Resetting Passwords + |-------------------------------------------------------------------------- + | + | You may specify multiple password reset configurations if you have more + | than one user table or model in the application and you want to have + | separate password reset settings based on the specific user types. + | + | The expire time is the number of minutes that each reset token will be + | considered valid. This security feature keeps tokens short-lived so + | they have less time to be guessed. You may change this as needed. + | + */ + + 'passwords' => [ + 'users' => [ + 'provider' => 'users', + 'table' => 'password_resets', + 'expire' => 60, + 'throttle' => 60, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Password Confirmation Timeout + |-------------------------------------------------------------------------- + | + | Here you may define the amount of seconds before a password confirmation + | times out and the user is prompted to re-enter their password via the + | confirmation screen. By default, the timeout lasts for three hours. + | + */ + + 'password_timeout' => 10800, + +]; diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/broadcasting.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/broadcasting.php new file mode 100644 index 00000000..67fcbbd6 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/broadcasting.php @@ -0,0 +1,67 @@ + env('BROADCAST_DRIVER', 'null'), + + /* + |-------------------------------------------------------------------------- + | Broadcast Connections + |-------------------------------------------------------------------------- + | + | Here you may define all of the broadcast connections that will be used + | to broadcast events to other systems or over websockets. Samples of + | each available type of connection are provided inside this array. + | + */ + + 'connections' => [ + + 'pusher' => [ + 'driver' => 'pusher', + 'key' => env('PUSHER_APP_KEY'), + 'secret' => env('PUSHER_APP_SECRET'), + 'app_id' => env('PUSHER_APP_ID'), + 'options' => [ + 'cluster' => env('PUSHER_APP_CLUSTER'), + 'useTLS' => true, + ], + 'client_options' => [ + // Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html + ], + ], + + 'ably' => [ + 'driver' => 'ably', + 'key' => env('ABLY_KEY'), + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + ], + + 'log' => [ + 'driver' => 'log', + ], + + 'null' => [ + 'driver' => 'null', + ], + + ], + +]; diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/cache.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/cache.php new file mode 100644 index 00000000..33bb2954 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/cache.php @@ -0,0 +1,110 @@ + env('CACHE_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Cache Stores + |-------------------------------------------------------------------------- + | + | Here you may define all of the cache "stores" for your application as + | well as their drivers. You may even define multiple stores for the + | same cache driver to group types of items stored in your caches. + | + | Supported drivers: "apc", "array", "database", "file", + | "memcached", "redis", "dynamodb", "octane", "null" + | + */ + + 'stores' => [ + + 'apc' => [ + 'driver' => 'apc', + ], + + 'array' => [ + 'driver' => 'array', + 'serialize' => false, + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'cache', + 'connection' => null, + 'lock_connection' => null, + ], + + 'file' => [ + 'driver' => 'file', + 'path' => storage_path('framework/cache/data'), + ], + + 'memcached' => [ + 'driver' => 'memcached', + 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), + 'sasl' => [ + env('MEMCACHED_USERNAME'), + env('MEMCACHED_PASSWORD'), + ], + 'options' => [ + // Memcached::OPT_CONNECT_TIMEOUT => 2000, + ], + 'servers' => [ + [ + 'host' => env('MEMCACHED_HOST', '127.0.0.1'), + 'port' => env('MEMCACHED_PORT', 11211), + 'weight' => 100, + ], + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'cache', + 'lock_connection' => 'default', + ], + + 'dynamodb' => [ + 'driver' => 'dynamodb', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), + 'endpoint' => env('DYNAMODB_ENDPOINT'), + ], + + 'octane' => [ + 'driver' => 'octane', + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Cache Key Prefix + |-------------------------------------------------------------------------- + | + | When utilizing the APC, database, memcached, Redis, or DynamoDB cache + | stores there might be other applications using the same cache. For + | that reason, you may prefix every cache key to avoid collisions. + | + */ + + 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache_'), + +]; diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/cors.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/cors.php new file mode 100644 index 00000000..8a39e6da --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/cors.php @@ -0,0 +1,34 @@ + ['api/*', 'sanctum/csrf-cookie'], + + 'allowed_methods' => ['*'], + + 'allowed_origins' => ['*'], + + 'allowed_origins_patterns' => [], + + 'allowed_headers' => ['*'], + + 'exposed_headers' => [], + + 'max_age' => 0, + + 'supports_credentials' => false, + +]; diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/database.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/database.php new file mode 100644 index 00000000..137ad18c --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/database.php @@ -0,0 +1,151 @@ + env('DB_CONNECTION', 'mysql'), + + /* + |-------------------------------------------------------------------------- + | Database Connections + |-------------------------------------------------------------------------- + | + | Here are each of the database connections setup for your application. + | Of course, examples of configuring each database platform that is + | supported by Laravel is shown below to make development simple. + | + | + | All database work in Laravel is done through the PHP PDO facilities + | so make sure you have the driver for your particular database of + | choice installed on your machine before you begin development. + | + */ + + 'connections' => [ + + 'sqlite' => [ + 'driver' => 'sqlite', + 'url' => env('DATABASE_URL'), + 'database' => env('DB_DATABASE', database_path('database.sqlite')), + 'prefix' => '', + 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), + ], + + 'mysql' => [ + 'driver' => 'mysql', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => 'utf8mb4', + 'collation' => 'utf8mb4_unicode_ci', + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'pgsql' => [ + 'driver' => 'pgsql', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '5432'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'prefix_indexes' => true, + 'search_path' => 'public', + 'sslmode' => 'prefer', + ], + + 'sqlsrv' => [ + 'driver' => 'sqlsrv', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', 'localhost'), + 'port' => env('DB_PORT', '1433'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'prefix_indexes' => true, + // 'encrypt' => env('DB_ENCRYPT', 'yes'), + // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'), + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Migration Repository Table + |-------------------------------------------------------------------------- + | + | This table keeps track of all the migrations that have already run for + | your application. Using this information, we can determine which of + | the migrations on disk haven't actually been run in the database. + | + */ + + 'migrations' => 'migrations', + + /* + |-------------------------------------------------------------------------- + | Redis Databases + |-------------------------------------------------------------------------- + | + | Redis is an open source, fast, and advanced key-value store that also + | provides a richer body of commands than a typical key-value system + | such as APC or Memcached. Laravel makes it easy to dig right in. + | + */ + + 'redis' => [ + + 'client' => env('REDIS_CLIENT', 'phpredis'), + + 'options' => [ + 'cluster' => env('REDIS_CLUSTER', 'redis'), + 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'), + ], + + 'default' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_DB', '0'), + ], + + 'cache' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_CACHE_DB', '1'), + ], + + ], + +]; diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/filesystems.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/filesystems.php new file mode 100644 index 00000000..e9d9dbdb --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/filesystems.php @@ -0,0 +1,76 @@ + env('FILESYSTEM_DISK', 'local'), + + /* + |-------------------------------------------------------------------------- + | Filesystem Disks + |-------------------------------------------------------------------------- + | + | Here you may configure as many filesystem "disks" as you wish, and you + | may even configure multiple disks of the same driver. Defaults have + | been set up for each driver as an example of the required values. + | + | Supported Drivers: "local", "ftp", "sftp", "s3" + | + */ + + 'disks' => [ + + 'local' => [ + 'driver' => 'local', + 'root' => storage_path('app'), + 'throw' => false, + ], + + 'public' => [ + 'driver' => 'local', + 'root' => storage_path('app/public'), + 'url' => env('APP_URL').'/storage', + 'visibility' => 'public', + 'throw' => false, + ], + + 's3' => [ + 'driver' => 's3', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION'), + 'bucket' => env('AWS_BUCKET'), + 'url' => env('AWS_URL'), + 'endpoint' => env('AWS_ENDPOINT'), + 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), + 'throw' => false, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Symbolic Links + |-------------------------------------------------------------------------- + | + | Here you may configure the symbolic links that will be created when the + | `storage:link` Artisan command is executed. The array keys should be + | the locations of the links and the values should be their targets. + | + */ + + 'links' => [ + public_path('storage') => storage_path('app/public'), + ], + +]; diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/hashing.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/hashing.php new file mode 100644 index 00000000..bcd3be4c --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/hashing.php @@ -0,0 +1,52 @@ + 'bcrypt', + + /* + |-------------------------------------------------------------------------- + | Bcrypt Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Bcrypt algorithm. This will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'bcrypt' => [ + 'rounds' => env('BCRYPT_ROUNDS', 10), + ], + + /* + |-------------------------------------------------------------------------- + | Argon Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Argon algorithm. These will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'argon' => [ + 'memory' => 65536, + 'threads' => 1, + 'time' => 4, + ], + +]; diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/logging.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/logging.php new file mode 100644 index 00000000..fefe0885 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/logging.php @@ -0,0 +1,119 @@ + env('LOG_CHANNEL', 'stack'), + + /* + |-------------------------------------------------------------------------- + | Deprecations Log Channel + |-------------------------------------------------------------------------- + | + | This option controls the log channel that should be used to log warnings + | regarding deprecated PHP and library features. This allows you to get + | your application ready for upcoming major versions of dependencies. + | + */ + + 'deprecations' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), + + /* + |-------------------------------------------------------------------------- + | Log Channels + |-------------------------------------------------------------------------- + | + | Here you may configure the log channels for your application. Out of + | the box, Laravel uses the Monolog PHP logging library. This gives + | you a variety of powerful log handlers / formatters to utilize. + | + | Available Drivers: "single", "daily", "slack", "syslog", + | "errorlog", "monolog", + | "custom", "stack" + | + */ + + 'channels' => [ + 'stack' => [ + 'driver' => 'stack', + 'channels' => ['single'], + 'ignore_exceptions' => false, + ], + + 'single' => [ + 'driver' => 'single', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'daily' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'days' => 14, + ], + + 'slack' => [ + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'username' => 'Laravel Log', + 'emoji' => ':boom:', + 'level' => env('LOG_LEVEL', 'critical'), + ], + + 'papertrail' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class), + 'handler_with' => [ + 'host' => env('PAPERTRAIL_URL'), + 'port' => env('PAPERTRAIL_PORT'), + 'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'), + ], + ], + + 'stderr' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => StreamHandler::class, + 'formatter' => env('LOG_STDERR_FORMATTER'), + 'with' => [ + 'stream' => 'php://stderr', + ], + ], + + 'syslog' => [ + 'driver' => 'syslog', + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'errorlog' => [ + 'driver' => 'errorlog', + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'null' => [ + 'driver' => 'monolog', + 'handler' => NullHandler::class, + ], + + 'emergency' => [ + 'path' => storage_path('logs/laravel.log'), + ], + ], + +]; diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/mail.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/mail.php new file mode 100644 index 00000000..11bfe7e1 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/mail.php @@ -0,0 +1,117 @@ + env('MAIL_MAILER', 'smtp'), + + /* + |-------------------------------------------------------------------------- + | Mailer Configurations + |-------------------------------------------------------------------------- + | + | Here you may configure all of the mailers used by your application plus + | their respective settings. Several examples have been configured for + | you and you are free to add your own as your application requires. + | + | Laravel supports a variety of mail "transport" drivers to be used while + | sending an e-mail. You will specify which one you are using for your + | mailers below. You are free to add additional mailers as required. + | + | Supported: "smtp", "sendmail", "mailgun", "ses", + | "postmark", "log", "array", "failover" + | + */ + + 'mailers' => [ + 'smtp' => [ + 'transport' => 'smtp', + 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), + 'port' => env('MAIL_PORT', 587), + 'encryption' => env('MAIL_ENCRYPTION', 'tls'), + 'username' => env('MAIL_USERNAME'), + 'password' => env('MAIL_PASSWORD'), + 'timeout' => null, + ], + + 'ses' => [ + 'transport' => 'ses', + ], + + 'mailgun' => [ + 'transport' => 'mailgun', + ], + + 'postmark' => [ + 'transport' => 'postmark', + ], + + 'sendmail' => [ + 'transport' => 'sendmail', + 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'), + ], + + 'log' => [ + 'transport' => 'log', + 'channel' => env('MAIL_LOG_CHANNEL'), + ], + + 'array' => [ + 'transport' => 'array', + ], + + 'failover' => [ + 'transport' => 'failover', + 'mailers' => [ + 'smtp', + 'log', + ], + ], + ], + + /* + |-------------------------------------------------------------------------- + | Global "From" Address + |-------------------------------------------------------------------------- + | + | You may wish for all e-mails sent by your application to be sent from + | the same address. Here, you may specify a name and address that is + | used globally for all e-mails that are sent by your application. + | + */ + + 'from' => [ + 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), + 'name' => env('MAIL_FROM_NAME', 'Example'), + ], + + /* + |-------------------------------------------------------------------------- + | Markdown Mail Settings + |-------------------------------------------------------------------------- + | + | If you are using Markdown based email rendering, you may configure your + | theme and component paths here, allowing you to customize the design + | of the emails. Or, you may simply stick with the Laravel defaults! + | + */ + + 'markdown' => [ + 'theme' => 'default', + + 'paths' => [ + resource_path('views/vendor/mail'), + ], + ], + +]; diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/queue.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/queue.php new file mode 100644 index 00000000..25ea5a81 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/queue.php @@ -0,0 +1,93 @@ + env('QUEUE_CONNECTION', 'sync'), + + /* + |-------------------------------------------------------------------------- + | Queue Connections + |-------------------------------------------------------------------------- + | + | Here you may configure the connection information for each server that + | is used by your application. A default configuration has been added + | for each back-end shipped with Laravel. You are free to add more. + | + | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null" + | + */ + + 'connections' => [ + + 'sync' => [ + 'driver' => 'sync', + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'jobs', + 'queue' => 'default', + 'retry_after' => 90, + 'after_commit' => false, + ], + + 'beanstalkd' => [ + 'driver' => 'beanstalkd', + 'host' => 'localhost', + 'queue' => 'default', + 'retry_after' => 90, + 'block_for' => 0, + 'after_commit' => false, + ], + + 'sqs' => [ + 'driver' => 'sqs', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), + 'queue' => env('SQS_QUEUE', 'default'), + 'suffix' => env('SQS_SUFFIX'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'after_commit' => false, + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + 'queue' => env('REDIS_QUEUE', 'default'), + 'retry_after' => 90, + 'block_for' => null, + 'after_commit' => false, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Failed Queue Jobs + |-------------------------------------------------------------------------- + | + | These options configure the behavior of failed queue job logging so you + | can control which database and table are used to store the jobs that + | have failed. You may change them to any database / table you wish. + | + */ + + 'failed' => [ + 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), + 'database' => env('DB_CONNECTION', 'mysql'), + 'table' => 'failed_jobs', + ], + +]; diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/sanctum.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/sanctum.php new file mode 100644 index 00000000..529cfdc9 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/sanctum.php @@ -0,0 +1,67 @@ + explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf( + '%s%s', + 'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1', + Sanctum::currentApplicationUrlWithPort() + ))), + + /* + |-------------------------------------------------------------------------- + | Sanctum Guards + |-------------------------------------------------------------------------- + | + | This array contains the authentication guards that will be checked when + | Sanctum is trying to authenticate a request. If none of these guards + | are able to authenticate the request, Sanctum will use the bearer + | token that's present on an incoming request for authentication. + | + */ + + 'guard' => ['web'], + + /* + |-------------------------------------------------------------------------- + | Expiration Minutes + |-------------------------------------------------------------------------- + | + | This value controls the number of minutes until an issued token will be + | considered expired. If this value is null, personal access tokens do + | not expire. This won't tweak the lifetime of first-party sessions. + | + */ + + 'expiration' => null, + + /* + |-------------------------------------------------------------------------- + | Sanctum Middleware + |-------------------------------------------------------------------------- + | + | When authenticating your first-party SPA with Sanctum you may need to + | customize some of the middleware Sanctum uses while processing the + | request. You may change the middleware listed below as required. + | + */ + + 'middleware' => [ + 'verify_csrf_token' => App\Http\Middleware\VerifyCsrfToken::class, + 'encrypt_cookies' => App\Http\Middleware\EncryptCookies::class, + ], + +]; diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/services.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/services.php new file mode 100644 index 00000000..0ace530e --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/services.php @@ -0,0 +1,34 @@ + [ + 'domain' => env('MAILGUN_DOMAIN'), + 'secret' => env('MAILGUN_SECRET'), + 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), + 'scheme' => 'https', + ], + + 'postmark' => [ + 'token' => env('POSTMARK_TOKEN'), + ], + + 'ses' => [ + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + ], + +]; diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/session.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/session.php new file mode 100644 index 00000000..8fed97c0 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/session.php @@ -0,0 +1,201 @@ + env('SESSION_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Session Lifetime + |-------------------------------------------------------------------------- + | + | Here you may specify the number of minutes that you wish the session + | to be allowed to remain idle before it expires. If you want them + | to immediately expire on the browser closing, set that option. + | + */ + + 'lifetime' => env('SESSION_LIFETIME', 120), + + 'expire_on_close' => false, + + /* + |-------------------------------------------------------------------------- + | Session Encryption + |-------------------------------------------------------------------------- + | + | This option allows you to easily specify that all of your session data + | should be encrypted before it is stored. All encryption will be run + | automatically by Laravel and you can use the Session like normal. + | + */ + + 'encrypt' => false, + + /* + |-------------------------------------------------------------------------- + | Session File Location + |-------------------------------------------------------------------------- + | + | When using the native session driver, we need a location where session + | files may be stored. A default has been set for you but a different + | location may be specified. This is only needed for file sessions. + | + */ + + 'files' => storage_path('framework/sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Database Connection + |-------------------------------------------------------------------------- + | + | When using the "database" or "redis" session drivers, you may specify a + | connection that should be used to manage these sessions. This should + | correspond to a connection in your database configuration options. + | + */ + + 'connection' => env('SESSION_CONNECTION'), + + /* + |-------------------------------------------------------------------------- + | Session Database Table + |-------------------------------------------------------------------------- + | + | When using the "database" session driver, you may specify the table we + | should use to manage the sessions. Of course, a sensible default is + | provided for you; however, you are free to change this as needed. + | + */ + + 'table' => 'sessions', + + /* + |-------------------------------------------------------------------------- + | Session Cache Store + |-------------------------------------------------------------------------- + | + | While using one of the framework's cache driven session backends you may + | list a cache store that should be used for these sessions. This value + | must match with one of the application's configured cache "stores". + | + | Affects: "apc", "dynamodb", "memcached", "redis" + | + */ + + 'store' => env('SESSION_STORE'), + + /* + |-------------------------------------------------------------------------- + | Session Sweeping Lottery + |-------------------------------------------------------------------------- + | + | Some session drivers must manually sweep their storage location to get + | rid of old sessions from storage. Here are the chances that it will + | happen on a given request. By default, the odds are 2 out of 100. + | + */ + + 'lottery' => [2, 100], + + /* + |-------------------------------------------------------------------------- + | Session Cookie Name + |-------------------------------------------------------------------------- + | + | Here you may change the name of the cookie used to identify a session + | instance by ID. The name specified here will get used every time a + | new session cookie is created by the framework for every driver. + | + */ + + 'cookie' => env( + 'SESSION_COOKIE', + Str::slug(env('APP_NAME', 'laravel'), '_').'_session' + ), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Path + |-------------------------------------------------------------------------- + | + | The session cookie path determines the path for which the cookie will + | be regarded as available. Typically, this will be the root path of + | your application but you are free to change this when necessary. + | + */ + + 'path' => '/', + + /* + |-------------------------------------------------------------------------- + | Session Cookie Domain + |-------------------------------------------------------------------------- + | + | Here you may change the domain of the cookie used to identify a session + | in your application. This will determine which domains the cookie is + | available to in your application. A sensible default has been set. + | + */ + + 'domain' => env('SESSION_DOMAIN'), + + /* + |-------------------------------------------------------------------------- + | HTTPS Only Cookies + |-------------------------------------------------------------------------- + | + | By setting this option to true, session cookies will only be sent back + | to the server if the browser has a HTTPS connection. This will keep + | the cookie from being sent to you when it can't be done securely. + | + */ + + 'secure' => env('SESSION_SECURE_COOKIE'), + + /* + |-------------------------------------------------------------------------- + | HTTP Access Only + |-------------------------------------------------------------------------- + | + | Setting this value to true will prevent JavaScript from accessing the + | value of the cookie and the cookie will only be accessible through + | the HTTP protocol. You are free to modify this option if needed. + | + */ + + 'http_only' => true, + + /* + |-------------------------------------------------------------------------- + | Same-Site Cookies + |-------------------------------------------------------------------------- + | + | This option determines how your cookies behave when cross-site requests + | take place, and can be used to mitigate CSRF attacks. By default, we + | will set this value to "lax" since this is a secure default value. + | + | Supported: "lax", "strict", "none", null + | + */ + + 'same_site' => 'lax', + +]; diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/view.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/view.php new file mode 100644 index 00000000..22b8a18d --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/view.php @@ -0,0 +1,36 @@ + [ + resource_path('views'), + ], + + /* + |-------------------------------------------------------------------------- + | Compiled View Path + |-------------------------------------------------------------------------- + | + | This option determines where all the compiled Blade templates will be + | stored for your application. Typically, this is within the storage + | directory. However, as usual, you are free to change this value. + | + */ + + 'compiled' => env( + 'VIEW_COMPILED_PATH', + realpath(storage_path('framework/views')) + ), + +]; diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/database/.gitignore b/php/sqlcommenter-php/samples/sqlcommenter-laravel/database/.gitignore new file mode 100644 index 00000000..9b19b93c --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/database/.gitignore @@ -0,0 +1 @@ +*.sqlite* diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/database/factories/UserFactory.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/database/factories/UserFactory.php new file mode 100644 index 00000000..23b61d24 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/database/factories/UserFactory.php @@ -0,0 +1,42 @@ + + */ +class UserFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition() + { + return [ + 'name' => $this->faker->name(), + 'email' => $this->faker->unique()->safeEmail(), + 'email_verified_at' => now(), + 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password + 'remember_token' => Str::random(10), + ]; + } + + /** + * Indicate that the model's email address should be unverified. + * + * @return static + */ + public function unverified() + { + return $this->state(function (array $attributes) { + return [ + 'email_verified_at' => null, + ]; + }); + } +} diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/database/migrations/2014_10_12_000000_create_users_table.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/database/migrations/2014_10_12_000000_create_users_table.php new file mode 100644 index 00000000..cf6b7766 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/database/migrations/2014_10_12_000000_create_users_table.php @@ -0,0 +1,36 @@ +id(); + $table->string('name'); + $table->string('email')->unique(); + $table->timestamp('email_verified_at')->nullable(); + $table->string('password'); + $table->rememberToken(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('users'); + } +}; diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/database/migrations/2014_10_12_100000_create_password_resets_table.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/database/migrations/2014_10_12_100000_create_password_resets_table.php new file mode 100644 index 00000000..fcacb80b --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/database/migrations/2014_10_12_100000_create_password_resets_table.php @@ -0,0 +1,32 @@ +string('email')->index(); + $table->string('token'); + $table->timestamp('created_at')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('password_resets'); + } +}; diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/database/migrations/2019_08_19_000000_create_failed_jobs_table.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/database/migrations/2019_08_19_000000_create_failed_jobs_table.php new file mode 100644 index 00000000..17191986 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/database/migrations/2019_08_19_000000_create_failed_jobs_table.php @@ -0,0 +1,36 @@ +id(); + $table->string('uuid')->unique(); + $table->text('connection'); + $table->text('queue'); + $table->longText('payload'); + $table->longText('exception'); + $table->timestamp('failed_at')->useCurrent(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('failed_jobs'); + } +}; diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php new file mode 100644 index 00000000..fd235f8c --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php @@ -0,0 +1,36 @@ +id(); + $table->morphs('tokenable'); + $table->string('name'); + $table->string('token', 64)->unique(); + $table->text('abilities')->nullable(); + $table->timestamp('last_used_at')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('personal_access_tokens'); + } +}; diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/database/seeders/DatabaseSeeder.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/database/seeders/DatabaseSeeder.php new file mode 100644 index 00000000..71f673f0 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/database/seeders/DatabaseSeeder.php @@ -0,0 +1,19 @@ +create(); + } +} diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/lang/en.json b/php/sqlcommenter-php/samples/sqlcommenter-laravel/lang/en.json new file mode 100644 index 00000000..577680dd --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/lang/en.json @@ -0,0 +1,7 @@ +{ + "The :attribute must contain at least one letter.": "The :attribute must contain at least one letter.", + "The :attribute must contain at least one number.": "The :attribute must contain at least one number.", + "The :attribute must contain at least one symbol.": "The :attribute must contain at least one symbol.", + "The :attribute must contain at least one uppercase and one lowercase letter.": "The :attribute must contain at least one uppercase and one lowercase letter.", + "The given :attribute has appeared in a data leak. Please choose a different :attribute.": "The given :attribute has appeared in a data leak. Please choose a different :attribute." +} diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/lang/en/auth.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/lang/en/auth.php new file mode 100644 index 00000000..6598e2c0 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/lang/en/auth.php @@ -0,0 +1,20 @@ + 'These credentials do not match our records.', + 'password' => 'The provided password is incorrect.', + 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', + +]; diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/lang/en/pagination.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/lang/en/pagination.php new file mode 100644 index 00000000..d4814118 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/lang/en/pagination.php @@ -0,0 +1,19 @@ + '« Previous', + 'next' => 'Next »', + +]; diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/lang/en/passwords.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/lang/en/passwords.php new file mode 100644 index 00000000..2345a56b --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/lang/en/passwords.php @@ -0,0 +1,22 @@ + 'Your password has been reset!', + 'sent' => 'We have emailed your password reset link!', + 'throttled' => 'Please wait before retrying.', + 'token' => 'This password reset token is invalid.', + 'user' => "We can't find a user with that email address.", + +]; diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/lang/en/validation.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/lang/en/validation.php new file mode 100644 index 00000000..397f78e2 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/lang/en/validation.php @@ -0,0 +1,162 @@ + 'The :attribute must be accepted.', + 'accepted_if' => 'The :attribute must be accepted when :other is :value.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'after_or_equal' => 'The :attribute must be a date after or equal to :date.', + 'alpha' => 'The :attribute must only contain letters.', + 'alpha_dash' => 'The :attribute must only contain letters, numbers, dashes and underscores.', + 'alpha_num' => 'The :attribute must only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'before_or_equal' => 'The :attribute must be a date before or equal to :date.', + 'between' => [ + 'array' => 'The :attribute must have between :min and :max items.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'numeric' => 'The :attribute must be between :min and :max.', + 'string' => 'The :attribute must be between :min and :max characters.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'current_password' => 'The password is incorrect.', + 'date' => 'The :attribute is not a valid date.', + 'date_equals' => 'The :attribute must be a date equal to :date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'declined' => 'The :attribute must be declined.', + 'declined_if' => 'The :attribute must be declined when :other is :value.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'dimensions' => 'The :attribute has invalid image dimensions.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'email' => 'The :attribute must be a valid email address.', + 'ends_with' => 'The :attribute must end with one of the following: :values.', + 'enum' => 'The selected :attribute is invalid.', + 'exists' => 'The selected :attribute is invalid.', + 'file' => 'The :attribute must be a file.', + 'filled' => 'The :attribute field must have a value.', + 'gt' => [ + 'array' => 'The :attribute must have more than :value items.', + 'file' => 'The :attribute must be greater than :value kilobytes.', + 'numeric' => 'The :attribute must be greater than :value.', + 'string' => 'The :attribute must be greater than :value characters.', + ], + 'gte' => [ + 'array' => 'The :attribute must have :value items or more.', + 'file' => 'The :attribute must be greater than or equal to :value kilobytes.', + 'numeric' => 'The :attribute must be greater than or equal to :value.', + 'string' => 'The :attribute must be greater than or equal to :value characters.', + ], + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'ipv4' => 'The :attribute must be a valid IPv4 address.', + 'ipv6' => 'The :attribute must be a valid IPv6 address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'lt' => [ + 'array' => 'The :attribute must have less than :value items.', + 'file' => 'The :attribute must be less than :value kilobytes.', + 'numeric' => 'The :attribute must be less than :value.', + 'string' => 'The :attribute must be less than :value characters.', + ], + 'lte' => [ + 'array' => 'The :attribute must not have more than :value items.', + 'file' => 'The :attribute must be less than or equal to :value kilobytes.', + 'numeric' => 'The :attribute must be less than or equal to :value.', + 'string' => 'The :attribute must be less than or equal to :value characters.', + ], + 'mac_address' => 'The :attribute must be a valid MAC address.', + 'max' => [ + 'array' => 'The :attribute must not have more than :max items.', + 'file' => 'The :attribute must not be greater than :max kilobytes.', + 'numeric' => 'The :attribute must not be greater than :max.', + 'string' => 'The :attribute must not be greater than :max characters.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'mimetypes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'array' => 'The :attribute must have at least :min items.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'numeric' => 'The :attribute must be at least :min.', + 'string' => 'The :attribute must be at least :min characters.', + ], + 'multiple_of' => 'The :attribute must be a multiple of :value.', + 'not_in' => 'The selected :attribute is invalid.', + 'not_regex' => 'The :attribute format is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'present' => 'The :attribute field must be present.', + 'prohibited' => 'The :attribute field is prohibited.', + 'prohibited_if' => 'The :attribute field is prohibited when :other is :value.', + 'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.', + 'prohibits' => 'The :attribute field prohibits :other from being present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_array_keys' => 'The :attribute field must contain entries for: :values.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values are present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'array' => 'The :attribute must contain :size items.', + 'file' => 'The :attribute must be :size kilobytes.', + 'numeric' => 'The :attribute must be :size.', + 'string' => 'The :attribute must be :size characters.', + ], + 'starts_with' => 'The :attribute must start with one of the following: :values.', + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid timezone.', + 'unique' => 'The :attribute has already been taken.', + 'uploaded' => 'The :attribute failed to upload.', + 'url' => 'The :attribute must be a valid URL.', + 'uuid' => 'The :attribute must be a valid UUID.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. + | + */ + + 'attributes' => [], + +]; diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/package.json b/php/sqlcommenter-php/samples/sqlcommenter-laravel/package.json new file mode 100644 index 00000000..7a9aecdf --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/package.json @@ -0,0 +1,18 @@ +{ + "private": true, + "scripts": { + "dev": "npm run development", + "development": "mix", + "watch": "mix watch", + "watch-poll": "mix watch -- --watch-options-poll=1000", + "hot": "mix watch --hot", + "prod": "npm run production", + "production": "mix --production" + }, + "devDependencies": { + "axios": "^0.25", + "laravel-mix": "^6.0.6", + "lodash": "^4.17.19", + "postcss": "^8.1.14" + } +} diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/phpunit.xml b/php/sqlcommenter-php/samples/sqlcommenter-laravel/phpunit.xml new file mode 100644 index 00000000..2ac86a18 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/phpunit.xml @@ -0,0 +1,31 @@ + + + + + ./tests/Unit + + + ./tests/Feature + + + + + ./app + + + + + + + + + + + + + + diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/public/.htaccess b/php/sqlcommenter-php/samples/sqlcommenter-laravel/public/.htaccess new file mode 100644 index 00000000..3aec5e27 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/public/.htaccess @@ -0,0 +1,21 @@ + + + Options -MultiViews -Indexes + + + RewriteEngine On + + # Handle Authorization Header + RewriteCond %{HTTP:Authorization} . + RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + # Redirect Trailing Slashes If Not A Folder... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_URI} (.+)/$ + RewriteRule ^ %1 [L,R=301] + + # Send Requests To Front Controller... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ index.php [L] + diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/public/favicon.ico b/php/sqlcommenter-php/samples/sqlcommenter-laravel/public/favicon.ico new file mode 100644 index 00000000..e69de29b diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/public/index.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/public/index.php new file mode 100644 index 00000000..1d69f3a2 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/public/index.php @@ -0,0 +1,55 @@ +make(Kernel::class); + +$response = $kernel->handle( + $request = Request::capture() +)->send(); + +$kernel->terminate($request, $response); diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/public/robots.txt b/php/sqlcommenter-php/samples/sqlcommenter-laravel/public/robots.txt new file mode 100644 index 00000000..eb053628 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/resources/css/app.css b/php/sqlcommenter-php/samples/sqlcommenter-laravel/resources/css/app.css new file mode 100644 index 00000000..e69de29b diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/resources/js/app.js b/php/sqlcommenter-php/samples/sqlcommenter-laravel/resources/js/app.js new file mode 100644 index 00000000..40c55f65 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/resources/js/app.js @@ -0,0 +1 @@ +require('./bootstrap'); diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/resources/js/bootstrap.js b/php/sqlcommenter-php/samples/sqlcommenter-laravel/resources/js/bootstrap.js new file mode 100644 index 00000000..69225776 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/resources/js/bootstrap.js @@ -0,0 +1,28 @@ +window._ = require('lodash'); + +/** + * We'll load the axios HTTP library which allows us to easily issue requests + * to our Laravel back-end. This library automatically handles sending the + * CSRF token as a header based on the value of the "XSRF" token cookie. + */ + +window.axios = require('axios'); + +window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; + +/** + * Echo exposes an expressive API for subscribing to channels and listening + * for events that are broadcast by Laravel. Echo and event broadcasting + * allows your team to easily build robust real-time web applications. + */ + +// import Echo from 'laravel-echo'; + +// window.Pusher = require('pusher-js'); + +// window.Echo = new Echo({ +// broadcaster: 'pusher', +// key: process.env.MIX_PUSHER_APP_KEY, +// cluster: process.env.MIX_PUSHER_APP_CLUSTER, +// forceTLS: true +// }); diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/resources/views/welcome.blade.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/resources/views/welcome.blade.php new file mode 100644 index 00000000..dd6a45db --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/resources/views/welcome.blade.php @@ -0,0 +1,132 @@ + + + + + + + Laravel + + + + + + + + + + +
+ @if (Route::has('login')) + + @endif + +
+
+ + + + + +
+ +
+
+
+ + +
+
+ Laravel has wonderful, thorough documentation covering every aspect of the framework. Whether you are new to the framework or have previous experience with Laravel, we recommend reading all of the documentation from beginning to end. +
+
+
+ +
+
+ + +
+ +
+
+ Laracasts offers thousands of video tutorials on Laravel, PHP, and JavaScript development. Check them out, see for yourself, and massively level up your development skills in the process. +
+
+
+ +
+
+ + +
+ +
+
+ Laravel News is a community driven portal and newsletter aggregating all of the latest and most important news in the Laravel ecosystem, including new package releases and tutorials. +
+
+
+ +
+
+ +
Vibrant Ecosystem
+
+ +
+
+ Laravel's robust library of first-party tools and libraries, such as Forge, Vapor, Nova, and Envoyer help you take your projects to the next level. Pair them with powerful open source libraries like Cashier, Dusk, Echo, Horizon, Sanctum, Telescope, and more. +
+
+
+
+
+ +
+
+
+ + + + + + Shop + + + + + + + + Sponsor + +
+
+ +
+ Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }}) +
+
+
+
+ + diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/routes/api.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/routes/api.php new file mode 100644 index 00000000..c344f532 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/routes/api.php @@ -0,0 +1,23 @@ +get('/user', function (Request $request) { + return $request->user(); +}); + +use App\Http\Controllers\UserController; + +Route::get('/user/select', [UserController::class, 'select']); diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/routes/channels.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/routes/channels.php new file mode 100644 index 00000000..5d451e1f --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/routes/channels.php @@ -0,0 +1,18 @@ +id === (int) $id; +}); diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/routes/console.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/routes/console.php new file mode 100644 index 00000000..e05f4c9a --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/routes/console.php @@ -0,0 +1,19 @@ +comment(Inspiring::quote()); +})->purpose('Display an inspiring quote'); diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/routes/web.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/routes/web.php new file mode 100644 index 00000000..b1303973 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/routes/web.php @@ -0,0 +1,18 @@ +make(Kernel::class)->bootstrap(); + + return $app; + } +} diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/tests/Feature/EloquentTest.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/tests/Feature/EloquentTest.php new file mode 100644 index 00000000..59abcff8 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/tests/Feature/EloquentTest.php @@ -0,0 +1,31 @@ +get('/'); + + $response->assertStatus(200); + } + public function test_select() + { + DB::enableQueryLog(); + $response = $this->get('api/user/select'); + $myDebugVar = DB::getQueryLog(); + fwrite(STDERR, print_r($myDebugVar, TRUE)); + $response->assertStatus(200); + } +} diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/tests/TestCase.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/tests/TestCase.php new file mode 100644 index 00000000..2932d4a6 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/tests/TestCase.php @@ -0,0 +1,10 @@ +assertTrue(true); + } +} diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/webpack.mix.js b/php/sqlcommenter-php/samples/sqlcommenter-laravel/webpack.mix.js new file mode 100644 index 00000000..2a22dc12 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/webpack.mix.js @@ -0,0 +1,17 @@ +const mix = require('laravel-mix'); + +/* + |-------------------------------------------------------------------------- + | Mix Asset Management + |-------------------------------------------------------------------------- + | + | Mix provides a clean, fluent API for defining some Webpack build steps + | for your Laravel applications. By default, we are compiling the CSS + | file for the application as well as bundling up all the JS files. + | + */ + +mix.js('resources/js/app.js', 'public/js') + .postCss('resources/css/app.css', 'public/css', [ + // + ]); From b4012911264266aa8aa66af8b7960b9b2e1e02f8 Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Fri, 29 Apr 2022 12:56:56 +0530 Subject: [PATCH 14/31] Test for Eloquent framework --- .../packages/sqlcommenter-laravel/README.md | 2 +- .../app/Http/Controllers/UserController.php | 29 +- .../sqlcommenter-laravel/bootstrap/app.php | 16 + .../sqlcommenter-laravel/composer.json | 4 +- .../sqlcommenter-laravel/composer.lock | 668 +++++++++++++++++- .../sqlcommenter-laravel/config/app.php | 1 + .../sqlcommenter-laravel/routes/api.php | 4 + .../tests/Feature/EloquentTest.php | 32 +- 8 files changed, 742 insertions(+), 14 deletions(-) diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/README.md b/php/sqlcommenter-php/packages/sqlcommenter-laravel/README.md index 47a5aa72..82b22b3f 100644 --- a/php/sqlcommenter-php/packages/sqlcommenter-laravel/README.md +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/README.md @@ -24,7 +24,7 @@ composer require "google/sqlcommenter-laravel" Publish the config file from library to into laravel app using below command ```shell -php artisan vendor:publish --provider="google\GoogleSqlCommenterLaravel\GoogleSqlCommenterServiceProvider" +php artisan vendor:publish --provider="Google\GoogleSqlCommenterLaravel\GoogleSqlCommenterServiceProvider" ``` Add the following class above ``Illuminate\Database\DatabaseServiceProvider::class, diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Controllers/UserController.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Controllers/UserController.php index 9493e610..7d9e096d 100644 --- a/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Controllers/UserController.php +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Controllers/UserController.php @@ -17,14 +17,29 @@ class UserController extends Controller */ public function select() { - DB::raw("delete from laravel.users"); User::all(); -// $user_update = new User; -// $user_update->name = 'john'; -// $user_update->email ='assss@d.com'; -// $user_update->password ='as@d.com'; -// -// $user_update->save(); + return 'Success'; + } + + public function create() + { + $user_update = new User; + $user_update->name = 'john'; + $user_update->email ='contact_me@d.com'; + $user_update->password ='Password$3456'; + $user_update->save(); + return 'Success'; + } + public function delete() + { + User::where('email', 'contact_me@d.com')->delete(); + return 'Success'; + } + + public function update() + { + User::where('email', 'contact_me@d.com')->update(["name" =>'johnny']); + return 'Success'; } } diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/bootstrap/app.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/bootstrap/app.php index 037e17df..cf333e67 100644 --- a/php/sqlcommenter-php/samples/sqlcommenter-laravel/bootstrap/app.php +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/bootstrap/app.php @@ -11,6 +11,22 @@ | */ +use OpenTelemetry\SDK\Trace\SpanExporter\ConsoleSpanExporter; +use OpenTelemetry\SDK\Trace\SpanProcessor\SimpleSpanProcessor; +use OpenTelemetry\SDK\Trace\TracerProvider; + + +$tracerProvider = new TracerProvider( + new SimpleSpanProcessor( + new ConsoleSpanExporter() + ) +); + +$tracer = $tracerProvider->getTracer('io.opentelemetry.contrib.php'); + +$rootSpan = $tracer->spanBuilder('root')->startSpan(); +$rootSpan->activate(); + $app = new Illuminate\Foundation\Application( $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__) ); diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/composer.json b/php/sqlcommenter-php/samples/sqlcommenter-laravel/composer.json index 96ed3fbc..b399c3f5 100644 --- a/php/sqlcommenter-php/samples/sqlcommenter-laravel/composer.json +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/composer.json @@ -6,11 +6,11 @@ "license": "MIT", "require": { "php": "^8.0.2", + "google/sqlcommenter-laravel": "dev-master", "guzzlehttp/guzzle": "^7.2", "laravel/framework": "^9.2", "laravel/sanctum": "^2.14.1", - "laravel/tinker": "^2.7", - "google/sqlcommenter-laravel": "dev-laravel" + "laravel/tinker": "^2.7" }, "require-dev": { "fakerphp/faker": "^1.9.1", diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/composer.lock b/php/sqlcommenter-php/samples/sqlcommenter-laravel/composer.lock index 35c32d62..b0ee1b3c 100644 --- a/php/sqlcommenter-php/samples/sqlcommenter-laravel/composer.lock +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "12524947d8c752f84bc21aaaede06bfa", + "content-hash": "5a068783010bebd4bcc7e8e3717431ab", "packages": [ { "name": "brick/math", @@ -508,6 +508,102 @@ ], "time": "2022-02-20T15:07:15+00:00" }, + { + "name": "google/protobuf", + "version": "v3.20.1", + "source": { + "type": "git", + "url": "https://github.com/protocolbuffers/protobuf-php.git", + "reference": "5537a424882b2cbce891330d3e4bdfe363694975" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/protocolbuffers/protobuf-php/zipball/5537a424882b2cbce891330d3e4bdfe363694975", + "reference": "5537a424882b2cbce891330d3e4bdfe363694975", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": ">=5.0.0" + }, + "suggest": { + "ext-bcmath": "Need to support JSON deserialization" + }, + "type": "library", + "autoload": { + "psr-4": { + "Google\\Protobuf\\": "src/Google/Protobuf", + "GPBMetadata\\Google\\Protobuf\\": "src/GPBMetadata/Google/Protobuf" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "proto library for PHP", + "homepage": "https://developers.google.com/protocol-buffers/", + "keywords": [ + "proto" + ], + "support": { + "issues": "https://github.com/protocolbuffers/protobuf-php/issues", + "source": "https://github.com/protocolbuffers/protobuf-php/tree/v3.20.1" + }, + "time": "2022-04-22T01:22:58+00:00" + }, + { + "name": "google/sqlcommenter-laravel", + "version": "dev-master", + "dist": { + "type": "path", + "url": "../../packages/sqlcommenter-laravel", + "reference": "c509cc3f6d750170f2d4fe438bb04f610f0ea754" + }, + "require": { + "open-telemetry/opentelemetry": "~0.0.9", + "php-http/guzzle7-adapter": "^1.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Google\\GoogleSqlCommenterLaravel\\GoogleSqlCommenterServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Google\\GoogleSqlCommenterLaravel\\": "src" + }, + "classmap": [ + "src/" + ] + }, + "scripts": { + "format": [ + "phpcbf --standard=psr2 src/" + ] + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Google Developers", + "email": "sqlcommenter@googlegroups.com", + "role": "Developer" + } + ], + "description": "Laravel middleware to send events to OpenTelemetry", + "transport-options": { + "relative": true + } + }, { "name": "graham-campbell/result-type", "version": "v1.0.4", @@ -570,6 +666,50 @@ ], "time": "2021-11-21T21:41:47+00:00" }, + { + "name": "grpc/grpc", + "version": "1.42.0", + "source": { + "type": "git", + "url": "https://github.com/grpc/grpc-php.git", + "reference": "9fa44f104cb92e924d4da547323a97f3d8aca6d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/grpc/grpc-php/zipball/9fa44f104cb92e924d4da547323a97f3d8aca6d4", + "reference": "9fa44f104cb92e924d4da547323a97f3d8aca6d4", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "google/auth": "^v1.3.0" + }, + "suggest": { + "ext-protobuf": "For better performance, install the protobuf C extension.", + "google/protobuf": "To get started using grpc quickly, install the native protobuf library." + }, + "type": "library", + "autoload": { + "psr-4": { + "Grpc\\": "src/lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "gRPC library for PHP", + "homepage": "https://grpc.io", + "keywords": [ + "rpc" + ], + "support": { + "source": "https://github.com/grpc/grpc-php/tree/v1.42.0" + }, + "time": "2021-11-19T08:13:51+00:00" + }, { "name": "guzzlehttp/guzzle", "version": "7.4.2", @@ -1996,6 +2136,461 @@ }, "time": "2021-11-30T19:35:32+00:00" }, + { + "name": "nyholm/dsn", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/Nyholm/dsn.git", + "reference": "9445621b426bac8c0ca161db8cd700da00a4e618" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Nyholm/dsn/zipball/9445621b426bac8c0ca161db8cd700da00a4e618", + "reference": "9445621b426bac8c0ca161db8cd700da00a4e618", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "symfony/phpunit-bridge": "^5.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Nyholm\\Dsn\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com" + } + ], + "description": "Parse your DSN strings in a powerful and flexible way", + "homepage": "http://tnyholm.se", + "keywords": [ + "database", + "dsn", + "dsn parser", + "parser" + ], + "support": { + "issues": "https://github.com/Nyholm/dsn/issues", + "source": "https://github.com/Nyholm/dsn/tree/2.0.1" + }, + "funding": [ + { + "url": "https://github.com/Nyholm", + "type": "github" + } + ], + "time": "2021-11-18T09:23:29+00:00" + }, + { + "name": "open-telemetry/opentelemetry", + "version": "0.0.10", + "source": { + "type": "git", + "url": "https://github.com/open-telemetry/opentelemetry-php.git", + "reference": "4e3264578b5fcc1750cad5bdbf01ba9fb3caab0b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/open-telemetry/opentelemetry-php/zipball/4e3264578b5fcc1750cad5bdbf01ba9fb3caab0b", + "reference": "4e3264578b5fcc1750cad5bdbf01ba9fb3caab0b", + "shasum": "" + }, + "require": { + "ext-json": "*", + "google/protobuf": "^3.3.0", + "grpc/grpc": "^1.30", + "nyholm/dsn": "^2.0.0", + "packaged/thrift": "^0.15.0", + "php": "^7.4 || ^8.0", + "php-http/async-client-implementation": "^1.0", + "php-http/discovery": "^1.14", + "promphp/prometheus_client_php": "^2.2.1", + "psr/http-factory-implementation": "^1.0", + "psr/log": "^1.1|^2.0|^3.0", + "symfony/polyfill-mbstring": "^1.23" + }, + "replace": { + "open-telemetry/api": "self.version", + "open-telemetry/context": "self.version", + "open-telemetry/proto-otel": "self.version", + "open-telemetry/sdk": "self.version", + "open-telemetry/sdk-contrib": "self.version", + "open-telemetry/sem-conv": "self.version" + }, + "require-dev": { + "assertwell/phpunit-global-state": "^0.2", + "composer/xdebug-handler": "^2.0", + "dg/bypass-finals": "^1.3", + "ext-grpc": "*", + "friendsofphp/php-cs-fixer": "^3.4", + "guzzlehttp/guzzle": "^7.4", + "guzzlehttp/psr7": "^2.1", + "mikey179/vfsstream": "^1.6", + "mockery/mockery": "^1.4", + "monolog/monolog": "^2.3", + "nyholm/psr7": "^1.4", + "phan/phan": "^5.0", + "php-http/mock-client": "^1.5", + "phpbench/phpbench": "^1.2", + "phpmetrics/phpmetrics": "^2.7", + "phpstan/phpstan": "^1.1", + "phpstan/phpstan-mockery": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^9.3", + "psalm/plugin-mockery": "^0.9", + "psalm/plugin-phpunit": "^0.16", + "psalm/psalm": "^4.0", + "qossmic/deptrac-shim": "^0.18", + "symfony/http-client": "^5.2" + }, + "suggest": { + "ext-grpc": "To use the OTLP GRPC Exporter", + "ext-protobuf": "For more performant protobuf/grpc exporting", + "ext-sockets": "To use the Thrift UDP Exporter for the Jaeger Agent" + }, + "type": "library", + "autoload": { + "files": [ + "src/Context/fiber/initialize_fiber_handler.php", + "src/SDK/Common/Dev/Compatibility/_load.php" + ], + "psr-4": { + "Jaeger\\Thrift\\": "thrift/jaeger/", + "OpenTelemetry\\": "src/", + "Opentelemetry\\Proto\\": "proto/otel/Opentelemetry/Proto/", + "GPBMetadata\\Opentelemetry\\": "proto/otel/GPBMetadata/Opentelemetry/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Bob Strecansky", + "email": "bob.strecansky@gmail.com" + }, + { + "name": "Dmitry Krokhin", + "email": "nekufa@gmail.com" + }, + { + "name": "Levi Morrison", + "email": "levim@php.net" + } + ], + "description": "OpenTelemetry makes robust, portable telemetry a built-in feature of cloud-native software.", + "homepage": "https://opentelemetry.io/docs/php", + "support": { + "issues": "https://github.com/open-telemetry/opentelemetry-php/issues", + "source": "https://github.com/open-telemetry/opentelemetry-php/tree/0.0.10" + }, + "time": "2022-04-27T12:09:42+00:00" + }, + { + "name": "packaged/thrift", + "version": "0.15.0", + "source": { + "type": "git", + "url": "https://github.com/packaged/thrift.git", + "reference": "dbf4e5ff5c85d56ccae62265ed25424b366ce269" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/packaged/thrift/zipball/dbf4e5ff5c85d56ccae62265ed25424b366ce269", + "reference": "dbf4e5ff5c85d56ccae62265ed25424b366ce269", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Thrift\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "Apache Thrift", + "homepage": "http://thrift.apache.org/", + "keywords": [ + "apache", + "thrift" + ], + "support": { + "issues": "https://github.com/packaged/thrift/issues", + "source": "https://github.com/packaged/thrift/tree/0.15.0" + }, + "time": "2021-09-23T10:34:40+00:00" + }, + { + "name": "php-http/discovery", + "version": "1.14.1", + "source": { + "type": "git", + "url": "https://github.com/php-http/discovery.git", + "reference": "de90ab2b41d7d61609f504e031339776bc8c7223" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/discovery/zipball/de90ab2b41d7d61609f504e031339776bc8c7223", + "reference": "de90ab2b41d7d61609f504e031339776bc8c7223", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "nyholm/psr7": "<1.0" + }, + "require-dev": { + "graham-campbell/phpspec-skip-example-extension": "^5.0", + "php-http/httplug": "^1.0 || ^2.0", + "php-http/message-factory": "^1.0", + "phpspec/phpspec": "^5.1 || ^6.1", + "puli/composer-plugin": "1.0.0-beta10" + }, + "suggest": { + "php-http/message": "Allow to use Guzzle, Diactoros or Slim Framework factories" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Discovery\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Finds installed HTTPlug implementations and PSR-7 message factories", + "homepage": "http://php-http.org", + "keywords": [ + "adapter", + "client", + "discovery", + "factory", + "http", + "message", + "psr7" + ], + "support": { + "issues": "https://github.com/php-http/discovery/issues", + "source": "https://github.com/php-http/discovery/tree/1.14.1" + }, + "time": "2021-09-18T07:57:46+00:00" + }, + { + "name": "php-http/guzzle7-adapter", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/guzzle7-adapter.git", + "reference": "fb075a71dbfa4847cf0c2938c4e5a9c478ef8b01" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/guzzle7-adapter/zipball/fb075a71dbfa4847cf0c2938c4e5a9c478ef8b01", + "reference": "fb075a71dbfa4847cf0c2938c4e5a9c478ef8b01", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "^7.0", + "php": "^7.2 | ^8.0", + "php-http/httplug": "^2.0", + "psr/http-client": "^1.0" + }, + "provide": { + "php-http/async-client-implementation": "1.0", + "php-http/client-implementation": "1.0", + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "php-http/client-integration-tests": "^3.0", + "phpunit/phpunit": "^8.0|^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Adapter\\Guzzle7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com" + } + ], + "description": "Guzzle 7 HTTP Adapter", + "homepage": "http://httplug.io", + "keywords": [ + "Guzzle", + "http" + ], + "support": { + "issues": "https://github.com/php-http/guzzle7-adapter/issues", + "source": "https://github.com/php-http/guzzle7-adapter/tree/1.0.0" + }, + "time": "2021-03-09T07:35:15+00:00" + }, + { + "name": "php-http/httplug", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/httplug.git", + "reference": "f640739f80dfa1152533976e3c112477f69274eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/httplug/zipball/f640739f80dfa1152533976e3c112477f69274eb", + "reference": "f640739f80dfa1152533976e3c112477f69274eb", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "php-http/promise": "^1.1", + "psr/http-client": "^1.0", + "psr/http-message": "^1.0" + }, + "require-dev": { + "friends-of-phpspec/phpspec-code-coverage": "^4.1", + "phpspec/phpspec": "^5.1 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eric GELOEN", + "email": "geloen.eric@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "HTTPlug, the HTTP client abstraction for PHP", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "http" + ], + "support": { + "issues": "https://github.com/php-http/httplug/issues", + "source": "https://github.com/php-http/httplug/tree/2.3.0" + }, + "time": "2022-02-21T09:52:22+00:00" + }, + { + "name": "php-http/promise", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/promise.git", + "reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/promise/zipball/4c4c1f9b7289a2ec57cde7f1e9762a5789506f88", + "reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "friends-of-phpspec/phpspec-code-coverage": "^4.3.2", + "phpspec/phpspec": "^5.1.2 || ^6.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Joel Wurtz", + "email": "joel.wurtz@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Promise used for asynchronous HTTP requests", + "homepage": "http://httplug.io", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/php-http/promise/issues", + "source": "https://github.com/php-http/promise/tree/1.1.0" + }, + "time": "2020-07-07T09:29:14+00:00" + }, { "name": "phpoption/phpoption", "version": "1.8.1", @@ -2067,6 +2662,73 @@ ], "time": "2021-12-04T23:24:31+00:00" }, + { + "name": "promphp/prometheus_client_php", + "version": "v2.6.0", + "source": { + "type": "git", + "url": "https://github.com/PromPHP/prometheus_client_php.git", + "reference": "10881142d2c55de19f529ebbcb7f89558c6d46d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PromPHP/prometheus_client_php/zipball/10881142d2c55de19f529ebbcb7f89558c6d46d4", + "reference": "10881142d2c55de19f529ebbcb7f89558c6d46d4", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.2|^8.0" + }, + "replace": { + "endclothing/prometheus_client_php": "*", + "jimdo/prometheus_client_php": "*", + "lkaemmerling/prometheus_client_php": "*" + }, + "require-dev": { + "guzzlehttp/guzzle": "^6.3|^7.0", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.5.4", + "phpstan/phpstan-phpunit": "^1.1.0", + "phpstan/phpstan-strict-rules": "^1.1.0", + "phpunit/phpunit": "^9.4", + "squizlabs/php_codesniffer": "^3.6", + "symfony/polyfill-apcu": "^1.6" + }, + "suggest": { + "ext-apc": "Required if using APCu.", + "ext-redis": "Required if using Redis.", + "promphp/prometheus_push_gateway_php": "An easy client for using Prometheus PushGateway.", + "symfony/polyfill-apcu": "Required if you use APCu on PHP8.0+" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Prometheus\\": "src/Prometheus/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Lukas Kämmerling", + "email": "kontakt@lukas-kaemmerling.de" + } + ], + "description": "Prometheus instrumentation library for PHP applications.", + "support": { + "issues": "https://github.com/PromPHP/prometheus_client_php/issues", + "source": "https://github.com/PromPHP/prometheus_client_php/tree/v2.6.0" + }, + "time": "2022-04-12T14:07:05+00:00" + }, { "name": "psr/container", "version": "2.0.2", @@ -7734,7 +8396,9 @@ ], "aliases": [], "minimum-stability": "dev", - "stability-flags": [], + "stability-flags": { + "google/sqlcommenter-laravel": 20 + }, "prefer-stable": true, "prefer-lowest": false, "platform": { diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/app.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/app.php index b02c7f4b..84a502f9 100644 --- a/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/app.php +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/config/app.php @@ -147,6 +147,7 @@ Illuminate\Cache\CacheServiceProvider::class, Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, Illuminate\Cookie\CookieServiceProvider::class, + Google\GoogleSqlCommenterLaravel\Database\DatabaseServiceProvider::class, Illuminate\Database\DatabaseServiceProvider::class, Illuminate\Encryption\EncryptionServiceProvider::class, Illuminate\Filesystem\FilesystemServiceProvider::class, diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/routes/api.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/routes/api.php index c344f532..aef79fd2 100644 --- a/php/sqlcommenter-php/samples/sqlcommenter-laravel/routes/api.php +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/routes/api.php @@ -21,3 +21,7 @@ use App\Http\Controllers\UserController; Route::get('/user/select', [UserController::class, 'select']); +Route::get('/user/create', [UserController::class, 'create']); +Route::get('/user/delete', [UserController::class, 'delete']); +Route::get('/user/update', [UserController::class, 'update']); + diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/tests/Feature/EloquentTest.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/tests/Feature/EloquentTest.php index 59abcff8..6b241e9a 100644 --- a/php/sqlcommenter-php/samples/sqlcommenter-laravel/tests/Feature/EloquentTest.php +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/tests/Feature/EloquentTest.php @@ -17,15 +17,43 @@ public function test_the_application_returns_a_successful_response() { $response = $this->get('/'); + $response->assertStatus(200); + } + public function test_delete() + { + DB::enableQueryLog(); + $response = $this->get('api/user/delete'); + $myDebugVar = DB::getQueryLog(); + fwrite(STDERR, print_r($myDebugVar, TRUE)); $response->assertStatus(200); + $this->assertMatchesRegularExpression("~delete from `users` where `email` = \?/\*framework='laravel-9.9.0',controller='UserController',action='delete',route='%%2Fapi%%2Fuser%%2Fdelete',db_driver='mysql',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/~", end($myDebugVar)['query']); } - public function test_select() + public function test_create() { DB::enableQueryLog(); - $response = $this->get('api/user/select'); + $response = $this->get('api/user/create'); $myDebugVar = DB::getQueryLog(); fwrite(STDERR, print_r($myDebugVar, TRUE)); $response->assertStatus(200); + $this->assertMatchesRegularExpression("~insert into `users` \(`name`, `email`, `password`, `updated_at`, `created_at`\) values \(\?, \?, \?, \?, \?\)/\*framework='laravel-9.9.0',controller='UserController',action='create',route='%%2Fapi%%2Fuser%%2Fcreate',db_driver='mysql',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/~", end($myDebugVar)['query']); + } + + public function test_select_all() + { + DB::enableQueryLog(); + $response = $this->get('api/user/select'); + $myDebugVar = DB::getQueryLog(); + $response->assertStatus(200); + $this->assertMatchesRegularExpression("~select \* from `users`/\*framework='laravel-9.9.0',controller='UserController',action='select',route='%%2Fapi%%2Fuser%%2Fselect',db_driver='mysql',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/~", end($myDebugVar)['query']); + } + + public function test_update() + { + DB::enableQueryLog(); + $response = $this->get('api/user/update'); + $myDebugVar = DB::getQueryLog(); + $response->assertStatus(200); + $this->assertMatchesRegularExpression("~update `users` set `name` = \?, `users`.`updated_at` = \? where `email` = \?/\*framework='laravel-9.9.0',controller='UserController',action='update',route='%%2Fapi%%2Fuser%%2Fupdate',db_driver='mysql',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/~", end($myDebugVar)['query']); } } From 8dfcda9eb530fd5042a1565085c15e2d42500499 Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Fri, 29 Apr 2022 16:32:05 +0530 Subject: [PATCH 15/31] RawDB tests --- .../app/Http/Controllers/RawDBController.php | 24 +++++++ .../sqlcommenter-laravel/bootstrap/app.php | 1 - .../sqlcommenter-laravel/routes/api.php | 8 ++- .../tests/Feature/DBTest.php | 66 +++++++++++++++++++ .../tests/Feature/EloquentTest.php | 13 +++- 5 files changed, 109 insertions(+), 3 deletions(-) create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Controllers/RawDBController.php create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/tests/Feature/DBTest.php diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Controllers/RawDBController.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Controllers/RawDBController.php new file mode 100644 index 00000000..7694e2d4 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Controllers/RawDBController.php @@ -0,0 +1,24 @@ +user(); }); -use App\Http\Controllers\UserController; Route::get('/user/select', [UserController::class, 'select']); Route::get('/user/create', [UserController::class, 'create']); Route::get('/user/delete', [UserController::class, 'delete']); Route::get('/user/update', [UserController::class, 'update']); +Route::get('/db/select', [RawDBController::class, 'select']); +Route::get('/db/insert', [RawDBController::class, 'insert']); +Route::get('/db/delete', [RawDBController::class, 'delete']); +Route::get('/db/update', [RawDBController::class, 'update']); +Route::get('/db/selectone', [RawDBController::class, 'selectOne']); diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/tests/Feature/DBTest.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/tests/Feature/DBTest.php new file mode 100644 index 00000000..a8cc3bb6 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/tests/Feature/DBTest.php @@ -0,0 +1,66 @@ +get('api/db/delete'); + $myDebugVar = DB::getQueryLog(); + $response->assertStatus(200); + $this->assertMatchesRegularExpression("~delete from users where name='john'/\*framework='laravel-9.9.0',controller='RawDBController',action='delete',route='%%2Fapi%%2Fdb%%2Fdelete',db_driver='mysql',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;~", end($myDebugVar)['query']); + } + public function test_insert() + { + DB::enableQueryLog(); + $response = $this->get('api/db/insert'); + $myDebugVar = DB::getQueryLog(); + $response->assertStatus(200); + $this->assertMatchesRegularExpression("~insert into users \(`name`, `email`, `password`\) values \('john', 'contact_me@daa.com', 'Passsword3456'\)/\*framework='laravel-9.9.0',controller='RawDBController',action='insert',route='%%2Fapi%%2Fdb%%2Finsert',db_driver='mysql',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/~", end($myDebugVar)['query']); + } + + public function test_select_one() + { + DB::enableQueryLog(); + $response = $this->get('api/db/selectone'); + $myDebugVar = DB::getQueryLog(); + $response->assertStatus(200); + $this->assertMatchesRegularExpression("~select 1/\*framework='laravel-9.9.0',controller='RawDBController',action='selectOne',route='%%2Fapi%%2Fdb%%2Fselectone',db_driver='mysql',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/~", end($myDebugVar)['query']); + } + + public function test_update() + { + DB::enableQueryLog(); + $response = $this->get('api/db/update'); + $myDebugVar = DB::getQueryLog(); + $response->assertStatus(200); + $this->assertMatchesRegularExpression("~update users set name='johnny' where name='john'/\*framework='laravel-9.9.0',controller='RawDBController',action='update',route='%%2Fapi%%2Fdb%%2Fupdate',db_driver='mysql',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/~", end($myDebugVar)['query']); + } + + public function test_select() + { + DB::enableQueryLog(); + $response = $this->get('api/db/select'); + $myDebugVar = DB::getQueryLog(); + $response->assertStatus(200); + $this->assertMatchesRegularExpression("~select 1/\*framework='laravel-9.9.0',controller='RawDBController',action='select',route='%%2Fapi%%2Fdb%%2Fselect',db_driver='mysql',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/~", end($myDebugVar)['query']); + } + + public function test_select_with_route_disabled() + { + DB::enableQueryLog(); + $response = $this->get('api/db/select'); + $myDebugVar = DB::getQueryLog(); + config(['google_sqlcommenter.include.route' => false]); + $response->assertStatus(200); + $this->assertMatchesRegularExpression("~select 1/\*framework='laravel-9.9.0',controller='RawDBController',action='select',db_driver='mysql',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/~", end($myDebugVar)['query']); + } +} diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/tests/Feature/EloquentTest.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/tests/Feature/EloquentTest.php index 6b241e9a..36d99988 100644 --- a/php/sqlcommenter-php/samples/sqlcommenter-laravel/tests/Feature/EloquentTest.php +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/tests/Feature/EloquentTest.php @@ -5,6 +5,7 @@ use Illuminate\Foundation\Testing\RefreshDatabase; use Tests\TestCase; use Illuminate\Support\Facades\DB; +use Config; class EloquentTest extends TestCase { @@ -25,7 +26,7 @@ public function test_delete() DB::enableQueryLog(); $response = $this->get('api/user/delete'); $myDebugVar = DB::getQueryLog(); - fwrite(STDERR, print_r($myDebugVar, TRUE)); + #fwrite(STDERR, print_r($myDebugVar, TRUE)); $response->assertStatus(200); $this->assertMatchesRegularExpression("~delete from `users` where `email` = \?/\*framework='laravel-9.9.0',controller='UserController',action='delete',route='%%2Fapi%%2Fuser%%2Fdelete',db_driver='mysql',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/~", end($myDebugVar)['query']); } @@ -56,4 +57,14 @@ public function test_update() $response->assertStatus(200); $this->assertMatchesRegularExpression("~update `users` set `name` = \?, `users`.`updated_at` = \? where `email` = \?/\*framework='laravel-9.9.0',controller='UserController',action='update',route='%%2Fapi%%2Fuser%%2Fupdate',db_driver='mysql',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/~", end($myDebugVar)['query']); } + + public function test_select_all_db_driver_disabled() + { + DB::enableQueryLog(); + config(['google_sqlcommenter.include.db_driver' => false]); + $response = $this->get('api/user/select'); + $myDebugVar = DB::getQueryLog(); + $response->assertStatus(200); + $this->assertMatchesRegularExpression("~select \* from `users`/\*framework='laravel-9.9.0',controller='UserController',action='select',route='%%2Fapi%%2Fuser%%2Fselect',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/~", end($myDebugVar)['query']); + } } From bde3747168e779a5ed619c106938aa846315e8c5 Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Fri, 29 Apr 2022 16:33:03 +0530 Subject: [PATCH 16/31] Added support for ; --- .../src/Database/Connection.php | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php index c1d95c72..27f58edb 100644 --- a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php @@ -35,7 +35,7 @@ class Connection extends BaseConnection */ public function selectOne($query, $bindings = [], $useReadPdo = true) { - $query .= $this->getSqlComments(); + $query = $this->getSqlComments($query); $records = parent::select($query, $bindings, $useReadPdo); if (count($records) > 0) { @@ -54,7 +54,7 @@ public function selectOne($query, $bindings = [], $useReadPdo = true) */ public function select($query, $bindings = [], $useReadPdo = true) { - $query .= $this->getSqlComments(); + $query = $this->getSqlComments($query); $records = parent::select($query, $bindings, $useReadPdo); return $records; } @@ -68,7 +68,7 @@ public function select($query, $bindings = [], $useReadPdo = true) */ public function insert($query, $bindings = []) { - $query .= $this->getSqlComments(); + $query = $this->getSqlComments($query); $records = parent::insert($query, $bindings); @@ -84,7 +84,7 @@ public function insert($query, $bindings = []) */ public function update($query, $bindings = []) { - $query .= $this->getSqlComments(); + $query = $this->getSqlComments($query); return $this->affectingStatement($query, $bindings); } @@ -98,12 +98,12 @@ public function update($query, $bindings = []) */ public function delete($query, $bindings = []) { - $query .= $this->getSqlComments(); + $query = $this->getSqlComments($query); return $this->affectingStatement($query, $bindings); } - private function getSqlComments() + private function getSqlComments($query) { $configurationKey = 'google_sqlcommenter.include.'; $comment = []; @@ -132,6 +132,12 @@ private function getSqlComments() $carrier = Opentelemetry::getOpentelemetryValues(); $comment = array_merge($comment, $carrier); } - return Utils::formatComments(array_filter(($comment))); + + $query=trim($query); + + if ($query[-1] == ';'){ + return rtrim($query ,";"). Utils::formatComments(array_filter(($comment))). ';'; + } + return $query . Utils::formatComments(array_filter(($comment))); } } From 7b3f3f05581b774eb7af69a219075baabade38f7 Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Fri, 29 Apr 2022 17:08:20 +0530 Subject: [PATCH 17/31] Removing print --- .../app/Http/Controllers/RawDBController.php | 2 +- .../sqlcommenter-laravel/tests/Feature/DBTest.php | 15 +++++++-------- .../tests/Feature/EloquentTest.php | 12 +++++------- 3 files changed, 13 insertions(+), 16 deletions(-) diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Controllers/RawDBController.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Controllers/RawDBController.php index 7694e2d4..c5f39fae 100644 --- a/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Controllers/RawDBController.php +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Http/Controllers/RawDBController.php @@ -16,7 +16,7 @@ public function update(){ DB::update("update users set name='johnny' where name='john';"); } public function delete(){ - DB::delete("delete from users where name='john';"); + DB::delete("delete from users where name='johnny';"); } public function selectOne(){ DB::selectOne("select 1;"); diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/tests/Feature/DBTest.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/tests/Feature/DBTest.php index a8cc3bb6..422fdee8 100644 --- a/php/sqlcommenter-php/samples/sqlcommenter-laravel/tests/Feature/DBTest.php +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/tests/Feature/DBTest.php @@ -9,14 +9,13 @@ class DBTest extends TestCase { - public function test_delete() { DB::enableQueryLog(); $response = $this->get('api/db/delete'); $myDebugVar = DB::getQueryLog(); $response->assertStatus(200); - $this->assertMatchesRegularExpression("~delete from users where name='john'/\*framework='laravel-9.9.0',controller='RawDBController',action='delete',route='%%2Fapi%%2Fdb%%2Fdelete',db_driver='mysql',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;~", end($myDebugVar)['query']); + $this->assertMatchesRegularExpression("~delete from users where name='johnny'/\*framework='laravel-\d*.\d*.\d*',controller='RawDBController',action='delete',route='%%2Fapi%%2Fdb%%2Fdelete',db_driver='mysql',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;~", end($myDebugVar)['query']); } public function test_insert() { @@ -24,7 +23,7 @@ public function test_insert() $response = $this->get('api/db/insert'); $myDebugVar = DB::getQueryLog(); $response->assertStatus(200); - $this->assertMatchesRegularExpression("~insert into users \(`name`, `email`, `password`\) values \('john', 'contact_me@daa.com', 'Passsword3456'\)/\*framework='laravel-9.9.0',controller='RawDBController',action='insert',route='%%2Fapi%%2Fdb%%2Finsert',db_driver='mysql',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/~", end($myDebugVar)['query']); + $this->assertMatchesRegularExpression("~insert into users \(`name`, `email`, `password`\) values \('john', 'contact_me@daa.com', 'Passsword3456'\)/\*framework='laravel-\d*.\d*.\d*',controller='RawDBController',action='insert',route='%%2Fapi%%2Fdb%%2Finsert',db_driver='mysql',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/~", end($myDebugVar)['query']); } public function test_select_one() @@ -33,7 +32,7 @@ public function test_select_one() $response = $this->get('api/db/selectone'); $myDebugVar = DB::getQueryLog(); $response->assertStatus(200); - $this->assertMatchesRegularExpression("~select 1/\*framework='laravel-9.9.0',controller='RawDBController',action='selectOne',route='%%2Fapi%%2Fdb%%2Fselectone',db_driver='mysql',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/~", end($myDebugVar)['query']); + $this->assertMatchesRegularExpression("~select 1/\*framework='laravel-\d*.\d*.\d*',controller='RawDBController',action='selectOne',route='%%2Fapi%%2Fdb%%2Fselectone',db_driver='mysql',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/~", end($myDebugVar)['query']); } public function test_update() @@ -42,7 +41,7 @@ public function test_update() $response = $this->get('api/db/update'); $myDebugVar = DB::getQueryLog(); $response->assertStatus(200); - $this->assertMatchesRegularExpression("~update users set name='johnny' where name='john'/\*framework='laravel-9.9.0',controller='RawDBController',action='update',route='%%2Fapi%%2Fdb%%2Fupdate',db_driver='mysql',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/~", end($myDebugVar)['query']); + $this->assertMatchesRegularExpression("~update users set name='johnny' where name='john'/\*framework='laravel-\d*.\d*.\d*',controller='RawDBController',action='update',route='%%2Fapi%%2Fdb%%2Fupdate',db_driver='mysql',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/~", end($myDebugVar)['query']); } public function test_select() @@ -51,16 +50,16 @@ public function test_select() $response = $this->get('api/db/select'); $myDebugVar = DB::getQueryLog(); $response->assertStatus(200); - $this->assertMatchesRegularExpression("~select 1/\*framework='laravel-9.9.0',controller='RawDBController',action='select',route='%%2Fapi%%2Fdb%%2Fselect',db_driver='mysql',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/~", end($myDebugVar)['query']); + $this->assertMatchesRegularExpression("~select 1/\*framework='laravel-\d*.\d*.\d*',controller='RawDBController',action='select',route='%%2Fapi%%2Fdb%%2Fselect',db_driver='mysql',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/~", end($myDebugVar)['query']); } public function test_select_with_route_disabled() { DB::enableQueryLog(); + config(['google_sqlcommenter.include.route' => false]); $response = $this->get('api/db/select'); $myDebugVar = DB::getQueryLog(); - config(['google_sqlcommenter.include.route' => false]); $response->assertStatus(200); - $this->assertMatchesRegularExpression("~select 1/\*framework='laravel-9.9.0',controller='RawDBController',action='select',db_driver='mysql',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/~", end($myDebugVar)['query']); + $this->assertMatchesRegularExpression("~select 1/\*framework='laravel-\d*.\d*.\d*',controller='RawDBController',action='select',db_driver='mysql',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/~", end($myDebugVar)['query']); } } diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/tests/Feature/EloquentTest.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/tests/Feature/EloquentTest.php index 36d99988..88e519e5 100644 --- a/php/sqlcommenter-php/samples/sqlcommenter-laravel/tests/Feature/EloquentTest.php +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/tests/Feature/EloquentTest.php @@ -26,18 +26,16 @@ public function test_delete() DB::enableQueryLog(); $response = $this->get('api/user/delete'); $myDebugVar = DB::getQueryLog(); - #fwrite(STDERR, print_r($myDebugVar, TRUE)); $response->assertStatus(200); - $this->assertMatchesRegularExpression("~delete from `users` where `email` = \?/\*framework='laravel-9.9.0',controller='UserController',action='delete',route='%%2Fapi%%2Fuser%%2Fdelete',db_driver='mysql',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/~", end($myDebugVar)['query']); + $this->assertMatchesRegularExpression("~delete from `users` where `email` = \?/\*framework='laravel-\d*.\d*.\d*',controller='UserController',action='delete',route='%%2Fapi%%2Fuser%%2Fdelete',db_driver='mysql',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/~", end($myDebugVar)['query']); } public function test_create() { DB::enableQueryLog(); $response = $this->get('api/user/create'); $myDebugVar = DB::getQueryLog(); - fwrite(STDERR, print_r($myDebugVar, TRUE)); $response->assertStatus(200); - $this->assertMatchesRegularExpression("~insert into `users` \(`name`, `email`, `password`, `updated_at`, `created_at`\) values \(\?, \?, \?, \?, \?\)/\*framework='laravel-9.9.0',controller='UserController',action='create',route='%%2Fapi%%2Fuser%%2Fcreate',db_driver='mysql',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/~", end($myDebugVar)['query']); + $this->assertMatchesRegularExpression("~insert into `users` \(`name`, `email`, `password`, `updated_at`, `created_at`\) values \(\?, \?, \?, \?, \?\)/\*framework='laravel-\d*.\d*.\d*',controller='UserController',action='create',route='%%2Fapi%%2Fuser%%2Fcreate',db_driver='mysql',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/~", end($myDebugVar)['query']); } public function test_select_all() @@ -46,7 +44,7 @@ public function test_select_all() $response = $this->get('api/user/select'); $myDebugVar = DB::getQueryLog(); $response->assertStatus(200); - $this->assertMatchesRegularExpression("~select \* from `users`/\*framework='laravel-9.9.0',controller='UserController',action='select',route='%%2Fapi%%2Fuser%%2Fselect',db_driver='mysql',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/~", end($myDebugVar)['query']); + $this->assertMatchesRegularExpression("~select \* from `users`/\*framework='laravel-\d*.\d*.\d*',controller='UserController',action='select',route='%%2Fapi%%2Fuser%%2Fselect',db_driver='mysql',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/~", end($myDebugVar)['query']); } public function test_update() @@ -55,7 +53,7 @@ public function test_update() $response = $this->get('api/user/update'); $myDebugVar = DB::getQueryLog(); $response->assertStatus(200); - $this->assertMatchesRegularExpression("~update `users` set `name` = \?, `users`.`updated_at` = \? where `email` = \?/\*framework='laravel-9.9.0',controller='UserController',action='update',route='%%2Fapi%%2Fuser%%2Fupdate',db_driver='mysql',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/~", end($myDebugVar)['query']); + $this->assertMatchesRegularExpression("~update `users` set `name` = \?, `users`.`updated_at` = \? where `email` = \?/\*framework='laravel-\d*.\d*.\d*',controller='UserController',action='update',route='%%2Fapi%%2Fuser%%2Fupdate',db_driver='mysql',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/~", end($myDebugVar)['query']); } public function test_select_all_db_driver_disabled() @@ -65,6 +63,6 @@ public function test_select_all_db_driver_disabled() $response = $this->get('api/user/select'); $myDebugVar = DB::getQueryLog(); $response->assertStatus(200); - $this->assertMatchesRegularExpression("~select \* from `users`/\*framework='laravel-9.9.0',controller='UserController',action='select',route='%%2Fapi%%2Fuser%%2Fselect',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/~", end($myDebugVar)['query']); + $this->assertMatchesRegularExpression("~select \* from `users`/\*framework='laravel-\d*.\d*.\d*',controller='UserController',action='select',route='%%2Fapi%%2Fuser%%2Fselect',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/~", end($myDebugVar)['query']); } } From 57c33721e408e8a5ad0dbb8ffea24a630b2a4dca Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Mon, 2 May 2022 13:21:46 +0530 Subject: [PATCH 18/31] adding github docker workflow --- .../workflows/laravel-integration-tests.yaml | 78 +++++++++++++++++++ .../samples/sqlcommenter-laravel/.env.ci | 52 +++++++++++++ 2 files changed, 130 insertions(+) create mode 100644 .github/workflows/laravel-integration-tests.yaml create mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/.env.ci diff --git a/.github/workflows/laravel-integration-tests.yaml b/.github/workflows/laravel-integration-tests.yaml new file mode 100644 index 00000000..28e247c2 --- /dev/null +++ b/.github/workflows/laravel-integration-tests.yaml @@ -0,0 +1,78 @@ +on: push +name: CI +jobs: + phpunit: + runs-on: ubuntu-latest + container: + image: kirschbaumdevelopment/laravel-test-runner:7.4-beta + + services: + mysql: + image: mysql:8 + env: + MYSQL_ROOT_PASSWORD: password + MYSQL_DATABASE: test + ports: + - 3306:3306 + options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 + + steps: + - uses: actions/checkout@v1 + with: + fetch-depth: 1 + + - name: Get Composer Cache Directory + working-directory: ./php/sqlcommenter-php/samples/sqlcommenter-laravel + id: composer-cache + run: | + echo "::set-output name=dir::$(composer config cache-files-dir)" + + - uses: actions/cache@v1 + working-directory: ./php/sqlcommenter-php/samples/sqlcommenter-laravel + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: | + ${{ runner.os }}-composer- + + - name: Get yarn cache + working-directory: ./php/sqlcommenter-php/samples/sqlcommenter-laravel + id: yarn-cache + run: echo "::set-output name=dir::$(yarn cache dir)" + + - uses: actions/cache@v1 + working-directory: ./php/sqlcommenter-php/samples/sqlcommenter-laravel + with: + path: ${{ steps.yarn-cache.outputs.dir }} + key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-yarn- + + - name: Install composer dependencies + working-directory: ./php/sqlcommenter-php/samples/sqlcommenter-laravel + run: | + composer install --no-scripts + + - name: Prepare Laravel Application + working-directory: ./php/sqlcommenter-php/samples/sqlcommenter-laravel + run: | + cp .env.ci .env + php artisan key:generate + + - name: Install front-end dependencies + working-directory: ./php/sqlcommenter-php/samples/sqlcommenter-laravel + run: | + npm install + npm run dev + + - name: Run Testsuite + working-directory: ./php/sqlcommenter-php/samples/sqlcommenter-laravel + run: vendor/bin/phpunit tests/ + + # Example: Deploy to Laravel Forge + # - name: Deploy to Laravel Forge + # run: curl ${{ secrets.FORGE_STAGING_WEBHOOK }} + + # Example: Deploy to Laravel Vapor + # - name: Deploy to Laravel Vapor + # run: vapor deploy \ No newline at end of file diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/.env.ci b/php/sqlcommenter-php/samples/sqlcommenter-laravel/.env.ci new file mode 100644 index 00000000..a29d0263 --- /dev/null +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/.env.ci @@ -0,0 +1,52 @@ +APP_NAME=Laravel +APP_ENV=local +APP_KEY=base64:JqM8ZOydXLT3tcQRl+GPEWuEoCFnXNOZ51DgjoV6FfM= +APP_DEBUG=true +APP_URL=http://localhost + +LOG_CHANNEL=stack +LOG_DEPRECATIONS_CHANNEL=null +LOG_LEVEL=debug + +DB_CONNECTION=mysql +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_DATABASE=test +DB_USERNAME=root +DB_PASSWORD=password + +BROADCAST_DRIVER=log +CACHE_DRIVER=file +FILESYSTEM_DISK=local +QUEUE_CONNECTION=sync +SESSION_DRIVER=file +SESSION_LIFETIME=120 + +MEMCACHED_HOST=127.0.0.1 + +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_MAILER=smtp +MAIL_HOST=mailhog +MAIL_PORT=1025 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_ENCRYPTION=null +MAIL_FROM_ADDRESS="hello@example.com" +MAIL_FROM_NAME="${APP_NAME}" + +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_DEFAULT_REGION=us-east-1 +AWS_BUCKET= +AWS_USE_PATH_STYLE_ENDPOINT=false + +PUSHER_APP_ID= +PUSHER_APP_KEY= +PUSHER_APP_SECRET= +PUSHER_APP_CLUSTER=mt1 + +MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" +MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" From 13f57e92baa29513449a1fa6b5812306e79ce079 Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Mon, 2 May 2022 13:24:29 +0530 Subject: [PATCH 19/31] Fixing error --- .github/workflows/laravel-integration-tests.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/laravel-integration-tests.yaml b/.github/workflows/laravel-integration-tests.yaml index 28e247c2..89f26ef5 100644 --- a/.github/workflows/laravel-integration-tests.yaml +++ b/.github/workflows/laravel-integration-tests.yaml @@ -41,7 +41,6 @@ jobs: run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v1 - working-directory: ./php/sqlcommenter-php/samples/sqlcommenter-laravel with: path: ${{ steps.yarn-cache.outputs.dir }} key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} From 4b745571e14cce0a904458e3581710ff321e49ed Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Mon, 2 May 2022 13:25:22 +0530 Subject: [PATCH 20/31] Fixing error --- .github/workflows/laravel-integration-tests.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/laravel-integration-tests.yaml b/.github/workflows/laravel-integration-tests.yaml index 89f26ef5..74042acc 100644 --- a/.github/workflows/laravel-integration-tests.yaml +++ b/.github/workflows/laravel-integration-tests.yaml @@ -28,7 +28,6 @@ jobs: echo "::set-output name=dir::$(composer config cache-files-dir)" - uses: actions/cache@v1 - working-directory: ./php/sqlcommenter-php/samples/sqlcommenter-laravel with: path: ${{ steps.composer-cache.outputs.dir }} key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} From 0279e166c16afb901bdacf1203f5654f8776aef8 Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Mon, 2 May 2022 13:28:06 +0530 Subject: [PATCH 21/31] Updating php version in docker-laravel-test-runner to 8 --- .github/workflows/laravel-integration-tests.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/laravel-integration-tests.yaml b/.github/workflows/laravel-integration-tests.yaml index 74042acc..46c7bf8f 100644 --- a/.github/workflows/laravel-integration-tests.yaml +++ b/.github/workflows/laravel-integration-tests.yaml @@ -4,7 +4,7 @@ jobs: phpunit: runs-on: ubuntu-latest container: - image: kirschbaumdevelopment/laravel-test-runner:7.4-beta + image: kirschbaumdevelopment/laravel-test-runner:8.0 services: mysql: From 420c299f9c8286d34c2400715064d84524003d90 Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Mon, 2 May 2022 13:38:57 +0530 Subject: [PATCH 22/31] updating environment variable in php-laravel docker github integration test --- .github/workflows/laravel-integration-tests.yaml | 2 +- php/sqlcommenter-php/samples/sqlcommenter-laravel/.env.ci | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/laravel-integration-tests.yaml b/.github/workflows/laravel-integration-tests.yaml index 46c7bf8f..edd60060 100644 --- a/.github/workflows/laravel-integration-tests.yaml +++ b/.github/workflows/laravel-integration-tests.yaml @@ -13,7 +13,7 @@ jobs: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: test ports: - - 3306:3306 + - 33306:3306 options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 steps: diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/.env.ci b/php/sqlcommenter-php/samples/sqlcommenter-laravel/.env.ci index a29d0263..ac4294a4 100644 --- a/php/sqlcommenter-php/samples/sqlcommenter-laravel/.env.ci +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/.env.ci @@ -9,7 +9,7 @@ LOG_DEPRECATIONS_CHANNEL=null LOG_LEVEL=debug DB_CONNECTION=mysql -DB_HOST=127.0.0.1 +DB_HOST=mysql DB_PORT=3306 DB_DATABASE=test DB_USERNAME=root From 0025203649791248f153968f06bc33bd9392647e Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Mon, 2 May 2022 13:50:02 +0530 Subject: [PATCH 23/31] Adding migration in github docker workflow --- .github/workflows/laravel-integration-tests.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/laravel-integration-tests.yaml b/.github/workflows/laravel-integration-tests.yaml index edd60060..0635e0b3 100644 --- a/.github/workflows/laravel-integration-tests.yaml +++ b/.github/workflows/laravel-integration-tests.yaml @@ -63,6 +63,11 @@ jobs: npm install npm run dev + - name: Apply migrations + working-directory: ./php/sqlcommenter-php/samples/sqlcommenter-laravel + run: | + php artisan migrate + - name: Run Testsuite working-directory: ./php/sqlcommenter-php/samples/sqlcommenter-laravel run: vendor/bin/phpunit tests/ From 4fc25837b0577acc4805282413bd01f927b20371 Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Mon, 2 May 2022 13:57:51 +0530 Subject: [PATCH 24/31] Adding migration in github docker workflow --- .../packages/sqlcommenter-laravel/src/Database/Connection.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php index 27f58edb..842d8c81 100644 --- a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php @@ -118,7 +118,7 @@ private function getSqlComments($query) if (config($configurationKey . 'controller', true) and !empty($action['controller'])) { $comment['controller'] = explode("@", class_basename($action['controller']))[0]; } - if (config($configurationKey . 'action', true) and !empty($action['controller'] and str_contains($action['controller'], '@'))) { + if (config($configurationKey . 'action', true) and !empty($action and $action['controller'] and str_contains($action['controller'], '@'))) { $comment['action'] = explode("@", class_basename($action['controller']))[1]; } if (config($configurationKey . 'route', true)) { From 2fbb74c4b0adff8c798b6fb1480bbb399392f7de Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Mon, 2 May 2022 14:03:46 +0530 Subject: [PATCH 25/31] Adding publishing SQLCommenter Configs in github integration test workflow --- .github/workflows/laravel-integration-tests.yaml | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/.github/workflows/laravel-integration-tests.yaml b/.github/workflows/laravel-integration-tests.yaml index 0635e0b3..567a8659 100644 --- a/.github/workflows/laravel-integration-tests.yaml +++ b/.github/workflows/laravel-integration-tests.yaml @@ -68,14 +68,11 @@ jobs: run: | php artisan migrate + - name: Publish SQLCommenter Configurations + working-directory: ./php/sqlcommenter-php/samples/sqlcommenter-laravel + run: | + php artisan vendor:publish --provider="Google\GoogleSqlCommenterLaravel\GoogleSqlCommenterServiceProvider" + - name: Run Testsuite working-directory: ./php/sqlcommenter-php/samples/sqlcommenter-laravel run: vendor/bin/phpunit tests/ - - # Example: Deploy to Laravel Forge - # - name: Deploy to Laravel Forge - # run: curl ${{ secrets.FORGE_STAGING_WEBHOOK }} - - # Example: Deploy to Laravel Vapor - # - name: Deploy to Laravel Vapor - # run: vapor deploy \ No newline at end of file From ab80717bdad7016caf44b83770e67dbe9a7a6853 Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Mon, 2 May 2022 17:02:04 +0530 Subject: [PATCH 26/31] Adding unittest for laravel-integration-tests.yaml --- .../workflows/laravel-integration-tests.yaml | 2 +- .github/workflows/laravel-unit-tests.yaml | 52 +++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/laravel-unit-tests.yaml diff --git a/.github/workflows/laravel-integration-tests.yaml b/.github/workflows/laravel-integration-tests.yaml index 567a8659..1e18bcf2 100644 --- a/.github/workflows/laravel-integration-tests.yaml +++ b/.github/workflows/laravel-integration-tests.yaml @@ -1,5 +1,5 @@ on: push -name: CI +name: Laravel Integration Tests jobs: phpunit: runs-on: ubuntu-latest diff --git a/.github/workflows/laravel-unit-tests.yaml b/.github/workflows/laravel-unit-tests.yaml new file mode 100644 index 00000000..d2b987eb --- /dev/null +++ b/.github/workflows/laravel-unit-tests.yaml @@ -0,0 +1,52 @@ +on: push +name: Laravel Unit Tests +jobs: + phpunit: + runs-on: ubuntu-latest + container: + image: kirschbaumdevelopment/laravel-test-runner:8.0 + + steps: + - uses: actions/checkout@v1 + with: + fetch-depth: 1 + + - name: Get Composer Cache Directory + working-directory: ./php/sqlcommenter-php/samples/sqlcommenter-laravel + id: composer-cache + run: | + echo "::set-output name=dir::$(composer config cache-files-dir)" + + - uses: actions/cache@v1 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: | + ${{ runner.os }}-composer- + + - name: Get yarn cache + working-directory: ./php/sqlcommenter-php/samples/sqlcommenter-laravel + id: yarn-cache + run: echo "::set-output name=dir::$(yarn cache dir)" + + - uses: actions/cache@v1 + with: + path: ${{ steps.yarn-cache.outputs.dir }} + key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-yarn- + + - name: Install composer dependencies + working-directory: ./php/sqlcommenter-php/packages/sqlcommenter-laravel + run: | + composer install --no-scripts + + - name: Prepare Laravel Application + working-directory: ./php/sqlcommenter-php/packages/sqlcommenter-laravel + run: | + cp .env.ci .env + php artisan key:generate + + - name: Run Testsuite + working-directory: ./php/sqlcommenter-php/packages/sqlcommenter-laravel + run: vendor/bin/phpunit tests/ From 9e7d0162d5fbb255765daa1691ca27e6f7f7ebf9 Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Mon, 2 May 2022 17:06:07 +0530 Subject: [PATCH 27/31] Adding unittest for laravel-integration-tests.yaml --- .github/workflows/laravel-unit-tests.yaml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.github/workflows/laravel-unit-tests.yaml b/.github/workflows/laravel-unit-tests.yaml index d2b987eb..b8185db3 100644 --- a/.github/workflows/laravel-unit-tests.yaml +++ b/.github/workflows/laravel-unit-tests.yaml @@ -41,12 +41,6 @@ jobs: run: | composer install --no-scripts - - name: Prepare Laravel Application - working-directory: ./php/sqlcommenter-php/packages/sqlcommenter-laravel - run: | - cp .env.ci .env - php artisan key:generate - - name: Run Testsuite working-directory: ./php/sqlcommenter-php/packages/sqlcommenter-laravel run: vendor/bin/phpunit tests/ From 1612bbd00eb6bc675a89010c313b35ed9536a7df Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Mon, 2 May 2022 18:39:37 +0530 Subject: [PATCH 28/31] Fixing merge commit error --- .../packages/sqlcommenter-laravel/src/Database/Connection.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php index 9a9f9070..0914952e 100644 --- a/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php +++ b/php/sqlcommenter-php/packages/sqlcommenter-laravel/src/Database/Connection.php @@ -98,7 +98,7 @@ public function update($query, $bindings = []) public function delete($query, $bindings = []) { - $query .= $this->getSqlComments(); + $query = $this->getSqlComments($query); return $this->affectingStatement($query, $bindings); } From fdf3acd94e037791e16fa52a617e233716135a8b Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Tue, 3 May 2022 15:15:41 +0530 Subject: [PATCH 29/31] Laravel commenter sample code README.md --- .../samples/sqlcommenter-laravel/README.md | 101 +++++++----------- 1 file changed, 37 insertions(+), 64 deletions(-) diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/README.md b/php/sqlcommenter-php/samples/sqlcommenter-laravel/README.md index f171ecac..59b1982c 100644 --- a/php/sqlcommenter-php/samples/sqlcommenter-laravel/README.md +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/README.md @@ -1,64 +1,37 @@ -

- -

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

- -## About Laravel - -Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as: - -- [Simple, fast routing engine](https://laravel.com/docs/routing). -- [Powerful dependency injection container](https://laravel.com/docs/container). -- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage. -- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent). -- Database agnostic [schema migrations](https://laravel.com/docs/migrations). -- [Robust background job processing](https://laravel.com/docs/queues). -- [Real-time event broadcasting](https://laravel.com/docs/broadcasting). - -Laravel is accessible, powerful, and provides tools required for large, robust applications. - -## Learning Laravel - -Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. - -If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains over 2000 video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library. - -## Laravel Sponsors - -We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the Laravel [Patreon page](https://patreon.com/taylorotwell). - -### Premium Partners - -- **[Vehikl](https://vehikl.com/)** -- **[Tighten Co.](https://tighten.co)** -- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)** -- **[64 Robots](https://64robots.com)** -- **[Cubet Techno Labs](https://cubettech.com)** -- **[Cyber-Duck](https://cyber-duck.co.uk)** -- **[Many](https://www.many.co.uk)** -- **[Webdock, Fast VPS Hosting](https://www.webdock.io/en)** -- **[DevSquad](https://devsquad.com)** -- **[Curotec](https://www.curotec.com/services/technologies/laravel/)** -- **[OP.GG](https://op.gg)** -- **[WebReinvent](https://webreinvent.com/?utm_source=laravel&utm_medium=github&utm_campaign=patreon-sponsors)** -- **[Lendio](https://lendio.com)** - -## Contributing - -Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions). - -## Code of Conduct - -In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct). - -## Security Vulnerabilities - -If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed. - -## License - -The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). +# sqlcommenter-laravel-sample + +sqlcommenter is a plugin/middleware/wrapper to augment SQL statements from laravel +with comments that can be used later to correlate user code with SQL statements. + +## Setup + +### Install Dependencies + +Install the required packages +```shell +composer install +``` +### Publish the config file + +Publish the config file from library to into laravel app using below command + +```shell +php artisan vendor:publish --provider="Google\GoogleSqlCommenterLaravel\GoogleSqlCommenterServiceProvider" +``` +### Add .env file +Rename .env.example to .env and change to appropriate configs + +## Apply migrations +```shell +php artisan migrate +``` +### Run the server +```shell +php artisan serve +``` +### Run the tests + +Run the tests using below command +```shell +./vendor/bin/phpunit tests +``` From 2f094fe82a1d24d9e8213a70d116c1d44d3c9ecb Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Tue, 10 May 2022 15:17:33 +0530 Subject: [PATCH 30/31] PR changes --- .github/workflows/laravel-unit-tests.yaml | 4 ++-- .vscode/launch.json | 22 ------------------- .../app/Console/Kernel.php | 15 +++++++++++++ .../app/Exceptions/Handler.php | 14 ++++++++++++ .../app/Http/Controllers/Controller.php | 14 ++++++++++++ .../app/Http/Controllers/RawDBController.php | 14 ++++++++++++ .../app/Http/Controllers/UserController.php | 14 ++++++++++++ .../sqlcommenter-laravel/app/Http/Kernel.php | 14 ++++++++++++ .../app/Http/Middleware/Authenticate.php | 14 ++++++++++++ .../app/Http/Middleware/EncryptCookies.php | 14 ++++++++++++ .../PreventRequestsDuringMaintenance.php | 14 ++++++++++++ .../Middleware/RedirectIfAuthenticated.php | 14 ++++++++++++ .../app/Http/Middleware/TrimStrings.php | 14 ++++++++++++ .../app/Http/Middleware/TrustHosts.php | 14 ++++++++++++ .../app/Http/Middleware/TrustProxies.php | 14 ++++++++++++ .../app/Http/Middleware/VerifyCsrfToken.php | 14 ++++++++++++ .../sqlcommenter-laravel/app/Models/User.php | 14 ++++++++++++ .../app/Providers/AppServiceProvider.php | 14 ++++++++++++ .../app/Providers/AuthServiceProvider.php | 14 ++++++++++++ .../Providers/BroadcastServiceProvider.php | 14 ++++++++++++ .../app/Providers/EventServiceProvider.php | 14 ++++++++++++ .../app/Providers/RouteServiceProvider.php | 14 ++++++++++++ .../sqlcommenter-laravel/bootstrap/app.php | 14 ++++++++++++ .../sqlcommenter-laravel/config/app.php | 14 ++++++++++++ .../sqlcommenter-laravel/config/auth.php | 14 ++++++++++++ .../config/broadcasting.php | 14 ++++++++++++ .../sqlcommenter-laravel/config/cache.php | 14 ++++++++++++ .../sqlcommenter-laravel/config/cors.php | 14 ++++++++++++ .../sqlcommenter-laravel/config/database.php | 14 ++++++++++++ .../config/filesystems.php | 14 ++++++++++++ .../sqlcommenter-laravel/config/hashing.php | 14 ++++++++++++ .../sqlcommenter-laravel/config/logging.php | 14 ++++++++++++ .../sqlcommenter-laravel/config/mail.php | 14 ++++++++++++ .../sqlcommenter-laravel/config/queue.php | 14 ++++++++++++ .../sqlcommenter-laravel/config/sanctum.php | 14 ++++++++++++ .../sqlcommenter-laravel/config/services.php | 14 ++++++++++++ .../sqlcommenter-laravel/config/session.php | 14 ++++++++++++ .../sqlcommenter-laravel/config/view.php | 14 ++++++++++++ .../database/factories/UserFactory.php | 14 ++++++++++++ .../database/seeders/DatabaseSeeder.php | 14 ++++++++++++ .../sqlcommenter-laravel/lang/en/auth.php | 14 ++++++++++++ .../lang/en/pagination.php | 14 ++++++++++++ .../lang/en/passwords.php | 14 ++++++++++++ .../lang/en/validation.php | 14 ++++++++++++ .../sqlcommenter-laravel/public/index.php | 14 ++++++++++++ .../sqlcommenter-laravel/routes/api.php | 14 ++++++++++++ .../sqlcommenter-laravel/routes/channels.php | 14 ++++++++++++ .../sqlcommenter-laravel/routes/console.php | 14 ++++++++++++ .../sqlcommenter-laravel/routes/web.php | 14 ++++++++++++ .../tests/Feature/DBTest.php | 14 ++++++++++++ .../tests/Feature/EloquentTest.php | 14 ++++++++++++ .../sqlcommenter-laravel/tests/TestCase.php | 14 ++++++++++++ .../tests/Unit/ExampleTest.php | 18 --------------- 53 files changed, 703 insertions(+), 42 deletions(-) delete mode 100644 .vscode/launch.json delete mode 100644 php/sqlcommenter-php/samples/sqlcommenter-laravel/tests/Unit/ExampleTest.php diff --git a/.github/workflows/laravel-unit-tests.yaml b/.github/workflows/laravel-unit-tests.yaml index b8185db3..e9425286 100644 --- a/.github/workflows/laravel-unit-tests.yaml +++ b/.github/workflows/laravel-unit-tests.yaml @@ -12,7 +12,7 @@ jobs: fetch-depth: 1 - name: Get Composer Cache Directory - working-directory: ./php/sqlcommenter-php/samples/sqlcommenter-laravel + working-directory: ./php/sqlcommenter-php/packages/sqlcommenter-laravel id: composer-cache run: | echo "::set-output name=dir::$(composer config cache-files-dir)" @@ -25,7 +25,7 @@ jobs: ${{ runner.os }}-composer- - name: Get yarn cache - working-directory: ./php/sqlcommenter-php/samples/sqlcommenter-laravel + working-directory: ./php/sqlcommenter-php/packages/sqlcommenter-laravel id: yarn-cache run: echo "::set-output name=dir::$(yarn cache dir)" diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 8a7e356e..00000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "name": "Listen for XDebug", - "type": "php", - "request": "launch", - "port": 9003 - }, - { - "name": "Launch currently open script", - "type": "php", - "request": "launch", - "program": "${file}", - "cwd": "${fileDirname}", - "port": 9003 - } - ] -} \ No newline at end of file diff --git a/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Console/Kernel.php b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Console/Kernel.php index d8bc1d29..a8d97835 100644 --- a/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Console/Kernel.php +++ b/php/sqlcommenter-php/samples/sqlcommenter-laravel/app/Console/Kernel.php @@ -1,4 +1,19 @@ assertTrue(true); - } -} From e7bdc952a5c4169a8d46adeec63b97b35e4c3df4 Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Thu, 12 May 2022 19:22:44 +0530 Subject: [PATCH 31/31] Changing test workflow trigger path --- .github/workflows/laravel-integration-tests.yaml | 9 ++++++++- .github/workflows/laravel-unit-tests.yaml | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/.github/workflows/laravel-integration-tests.yaml b/.github/workflows/laravel-integration-tests.yaml index 1e18bcf2..240fb949 100644 --- a/.github/workflows/laravel-integration-tests.yaml +++ b/.github/workflows/laravel-integration-tests.yaml @@ -1,4 +1,11 @@ -on: push +on: + push: + branches: + - master + paths: + - php/sqlcommenter-php/packages/sqlcommenter-laravel/** + - php/sqlcommenter-php/samples/sqlcommenter-laravel/** + name: Laravel Integration Tests jobs: phpunit: diff --git a/.github/workflows/laravel-unit-tests.yaml b/.github/workflows/laravel-unit-tests.yaml index e9425286..795efe54 100644 --- a/.github/workflows/laravel-unit-tests.yaml +++ b/.github/workflows/laravel-unit-tests.yaml @@ -1,4 +1,11 @@ -on: push +on: + push: + branches: + - master + paths: + - php/sqlcommenter-php/packages/sqlcommenter-laravel/** + - php/sqlcommenter-php/samples/sqlcommenter-laravel/** + name: Laravel Unit Tests jobs: phpunit: