From 3fd394e9e43e17116bd9173c8a4ea0358cf517bd Mon Sep 17 00:00:00 2001 From: Martin Junger Date: Fri, 23 Sep 2022 13:10:54 +0200 Subject: [PATCH 01/38] add generate command with parameters --- src/Component.php | 60 +++++++++++++++++++++++++++++++++++++++- src/Config.php | 10 +++++-- src/ConfigDefinition.php | 11 ++++++-- 3 files changed, 75 insertions(+), 6 deletions(-) diff --git a/src/Component.php b/src/Component.php index 34855d3..76f95e9 100644 --- a/src/Component.php +++ b/src/Component.php @@ -5,12 +5,60 @@ namespace MyComponent; use Keboola\Component\BaseComponent; +use Keboola\Component\UserException; +use Psr\Log\LoggerInterface; class Component extends BaseComponent { + public const ACTION_GENERATE = 'generate'; + + // supported backends + public const BACKEND_SNOWFLAKE = 'snowflake'; + public const BACKEND_SYNAPSE = 'synapse'; + public const BACKENDS = [ + self::BACKEND_SNOWFLAKE, + self::BACKEND_SYNAPSE, + ]; + + // operation for generate action + public const OPERATION_TABLE_CREATE = 'tableCreate'; + public const OPERATION_TABLE_DROP = 'tableDrop'; + public const OPERATIONS = [ + self::OPERATION_TABLE_CREATE, + self::OPERATION_TABLE_DROP, + ]; + + public function __construct(LoggerInterface $logger) + { + parent::__construct($logger); + } + protected function run(): void { - // @TODO implement + throw new UserException(sprintf( + 'Can be used only for sync actions {%s}.', + implode(',', [self::ACTION_GENERATE]) + )); + } + + /** + * @return array{action: string, backendType: string, operation: string, output: mixed[]} + */ + public function actionGenerate(): array + { + /** @var Config $config */ + $config = $this->getConfig(); + + // TODO use import-export-lib + + return [ + 'action' => self::ACTION_GENERATE, + 'backendType' => $config->getBackendType(), + 'operation' => $config->getOperation(), + 'output' => [ + 'foo' => 'bar', + ], + ]; } protected function getConfigClass(): string @@ -22,4 +70,14 @@ protected function getConfigDefinitionClass(): string { return ConfigDefinition::class; } + + /** + * @return string[] + */ + public function getSyncActions(): array + { + return [ + self::ACTION_GENERATE => 'actionGenerate', + ]; + } } diff --git a/src/Config.php b/src/Config.php index 60dd253..a6154e1 100644 --- a/src/Config.php +++ b/src/Config.php @@ -8,9 +8,13 @@ class Config extends BaseConfig { - // @todo implement your custom getters - public function getFoo(): string + public function getBackendType(): string { - return $this->getStringValue(['parameters', 'foo']); + return $this->getStringValue(['parameters', 'backendType']); + } + + public function getOperation(): string + { + return $this->getStringValue(['parameters', 'operation']); } } diff --git a/src/ConfigDefinition.php b/src/ConfigDefinition.php index 1269b22..31c4456 100644 --- a/src/ConfigDefinition.php +++ b/src/ConfigDefinition.php @@ -16,8 +16,15 @@ protected function getParametersDefinition(): ArrayNodeDefinition /** @noinspection NullPointerExceptionInspection */ $parametersNode ->children() - ->scalarNode('foo') - ->defaultValue('baz') + ->enumNode('backendType') + ->isRequired() + ->cannotBeEmpty() + ->values(Component::BACKENDS) + ->end() + ->enumNode('operation') + ->isRequired() + ->cannotBeEmpty() + ->values(Component::OPERATIONS) ->end() ->end() ; From 12fa7ab89947be9b36a78a40b35380d7d00a3ec3 Mon Sep 17 00:00:00 2001 From: Martin Junger Date: Fri, 23 Sep 2022 13:11:38 +0200 Subject: [PATCH 02/38] add db-import-export-lib --- Dockerfile | 18 +- composer.json | 3 +- composer.lock | 5413 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 5430 insertions(+), 4 deletions(-) create mode 100644 composer.lock diff --git a/Dockerfile b/Dockerfile index 49880be..947a8ff 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM php:8-cli +FROM php:7.4-cli ARG COMPOSER_FLAGS="--prefer-dist --no-interaction" ARG DEBIAN_FRONTEND=noninteractive @@ -14,10 +14,22 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ git \ locales \ unzip \ + unixodbc-dev \ && rm -r /var/lib/apt/lists/* \ && sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen \ - && locale-gen \ - && chmod +x /tmp/composer-install.sh \ + && locale-gen + +# ODBC +RUN set -x \ + && docker-php-source extract \ + && cd /usr/src/php/ext/odbc \ + && phpize \ + && sed -ri 's@^ *test +"\$PHP_.*" *= *"no" *&& *PHP_.*=yes *$@#&@g' configure \ + && ./configure --with-unixODBC=shared,/usr \ + && docker-php-ext-install odbc \ + && docker-php-source delete + +RUN chmod +x /tmp/composer-install.sh \ && /tmp/composer-install.sh ENV LANGUAGE=en_US.UTF-8 diff --git a/composer.json b/composer.json index ea743b2..d742a22 100644 --- a/composer.json +++ b/composer.json @@ -3,7 +3,8 @@ "description": "MyComponent description", "license": "MIT", "require": { - "php": "^8.1", + "php": "^7.4", + "keboola/db-import-export": "dev-mj-update-php-temp as 1.9.1", "keboola/php-component": "^9.0" }, "require-dev": { diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..03c7078 --- /dev/null +++ b/composer.lock @@ -0,0 +1,5413 @@ +{ + "_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": "a5b739e193b83c3710d7cba096aba916", + "packages": [ + { + "name": "aws/aws-crt-php", + "version": "v1.0.2", + "source": { + "type": "git", + "url": "https://github.com/awslabs/aws-crt-php.git", + "reference": "3942776a8c99209908ee0b287746263725685732" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/3942776a8c99209908ee0b287746263725685732", + "reference": "3942776a8c99209908ee0b287746263725685732", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35|^5.4.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "AWS SDK Common Runtime Team", + "email": "aws-sdk-common-runtime@amazon.com" + } + ], + "description": "AWS Common Runtime for PHP", + "homepage": "http://aws.amazon.com/sdkforphp", + "keywords": [ + "amazon", + "aws", + "crt", + "sdk" + ], + "support": { + "issues": "https://github.com/awslabs/aws-crt-php/issues", + "source": "https://github.com/awslabs/aws-crt-php/tree/v1.0.2" + }, + "time": "2021-09-03T22:57:30+00:00" + }, + { + "name": "aws/aws-sdk-php", + "version": "3.235.14", + "source": { + "type": "git", + "url": "https://github.com/aws/aws-sdk-php.git", + "reference": "d6a696800e1eceec47e8f84ded88a88f4790d016" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/d6a696800e1eceec47e8f84ded88a88f4790d016", + "reference": "d6a696800e1eceec47e8f84ded88a88f4790d016", + "shasum": "" + }, + "require": { + "aws/aws-crt-php": "^1.0.2", + "ext-json": "*", + "ext-pcre": "*", + "ext-simplexml": "*", + "guzzlehttp/guzzle": "^6.5.8 || ^7.4.5", + "guzzlehttp/promises": "^1.4.0", + "guzzlehttp/psr7": "^1.8.5 || ^2.3", + "mtdowling/jmespath.php": "^2.6", + "php": ">=5.5" + }, + "require-dev": { + "andrewsville/php-token-reflection": "^1.4", + "aws/aws-php-sns-message-validator": "~1.0", + "behat/behat": "~3.0", + "composer/composer": "^1.10.22", + "dms/phpunit-arraysubset-asserts": "^0.4.0", + "doctrine/cache": "~1.4", + "ext-dom": "*", + "ext-openssl": "*", + "ext-pcntl": "*", + "ext-sockets": "*", + "nette/neon": "^2.3", + "paragonie/random_compat": ">= 2", + "phpunit/phpunit": "^4.8.35 || ^5.6.3 || ^9.5", + "psr/cache": "^1.0", + "psr/simple-cache": "^1.0", + "sebastian/comparator": "^1.2.3 || ^4.0", + "yoast/phpunit-polyfills": "^1.0" + }, + "suggest": { + "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications", + "doctrine/cache": "To use the DoctrineCacheAdapter", + "ext-curl": "To send requests using cURL", + "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages", + "ext-sockets": "To use client-side monitoring" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Aws\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Amazon Web Services", + "homepage": "http://aws.amazon.com" + } + ], + "description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project", + "homepage": "http://aws.amazon.com/sdkforphp", + "keywords": [ + "amazon", + "aws", + "cloud", + "dynamodb", + "ec2", + "glacier", + "s3", + "sdk" + ], + "support": { + "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", + "issues": "https://github.com/aws/aws-sdk-php/issues", + "source": "https://github.com/aws/aws-sdk-php/tree/3.235.14" + }, + "time": "2022-09-22T18:16:42+00:00" + }, + { + "name": "doctrine/cache", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/cache.git", + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb", + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb", + "shasum": "" + }, + "require": { + "php": "~7.1 || ^8.0" + }, + "conflict": { + "doctrine/common": ">2.2,<2.4" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/coding-standard": "^9", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psr/cache": "^1.0 || ^2.0 || ^3.0", + "symfony/cache": "^4.4 || ^5.4 || ^6", + "symfony/var-exporter": "^4.4 || ^5.4 || ^6" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" + } + }, + "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 Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", + "homepage": "https://www.doctrine-project.org/projects/cache.html", + "keywords": [ + "abstraction", + "apcu", + "cache", + "caching", + "couchdb", + "memcached", + "php", + "redis", + "xcache" + ], + "support": { + "issues": "https://github.com/doctrine/cache/issues", + "source": "https://github.com/doctrine/cache/tree/2.2.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", + "type": "tidelift" + } + ], + "time": "2022-05-20T20:07:39+00:00" + }, + { + "name": "doctrine/dbal", + "version": "3.4.4", + "source": { + "type": "git", + "url": "https://github.com/doctrine/dbal.git", + "reference": "4cbbe6e4b9ef6c69d5f4c968c637476f47bb54f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/4cbbe6e4b9ef6c69d5f4c968c637476f47bb54f5", + "reference": "4cbbe6e4b9ef6c69d5f4c968c637476f47bb54f5", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2", + "doctrine/cache": "^1.11|^2.0", + "doctrine/deprecations": "^0.5.3|^1", + "doctrine/event-manager": "^1.0", + "php": "^7.4 || ^8.0", + "psr/cache": "^1|^2|^3", + "psr/log": "^1|^2|^3" + }, + "require-dev": { + "doctrine/coding-standard": "10.0.0", + "jetbrains/phpstorm-stubs": "2022.2", + "phpstan/phpstan": "1.8.3", + "phpstan/phpstan-strict-rules": "^1.3", + "phpunit/phpunit": "9.5.24", + "psalm/plugin-phpunit": "0.17.0", + "squizlabs/php_codesniffer": "3.7.1", + "symfony/cache": "^5.4|^6.0", + "symfony/console": "^4.4|^5.4|^6.0", + "vimeo/psalm": "4.27.0" + }, + "suggest": { + "symfony/console": "For helpful console commands such as SQL execution and import of files." + }, + "bin": [ + "bin/doctrine-dbal" + ], + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\DBAL\\": "src" + } + }, + "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" + } + ], + "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", + "homepage": "https://www.doctrine-project.org/projects/dbal.html", + "keywords": [ + "abstraction", + "database", + "db2", + "dbal", + "mariadb", + "mssql", + "mysql", + "oci8", + "oracle", + "pdo", + "pgsql", + "postgresql", + "queryobject", + "sasql", + "sql", + "sqlite", + "sqlserver", + "sqlsrv" + ], + "support": { + "issues": "https://github.com/doctrine/dbal/issues", + "source": "https://github.com/doctrine/dbal/tree/3.4.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%2Fdbal", + "type": "tidelift" + } + ], + "time": "2022-09-01T21:26:42+00:00" + }, + { + "name": "doctrine/deprecations", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", + "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", + "shasum": "" + }, + "require": { + "php": "^7.1|^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "phpunit/phpunit": "^7.5|^8.5|^9.5", + "psr/log": "^1|^2|^3" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/v1.0.0" + }, + "time": "2022-05-02T15:47:09+00:00" + }, + { + "name": "doctrine/event-manager", + "version": "1.1.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/event-manager.git", + "reference": "eb2ecf80e3093e8f3c2769ac838e27d8ede8e683" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/eb2ecf80e3093e8f3c2769ac838e27d8ede8e683", + "reference": "eb2ecf80e3093e8f3c2769ac838e27d8ede8e683", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/common": "<2.9" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "phpstan/phpstan": "~1.4.10 || ^1.5.4", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.22" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "lib/Doctrine/Common" + } + }, + "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" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", + "homepage": "https://www.doctrine-project.org/projects/event-manager.html", + "keywords": [ + "event", + "event dispatcher", + "event manager", + "event system", + "events" + ], + "support": { + "issues": "https://github.com/doctrine/event-manager/issues", + "source": "https://github.com/doctrine/event-manager/tree/1.1.2" + }, + "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%2Fevent-manager", + "type": "tidelift" + } + ], + "time": "2022-07-27T22:18:11+00:00" + }, + { + "name": "firebase/php-jwt", + "version": "v6.3.0", + "source": { + "type": "git", + "url": "https://github.com/firebase/php-jwt.git", + "reference": "018dfc4e1da92ad8a1b90adc4893f476a3b41cb8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/018dfc4e1da92ad8a1b90adc4893f476a3b41cb8", + "reference": "018dfc4e1da92ad8a1b90adc4893f476a3b41cb8", + "shasum": "" + }, + "require": { + "php": "^7.1||^8.0" + }, + "require-dev": { + "guzzlehttp/guzzle": "^6.5||^7.4", + "phpspec/prophecy-phpunit": "^1.1", + "phpunit/phpunit": "^7.5||^9.5", + "psr/cache": "^1.0||^2.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0" + }, + "suggest": { + "paragonie/sodium_compat": "Support EdDSA (Ed25519) signatures when libsodium is not present" + }, + "type": "library", + "autoload": { + "psr-4": { + "Firebase\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Neuman Vong", + "email": "neuman+pear@twilio.com", + "role": "Developer" + }, + { + "name": "Anant Narayanan", + "email": "anant@php.net", + "role": "Developer" + } + ], + "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", + "homepage": "https://github.com/firebase/php-jwt", + "keywords": [ + "jwt", + "php" + ], + "support": { + "issues": "https://github.com/firebase/php-jwt/issues", + "source": "https://github.com/firebase/php-jwt/tree/v6.3.0" + }, + "time": "2022-07-15T16:48:45+00:00" + }, + { + "name": "google/auth", + "version": "v1.22.0", + "source": { + "type": "git", + "url": "https://github.com/googleapis/google-auth-library-php.git", + "reference": "da4037df770027c8f7163595a29ec434f705f8b1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/da4037df770027c8f7163595a29ec434f705f8b1", + "reference": "da4037df770027c8f7163595a29ec434f705f8b1", + "shasum": "" + }, + "require": { + "firebase/php-jwt": "^5.5||^6.0", + "guzzlehttp/guzzle": "^6.2.1|^7.0", + "guzzlehttp/psr7": "^1.7|^2.0", + "php": "^7.1||^8.0", + "psr/cache": "^1.0|^2.0|^3.0", + "psr/http-message": "^1.0" + }, + "require-dev": { + "guzzlehttp/promises": "0.1.1|^1.3", + "kelvinmo/simplejwt": "^0.2.5|^0.5.1", + "phpseclib/phpseclib": "^2.0.31", + "phpspec/prophecy-phpunit": "^1.1", + "phpunit/phpunit": "^7.5||^8.5", + "sebastian/comparator": ">=1.2.3", + "squizlabs/php_codesniffer": "^3.5" + }, + "suggest": { + "phpseclib/phpseclib": "May be used in place of OpenSSL for signing strings or for token management. Please require version ^2." + }, + "type": "library", + "autoload": { + "psr-4": { + "Google\\Auth\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "Google Auth Library for PHP", + "homepage": "http://github.com/google/google-auth-library-php", + "keywords": [ + "Authentication", + "google", + "oauth2" + ], + "support": { + "docs": "https://googleapis.github.io/google-auth-library-php/main/", + "issues": "https://github.com/googleapis/google-auth-library-php/issues", + "source": "https://github.com/googleapis/google-auth-library-php/tree/v1.22.0" + }, + "time": "2022-09-01T17:07:07+00:00" + }, + { + "name": "google/cloud-core", + "version": "v1.47.2", + "source": { + "type": "git", + "url": "https://github.com/googleapis/google-cloud-php-core.git", + "reference": "f30823d6ff2bf3d7d3a4b089804f8dc5a1680501" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/googleapis/google-cloud-php-core/zipball/f30823d6ff2bf3d7d3a4b089804f8dc5a1680501", + "reference": "f30823d6ff2bf3d7d3a4b089804f8dc5a1680501", + "shasum": "" + }, + "require": { + "google/auth": "^1.18", + "guzzlehttp/guzzle": "^5.3|^6.5.7|^7.4.4", + "guzzlehttp/promises": "^1.3", + "guzzlehttp/psr7": "^1.7|^2.0", + "monolog/monolog": "^1.1|^2.0", + "php": ">=5.6", + "psr/http-message": "1.0.*", + "rize/uri-template": "~0.3" + }, + "require-dev": { + "erusev/parsedown": "^1.6", + "google/gax": "^1.9", + "opis/closure": "^3", + "phpdocumentor/reflection": "^3.0||^4.0", + "phpspec/prophecy": "^1.10.3", + "phpunit/phpunit": "^4.8|^5.0|^8.0", + "squizlabs/php_codesniffer": "2.*", + "yoast/phpunit-polyfills": "^1.0" + }, + "suggest": { + "opis/closure": "May be used to serialize closures to process jobs in the batch daemon. Please require version ^3.", + "symfony/lock": "Required for the Spanner cached based session pool. Please require the following commit: 3.3.x-dev#1ba6ac9" + }, + "bin": [ + "bin/google-cloud-batch" + ], + "type": "library", + "extra": { + "component": { + "id": "cloud-core", + "target": "googleapis/google-cloud-php-core.git", + "path": "Core", + "entry": "src/ServiceBuilder.php" + } + }, + "autoload": { + "psr-4": { + "Google\\Cloud\\Core\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "Google Cloud PHP shared dependency, providing functionality useful to all components.", + "support": { + "source": "https://github.com/googleapis/google-cloud-php-core/tree/v1.47.2" + }, + "time": "2022-08-23T20:22:22+00:00" + }, + { + "name": "google/cloud-storage", + "version": "v1.28.1", + "source": { + "type": "git", + "url": "https://github.com/googleapis/google-cloud-php-storage.git", + "reference": "83e8beac404f38d2e869da4c3fbb7bdf96193f77" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/googleapis/google-cloud-php-storage/zipball/83e8beac404f38d2e869da4c3fbb7bdf96193f77", + "reference": "83e8beac404f38d2e869da4c3fbb7bdf96193f77", + "shasum": "" + }, + "require": { + "google/cloud-core": "^1.43", + "google/crc32": "^0.1.0" + }, + "require-dev": { + "erusev/parsedown": "^1.6", + "google/cloud-pubsub": "^1.0", + "phpdocumentor/reflection": "^3.0||^4.0", + "phpseclib/phpseclib": "^2.0||^3.0", + "phpspec/prophecy": "^1.10.3", + "phpunit/phpunit": "^4.8|^5.0|^8.0", + "squizlabs/php_codesniffer": "2.*", + "yoast/phpunit-polyfills": "^1.0" + }, + "suggest": { + "google/cloud-pubsub": "May be used to register a topic to receive bucket notifications.", + "phpseclib/phpseclib": "May be used in place of OpenSSL for creating signed Cloud Storage URLs. Please require version ^2." + }, + "type": "library", + "extra": { + "component": { + "id": "cloud-storage", + "target": "googleapis/google-cloud-php-storage.git", + "path": "Storage", + "entry": "src/StorageClient.php" + } + }, + "autoload": { + "psr-4": { + "Google\\Cloud\\Storage\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "Cloud Storage Client for PHP", + "support": { + "source": "https://github.com/googleapis/google-cloud-php-storage/tree/v1.28.1" + }, + "time": "2022-08-23T20:22:22+00:00" + }, + { + "name": "google/crc32", + "version": "v0.1.0", + "source": { + "type": "git", + "url": "https://github.com/google/php-crc32.git", + "reference": "a8525f0dea6fca1893e1bae2f6e804c5f7d007fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/google/php-crc32/zipball/a8525f0dea6fca1893e1bae2f6e804c5f7d007fb", + "reference": "a8525f0dea6fca1893e1bae2f6e804c5f7d007fb", + "shasum": "" + }, + "require": { + "php": ">=5.4" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^1.13 || v2.14.2", + "paragonie/random_compat": ">=2", + "phpunit/phpunit": "^4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Google\\CRC32\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Andrew Brampton", + "email": "bramp@google.com" + } + ], + "description": "Various CRC32 implementations", + "homepage": "https://github.com/google/php-crc32", + "support": { + "issues": "https://github.com/google/php-crc32/issues", + "source": "https://github.com/google/php-crc32/tree/v0.1.0" + }, + "time": "2019-05-09T06:24:58+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.5.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b50a2a1251152e43f6a37f0fa053e730a67d25ba", + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5", + "guzzlehttp/psr7": "^1.9 || ^2.4", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", + "ext-curl": "*", + "php-http/client-integration-tests": "^3.0", + "phpunit/phpunit": "^8.5.29 || ^9.5.23", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "7.5-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.5.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2022-08-28T15:39:27+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "1.5.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "b94b2807d85443f9719887892882d0329d1e2598" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", + "reference": "b94b2807d85443f9719887892882d0329d1e2598", + "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.2" + }, + "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": "2022-08-28T14:55:35+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.9.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "e98e3e6d4f86621a9b75f623996e6bbdeb4b9318" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/e98e3e6d4f86621a9b75f623996e6bbdeb4b9318", + "reference": "e98e3e6d4f86621a9b75f623996e6bbdeb4b9318", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-zlib": "*", + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "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" + } + ], + "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/1.9.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2022-06-20T21:43:03+00:00" + }, + { + "name": "keboola/common-exceptions", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/keboola/common-exceptions.git", + "reference": "e406d05ec9307a88790692a33e84490c0eed38ce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/keboola/common-exceptions/zipball/e406d05ec9307a88790692a33e84490c0eed38ce", + "reference": "e406d05ec9307a88790692a33e84490c0eed38ce", + "shasum": "" + }, + "require": { + "php": "^7.1|^8.0" + }, + "require-dev": { + "keboola/coding-standard": "^13.0", + "keboola/php-temp": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpstan/phpstan": "^0.12.93", + "phpunit/phpunit": "^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Keboola\\CommonExceptions\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Common exceptions shared between different applications", + "support": { + "source": "https://github.com/keboola/common-exceptions/tree/1.2.0" + }, + "time": "2021-07-26T14:42:14+00:00" + }, + { + "name": "keboola/csv", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/keboola/php-csv.git", + "reference": "eb77f51e22d3e13a8e14a5d5a0b588cf9e8c56c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/keboola/php-csv/zipball/eb77f51e22d3e13a8e14a5d5a0b588cf9e8c56c5", + "reference": "eb77f51e22d3e13a8e14a5d5a0b588cf9e8c56c5", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "codeclimate/php-test-reporter": "^0.4", + "phpunit/phpunit": "^5.7", + "squizlabs/php_codesniffer": "^3.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Keboola\\Csv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Keboola", + "email": "devel@keboola.com" + } + ], + "description": "Keboola CSV reader and writer", + "homepage": "http://keboola.com", + "keywords": [ + "csv", + "rfc4180" + ], + "support": { + "issues": "https://github.com/keboola/php-csv/issues", + "source": "https://github.com/keboola/php-csv/tree/master" + }, + "time": "2018-05-14T07:45:45+00:00" + }, + { + "name": "keboola/csv-options", + "version": "v1.0", + "source": { + "type": "git", + "url": "https://github.com/keboola/php-csv-options.git", + "reference": "75f237da8ec2b8e2730e46c09c841f5a3345cf09" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/keboola/php-csv-options/zipball/75f237da8ec2b8e2730e46c09c841f5a3345cf09", + "reference": "75f237da8ec2b8e2730e46c09c841f5a3345cf09", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "jakub-onderka/php-parallel-lint": "^1.0", + "keboola/coding-standard": "^9", + "phpstan/phpstan-shim": "^0.11", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Keboola\\CsvOptions\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "CSV options lib", + "support": { + "source": "https://github.com/keboola/php-csv-options/tree/v1.0" + }, + "time": "2019-11-19T14:28:22+00:00" + }, + { + "name": "keboola/db-import-export", + "version": "dev-mj-update-php-temp", + "source": { + "type": "git", + "url": "https://github.com/keboola/php-db-import-export.git", + "reference": "4f03763319f8105c66702032742686ee5e94ea4a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/keboola/php-db-import-export/zipball/4f03763319f8105c66702032742686ee5e94ea4a", + "reference": "4f03763319f8105c66702032742686ee5e94ea4a", + "shasum": "" + }, + "require": { + "doctrine/dbal": "^3.2.0", + "ext-json": "*", + "ext-pdo": "*", + "google/cloud-storage": "^1.27", + "keboola/csv-options": "^1", + "keboola/php-csv-db-import": "^5.0", + "keboola/php-datatypes": "^6.0", + "keboola/php-file-storage-utils": ">=0.2", + "keboola/php-temp": "^2.0", + "keboola/table-backend-utils": "^1", + "microsoft/azure-storage-blob": "^1.4", + "php": ">=7.4", + "symfony/process": "^4.4|^5.0|^6.0" + }, + "require-dev": { + "keboola/coding-standard": "^14", + "php-parallel-lint/php-parallel-lint": "^v1.3", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^9", + "react/async": "^4||^3", + "symfony/finder": "^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Keboola\\Db\\ImportExport\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Package allows to import files to Snowflake from multiple cloud storages", + "support": { + "issues": "https://github.com/keboola/php-db-import-export/issues", + "source": "https://github.com/keboola/php-db-import-export/tree/mj-update-php-temp" + }, + "time": "2022-09-23T05:26:46+00:00" + }, + { + "name": "keboola/php-component", + "version": "9.2.0", + "source": { + "type": "git", + "url": "https://github.com/keboola/php-component.git", + "reference": "f8fc19467dd36db88d99c40c6221ce3800c7eb66" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/keboola/php-component/zipball/f8fc19467dd36db88d99c40c6221ce3800c7eb66", + "reference": "f8fc19467dd36db88d99c40c6221ce3800c7eb66", + "shasum": "" + }, + "require": { + "ext-json": "*", + "keboola/common-exceptions": "^1.2", + "monolog/monolog": "^2.3", + "php": "^7.4|^8.0", + "symfony/config": "^5.4|^6.0", + "symfony/filesystem": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0" + }, + "require-dev": { + "devedge/sami-github": "^1.0", + "keboola/coding-standard": "^14.0", + "keboola/php-temp": "^2.0", + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^9.5" + }, + "type": "project", + "autoload": { + "psr-4": { + "Keboola\\Component\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Keboola", + "email": "devel@keboola.com" + } + ], + "description": "Helper classes for developing Keboola PHP components", + "keywords": [ + "component", + "docker", + "keboola" + ], + "support": { + "issues": "https://github.com/keboola/php-component/issues", + "source": "https://github.com/keboola/php-component/tree/9.2.0" + }, + "time": "2022-09-06T10:09:18+00:00" + }, + { + "name": "keboola/php-csv-db-import", + "version": "5.2.0", + "source": { + "type": "git", + "url": "https://github.com/keboola/php-db-import.git", + "reference": "72b1f1d1904abf09723488b0961925ea1d1585cc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/keboola/php-db-import/zipball/72b1f1d1904abf09723488b0961925ea1d1585cc", + "reference": "72b1f1d1904abf09723488b0961925ea1d1585cc", + "shasum": "" + }, + "require": { + "aws/aws-sdk-php": "^3.11", + "keboola/csv": "^1.1", + "php": "^7.1", + "tracy/tracy": "^2.3" + }, + "require-dev": { + "keboola/coding-standard": "^2.0", + "phpstan/phpstan-shim": "^0.9.2", + "phpunit/dbunit": "^2.0", + "phpunit/phpunit": "^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Keboola\\Db\\Import\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Handling of large bulk data into database tables.", + "support": { + "issues": "https://github.com/keboola/php-db-import/issues", + "source": "https://github.com/keboola/php-db-import/tree/5.2.0" + }, + "time": "2022-08-19T06:21:39+00:00" + }, + { + "name": "keboola/php-datatypes", + "version": "6.1.2", + "source": { + "type": "git", + "url": "https://github.com/keboola/php-datatypes.git", + "reference": "b49dea2990f7bfe97a5dcf93770683a779b9cadc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/keboola/php-datatypes/zipball/b49dea2990f7bfe97a5dcf93770683a779b9cadc", + "reference": "b49dea2990f7bfe97a5dcf93770683a779b9cadc", + "shasum": "" + }, + "require": { + "php": "^7.4|^8" + }, + "require-dev": { + "keboola/coding-standard": "^13.0", + "php-parallel-lint/php-parallel-lint": "^1", + "phpstan/phpdoc-parser": "1.5.1", + "phpstan/phpstan": "^1", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Keboola\\Datatype\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Keboola", + "email": "devel@keboola.com" + } + ], + "description": "PHP datatypes for databases", + "support": { + "issues": "https://github.com/keboola/php-datatypes/issues", + "source": "https://github.com/keboola/php-datatypes/tree/6.1.2" + }, + "time": "2022-09-20T12:08:36+00:00" + }, + { + "name": "keboola/php-file-storage-utils", + "version": "v0.2.5", + "source": { + "type": "git", + "url": "https://github.com/keboola/php-file-storage-utils.git", + "reference": "215c17165b6ccbbf71823e374521cdecff93abb1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/keboola/php-file-storage-utils/zipball/215c17165b6ccbbf71823e374521cdecff93abb1", + "reference": "215c17165b6ccbbf71823e374521cdecff93abb1", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "guzzlehttp/guzzle": "^6.5|^7.2", + "guzzlehttp/psr7": "^1.7.0", + "microsoft/azure-storage-blob": "^1.5", + "php": ">=7.1", + "psr/log": "^1|^2|^3", + "symfony/process": "^4.4|^5|^6" + }, + "require-dev": { + "keboola/coding-standard": "^9.0", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.54", + "phpstan/phpstan-phpunit": "^0.12.16", + "phpunit/phpunit": "^7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Keboola\\FileStorage\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Keboola", + "email": "devel@keboola.com" + } + ], + "description": "Set of helpers and abstractions above file storage providers", + "keywords": [ + "aws", + "azure", + "blob", + "keboola", + "s3", + "storage" + ], + "support": { + "issues": "https://github.com/keboola/php-file-storage-utils/issues", + "source": "https://github.com/keboola/php-file-storage-utils/tree/v0.2.5" + }, + "time": "2022-09-13T10:27:42+00:00" + }, + { + "name": "keboola/php-temp", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/keboola/php-temp.git", + "reference": "cbdb4dd0dfe548d7bffd74a0e66294981aea49ce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/keboola/php-temp/zipball/cbdb4dd0dfe548d7bffd74a0e66294981aea49ce", + "reference": "cbdb4dd0dfe548d7bffd74a0e66294981aea49ce", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/filesystem": ">2.8" + }, + "require-dev": { + "infection/infection": "^0.12", + "jakub-onderka/php-parallel-lint": "^1.0", + "keboola/coding-standard": "^8.0", + "phpstan/phpstan-shim": "^0.11", + "phpunit/phpunit": "^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Keboola\\Temp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Keboola", + "email": "devel@keboola.com" + } + ], + "description": "Temp library handles application temporary files", + "keywords": [ + "filesystem", + "temp" + ], + "support": { + "issues": "https://github.com/keboola/php-temp/issues", + "source": "https://github.com/keboola/php-temp/tree/2.0.1" + }, + "time": "2019-04-26T07:18:24+00:00" + }, + { + "name": "keboola/php-utils", + "version": "4.1.0", + "source": { + "type": "git", + "url": "https://github.com/keboola/php-utils.git", + "reference": "f5be83a50b5c4858f5698747e8a795048a89c382" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/keboola/php-utils/zipball/f5be83a50b5c4858f5698747e8a795048a89c382", + "reference": "f5be83a50b5c4858f5698747e8a795048a89c382", + "shasum": "" + }, + "require": { + "keboola/sanitizer": "^0.1", + "php": ">=5.6.0", + "seld/jsonlint": "^1.4" + }, + "require-dev": { + "codeclimate/php-test-reporter": "~0.2", + "phpunit/phpunit": "~5.0", + "squizlabs/php_codesniffer": "~2.4" + }, + "type": "library", + "autoload": { + "files": [ + "src/Keboola/Utils/jsonDecode.php", + "src/Keboola/Utils/sanitizeUtf8.php", + "src/Keboola/Utils/objectToArray.php", + "src/Keboola/Utils/formatDateTime.php", + "src/Keboola/Utils/replaceDates.php", + "src/Keboola/Utils/replaceDatesInArray.php", + "src/Keboola/Utils/buildUrl.php", + "src/Keboola/Utils/httpBuildUrl.php", + "src/Keboola/Utils/returnBytes.php", + "src/Keboola/Utils/camelize.php", + "src/Keboola/Utils/getDataFromPath.php", + "src/Keboola/Utils/isValidDateTimeString.php", + "src/Keboola/Utils/flattenArray.php", + "src/Keboola/Utils/arrayToObject.php", + "src/Keboola/Utils/isEmptyObject.php", + "src/Keboola/Utils/stripInvalidUtf16.php", + "src/Keboola/Utils/toAscii.php", + "src/Keboola/Utils/sanitizeColumnName.php", + "src/Keboola/Utils/formatBytes.php" + ], + "psr-0": { + "Keboola\\Utils": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Keboola", + "email": "devel@keboola.com" + } + ], + "description": "Misc utility functions", + "keywords": [ + "utility" + ], + "support": { + "issues": "https://github.com/keboola/php-utils/issues", + "source": "https://github.com/keboola/php-utils/tree/master" + }, + "time": "2019-10-04T20:55:45+00:00" + }, + { + "name": "keboola/retry", + "version": "0.5.1", + "source": { + "type": "git", + "url": "https://github.com/keboola/retry.git", + "reference": "e2ce6f343db1167350df2850a4532ad6845a635d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/keboola/retry/zipball/e2ce6f343db1167350df2850a4532ad6845a635d", + "reference": "e2ce6f343db1167350df2850a4532ad6845a635d", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "psr/log": "^1.1|^2|^3" + }, + "replace": { + "vkartaviy/retry": "*" + }, + "require-dev": { + "keboola/coding-standard": "^7.0", + "phpstan/phpstan-shim": "^0.10", + "phpunit/phpunit": "7.*" + }, + "type": "library", + "autoload": { + "psr-4": { + "Retry\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Keboola Dev", + "email": "devel@keboola.com" + } + ], + "description": "Library for repeatable and retryable operations", + "keywords": [ + "backoff", + "proxy", + "repeat", + "retry" + ], + "support": { + "issues": "https://github.com/keboola/retry/issues", + "source": "https://github.com/keboola/retry/tree/0.5.1" + }, + "time": "2022-09-13T10:26:25+00:00" + }, + { + "name": "keboola/sanitizer", + "version": "0.1.1", + "source": { + "type": "git", + "url": "https://github.com/keboola/sanitizer.git", + "reference": "e3b65cf64fc891406b2849c096cd3b0edef19900" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/keboola/sanitizer/zipball/e3b65cf64fc891406b2849c096cd3b0edef19900", + "reference": "e3b65cf64fc891406b2849c096cd3b0edef19900", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "jakub-onderka/php-parallel-lint": "^1.0", + "phpunit/phpunit": "^5.7", + "squizlabs/php_codesniffer": "^3.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Keboola\\Utils\\Sanitizer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Keboola", + "email": "devel@keboola.com" + } + ], + "description": "Column name sanitizer", + "support": { + "issues": "https://github.com/keboola/sanitizer/issues", + "source": "https://github.com/keboola/sanitizer/tree/0.1.1" + }, + "time": "2022-06-02T18:15:37+00:00" + }, + { + "name": "keboola/table-backend-utils", + "version": "v1.4.2", + "source": { + "type": "git", + "url": "https://github.com/keboola/php-table-backend-utils.git", + "reference": "37b784a2b91e86a2cbff985d6a68ea6244beb31a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/keboola/php-table-backend-utils/zipball/37b784a2b91e86a2cbff985d6a68ea6244beb31a", + "reference": "37b784a2b91e86a2cbff985d6a68ea6244beb31a", + "shasum": "" + }, + "require": { + "doctrine/dbal": "^3.3", + "ext-json": "*", + "ext-odbc": "*", + "ext-pdo": "*", + "keboola/common-exceptions": "^1", + "keboola/php-datatypes": "^6.1", + "keboola/php-utils": "^4.1", + "keboola/retry": "^0.5.0", + "php": "^7.4|^8" + }, + "require-dev": { + "keboola/coding-standard": "^13", + "php-parallel-lint/php-parallel-lint": "^1", + "phpstan/phpstan": "^1", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^9" + }, + "type": "library", + "autoload": { + "psr-4": { + "Keboola\\TableBackendUtils\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Package allows to import files to Snowflake from multiple cloud storages", + "support": { + "issues": "https://github.com/keboola/php-table-backend-utils/issues", + "source": "https://github.com/keboola/php-table-backend-utils/tree/v1.4.2" + }, + "time": "2022-09-22T13:56:05+00:00" + }, + { + "name": "microsoft/azure-storage-blob", + "version": "1.5.4", + "source": { + "type": "git", + "url": "https://github.com/Azure/azure-storage-blob-php.git", + "reference": "1023ce1dbf062351a32ca5ec72ad1fd4a504f1bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Azure/azure-storage-blob-php/zipball/1023ce1dbf062351a32ca5ec72ad1fd4a504f1bf", + "reference": "1023ce1dbf062351a32ca5ec72ad1fd4a504f1bf", + "shasum": "" + }, + "require": { + "microsoft/azure-storage-common": "~1.5", + "php": ">=5.6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "MicrosoftAzure\\Storage\\Blob\\": "src/Blob" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Azure Storage PHP Client Library", + "email": "dmsh@microsoft.com" + } + ], + "description": "This project provides a set of PHP client libraries that make it easy to access Microsoft Azure Storage Blob APIs.", + "keywords": [ + "azure", + "blob", + "php", + "sdk", + "storage" + ], + "support": { + "issues": "https://github.com/Azure/azure-storage-blob-php/issues", + "source": "https://github.com/Azure/azure-storage-blob-php/tree/v1.5.4" + }, + "time": "2022-09-02T02:13:06+00:00" + }, + { + "name": "microsoft/azure-storage-common", + "version": "1.5.2", + "source": { + "type": "git", + "url": "https://github.com/Azure/azure-storage-common-php.git", + "reference": "8ca7b1bf4c9ca7c663e75a02a0035b05b37196a0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Azure/azure-storage-common-php/zipball/8ca7b1bf4c9ca7c663e75a02a0035b05b37196a0", + "reference": "8ca7b1bf4c9ca7c663e75a02a0035b05b37196a0", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "~6.0|^7.0", + "php": ">=5.6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "MicrosoftAzure\\Storage\\Common\\": "src/Common" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Azure Storage PHP Client Library", + "email": "dmsh@microsoft.com" + } + ], + "description": "This project provides a set of common code shared by Azure Storage Blob, Table, Queue and File PHP client libraries.", + "keywords": [ + "azure", + "common", + "php", + "sdk", + "storage" + ], + "support": { + "issues": "https://github.com/Azure/azure-storage-common-php/issues", + "source": "https://github.com/Azure/azure-storage-common-php/tree/v1.5.2" + }, + "time": "2021-10-09T03:03:47+00:00" + }, + { + "name": "monolog/monolog", + "version": "2.8.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "720488632c590286b88b80e62aa3d3d551ad4a50" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/720488632c590286b88b80e62aa3d3d551ad4a50", + "reference": "720488632c590286b88b80e62aa3d3d551ad4a50", + "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 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2", + "guzzlehttp/guzzle": "^7.4", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "phpspec/prophecy": "^1.15", + "phpstan/phpstan": "^0.12.91", + "phpunit/phpunit": "^8.5.14", + "predis/predis": "^1.1 || ^2.0", + "rollbar/rollbar": "^1.3 || ^2 || ^3", + "ruflin/elastica": "^7", + "swiftmailer/swiftmailer": "^5.3|^6.0", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/2.8.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2022-07-24T11:55:47+00:00" + }, + { + "name": "mtdowling/jmespath.php", + "version": "2.6.1", + "source": { + "type": "git", + "url": "https://github.com/jmespath/jmespath.php.git", + "reference": "9b87907a81b87bc76d19a7fb2d61e61486ee9edb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/9b87907a81b87bc76d19a7fb2d61e61486ee9edb", + "reference": "9b87907a81b87bc76d19a7fb2d61e61486ee9edb", + "shasum": "" + }, + "require": { + "php": "^5.4 || ^7.0 || ^8.0", + "symfony/polyfill-mbstring": "^1.17" + }, + "require-dev": { + "composer/xdebug-handler": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^7.5.15" + }, + "bin": [ + "bin/jp.php" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + }, + "autoload": { + "files": [ + "src/JmesPath.php" + ], + "psr-4": { + "JmesPath\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Declaratively specify how to extract elements from a JSON document", + "keywords": [ + "json", + "jsonpath" + ], + "support": { + "issues": "https://github.com/jmespath/jmespath.php/issues", + "source": "https://github.com/jmespath/jmespath.php/tree/2.6.1" + }, + "time": "2021-06-14T00:11:39+00:00" + }, + { + "name": "psr/cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/master" + }, + "time": "2016-08-06T20:24:11+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-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": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.4" + }, + "time": "2021-05-03T11:20:27+00:00" + }, + { + "name": "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": "rize/uri-template", + "version": "0.3.4", + "source": { + "type": "git", + "url": "https://github.com/rize/UriTemplate.git", + "reference": "2a874863c48d643b9e2e254ab288ec203060a0b8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rize/UriTemplate/zipball/2a874863c48d643b9e2e254ab288ec203060a0b8", + "reference": "2a874863c48d643b9e2e254ab288ec203060a0b8", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8.36" + }, + "type": "library", + "autoload": { + "psr-4": { + "Rize\\": "src/Rize" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marut K", + "homepage": "http://twitter.com/rezigned" + } + ], + "description": "PHP URI Template (RFC 6570) supports both expansion & extraction", + "keywords": [ + "RFC 6570", + "template", + "uri" + ], + "support": { + "issues": "https://github.com/rize/UriTemplate/issues", + "source": "https://github.com/rize/UriTemplate/tree/0.3.4" + }, + "funding": [ + { + "url": "https://www.paypal.me/rezigned", + "type": "custom" + }, + { + "url": "https://opencollective.com/rize-uri-template", + "type": "open_collective" + } + ], + "time": "2021-10-09T06:30:16+00:00" + }, + { + "name": "seld/jsonlint", + "version": "1.9.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/jsonlint.git", + "reference": "4211420d25eba80712bff236a98960ef68b866b7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/4211420d25eba80712bff236a98960ef68b866b7", + "reference": "4211420d25eba80712bff236a98960ef68b866b7", + "shasum": "" + }, + "require": { + "php": "^5.3 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.5", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^8.5.13" + }, + "bin": [ + "bin/jsonlint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Seld\\JsonLint\\": "src/Seld/JsonLint/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "JSON Linter", + "keywords": [ + "json", + "linter", + "parser", + "validator" + ], + "support": { + "issues": "https://github.com/Seldaek/jsonlint/issues", + "source": "https://github.com/Seldaek/jsonlint/tree/1.9.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint", + "type": "tidelift" + } + ], + "time": "2022-04-01T13:37:23+00:00" + }, + { + "name": "symfony/config", + "version": "v5.4.11", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "ec79e03125c1d2477e43dde8528535d90cc78379" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/ec79e03125c1d2477e43dde8528535d90cc78379", + "reference": "ec79e03125c1d2477e43dde8528535d90cc78379", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/filesystem": "^4.4|^5.0|^6.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.16", + "symfony/polyfill-php81": "^1.22" + }, + "conflict": { + "symfony/finder": "<4.4" + }, + "require-dev": { + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/messenger": "^4.4|^5.0|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/yaml": "^4.4|^5.0|^6.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "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 you find, load, combine, autofill and validate configuration values of any kind", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/config/tree/v5.4.11" + }, + "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-07-20T13:00:38+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v2.5.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:53:40+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v5.4.12", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "2d67c1f9a1937406a9be3171b4b22250c0a11447" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/2d67c1f9a1937406a9be3171b4b22250c0a11447", + "reference": "2d67c1f9a1937406a9be3171b4b22250c0a11447", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "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 basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v5.4.12" + }, + "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-08-02T13:48:16+00:00" + }, + { + "name": "symfony/finder", + "version": "v5.4.11", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "7872a66f57caffa2916a584db1aa7f12adc76f8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/7872a66f57caffa2916a584db1aa7f12adc76f8c", + "reference": "7872a66f57caffa2916a584db1aa7f12adc76f8c", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v5.4.11" + }, + "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-07-29T07:37:50+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-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.26.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-05-24T11:49:31+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-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.26.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-05-24T11:49:31+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-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.26.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-05-10T07:21:04+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-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.26.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-05-24T11:49:31+00:00" + }, + { + "name": "symfony/process", + "version": "v5.4.11", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "6e75fe6874cbc7e4773d049616ab450eff537bf1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/6e75fe6874cbc7e4773d049616ab450eff537bf1", + "reference": "6e75fe6874cbc7e4773d049616ab450eff537bf1", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v5.4.11" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-06-27T16:58:25+00:00" + }, + { + "name": "symfony/serializer", + "version": "v5.4.12", + "source": { + "type": "git", + "url": "https://github.com/symfony/serializer.git", + "reference": "776fa3010f62b97a7119757a66596a654cd244d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/serializer/zipball/776fa3010f62b97a7119757a66596a654cd244d4", + "reference": "776fa3010f62b97a7119757a66596a654cd244d4", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "doctrine/annotations": "<1.12", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/dependency-injection": "<4.4", + "symfony/property-access": "<5.4", + "symfony/property-info": "<5.3.13", + "symfony/uid": "<5.3", + "symfony/yaml": "<4.4" + }, + "require-dev": { + "doctrine/annotations": "^1.12", + "phpdocumentor/reflection-docblock": "^3.2|^4.0|^5.0", + "symfony/cache": "^4.4|^5.0|^6.0", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/filesystem": "^4.4|^5.0|^6.0", + "symfony/form": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/mime": "^4.4|^5.0|^6.0", + "symfony/property-access": "^5.4|^6.0", + "symfony/property-info": "^5.3.13|^6.0", + "symfony/uid": "^5.3|^6.0", + "symfony/validator": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0", + "symfony/var-exporter": "^4.4|^5.0|^6.0", + "symfony/yaml": "^4.4|^5.0|^6.0" + }, + "suggest": { + "psr/cache-implementation": "For using the metadata cache.", + "symfony/config": "For using the XML mapping loader.", + "symfony/mime": "For using a MIME type guesser within the DataUriNormalizer.", + "symfony/property-access": "For using the ObjectNormalizer.", + "symfony/property-info": "To deserialize relations.", + "symfony/var-exporter": "For using the metadata compiler.", + "symfony/yaml": "For using the default YAML mapping loader." + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Serializer\\": "" + }, + "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": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/serializer/tree/v5.4.12" + }, + "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-08-26T10:32:10+00:00" + }, + { + "name": "tracy/tracy", + "version": "v2.9.4", + "source": { + "type": "git", + "url": "https://github.com/nette/tracy.git", + "reference": "0ed605329b095f5f5fe2db2adc3d1ee80c917294" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/tracy/zipball/0ed605329b095f5f5fe2db2adc3d1ee80c917294", + "reference": "0ed605329b095f5f5fe2db2adc3d1ee80c917294", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-session": "*", + "php": ">=7.2 <8.2" + }, + "conflict": { + "nette/di": "<3.0" + }, + "require-dev": { + "latte/latte": "^2.5", + "nette/di": "^3.0", + "nette/mail": "^3.0", + "nette/tester": "^2.2", + "nette/utils": "^3.0", + "phpstan/phpstan": "^1.0", + "psr/log": "^1.0 || ^2.0 || ^3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.9-dev" + } + }, + "autoload": { + "files": [ + "src/Tracy/functions.php" + ], + "classmap": [ + "src" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "😎 Tracy: the addictive tool to ease debugging PHP code for cool developers. Friendly design, logging, profiler, advanced features like debugging AJAX calls or CLI support. You will love it.", + "homepage": "https://tracy.nette.org", + "keywords": [ + "Xdebug", + "debug", + "debugger", + "nette", + "profiler" + ], + "support": { + "issues": "https://github.com/nette/tracy/issues", + "source": "https://github.com/nette/tracy/tree/v2.9.4" + }, + "time": "2022-07-19T14:06:15+00:00" + } + ], + "packages-dev": [ + { + "name": "dealerdirect/phpcodesniffer-composer-installer", + "version": "v0.7.2", + "source": { + "type": "git", + "url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git", + "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db", + "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0 || ^2.0", + "php": ">=5.3", + "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0" + }, + "require-dev": { + "composer/composer": "*", + "php-parallel-lint/php-parallel-lint": "^1.3.1", + "phpcompatibility/php-compatibility": "^9.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" + }, + "autoload": { + "psr-4": { + "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Franck Nijhof", + "email": "franck.nijhof@dealerdirect.com", + "homepage": "http://www.frenck.nl", + "role": "Developer / IT Manager" + }, + { + "name": "Contributors", + "homepage": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer/graphs/contributors" + } + ], + "description": "PHP_CodeSniffer Standards Composer Installer Plugin", + "homepage": "http://www.dealerdirect.com", + "keywords": [ + "PHPCodeSniffer", + "PHP_CodeSniffer", + "code quality", + "codesniffer", + "composer", + "installer", + "phpcbf", + "phpcs", + "plugin", + "qa", + "quality", + "standard", + "standards", + "style guide", + "stylecheck", + "tests" + ], + "support": { + "issues": "https://github.com/dealerdirect/phpcodesniffer-composer-installer/issues", + "source": "https://github.com/dealerdirect/phpcodesniffer-composer-installer" + }, + "time": "2022-02-04T12:51:07+00:00" + }, + { + "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": "keboola/coding-standard", + "version": "14.0.0", + "source": { + "type": "git", + "url": "https://github.com/keboola/phpcs-standard.git", + "reference": "a39222d889f1411586d2b99386d1ab6886fe09fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/keboola/phpcs-standard/zipball/a39222d889f1411586d2b99386d1ab6886fe09fc", + "reference": "a39222d889f1411586d2b99386d1ab6886fe09fc", + "shasum": "" + }, + "require": { + "slevomat/coding-standard": "^8", + "squizlabs/php_codesniffer": "^3.2" + }, + "type": "phpcodesniffer-standard", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Keboola coding standard", + "support": { + "issues": "https://github.com/keboola/phpcs-standard/issues", + "source": "https://github.com/keboola/phpcs-standard/tree/14.0.0" + }, + "time": "2022-07-11T11:34:29+00:00" + }, + { + "name": "keboola/datadir-tests", + "version": "5.5.0", + "source": { + "type": "git", + "url": "https://github.com/keboola/datadir-tests.git", + "reference": "78a8bb34fe09be4666b09080bfa289d61aec7f14" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/keboola/datadir-tests/zipball/78a8bb34fe09be4666b09080bfa289d61aec7f14", + "reference": "78a8bb34fe09be4666b09080bfa289d61aec7f14", + "shasum": "" + }, + "require": { + "ext-json": "*", + "keboola/php-temp": "^2.0", + "php": "^7.4|^8.0", + "phpunit/phpunit": "^9.5", + "symfony/filesystem": "^5.0|^6.0", + "symfony/finder": "^5.0|^6.0", + "symfony/process": "^5.0|^6.0" + }, + "require-dev": { + "keboola/coding-standard": "^13.0", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpstan/phpstan": "^1.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Keboola\\DatadirTests\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Tool for functional testing of Keboola Connection components", + "support": { + "issues": "https://github.com/keboola/datadir-tests/issues", + "source": "https://github.com/keboola/datadir-tests/tree/5.5.0" + }, + "time": "2022-09-06T13:23:13+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": "nikic/php-parser", + "version": "v4.15.1", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", + "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", + "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.15.1" + }, + "time": "2022-09-04T07:30:47+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": "php-parallel-lint/php-parallel-lint", + "version": "v1.3.2", + "source": { + "type": "git", + "url": "https://github.com/php-parallel-lint/PHP-Parallel-Lint.git", + "reference": "6483c9832e71973ed29cf71bd6b3f4fde438a9de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-parallel-lint/PHP-Parallel-Lint/zipball/6483c9832e71973ed29cf71bd6b3f4fde438a9de", + "reference": "6483c9832e71973ed29cf71bd6b3f4fde438a9de", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": ">=5.3.0" + }, + "replace": { + "grogy/php-parallel-lint": "*", + "jakub-onderka/php-parallel-lint": "*" + }, + "require-dev": { + "nette/tester": "^1.3 || ^2.0", + "php-parallel-lint/php-console-highlighter": "0.* || ^1.0", + "squizlabs/php_codesniffer": "^3.6" + }, + "suggest": { + "php-parallel-lint/php-console-highlighter": "Highlight syntax in code snippet" + }, + "bin": [ + "parallel-lint" + ], + "type": "library", + "autoload": { + "classmap": [ + "./src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Jakub Onderka", + "email": "ahoj@jakubonderka.cz" + } + ], + "description": "This tool check syntax of PHP files about 20x faster than serial check.", + "homepage": "https://github.com/php-parallel-lint/PHP-Parallel-Lint", + "support": { + "issues": "https://github.com/php-parallel-lint/PHP-Parallel-Lint/issues", + "source": "https://github.com/php-parallel-lint/PHP-Parallel-Lint/tree/v1.3.2" + }, + "time": "2022-02-21T12:50:22+00:00" + }, + { + "name": "phpstan/phpdoc-parser", + "version": "1.8.0", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "8dd908dd6156e974b9a0f8bb4cd5ad0707830f04" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/8dd908dd6156e974b9a0f8bb4cd5ad0707830f04", + "reference": "8dd908dd6156e974b9a0f8bb4cd5ad0707830f04", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.5", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.0", + "phpunit/phpunit": "^9.5", + "symfony/process": "^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", + "support": { + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.8.0" + }, + "time": "2022-09-04T18:59:06+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "1.8.5", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "f6598a5ff12ca4499a836815e08b4d77a2ddeb20" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/f6598a5ff12ca4499a836815e08b4d77a2ddeb20", + "reference": "f6598a5ff12ca4499a836815e08b4d77a2ddeb20", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpstan/phpstan/issues", + "source": "https://github.com/phpstan/phpstan/tree/1.8.5" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", + "type": "tidelift" + } + ], + "time": "2022-09-07T16:05:32+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.17", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "aa94dc41e8661fe90c7316849907cba3007b10d8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/aa94dc41e8661fe90c7316849907cba3007b10d8", + "reference": "aa94dc41e8661fe90c7316849907cba3007b10d8", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.14", + "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.17" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-08-30T12:24:04+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.24", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "d0aa6097bef9fd42458a9b3c49da32c6ce6129c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d0aa6097bef9fd42458a9b3c49da32c6ce6129c5", + "reference": "d0aa6097bef9fd42458a9b3c49da32c6ce6129c5", + "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", + "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.1", + "sebastian/version": "^3.0.2" + }, + "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.24" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-08-30T07:42:16+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.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-14T12:41:17+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "shasum": "" + }, + "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.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-14T06:03:37+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.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.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", + "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-12T14:47:03+00:00" + }, + { + "name": "sebastian/version", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", + "shasum": "" + }, + "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": "slevomat/coding-standard", + "version": "8.5.1", + "source": { + "type": "git", + "url": "https://github.com/slevomat/coding-standard.git", + "reference": "971f489404350bf4608b7e59381e603c47700366" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/971f489404350bf4608b7e59381e603c47700366", + "reference": "971f489404350bf4608b7e59381e603c47700366", + "shasum": "" + }, + "require": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7", + "php": "^7.2 || ^8.0", + "phpstan/phpdoc-parser": ">=1.7.0 <1.9.0", + "squizlabs/php_codesniffer": "^3.7.1" + }, + "require-dev": { + "phing/phing": "2.17.4", + "php-parallel-lint/php-parallel-lint": "1.3.2", + "phpstan/phpstan": "1.4.10|1.8.5", + "phpstan/phpstan-deprecation-rules": "1.0.0", + "phpstan/phpstan-phpunit": "1.0.0|1.1.1", + "phpstan/phpstan-strict-rules": "1.4.3", + "phpunit/phpunit": "7.5.20|8.5.21|9.5.24" + }, + "type": "phpcodesniffer-standard", + "extra": { + "branch-alias": { + "dev-master": "8.x-dev" + } + }, + "autoload": { + "psr-4": { + "SlevomatCodingStandard\\": "SlevomatCodingStandard" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.", + "support": { + "issues": "https://github.com/slevomat/coding-standard/issues", + "source": "https://github.com/slevomat/coding-standard/tree/8.5.1" + }, + "funding": [ + { + "url": "https://github.com/kukulich", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/slevomat/coding-standard", + "type": "tidelift" + } + ], + "time": "2022-09-23T05:34:53+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "3.7.1", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "1359e176e9307e906dc3d890bcc9603ff6d90619" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/1359e176e9307e906dc3d890bcc9603ff6d90619", + "reference": "1359e176e9307e906dc3d890bcc9603ff6d90619", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "bin": [ + "bin/phpcs", + "bin/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", + "keywords": [ + "phpcs", + "standards" + ], + "support": { + "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", + "source": "https://github.com/squizlabs/PHP_CodeSniffer", + "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" + }, + "time": "2022-06-18T07:21:10+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": [ + { + "package": "keboola/db-import-export", + "version": "dev-mj-update-php-temp", + "alias": "1.9.1", + "alias_normalized": "1.9.1.0" + } + ], + "minimum-stability": "stable", + "stability-flags": { + "keboola/db-import-export": 20 + }, + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": "^7.4" + }, + "platform-dev": [], + "plugin-api-version": "2.3.0" +} From d4aba159a85f0c8ed0cdf4f8b8ec5d145e66a459 Mon Sep 17 00:00:00 2001 From: Martin Junger Date: Fri, 23 Sep 2022 13:49:59 +0200 Subject: [PATCH 03/38] update readme --- README.md | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 753bc85..72737b9 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,32 @@ -# my-component +# Custom Query manager component -> Fill in description +Generates templates for Custom Query feature in Keboola Connection platform. # Usage -> fill in usage instructions +Create configuration in `data/config.json` with: +- `parameters`: + - `backendType`: one of supported backend (e.g. `snowflake`); required + - `operation`: one of supported operation (e.g. `tableCreate`); required +- `action`: one of supported sync action to be run - `generate`; required + +for example: +```json +{ + "parameters": { + "backendType": "snowflake", + "operation": "tableCreate" + }, + "action": "generate" +} +``` + +Run component: +```shell +docker-compose run --rm dev +``` + +Will return JSON with query template. ## Development From bf38ba959317f22c8833036211aaa382a517b815 Mon Sep 17 00:00:00 2001 From: Martin Junger Date: Mon, 17 Oct 2022 17:04:17 +0200 Subject: [PATCH 04/38] refactor action to separate class --- src/Component.php | 26 ++++++---------------- src/SyncAction/GenerateAction.php | 36 +++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 20 deletions(-) create mode 100644 src/SyncAction/GenerateAction.php diff --git a/src/Component.php b/src/Component.php index 76f95e9..4c9a09d 100644 --- a/src/Component.php +++ b/src/Component.php @@ -6,12 +6,10 @@ use Keboola\Component\BaseComponent; use Keboola\Component\UserException; -use Psr\Log\LoggerInterface; +use MyComponent\SyncAction\GenerateAction; class Component extends BaseComponent { - public const ACTION_GENERATE = 'generate'; - // supported backends public const BACKEND_SNOWFLAKE = 'snowflake'; public const BACKEND_SYNAPSE = 'synapse'; @@ -28,16 +26,11 @@ class Component extends BaseComponent self::OPERATION_TABLE_DROP, ]; - public function __construct(LoggerInterface $logger) - { - parent::__construct($logger); - } - protected function run(): void { throw new UserException(sprintf( 'Can be used only for sync actions {%s}.', - implode(',', [self::ACTION_GENERATE]) + implode(',', [GenerateAction::NAME]) )); } @@ -49,16 +42,9 @@ public function actionGenerate(): array /** @var Config $config */ $config = $this->getConfig(); - // TODO use import-export-lib - - return [ - 'action' => self::ACTION_GENERATE, - 'backendType' => $config->getBackendType(), - 'operation' => $config->getOperation(), - 'output' => [ - 'foo' => 'bar', - ], - ]; + return (new GenerateAction( + $config, + ))->run(); } protected function getConfigClass(): string @@ -77,7 +63,7 @@ protected function getConfigDefinitionClass(): string public function getSyncActions(): array { return [ - self::ACTION_GENERATE => 'actionGenerate', + GenerateAction::NAME => 'actionGenerate', ]; } } diff --git a/src/SyncAction/GenerateAction.php b/src/SyncAction/GenerateAction.php new file mode 100644 index 0000000..84e1430 --- /dev/null +++ b/src/SyncAction/GenerateAction.php @@ -0,0 +1,36 @@ +config = $config; + } + + /** + * @return array{action: string, backendType: string, operation: string, output: mixed[]} + */ + public function run(): array + { + // TODO use import-export-lib + + return [ + 'action' => self::NAME, + 'backendType' => $this->config->getBackendType(), + 'operation' => $this->config->getOperation(), + 'output' => [ + 'foo' => 'bar', + ], + ]; + } +} From 970cc184979b9ce252ec8a3339333ac4a2ba57f4 Mon Sep 17 00:00:00 2001 From: Martin Junger Date: Mon, 17 Oct 2022 17:04:45 +0200 Subject: [PATCH 05/38] move constants to Config --- src/Component.php | 16 ---------------- src/Config.php | 16 ++++++++++++++++ src/ConfigDefinition.php | 4 ++-- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/Component.php b/src/Component.php index 4c9a09d..058e3bf 100644 --- a/src/Component.php +++ b/src/Component.php @@ -10,22 +10,6 @@ class Component extends BaseComponent { - // supported backends - public const BACKEND_SNOWFLAKE = 'snowflake'; - public const BACKEND_SYNAPSE = 'synapse'; - public const BACKENDS = [ - self::BACKEND_SNOWFLAKE, - self::BACKEND_SYNAPSE, - ]; - - // operation for generate action - public const OPERATION_TABLE_CREATE = 'tableCreate'; - public const OPERATION_TABLE_DROP = 'tableDrop'; - public const OPERATIONS = [ - self::OPERATION_TABLE_CREATE, - self::OPERATION_TABLE_DROP, - ]; - protected function run(): void { throw new UserException(sprintf( diff --git a/src/Config.php b/src/Config.php index a6154e1..e13abb0 100644 --- a/src/Config.php +++ b/src/Config.php @@ -8,6 +8,22 @@ class Config extends BaseConfig { + // supported backends + public const BACKEND_SNOWFLAKE = 'snowflake'; + public const BACKEND_SYNAPSE = 'synapse'; + public const BACKENDS = [ + self::BACKEND_SNOWFLAKE, + self::BACKEND_SYNAPSE, + ]; + + // operation for generate action + public const OPERATION_TABLE_CREATE = 'tableCreate'; + public const OPERATION_TABLE_DROP = 'tableDrop'; + public const OPERATIONS = [ + self::OPERATION_TABLE_CREATE, + self::OPERATION_TABLE_DROP, + ]; + public function getBackendType(): string { return $this->getStringValue(['parameters', 'backendType']); diff --git a/src/ConfigDefinition.php b/src/ConfigDefinition.php index 31c4456..da0dd46 100644 --- a/src/ConfigDefinition.php +++ b/src/ConfigDefinition.php @@ -19,12 +19,12 @@ protected function getParametersDefinition(): ArrayNodeDefinition ->enumNode('backendType') ->isRequired() ->cannotBeEmpty() - ->values(Component::BACKENDS) + ->values(Config::BACKENDS) ->end() ->enumNode('operation') ->isRequired() ->cannotBeEmpty() - ->values(Component::OPERATIONS) + ->values(Config::OPERATIONS) ->end() ->end() ; From 6e752dbabba3072f59c7dd872eb0faee956978ca Mon Sep 17 00:00:00 2001 From: Martin Junger Date: Tue, 18 Oct 2022 10:52:19 +0200 Subject: [PATCH 06/38] rename namespace --- composer.json | 10 +++++----- src/Component.php | 4 ++-- src/Config.php | 2 +- src/ConfigDefinition.php | 2 +- src/SyncAction/GenerateAction.php | 4 ++-- src/run.php | 2 +- tests/functional/DatadirTest.php | 2 +- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/composer.json b/composer.json index d742a22..434be5e 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,6 @@ { - "name": "keboola/my-component", - "description": "MyComponent description", + "name": "keboola/app-custom-query-manager", + "description": "Application to generate SQL queries", "license": "MIT", "require": { "php": "^7.4", @@ -18,13 +18,13 @@ }, "autoload": { "psr-4": { - "MyComponent\\": "src/" + "Keboola\\CustomQueryManagerApp\\": "src/" } }, "autoload-dev": { "psr-4": { - "MyComponent\\Tests\\": "tests/phpunit/", - "MyComponent\\FunctionalTests\\": "tests/functional/" + "Keboola\\CustomQueryManagerApp\\Tests\\": "tests/phpunit/", + "Keboola\\CustomQueryManagerApp\\FunctionalTests\\": "tests/functional/" } }, "scripts": { diff --git a/src/Component.php b/src/Component.php index 058e3bf..6ecc660 100644 --- a/src/Component.php +++ b/src/Component.php @@ -2,11 +2,11 @@ declare(strict_types=1); -namespace MyComponent; +namespace Keboola\CustomQueryManagerApp; use Keboola\Component\BaseComponent; use Keboola\Component\UserException; -use MyComponent\SyncAction\GenerateAction; +use Keboola\CustomQueryManagerApp\SyncAction\GenerateAction; class Component extends BaseComponent { diff --git a/src/Config.php b/src/Config.php index e13abb0..93247c0 100644 --- a/src/Config.php +++ b/src/Config.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace MyComponent; +namespace Keboola\CustomQueryManagerApp; use Keboola\Component\Config\BaseConfig; diff --git a/src/ConfigDefinition.php b/src/ConfigDefinition.php index da0dd46..1b9f0ca 100644 --- a/src/ConfigDefinition.php +++ b/src/ConfigDefinition.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace MyComponent; +namespace Keboola\CustomQueryManagerApp; use Keboola\Component\Config\BaseConfigDefinition; use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition; diff --git a/src/SyncAction/GenerateAction.php b/src/SyncAction/GenerateAction.php index 84e1430..09396d0 100644 --- a/src/SyncAction/GenerateAction.php +++ b/src/SyncAction/GenerateAction.php @@ -2,9 +2,9 @@ declare(strict_types=1); -namespace MyComponent\SyncAction; +namespace Keboola\CustomQueryManagerApp\SyncAction; -use MyComponent\Config; +use Keboola\CustomQueryManagerApp\Config; class GenerateAction { diff --git a/src/run.php b/src/run.php index ac0da0b..54983cb 100644 --- a/src/run.php +++ b/src/run.php @@ -4,7 +4,7 @@ use Keboola\Component\Logger; use Keboola\Component\UserException; -use MyComponent\Component; +use Keboola\CustomQueryManagerApp\Component; require __DIR__ . '/../vendor/autoload.php'; diff --git a/tests/functional/DatadirTest.php b/tests/functional/DatadirTest.php index 49b5a2c..0a0e9a3 100644 --- a/tests/functional/DatadirTest.php +++ b/tests/functional/DatadirTest.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace MyComponent\FunctionalTests; +namespace Keboola\CustomQueryManagerApp\FunctionalTests; use Keboola\DatadirTests\DatadirTestCase; From 2f6b316fa6e42f45b88ca49cc672e82f86149cad Mon Sep 17 00:00:00 2001 From: Martin Junger Date: Tue, 18 Oct 2022 10:52:58 +0200 Subject: [PATCH 07/38] add more options to config --- src/Config.php | 33 +++++++++++++++++++++++++++++-- src/ConfigDefinition.php | 22 ++++++++++++++++++--- src/SyncAction/GenerateAction.php | 5 ++++- 3 files changed, 54 insertions(+), 6 deletions(-) diff --git a/src/Config.php b/src/Config.php index 93247c0..3a19c86 100644 --- a/src/Config.php +++ b/src/Config.php @@ -24,13 +24,42 @@ class Config extends BaseConfig self::OPERATION_TABLE_DROP, ]; - public function getBackendType(): string + // supported sources + public const SOURCE_FILE_ABS = 'fileAbs'; + public const SOURCE_TABLE = 'table'; + public const SOURCES = [ + self::SOURCE_FILE_ABS, + self::SOURCE_TABLE, + ]; + + public function getBackend(): string { - return $this->getStringValue(['parameters', 'backendType']); + return $this->getStringValue(['parameters', 'backend']); } public function getOperation(): string { return $this->getStringValue(['parameters', 'operation']); } + + /** + * @return string[] + */ + public function getColumns(): array + { + return $this->getArrayValue(['parameters', 'columns']); + } + + /** + * @return string[] + */ + public function getPrimaryKeys(): array + { + return $this->getArrayValue(['parameters', 'primaryKeys']); + } + + public function getSource(): string + { + return $this->getStringValue(['parameters', 'source']); + } } diff --git a/src/ConfigDefinition.php b/src/ConfigDefinition.php index 1b9f0ca..c841b60 100644 --- a/src/ConfigDefinition.php +++ b/src/ConfigDefinition.php @@ -16,16 +16,32 @@ protected function getParametersDefinition(): ArrayNodeDefinition /** @noinspection NullPointerExceptionInspection */ $parametersNode ->children() - ->enumNode('backendType') + ->enumNode('backend') ->isRequired() - ->cannotBeEmpty() ->values(Config::BACKENDS) ->end() ->enumNode('operation') ->isRequired() - ->cannotBeEmpty() ->values(Config::OPERATIONS) ->end() + ->arrayNode('columns') + ->isRequired() + ->requiresAtLeastOneElement() + ->scalarPrototype() + ->cannotBeEmpty() + ->end() + ->end() + ->arrayNode('primaryKeys') + ->isRequired() + ->requiresAtLeastOneElement() + ->scalarPrototype() + ->cannotBeEmpty() + ->end() + ->end() + ->enumNode('source') + ->isRequired() + ->values(Config::SOURCES) + ->end() ->end() ; // @formatter:on diff --git a/src/SyncAction/GenerateAction.php b/src/SyncAction/GenerateAction.php index 09396d0..00a8714 100644 --- a/src/SyncAction/GenerateAction.php +++ b/src/SyncAction/GenerateAction.php @@ -26,8 +26,11 @@ public function run(): array return [ 'action' => self::NAME, - 'backendType' => $this->config->getBackendType(), + 'backendType' => $this->config->getBackend(), 'operation' => $this->config->getOperation(), + 'columns' => $this->config->getColumns(), + 'primaryKeys' => $this->config->getPrimaryKeys(), + 'source' => $this->config->getSource(), 'output' => [ 'foo' => 'bar', ], From 30ecb51f92d4008c01157fab2e87d6de21e13444 Mon Sep 17 00:00:00 2001 From: Martin Junger Date: Tue, 18 Oct 2022 10:53:23 +0200 Subject: [PATCH 08/38] require phpunit --- composer.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index 434be5e..712ee7d 100644 --- a/composer.json +++ b/composer.json @@ -4,8 +4,9 @@ "license": "MIT", "require": { "php": "^7.4", - "keboola/db-import-export": "dev-mj-update-php-temp as 1.9.1", - "keboola/php-component": "^9.0" + "keboola/db-import-export": "^1.10", + "keboola/php-component": "^9.0", + "phpunit/phpunit": "^9.5" }, "require-dev": { "php-parallel-lint/php-parallel-lint": "^1.3", @@ -13,7 +14,6 @@ "keboola/datadir-tests": "^5.3", "keboola/php-temp": "^2.0", "phpstan/phpstan": "^1.4", - "phpunit/phpunit": "^9.5", "symfony/process": "^5.0" }, "autoload": { From c2f5d92005c0dd0e9c40fc275c0223ad30e195c6 Mon Sep 17 00:00:00 2001 From: Martin Junger Date: Tue, 18 Oct 2022 16:02:14 +0200 Subject: [PATCH 09/38] rename operations --- src/Config.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Config.php b/src/Config.php index 3a19c86..5e02d16 100644 --- a/src/Config.php +++ b/src/Config.php @@ -17,11 +17,11 @@ class Config extends BaseConfig ]; // operation for generate action - public const OPERATION_TABLE_CREATE = 'tableCreate'; - public const OPERATION_TABLE_DROP = 'tableDrop'; + public const OPERATION_IMPORT_FULL_FROM_FILE = 'importFullFromFile'; + public const OPERATION_IMPORT_FULL_FROM_TABLE = 'importFullFromTable'; public const OPERATIONS = [ - self::OPERATION_TABLE_CREATE, - self::OPERATION_TABLE_DROP, + self::OPERATION_IMPORT_FULL_FROM_FILE, + self::OPERATION_IMPORT_FULL_FROM_TABLE, ]; // supported sources From e04d91f6439cff11eb585e57daf60fff7e93593a Mon Sep 17 00:00:00 2001 From: Martin Junger Date: Tue, 18 Oct 2022 16:03:23 +0200 Subject: [PATCH 10/38] add tests for ConfigDefinition --- tests/phpunit/ConfigDefinitionTest.php | 105 +++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 tests/phpunit/ConfigDefinitionTest.php diff --git a/tests/phpunit/ConfigDefinitionTest.php b/tests/phpunit/ConfigDefinitionTest.php new file mode 100644 index 0000000..7473f86 --- /dev/null +++ b/tests/phpunit/ConfigDefinitionTest.php @@ -0,0 +1,105 @@ + true]))->decode($inputConfig, JsonEncoder::FORMAT); + $this->expectException($expectedExceptionClass); + $this->expectExceptionMessage($expectedExceptionMessage); + (new Processor())->processConfiguration(new ConfigDefinition(), [$config]); + } + + /** + * @return mixed[][] + */ + public function provideInvalidConfigs(): array + { + return [ + 'missing operation' => [ + /** @lang JSON */ << [ + /** @lang JSON */ << true]))->decode($inputs, JsonEncoder::FORMAT); + $processedConfig = (new Processor())->processConfiguration(new ConfigDefinition(), [$config]); + self::assertSame([ + 'parameters' => [ + 'operation' => 'importFullFromFile', + 'backend' => 'snowflake', + 'source' => 'fileAbs', + 'columns' => [ + 'aaa', + 'bbb' + ], + 'primaryKeys' => [ + 'aaa' + ], + ], + ], $processedConfig); + } +} From 0e9fb6f829317d3a5fc1d9a06b1be5b65198a002 Mon Sep 17 00:00:00 2001 From: Martin Junger Date: Tue, 18 Oct 2022 16:04:39 +0200 Subject: [PATCH 11/38] add Utils with replace methods and uniqid --- src/Generator/Utils.php | 79 +++++++++++++++ tests/phpunit/Generator/UtilsTest.php | 137 ++++++++++++++++++++++++++ 2 files changed, 216 insertions(+) create mode 100644 src/Generator/Utils.php create mode 100644 tests/phpunit/Generator/UtilsTest.php diff --git a/src/Generator/Utils.php b/src/Generator/Utils.php new file mode 100644 index 0000000..3cff10e --- /dev/null +++ b/src/Generator/Utils.php @@ -0,0 +1,79 @@ + $value) { + if (is_array($value)) { + foreach ($value as $keyInArray => $valueInArray) { + if ($valueInArray instanceof ColumnInterface) { + $query = self::replaceParamInQuery($query, $valueInArray->getColumnName(), $keyInArray, $outputPrefix, $outputSuffix); + } else { + $query = self::replaceParamInQuery($query, $valueInArray, $keyInArray, $outputPrefix, $outputSuffix); + } + } + } else { + $query = self::replaceParamInQuery($query, $value, $key, $outputPrefix, $outputSuffix); + } + } + return $query; + } + + public static function replaceParamInQuery( + string $query, + string $valueInQuery, + string $keyInOutput, + string $outputPrefix = '{{ ', + string $outputSuffix = ' }}' + ): string { + if (strpos($keyInOutput, '#') === 0) { + // replace values + $valueInQuery = SnowflakeQuote::quote($valueInQuery); + $keyInOutput = substr($keyInOutput, 1); + } elseif (strpos($keyInOutput, '/') === 0) { + // replace generated identifiers + $matches = []; + if (preg_match('/\b(' . $valueInQuery . '\w+)\b/', $query, $matches) === 1) { + $valueInQuery = SnowflakeQuote::quoteSingleIdentifier($matches[1]); + $keyInOutput = substr($keyInOutput, 1); + $keyInOutput = sprintf('id(%s)', $keyInOutput); + } + } else { + // replace identifiers + $valueInQuery = SnowflakeQuote::quoteSingleIdentifier($valueInQuery); + $keyInOutput = sprintf('id(%s)', $keyInOutput); + } + return str_replace( + $valueInQuery, + sprintf( + '%s%s%s', + $outputPrefix, + $keyInOutput, + $outputSuffix + ), + $query + ); + } + + public static function getUniqeId(string $prefix): string + { + return str_replace( + '.', + '', + uniqid($prefix, true), + ); + } +} diff --git a/tests/phpunit/Generator/UtilsTest.php b/tests/phpunit/Generator/UtilsTest.php new file mode 100644 index 0000000..55229d0 --- /dev/null +++ b/tests/phpunit/Generator/UtilsTest.php @@ -0,0 +1,137 @@ + 'stageSchemaName6336e8dda7606', + '#sourceContainerUrl' => 'sourceContainerUrl6336ebdee0b80', + '#sourceSasToken' => 'sourceSasToken6336ebdee0b81', + 'testIdInArray' => [ + 'stageTableName' => 'stageTableName6336e8dda7607', + ], + 'testValueInArray' => [ + '#sourceFile1' => 'sourceFile16336ebdee0b7f', + ], + ]; + + $output = Utils::replaceParamsInQuery($input, $params); + + $expected = /** @lang Snowflake */ <<assertSame($expected, $output); + } + + /** + * @dataProvider replaceParamInQueryProvider + */ + public function testReplaceParamInQuery(string $input, string $key, string $value, ?string $prefix, ?string $suffix, string $expectedOutput): void + { + $output = Utils::replaceParamInQuery( + $input, + $value, + $key, + $prefix, + $suffix, + ); + $this->assertSame($expectedOutput, $output); + } + + public function replaceParamInQueryProvider(): array + { + $defaultQuery = << [ + $defaultQuery, + 'keyInOutput' => 'stageSchemaName', + 'valueInQuery' => 'stageSchemaName6336e8dda7606', + '{{ ', + ' }}', + 'output' => << [ + $defaultQuery, + '#sourceContainerUrl', + 'sourceContainerUrl6336ebdee0b80', + '{{ ', + ' }}', + << [ + $defaultQuery, + 'stageSchemaName', + 'stageSchemaName6336e8dda7606', + '[', + ']', + << [ + $defaultQuery, + '#sourceContainerUrl', + 'sourceContainerUrl6336ebdee0b80', + '[', + ']', + << [ + $dedupQuery, + '/stageDeduplicationTableName', + '__temp_DEDUP_', + '{{ ', + ' }}', + <<assertStringNotContainsString('.', $id); + // 23 (lenght of uniqid without prefix) + 10 (length of prefix) - 1 (removed dot) + $this->assertSame(32, strlen($id)); + } +} From d340da2d2f2c0fac3cdd02e90216fe50d76953dd Mon Sep 17 00:00:00 2001 From: Martin Junger Date: Tue, 18 Oct 2022 16:06:46 +0200 Subject: [PATCH 12/38] add Snowflake/ImportFull/FromAbsGenerator --- .../Snowflake/ImportFull/FromAbsGenerator.php | 180 ++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 src/Generator/Snowflake/ImportFull/FromAbsGenerator.php diff --git a/src/Generator/Snowflake/ImportFull/FromAbsGenerator.php b/src/Generator/Snowflake/ImportFull/FromAbsGenerator.php new file mode 100644 index 0000000..f67ba2e --- /dev/null +++ b/src/Generator/Snowflake/ImportFull/FromAbsGenerator.php @@ -0,0 +1,180 @@ + [ + '#sourceFile1' => Utils::getUniqeId('sourceFile1'), + ], + '#sourceContainerUrl' => Utils::getUniqeId('sourceContainerUrl'), + '#sourceSasToken' => Utils::getUniqeId('sourceSasToken'), + + 'stageSchemaName' => Utils::getUniqeId('stageSchemaName'), + 'stageTableName' => Utils::getUniqeId('__temp_stageTableName'), + 'stageColumns' => [ + 'sourceColumn1' => new SnowflakeColumn( + $sourceCol1Name, + new Snowflake(Snowflake::TYPE_INT) + ), + 'sourceColumn2' => new SnowflakeColumn( + $sourceCol2Name, + new Snowflake(Snowflake::TYPE_VARCHAR) + ), + ], + 'stagePrimaryKeys' => [], +// 'stagePrimaryKeys' => [ +// 'sourceCol1' => $sourceCol1Name, +// ], + // dedup table (prefix) + '/stageDeduplicationTableName' => '__temp_DEDUP_', + + 'destSchemaName' => Utils::getUniqeId('destSchemaName'), + 'destTableName' => Utils::getUniqeId('destTableName'), + 'destColumns' => [ + 'destCol1' => new SnowflakeColumn( + $destCol1Name, + new Snowflake(Snowflake::TYPE_INT) + ), + 'destCol2' => new SnowflakeColumn( + $destCol2Name, + new Snowflake(Snowflake::TYPE_VARCHAR) + ), + 'destColTimestamp' => new SnowflakeColumn( + Utils::getUniqeId('_timestamp'), + new Snowflake(Snowflake::TYPE_TIMESTAMP) + ), + ], + 'destPrimaryKeys' => [], +// 'destPrimaryKeys' => [ +// 'destPrimaryKey1' => $destCol1Name, +// ], + ]; + + $sourceColumnsNames = []; + /** @var ColumnInterface $column */ + foreach ($params['stageColumns'] as $column) { + $sourceColumnsNames[] = $column->getColumnName(); + } + + $queries = []; + + // mock connection + $conn = $this->createMock(Connection::class); + $conn->expects(self::atLeastOnce())->method('executeStatement')->willReturnCallback( + static function (...$values) use (&$queries) { + $queries[] = $values[0]; + return 0; + } + ); + + // mock file source + $source = $this->createMock(Storage\ABS\SourceFile::class); + $source->expects(self::atLeastOnce())->method('getCsvOptions')->willReturn(new CsvOptions()); + $source->expects(self::atLeastOnce())->method('getManifestEntries')->willReturn($params['sourceFiles']); + $source->expects(self::atLeastOnce())->method('getColumnsNames')->willReturn($sourceColumnsNames); + // ABS specific + $source->expects(self::atLeastOnce())->method('getContainerUrl')->willReturn($params['#sourceContainerUrl']); + $source->expects(self::atLeastOnce())->method('getSasToken')->willReturn($params['#sourceSasToken']); + + // fake staging table + $stagingTable = new SnowflakeTableDefinition( + $params['stageSchemaName'], + $params['stageTableName'], + true, + new ColumnCollection($params['stageColumns']), + $params['stagePrimaryKeys'] + ); + // fake options + $options = new SnowflakeImportOptions( + [], + false, + false, + 1 + ); + // fake destination + $destination = new SnowflakeTableDefinition( + $params['destSchemaName'], + $params['destTableName'], + false, + new ColumnCollection($params['destColumns']), + $params['destPrimaryKeys'] + ); + + // mock importer + $importer = new ToStageImporter($conn); + + // init query builder + $qb = new SnowflakeTableQueryBuilder(); + + // ACTION: create stage table + $conn->executeStatement( + $qb->getCreateTableCommandFromDefinition($stagingTable) + ); + + // ACTION: create final table + $conn->executeStatement( + $qb->getCreateTableCommandFromDefinition($destination) + ); + + // ACTION: import to stage table + $importState = $importer->importToStagingTable( + $source, + $stagingTable, + $options + ); + + // ACTION: import to final table + $toFinalTableImporter = new FullImporter($conn); + $result = $toFinalTableImporter->importToTable( + $stagingTable, + $destination, + $options, + $importState + ); + + // result + $replacedQueries = []; + dump('=== queries'); + foreach ($queries as $query) { + $replacedQuery = Utils::replaceParamsInQuery($query, $params); + $replacedQueries[] = $replacedQuery; + dump($replacedQuery); + dump('---------'); + } + + return $replacedQueries; + } +} From e9bbd8af968cfac011a09452da3f7ae11cbcf088 Mon Sep 17 00:00:00 2001 From: Martin Junger Date: Tue, 18 Oct 2022 16:07:04 +0200 Subject: [PATCH 13/38] use generator in action --- src/Component.php | 2 +- src/SyncAction/GenerateAction.php | 24 +++++++++++++++++++++--- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/Component.php b/src/Component.php index 6ecc660..973aedf 100644 --- a/src/Component.php +++ b/src/Component.php @@ -19,7 +19,7 @@ protected function run(): void } /** - * @return array{action: string, backendType: string, operation: string, output: mixed[]} + * @return array */ public function actionGenerate(): array { diff --git a/src/SyncAction/GenerateAction.php b/src/SyncAction/GenerateAction.php index 00a8714..ac8b485 100644 --- a/src/SyncAction/GenerateAction.php +++ b/src/SyncAction/GenerateAction.php @@ -4,7 +4,9 @@ namespace Keboola\CustomQueryManagerApp\SyncAction; +use Keboola\Component\UserException; use Keboola\CustomQueryManagerApp\Config; +use Keboola\CustomQueryManagerApp\Generator; class GenerateAction { @@ -18,11 +20,27 @@ public function __construct(Config $config) } /** - * @return array{action: string, backendType: string, operation: string, output: mixed[]} + * @return array */ public function run(): array { - // TODO use import-export-lib + if ($this->config->getBackend() === Config::BACKEND_SNOWFLAKE) { + if ($this->config->getOperation() === Config::OPERATION_IMPORT_FULL_FROM_FILE) { + if ($this->config->getSource() === Config::SOURCE_FILE_ABS) { + $generator = new Generator\Snowflake\ImportFull\FromAbsGenerator(); + $queries = $generator->generate( + $this->config->getColumns(), + $this->config->getPrimaryKeys(), + ); + } else { + throw new UserException('Source not implemented yet'); + } + } else { + throw new UserException('Operation not implemented yet'); + } + } else { + throw new UserException('Backend not implemented yet'); + } return [ 'action' => self::NAME, @@ -32,7 +50,7 @@ public function run(): array 'primaryKeys' => $this->config->getPrimaryKeys(), 'source' => $this->config->getSource(), 'output' => [ - 'foo' => 'bar', + 'queries' => $queries, ], ]; } From c6f63b7c130081d12083914ae6ea2b77dccfa15d Mon Sep 17 00:00:00 2001 From: Martin Junger Date: Tue, 18 Oct 2022 16:18:31 +0200 Subject: [PATCH 14/38] replace supports other quoters --- .../Snowflake/ImportFull/FromAbsGenerator.php | 3 ++- src/Generator/Utils.php | 16 +++++++++------- tests/phpunit/Generator/UtilsTest.php | 4 +++- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/Generator/Snowflake/ImportFull/FromAbsGenerator.php b/src/Generator/Snowflake/ImportFull/FromAbsGenerator.php index f67ba2e..036b490 100644 --- a/src/Generator/Snowflake/ImportFull/FromAbsGenerator.php +++ b/src/Generator/Snowflake/ImportFull/FromAbsGenerator.php @@ -13,6 +13,7 @@ use Keboola\TableBackendUtils\Column\ColumnCollection; use Keboola\TableBackendUtils\Column\ColumnInterface; use Keboola\TableBackendUtils\Column\Snowflake\SnowflakeColumn; +use Keboola\TableBackendUtils\Escaping\Snowflake\SnowflakeQuote; use Keboola\TableBackendUtils\Table\Snowflake\SnowflakeTableDefinition; use Keboola\TableBackendUtils\Table\Snowflake\SnowflakeTableQueryBuilder; use PHPUnit\Framework\TestCase; @@ -169,7 +170,7 @@ static function (...$values) use (&$queries) { $replacedQueries = []; dump('=== queries'); foreach ($queries as $query) { - $replacedQuery = Utils::replaceParamsInQuery($query, $params); + $replacedQuery = Utils::replaceParamsInQuery($query, $params, new SnowflakeQuote()); $replacedQueries[] = $replacedQuery; dump($replacedQuery); dump('---------'); diff --git a/src/Generator/Utils.php b/src/Generator/Utils.php index 3cff10e..5303c1f 100644 --- a/src/Generator/Utils.php +++ b/src/Generator/Utils.php @@ -3,7 +3,7 @@ namespace Keboola\CustomQueryManagerApp\Generator; use Keboola\TableBackendUtils\Column\ColumnInterface; -use Keboola\TableBackendUtils\Escaping\Snowflake\SnowflakeQuote; +use Keboola\TableBackendUtils\Escaping\QuoteInterface; class Utils { @@ -13,6 +13,7 @@ class Utils public static function replaceParamsInQuery( string $query, array $params, + QuoteInterface $quoter, string $outputPrefix = '{{ ', string $outputSuffix = ' }}' ): string { @@ -20,13 +21,13 @@ public static function replaceParamsInQuery( if (is_array($value)) { foreach ($value as $keyInArray => $valueInArray) { if ($valueInArray instanceof ColumnInterface) { - $query = self::replaceParamInQuery($query, $valueInArray->getColumnName(), $keyInArray, $outputPrefix, $outputSuffix); + $query = self::replaceParamInQuery($query, $valueInArray->getColumnName(), $keyInArray, $quoter, $outputPrefix, $outputSuffix); } else { - $query = self::replaceParamInQuery($query, $valueInArray, $keyInArray, $outputPrefix, $outputSuffix); + $query = self::replaceParamInQuery($query, $valueInArray, $keyInArray, $quoter, $outputPrefix, $outputSuffix); } } } else { - $query = self::replaceParamInQuery($query, $value, $key, $outputPrefix, $outputSuffix); + $query = self::replaceParamInQuery($query, $value, $key, $quoter, $outputPrefix, $outputSuffix); } } return $query; @@ -36,24 +37,25 @@ public static function replaceParamInQuery( string $query, string $valueInQuery, string $keyInOutput, + QuoteInterface $quoter, string $outputPrefix = '{{ ', string $outputSuffix = ' }}' ): string { if (strpos($keyInOutput, '#') === 0) { // replace values - $valueInQuery = SnowflakeQuote::quote($valueInQuery); + $valueInQuery = $quoter::quote($valueInQuery); $keyInOutput = substr($keyInOutput, 1); } elseif (strpos($keyInOutput, '/') === 0) { // replace generated identifiers $matches = []; if (preg_match('/\b(' . $valueInQuery . '\w+)\b/', $query, $matches) === 1) { - $valueInQuery = SnowflakeQuote::quoteSingleIdentifier($matches[1]); + $valueInQuery = $quoter::quoteSingleIdentifier($matches[1]); $keyInOutput = substr($keyInOutput, 1); $keyInOutput = sprintf('id(%s)', $keyInOutput); } } else { // replace identifiers - $valueInQuery = SnowflakeQuote::quoteSingleIdentifier($valueInQuery); + $valueInQuery = $quoter::quoteSingleIdentifier($valueInQuery); $keyInOutput = sprintf('id(%s)', $keyInOutput); } return str_replace( diff --git a/tests/phpunit/Generator/UtilsTest.php b/tests/phpunit/Generator/UtilsTest.php index 55229d0..dae0c45 100644 --- a/tests/phpunit/Generator/UtilsTest.php +++ b/tests/phpunit/Generator/UtilsTest.php @@ -3,6 +3,7 @@ namespace Keboola\CustomQueryManagerApp\Tests\Generator; use Keboola\CustomQueryManagerApp\Generator\Utils; +use Keboola\TableBackendUtils\Escaping\Snowflake\SnowflakeQuote; use PHPUnit\Framework\TestCase; class UtilsTest extends TestCase @@ -29,7 +30,7 @@ public function testReplaceParamsInQuery() ], ]; - $output = Utils::replaceParamsInQuery($input, $params); + $output = Utils::replaceParamsInQuery($input, $params, new SnowflakeQuote()); $expected = /** @lang Snowflake */ << Date: Tue, 18 Oct 2022 16:59:38 +0200 Subject: [PATCH 15/38] use given columns and primaryKeys --- .../Snowflake/ImportFull/FromAbsGenerator.php | 76 +++++++------------ 1 file changed, 27 insertions(+), 49 deletions(-) diff --git a/src/Generator/Snowflake/ImportFull/FromAbsGenerator.php b/src/Generator/Snowflake/ImportFull/FromAbsGenerator.php index 036b490..e7bd76f 100644 --- a/src/Generator/Snowflake/ImportFull/FromAbsGenerator.php +++ b/src/Generator/Snowflake/ImportFull/FromAbsGenerator.php @@ -5,6 +5,7 @@ use Doctrine\DBAL\Connection; use Keboola\CsvOptions\CsvOptions; use Keboola\CustomQueryManagerApp\Generator\Utils; +use Keboola\Datatype\Definition\BaseType; use Keboola\Datatype\Definition\Snowflake; use Keboola\Db\ImportExport\Backend\Snowflake\SnowflakeImportOptions; use Keboola\Db\ImportExport\Backend\Snowflake\ToFinalTable\FullImporter; @@ -27,15 +28,28 @@ class FromAbsGenerator extends TestCase */ public function generate(array $columns, array $primaryKeys = []): array { - // TODO use given columns and primaryKeys - // 'foo' = identifier // '#foo' = value // '/foo' = identifier with prefix in value - need to be found first in query - $sourceCol1Name = Utils::getUniqeId('sourceColumn1'); - $sourceCol2Name = Utils::getUniqeId('sourceColumn2'); - $destCol1Name = Utils::getUniqeId('destColumn1'); - $destCol2Name = Utils::getUniqeId('destColumn2'); + + $sourceColumns = $columns; + + $stageColumns = []; + foreach ($columns as $columnName) { + $stageColumns[] = new SnowflakeColumn( + $columnName, + new Snowflake(Snowflake::getTypeByBasetype(BaseType::STRING)) + ); + } + $stagePrimaryKeys = $primaryKeys; + + $destColumns = $stageColumns; + $destColumns[] = new SnowflakeColumn( + ColumnInterface::TIMESTAMP_COLUMN_NAME, + new Snowflake(Snowflake::getTypeByBasetype(BaseType::TIMESTAMP)) + ); + $destPrimaryKeys = $primaryKeys; + $params = [ 'sourceFiles' => [ '#sourceFile1' => Utils::getUniqeId('sourceFile1'), @@ -45,51 +59,13 @@ public function generate(array $columns, array $primaryKeys = []): array 'stageSchemaName' => Utils::getUniqeId('stageSchemaName'), 'stageTableName' => Utils::getUniqeId('__temp_stageTableName'), - 'stageColumns' => [ - 'sourceColumn1' => new SnowflakeColumn( - $sourceCol1Name, - new Snowflake(Snowflake::TYPE_INT) - ), - 'sourceColumn2' => new SnowflakeColumn( - $sourceCol2Name, - new Snowflake(Snowflake::TYPE_VARCHAR) - ), - ], - 'stagePrimaryKeys' => [], -// 'stagePrimaryKeys' => [ -// 'sourceCol1' => $sourceCol1Name, -// ], // dedup table (prefix) '/stageDeduplicationTableName' => '__temp_DEDUP_', 'destSchemaName' => Utils::getUniqeId('destSchemaName'), 'destTableName' => Utils::getUniqeId('destTableName'), - 'destColumns' => [ - 'destCol1' => new SnowflakeColumn( - $destCol1Name, - new Snowflake(Snowflake::TYPE_INT) - ), - 'destCol2' => new SnowflakeColumn( - $destCol2Name, - new Snowflake(Snowflake::TYPE_VARCHAR) - ), - 'destColTimestamp' => new SnowflakeColumn( - Utils::getUniqeId('_timestamp'), - new Snowflake(Snowflake::TYPE_TIMESTAMP) - ), - ], - 'destPrimaryKeys' => [], -// 'destPrimaryKeys' => [ -// 'destPrimaryKey1' => $destCol1Name, -// ], ]; - $sourceColumnsNames = []; - /** @var ColumnInterface $column */ - foreach ($params['stageColumns'] as $column) { - $sourceColumnsNames[] = $column->getColumnName(); - } - $queries = []; // mock connection @@ -105,7 +81,7 @@ static function (...$values) use (&$queries) { $source = $this->createMock(Storage\ABS\SourceFile::class); $source->expects(self::atLeastOnce())->method('getCsvOptions')->willReturn(new CsvOptions()); $source->expects(self::atLeastOnce())->method('getManifestEntries')->willReturn($params['sourceFiles']); - $source->expects(self::atLeastOnce())->method('getColumnsNames')->willReturn($sourceColumnsNames); + $source->expects(self::atLeastOnce())->method('getColumnsNames')->willReturn($sourceColumns); // ABS specific $source->expects(self::atLeastOnce())->method('getContainerUrl')->willReturn($params['#sourceContainerUrl']); $source->expects(self::atLeastOnce())->method('getSasToken')->willReturn($params['#sourceSasToken']); @@ -115,8 +91,8 @@ static function (...$values) use (&$queries) { $params['stageSchemaName'], $params['stageTableName'], true, - new ColumnCollection($params['stageColumns']), - $params['stagePrimaryKeys'] + new ColumnCollection($stageColumns), + $stagePrimaryKeys ); // fake options $options = new SnowflakeImportOptions( @@ -130,8 +106,8 @@ static function (...$values) use (&$queries) { $params['destSchemaName'], $params['destTableName'], false, - new ColumnCollection($params['destColumns']), - $params['destPrimaryKeys'] + new ColumnCollection($destColumns), + $destPrimaryKeys ); // mock importer @@ -170,6 +146,8 @@ static function (...$values) use (&$queries) { $replacedQueries = []; dump('=== queries'); foreach ($queries as $query) { +// dump($query); +// dump('---'); $replacedQuery = Utils::replaceParamsInQuery($query, $params, new SnowflakeQuote()); $replacedQueries[] = $replacedQuery; dump($replacedQuery); From 8391cc98158e37ee2818ba12f79f3944ae47ad44 Mon Sep 17 00:00:00 2001 From: Martin Junger Date: Tue, 18 Oct 2022 17:24:08 +0200 Subject: [PATCH 16/38] add Synapse/ImportFull/FromAbsGenerator --- .../Synapse/ImportFull/FromAbsGenerator.php | 183 ++++++++++++++++++ src/SyncAction/GenerateAction.php | 22 ++- 2 files changed, 199 insertions(+), 6 deletions(-) create mode 100644 src/Generator/Synapse/ImportFull/FromAbsGenerator.php diff --git a/src/Generator/Synapse/ImportFull/FromAbsGenerator.php b/src/Generator/Synapse/ImportFull/FromAbsGenerator.php new file mode 100644 index 0000000..dc088ef --- /dev/null +++ b/src/Generator/Synapse/ImportFull/FromAbsGenerator.php @@ -0,0 +1,183 @@ + [ + '#sourceFile1' => Utils::getUniqeId('sourceFile1'), + ], + '#sourceContainerUrl' => Utils::getUniqeId('sourceContainerUrl'), + '#sourceSasToken' => Utils::getUniqeId('sourceSasToken'), + + 'stageSchemaName' => Utils::getUniqeId('stageSchemaName'), + 'stageTableName' => Utils::getUniqeId('__temp_stageTableName'), + // dedup table (prefix) + '/stageDeduplicationTableName' => '__temp_DEDUP_', + + 'destSchemaName' => Utils::getUniqeId('destSchemaName'), + 'destTableName' => Utils::getUniqeId('destTableName'), + ]; + + $queries = []; + + // mock connection + $conn = $this->createMock(Connection::class); + $conn->expects(self::atLeastOnce())->method('executeStatement')->willReturnCallback( + static function (...$values) use (&$queries) { + $queries[] = $values[0]; + return 0; + } + ); + + // mock file source + $source = $this->createMock(Storage\ABS\SourceFile::class); + $source->expects(self::atLeastOnce())->method('getCsvOptions')->willReturn(new CsvOptions()); + $source->expects(self::atLeastOnce())->method('getManifestEntries')->willReturn($params['sourceFiles']); + $source->expects(self::atLeastOnce())->method('getColumnsNames')->willReturn($sourceColumns); + // ABS specific + $source->expects(self::atLeastOnce())->method('getContainerUrl')->willReturn($params['#sourceContainerUrl']); + $source->expects(self::atLeastOnce())->method('getSasToken')->willReturn($params['#sourceSasToken']); + + // fake staging table + $stagingTable = new SynapseTableDefinition( + $params['stageSchemaName'], + $params['stageTableName'], + true, + new ColumnCollection($stageColumns), + $stagePrimaryKeys, + new TableDistributionDefinition( + TableDistributionDefinition::TABLE_DISTRIBUTION_HASH, + $stagePrimaryKeys + ), + new TableIndexDefinition( + TableIndexDefinition::TABLE_INDEX_TYPE_HEAP, + $stagePrimaryKeys + ) + ); + // fake options + $options = new SynapseImportOptions( + [], + false, + false, + 1 + ); + // fake destination + $destination = new SynapseTableDefinition( + $params['destSchemaName'], + $params['destTableName'], + false, + new ColumnCollection($destColumns), + $destPrimaryKeys, + new TableDistributionDefinition( + TableDistributionDefinition::TABLE_DISTRIBUTION_HASH, + $destPrimaryKeys + ), + new TableIndexDefinition( + TableIndexDefinition::TABLE_INDEX_TYPE_HEAP, + $destPrimaryKeys + ) + ); + + // mock importer + $importer = new ToStageImporter($conn); + + // init query builder + $qb = new SynapseTableQueryBuilder(); + + // ACTION: create stage table + $conn->executeStatement( + $qb->getCreateTableCommandFromDefinition($stagingTable) + ); + + // ACTION: create final table + $conn->executeStatement( + $qb->getCreateTableCommandFromDefinition($destination) + ); + + // ACTION: import to stage table + $importState = $importer->importToStagingTable( + $source, + $stagingTable, + $options + ); + + // ACTION: import to final table + $toFinalTableImporter = new FullImporter($conn); + $result = $toFinalTableImporter->importToTable( + $stagingTable, + $destination, + $options, + $importState + ); + + // result + $replacedQueries = []; + dump('=== queries'); + foreach ($queries as $query) { +// dump($query); +// dump('---'); + $replacedQuery = Utils::replaceParamsInQuery($query, $params, new SynapseQuote()); + $replacedQueries[] = $replacedQuery; + dump($replacedQuery); + dump('---------'); + } + + return $replacedQueries; + } +} diff --git a/src/SyncAction/GenerateAction.php b/src/SyncAction/GenerateAction.php index ac8b485..28b38d4 100644 --- a/src/SyncAction/GenerateAction.php +++ b/src/SyncAction/GenerateAction.php @@ -24,6 +24,8 @@ public function __construct(Config $config) */ public function run(): array { + $queries = []; + if ($this->config->getBackend() === Config::BACKEND_SNOWFLAKE) { if ($this->config->getOperation() === Config::OPERATION_IMPORT_FULL_FROM_FILE) { if ($this->config->getSource() === Config::SOURCE_FILE_ABS) { @@ -32,14 +34,22 @@ public function run(): array $this->config->getColumns(), $this->config->getPrimaryKeys(), ); - } else { - throw new UserException('Source not implemented yet'); } - } else { - throw new UserException('Operation not implemented yet'); } - } else { - throw new UserException('Backend not implemented yet'); + } elseif ($this->config->getBackend() === Config::BACKEND_SYNAPSE) { + if ($this->config->getOperation() === Config::OPERATION_IMPORT_FULL_FROM_FILE) { + if ($this->config->getSource() === Config::SOURCE_FILE_ABS) { + $generator = new Generator\Synapse\ImportFull\FromAbsGenerator(); + $queries = $generator->generate( + $this->config->getColumns(), + $this->config->getPrimaryKeys(), + ); + } + } + } + + if (empty($queries)) { + throw new UserException('Combination of Backend/Operation/Source not implemented yet'); } return [ From 7529154d9527f84c6e94535da37bb293d864c3b7 Mon Sep 17 00:00:00 2001 From: Martin Junger Date: Wed, 19 Oct 2022 11:37:03 +0200 Subject: [PATCH 17/38] add Synapse/ImportFull/FromTableGenerator --- src/ConfigDefinition.php | 3 +- .../Synapse/ImportFull/FromTableGenerator.php | 172 ++++++++++++++++++ src/SyncAction/GenerateAction.php | 8 + 3 files changed, 181 insertions(+), 2 deletions(-) create mode 100644 src/Generator/Synapse/ImportFull/FromTableGenerator.php diff --git a/src/ConfigDefinition.php b/src/ConfigDefinition.php index c841b60..5960dd2 100644 --- a/src/ConfigDefinition.php +++ b/src/ConfigDefinition.php @@ -32,10 +32,9 @@ protected function getParametersDefinition(): ArrayNodeDefinition ->end() ->end() ->arrayNode('primaryKeys') - ->isRequired() - ->requiresAtLeastOneElement() ->scalarPrototype() ->cannotBeEmpty() + ->defaultValue([]) ->end() ->end() ->enumNode('source') diff --git a/src/Generator/Synapse/ImportFull/FromTableGenerator.php b/src/Generator/Synapse/ImportFull/FromTableGenerator.php new file mode 100644 index 0000000..17dbbee --- /dev/null +++ b/src/Generator/Synapse/ImportFull/FromTableGenerator.php @@ -0,0 +1,172 @@ + Utils::getUniqeId('sourceSchemaName'), + 'sourceTableName' => Utils::getUniqeId('sourceTableName'), + + 'stageSchemaName' => Utils::getUniqeId('stageSchemaName'), + 'stageTableName' => Utils::getUniqeId('__temp_stageTableName'), + // dedup table (prefix) + '/stageDeduplicationTableName' => '__temp_DEDUP_', + + 'destSchemaName' => Utils::getUniqeId('destSchemaName'), + 'destTableName' => Utils::getUniqeId('destTableName'), + ]; + + $queries = []; + + // mock connection + $conn = $this->createMock(Connection::class); + $conn->expects(self::atLeastOnce())->method('executeStatement')->willReturnCallback( + static function (...$values) use (&$queries) { + $queries[] = $values[0]; + return 0; + } + ); + + // fake source table + $source = new Storage\Synapse\Table( + $params['sourceSchemaName'], + $params['sourceTableName'], + $sourceColumns, + $sourcePrimaryKeys, + ); + + // fake staging table + $stagingTable = new SynapseTableDefinition( + $params['stageSchemaName'], + $params['stageTableName'], + true, + new ColumnCollection($stageColumns), + $stagePrimaryKeys, + new TableDistributionDefinition( + TableDistributionDefinition::TABLE_DISTRIBUTION_ROUND_ROBIN, + $stagePrimaryKeys + ), + new TableIndexDefinition( + TableIndexDefinition::TABLE_INDEX_TYPE_CLUSTERED_COLUMNSTORE_INDEX, + $stagePrimaryKeys + ) + ); + // fake options + $options = new SynapseImportOptions( + [], + false, + false, + 1 + ); + // fake destination + $destination = new SynapseTableDefinition( + $params['destSchemaName'], + $params['destTableName'], + false, + new ColumnCollection($destColumns), + $destPrimaryKeys, + new TableDistributionDefinition( + TableDistributionDefinition::TABLE_DISTRIBUTION_ROUND_ROBIN, + $destPrimaryKeys + ), + new TableIndexDefinition( + TableIndexDefinition::TABLE_INDEX_TYPE_CLUSTERED_COLUMNSTORE_INDEX, + $destPrimaryKeys + ) + ); + + // mock importer + $importer = new ToStageImporter($conn); + + // init query builder + $qb = new SynapseTableQueryBuilder(); + + // ACTION: create stage table + $conn->executeStatement( + $qb->getCreateTableCommandFromDefinition($stagingTable) + ); + + // ACTION: import to stage table + $importState = $importer->importToStagingTable( + $source, + $stagingTable, + $options + ); + + // ACTION: import to final table + $toFinalTableImporter = new FullImporter($conn); + $result = $toFinalTableImporter->importToTable( + $stagingTable, + $destination, + $options, + $importState + ); + + // result + $replacedQueries = []; + dump('=== queries'); + foreach ($queries as $query) { +// dump($query); +// dump('---'); + $replacedQuery = Utils::replaceParamsInQuery($query, $params, new SynapseQuote()); + $replacedQueries[] = $replacedQuery; + dump($replacedQuery); + dump('---------'); + } + + return $replacedQueries; + } +} diff --git a/src/SyncAction/GenerateAction.php b/src/SyncAction/GenerateAction.php index 28b38d4..40d7d92 100644 --- a/src/SyncAction/GenerateAction.php +++ b/src/SyncAction/GenerateAction.php @@ -45,6 +45,14 @@ public function run(): array $this->config->getPrimaryKeys(), ); } + } elseif ($this->config->getOperation() === Config::OPERATION_IMPORT_FULL_FROM_TABLE) { + if ($this->config->getSource() === Config::SOURCE_TABLE) { + $generator = new Generator\Synapse\ImportFull\FromTableGenerator(); + $queries = $generator->generate( + $this->config->getColumns(), + $this->config->getPrimaryKeys(), + ); + } } } From 2547abdde8f3e47419d473793e4796389bbc6f98 Mon Sep 17 00:00:00 2001 From: Martin Junger Date: Wed, 19 Oct 2022 11:43:59 +0200 Subject: [PATCH 18/38] replace Synapse distribution and index methods --- src/Generator/Synapse/ImportFull/FromAbsGenerator.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Generator/Synapse/ImportFull/FromAbsGenerator.php b/src/Generator/Synapse/ImportFull/FromAbsGenerator.php index dc088ef..d9aa335 100644 --- a/src/Generator/Synapse/ImportFull/FromAbsGenerator.php +++ b/src/Generator/Synapse/ImportFull/FromAbsGenerator.php @@ -102,11 +102,11 @@ static function (...$values) use (&$queries) { new ColumnCollection($stageColumns), $stagePrimaryKeys, new TableDistributionDefinition( - TableDistributionDefinition::TABLE_DISTRIBUTION_HASH, + TableDistributionDefinition::TABLE_DISTRIBUTION_ROUND_ROBIN, $stagePrimaryKeys ), new TableIndexDefinition( - TableIndexDefinition::TABLE_INDEX_TYPE_HEAP, + TableIndexDefinition::TABLE_INDEX_TYPE_CLUSTERED_COLUMNSTORE_INDEX, $stagePrimaryKeys ) ); @@ -125,11 +125,11 @@ static function (...$values) use (&$queries) { new ColumnCollection($destColumns), $destPrimaryKeys, new TableDistributionDefinition( - TableDistributionDefinition::TABLE_DISTRIBUTION_HASH, + TableDistributionDefinition::TABLE_DISTRIBUTION_ROUND_ROBIN, $destPrimaryKeys ), new TableIndexDefinition( - TableIndexDefinition::TABLE_INDEX_TYPE_HEAP, + TableIndexDefinition::TABLE_INDEX_TYPE_CLUSTERED_COLUMNSTORE_INDEX, $destPrimaryKeys ) ); From e35f9cf85cf0b2531b891adebbd55f0ff5300999 Mon Sep 17 00:00:00 2001 From: Martin Junger Date: Wed, 19 Oct 2022 11:44:17 +0200 Subject: [PATCH 19/38] remove create final table --- src/Generator/Snowflake/ImportFull/FromAbsGenerator.php | 5 ----- src/Generator/Synapse/ImportFull/FromAbsGenerator.php | 5 ----- 2 files changed, 10 deletions(-) diff --git a/src/Generator/Snowflake/ImportFull/FromAbsGenerator.php b/src/Generator/Snowflake/ImportFull/FromAbsGenerator.php index e7bd76f..0793e80 100644 --- a/src/Generator/Snowflake/ImportFull/FromAbsGenerator.php +++ b/src/Generator/Snowflake/ImportFull/FromAbsGenerator.php @@ -121,11 +121,6 @@ static function (...$values) use (&$queries) { $qb->getCreateTableCommandFromDefinition($stagingTable) ); - // ACTION: create final table - $conn->executeStatement( - $qb->getCreateTableCommandFromDefinition($destination) - ); - // ACTION: import to stage table $importState = $importer->importToStagingTable( $source, diff --git a/src/Generator/Synapse/ImportFull/FromAbsGenerator.php b/src/Generator/Synapse/ImportFull/FromAbsGenerator.php index d9aa335..9a0655e 100644 --- a/src/Generator/Synapse/ImportFull/FromAbsGenerator.php +++ b/src/Generator/Synapse/ImportFull/FromAbsGenerator.php @@ -145,11 +145,6 @@ static function (...$values) use (&$queries) { $qb->getCreateTableCommandFromDefinition($stagingTable) ); - // ACTION: create final table - $conn->executeStatement( - $qb->getCreateTableCommandFromDefinition($destination) - ); - // ACTION: import to stage table $importState = $importer->importToStagingTable( $source, From 9ac45a8686a051bdf2afa5321c15d0003a891bd8 Mon Sep 17 00:00:00 2001 From: Martin Junger Date: Wed, 19 Oct 2022 11:53:38 +0200 Subject: [PATCH 20/38] update names of operation parameter --- src/Config.php | 8 ++++---- src/SyncAction/GenerateAction.php | 5 ++--- tests/phpunit/ConfigDefinitionTest.php | 12 ++++++------ 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/Config.php b/src/Config.php index 5e02d16..66db978 100644 --- a/src/Config.php +++ b/src/Config.php @@ -17,11 +17,11 @@ class Config extends BaseConfig ]; // operation for generate action - public const OPERATION_IMPORT_FULL_FROM_FILE = 'importFullFromFile'; - public const OPERATION_IMPORT_FULL_FROM_TABLE = 'importFullFromTable'; + public const OPERATION_IMPORT_FULL = 'importFull'; + public const OPERATION_IMPORT_INCREMENTAL = 'importIncremental'; public const OPERATIONS = [ - self::OPERATION_IMPORT_FULL_FROM_FILE, - self::OPERATION_IMPORT_FULL_FROM_TABLE, + self::OPERATION_IMPORT_FULL, + self::OPERATION_IMPORT_INCREMENTAL, ]; // supported sources diff --git a/src/SyncAction/GenerateAction.php b/src/SyncAction/GenerateAction.php index 40d7d92..b498cfe 100644 --- a/src/SyncAction/GenerateAction.php +++ b/src/SyncAction/GenerateAction.php @@ -27,7 +27,7 @@ public function run(): array $queries = []; if ($this->config->getBackend() === Config::BACKEND_SNOWFLAKE) { - if ($this->config->getOperation() === Config::OPERATION_IMPORT_FULL_FROM_FILE) { + if ($this->config->getOperation() === Config::OPERATION_IMPORT_FULL) { if ($this->config->getSource() === Config::SOURCE_FILE_ABS) { $generator = new Generator\Snowflake\ImportFull\FromAbsGenerator(); $queries = $generator->generate( @@ -37,7 +37,7 @@ public function run(): array } } } elseif ($this->config->getBackend() === Config::BACKEND_SYNAPSE) { - if ($this->config->getOperation() === Config::OPERATION_IMPORT_FULL_FROM_FILE) { + if ($this->config->getOperation() === Config::OPERATION_IMPORT_FULL) { if ($this->config->getSource() === Config::SOURCE_FILE_ABS) { $generator = new Generator\Synapse\ImportFull\FromAbsGenerator(); $queries = $generator->generate( @@ -45,7 +45,6 @@ public function run(): array $this->config->getPrimaryKeys(), ); } - } elseif ($this->config->getOperation() === Config::OPERATION_IMPORT_FULL_FROM_TABLE) { if ($this->config->getSource() === Config::SOURCE_TABLE) { $generator = new Generator\Synapse\ImportFull\FromTableGenerator(); $queries = $generator->generate( diff --git a/tests/phpunit/ConfigDefinitionTest.php b/tests/phpunit/ConfigDefinitionTest.php index 7473f86..1054096 100644 --- a/tests/phpunit/ConfigDefinitionTest.php +++ b/tests/phpunit/ConfigDefinitionTest.php @@ -58,7 +58,7 @@ public function provideInvalidConfigs(): array } JSON, InvalidConfigurationException::class, - 'The value "" is not allowed for path "root.parameters.operation". Permissible values: "importFullFromFile", "importFullFromTable"', + 'The value "" is not allowed for path "root.parameters.operation". Permissible values: "importFull", "importIncremental"', ], // TODO backend // TODO source @@ -72,7 +72,7 @@ public function testValidGetParametersDefinition(): void $inputs = <<processConfiguration(new ConfigDefinition(), [$config]); self::assertSame([ 'parameters' => [ - 'operation' => 'importFullFromFile', + 'operation' => 'importFull', 'backend' => 'snowflake', 'source' => 'fileAbs', 'columns' => [ - 'aaa', - 'bbb' + 'col1', + 'col2' ], 'primaryKeys' => [ - 'aaa' + 'col1' ], ], ], $processedConfig); From 612ae362d048a3bdf17df2b4cf47f4eacd36ad20 Mon Sep 17 00:00:00 2001 From: Martin Junger Date: Wed, 19 Oct 2022 12:01:29 +0200 Subject: [PATCH 21/38] reformat output queries --- src/SyncAction/GenerateAction.php | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/SyncAction/GenerateAction.php b/src/SyncAction/GenerateAction.php index b498cfe..04f0b52 100644 --- a/src/SyncAction/GenerateAction.php +++ b/src/SyncAction/GenerateAction.php @@ -67,8 +67,24 @@ public function run(): array 'primaryKeys' => $this->config->getPrimaryKeys(), 'source' => $this->config->getSource(), 'output' => [ - 'queries' => $queries, + 'queries' => $this->formatQueriesForOutput($queries), ], ]; } + + /** + * @param string[] $queries + * @return array{sql: string, description: string}[] + */ + private function formatQueriesForOutput(array $queries): array + { + $output = []; + foreach ($queries as $query) { + $output[] = [ + 'sql' => $query, + 'description' => '', + ]; + } + return $output; + } } From 8a81f0bf441953f7511fa1167794f7e82191a220 Mon Sep 17 00:00:00 2001 From: Martin Junger Date: Wed, 19 Oct 2022 12:13:45 +0200 Subject: [PATCH 22/38] change replace identifier for prefix --- .../Snowflake/ImportFull/FromAbsGenerator.php | 6 +----- .../Synapse/ImportFull/FromAbsGenerator.php | 6 +----- .../Synapse/ImportFull/FromTableGenerator.php | 6 +----- src/Generator/Utils.php | 13 +++++++++++-- tests/phpunit/Generator/UtilsTest.php | 8 ++++---- 5 files changed, 18 insertions(+), 21 deletions(-) diff --git a/src/Generator/Snowflake/ImportFull/FromAbsGenerator.php b/src/Generator/Snowflake/ImportFull/FromAbsGenerator.php index 0793e80..3e29ed4 100644 --- a/src/Generator/Snowflake/ImportFull/FromAbsGenerator.php +++ b/src/Generator/Snowflake/ImportFull/FromAbsGenerator.php @@ -28,10 +28,6 @@ class FromAbsGenerator extends TestCase */ public function generate(array $columns, array $primaryKeys = []): array { - // 'foo' = identifier - // '#foo' = value - // '/foo' = identifier with prefix in value - need to be found first in query - $sourceColumns = $columns; $stageColumns = []; @@ -60,7 +56,7 @@ public function generate(array $columns, array $primaryKeys = []): array 'stageSchemaName' => Utils::getUniqeId('stageSchemaName'), 'stageTableName' => Utils::getUniqeId('__temp_stageTableName'), // dedup table (prefix) - '/stageDeduplicationTableName' => '__temp_DEDUP_', + '^stageDeduplicationTableName' => '__temp_DEDUP_', 'destSchemaName' => Utils::getUniqeId('destSchemaName'), 'destTableName' => Utils::getUniqeId('destTableName'), diff --git a/src/Generator/Synapse/ImportFull/FromAbsGenerator.php b/src/Generator/Synapse/ImportFull/FromAbsGenerator.php index 9a0655e..ba28cc9 100644 --- a/src/Generator/Synapse/ImportFull/FromAbsGenerator.php +++ b/src/Generator/Synapse/ImportFull/FromAbsGenerator.php @@ -30,10 +30,6 @@ class FromAbsGenerator extends TestCase */ public function generate(array $columns, array $primaryKeys = []): array { - // 'foo' = identifier - // '#foo' = value - // '/foo' = identifier with prefix in value - need to be found first in query - // TODO replace SECRET ($sourceSasToken): // CREDENTIAL=(IDENTITY='Shared Access Signature', SECRET='?sourceSasToken634ec2b2aaa4f608157197'), // TODO replace dedup table (sufix): @@ -68,7 +64,7 @@ public function generate(array $columns, array $primaryKeys = []): array 'stageSchemaName' => Utils::getUniqeId('stageSchemaName'), 'stageTableName' => Utils::getUniqeId('__temp_stageTableName'), // dedup table (prefix) - '/stageDeduplicationTableName' => '__temp_DEDUP_', + '^stageDeduplicationTableName' => '__temp_DEDUP_', 'destSchemaName' => Utils::getUniqeId('destSchemaName'), 'destTableName' => Utils::getUniqeId('destTableName'), diff --git a/src/Generator/Synapse/ImportFull/FromTableGenerator.php b/src/Generator/Synapse/ImportFull/FromTableGenerator.php index 17dbbee..b71da05 100644 --- a/src/Generator/Synapse/ImportFull/FromTableGenerator.php +++ b/src/Generator/Synapse/ImportFull/FromTableGenerator.php @@ -29,10 +29,6 @@ class FromTableGenerator extends TestCase */ public function generate(array $columns, array $primaryKeys = []): array { - // 'foo' = identifier - // '#foo' = value - // '/foo' = identifier with prefix in value - need to be found first in query - // TODO replace dedup table (sufix): // CREATE TABLE {{ id(destSchemaName) }}.[destTableName634ec2b2aaa54129985850tmp634ec2b2c31150_96482587_tmp] // RENAME OBJECT {{ id(destSchemaName) }}.{{ id(destTableName) }} TO [destTableName634ec2b2aaa54129985850tmp634ec2b2c31150_96482587_tmp_rename] @@ -63,7 +59,7 @@ public function generate(array $columns, array $primaryKeys = []): array 'stageSchemaName' => Utils::getUniqeId('stageSchemaName'), 'stageTableName' => Utils::getUniqeId('__temp_stageTableName'), // dedup table (prefix) - '/stageDeduplicationTableName' => '__temp_DEDUP_', + '^stageDeduplicationTableName' => '__temp_DEDUP_', 'destSchemaName' => Utils::getUniqeId('destSchemaName'), 'destTableName' => Utils::getUniqeId('destTableName'), diff --git a/src/Generator/Utils.php b/src/Generator/Utils.php index 5303c1f..7105e1f 100644 --- a/src/Generator/Utils.php +++ b/src/Generator/Utils.php @@ -8,6 +8,11 @@ class Utils { /** + * Keys in `$params` can specify their purpose: + * - 'foo' = identifier + * - '#foo' = value + * - '^foo' = identifier with prefix in value + * * @param mixed[] $params */ public static function replaceParamsInQuery( @@ -45,13 +50,17 @@ public static function replaceParamInQuery( // replace values $valueInQuery = $quoter::quote($valueInQuery); $keyInOutput = substr($keyInOutput, 1); - } elseif (strpos($keyInOutput, '/') === 0) { - // replace generated identifiers + } elseif (strpos($keyInOutput, '^') === 0) { + // replace generated identifiers at the beginning $matches = []; if (preg_match('/\b(' . $valueInQuery . '\w+)\b/', $query, $matches) === 1) { $valueInQuery = $quoter::quoteSingleIdentifier($matches[1]); $keyInOutput = substr($keyInOutput, 1); $keyInOutput = sprintf('id(%s)', $keyInOutput); + } else { + // not found, return original query + return $query; + } } } else { // replace identifiers diff --git a/tests/phpunit/Generator/UtilsTest.php b/tests/phpunit/Generator/UtilsTest.php index dae0c45..d88ba8d 100644 --- a/tests/phpunit/Generator/UtilsTest.php +++ b/tests/phpunit/Generator/UtilsTest.php @@ -65,7 +65,7 @@ public function replaceParamInQueryProvider(): array FROM 'sourceContainerUrl6336ebdee0b80' SQL; - $dedupQuery = << [ - $dedupQuery, - '/stageDeduplicationTableName', + 'test generated id at the beginning' => [ + $dedupQuerySnowflake, + '^stageDeduplicationTableName', '__temp_DEDUP_', '{{ ', ' }}', From 22ef58b7aabaa043af90152616951baf3e792829 Mon Sep 17 00:00:00 2001 From: Martin Junger Date: Wed, 19 Oct 2022 14:45:39 +0200 Subject: [PATCH 23/38] add replace identifier for suffix --- .../Synapse/ImportFull/FromAbsGenerator.php | 8 +-- .../Synapse/ImportFull/FromTableGenerator.php | 9 +-- src/Generator/Utils.php | 12 ++++ tests/phpunit/Generator/UtilsTest.php | 57 ++++++++++++++++++- 4 files changed, 73 insertions(+), 13 deletions(-) diff --git a/src/Generator/Synapse/ImportFull/FromAbsGenerator.php b/src/Generator/Synapse/ImportFull/FromAbsGenerator.php index ba28cc9..f6d20c8 100644 --- a/src/Generator/Synapse/ImportFull/FromAbsGenerator.php +++ b/src/Generator/Synapse/ImportFull/FromAbsGenerator.php @@ -32,9 +32,6 @@ public function generate(array $columns, array $primaryKeys = []): array { // TODO replace SECRET ($sourceSasToken): // CREDENTIAL=(IDENTITY='Shared Access Signature', SECRET='?sourceSasToken634ec2b2aaa4f608157197'), - // TODO replace dedup table (sufix): - // CREATE TABLE {{ id(destSchemaName) }}.[destTableName634ec2b2aaa54129985850tmp634ec2b2c31150_96482587_tmp] - // RENAME OBJECT {{ id(destSchemaName) }}.{{ id(destTableName) }} TO [destTableName634ec2b2aaa54129985850tmp634ec2b2c31150_96482587_tmp_rename] $sourceColumns = $columns; @@ -63,8 +60,9 @@ public function generate(array $columns, array $primaryKeys = []): array 'stageSchemaName' => Utils::getUniqeId('stageSchemaName'), 'stageTableName' => Utils::getUniqeId('__temp_stageTableName'), - // dedup table (prefix) - '^stageDeduplicationTableName' => '__temp_DEDUP_', + // dedup table (suffix) + '$stageDeduplicationTableName' => '_tmp', + '$stageDeduplicationRenameTableName' => '_tmp_rename', 'destSchemaName' => Utils::getUniqeId('destSchemaName'), 'destTableName' => Utils::getUniqeId('destTableName'), diff --git a/src/Generator/Synapse/ImportFull/FromTableGenerator.php b/src/Generator/Synapse/ImportFull/FromTableGenerator.php index b71da05..3203fdb 100644 --- a/src/Generator/Synapse/ImportFull/FromTableGenerator.php +++ b/src/Generator/Synapse/ImportFull/FromTableGenerator.php @@ -29,10 +29,6 @@ class FromTableGenerator extends TestCase */ public function generate(array $columns, array $primaryKeys = []): array { - // TODO replace dedup table (sufix): - // CREATE TABLE {{ id(destSchemaName) }}.[destTableName634ec2b2aaa54129985850tmp634ec2b2c31150_96482587_tmp] - // RENAME OBJECT {{ id(destSchemaName) }}.{{ id(destTableName) }} TO [destTableName634ec2b2aaa54129985850tmp634ec2b2c31150_96482587_tmp_rename] - $sourceColumns = $columns; $sourcePrimaryKeys = $primaryKeys; @@ -58,8 +54,9 @@ public function generate(array $columns, array $primaryKeys = []): array 'stageSchemaName' => Utils::getUniqeId('stageSchemaName'), 'stageTableName' => Utils::getUniqeId('__temp_stageTableName'), - // dedup table (prefix) - '^stageDeduplicationTableName' => '__temp_DEDUP_', + // dedup table (suffix) + '$stageDeduplicationTableName' => '_tmp', + '$stageDeduplicationRenameTableName' => '_tmp_rename', 'destSchemaName' => Utils::getUniqeId('destSchemaName'), 'destTableName' => Utils::getUniqeId('destTableName'), diff --git a/src/Generator/Utils.php b/src/Generator/Utils.php index 7105e1f..0a97f7d 100644 --- a/src/Generator/Utils.php +++ b/src/Generator/Utils.php @@ -12,6 +12,7 @@ class Utils * - 'foo' = identifier * - '#foo' = value * - '^foo' = identifier with prefix in value + * - '$foo' = identifier with suffix in value * * @param mixed[] $params */ @@ -61,12 +62,23 @@ public static function replaceParamInQuery( // not found, return original query return $query; } + } elseif (strpos($keyInOutput, '$') === 0) { + // replace generated identifiers at the end + $matches = []; + if (preg_match('/\b(\w+' . $valueInQuery . ')\b/', $query, $matches) === 1) { + $valueInQuery = $quoter::quoteSingleIdentifier($matches[1]); + $keyInOutput = substr($keyInOutput, 1); + $keyInOutput = sprintf('id(%s)', $keyInOutput); + } else { + // not found, return original query + return $query; } } else { // replace identifiers $valueInQuery = $quoter::quoteSingleIdentifier($valueInQuery); $keyInOutput = sprintf('id(%s)', $keyInOutput); } + return str_replace( $valueInQuery, sprintf( diff --git a/tests/phpunit/Generator/UtilsTest.php b/tests/phpunit/Generator/UtilsTest.php index d88ba8d..ad3d1ef 100644 --- a/tests/phpunit/Generator/UtilsTest.php +++ b/tests/phpunit/Generator/UtilsTest.php @@ -3,7 +3,9 @@ namespace Keboola\CustomQueryManagerApp\Tests\Generator; use Keboola\CustomQueryManagerApp\Generator\Utils; +use Keboola\TableBackendUtils\Escaping\QuoteInterface; use Keboola\TableBackendUtils\Escaping\Snowflake\SnowflakeQuote; +use Keboola\TableBackendUtils\Escaping\SynapseQuote; use PHPUnit\Framework\TestCase; class UtilsTest extends TestCase @@ -45,13 +47,13 @@ public function testReplaceParamsInQuery() /** * @dataProvider replaceParamInQueryProvider */ - public function testReplaceParamInQuery(string $input, string $key, string $value, ?string $prefix, ?string $suffix, string $expectedOutput): void + public function testReplaceParamInQuery(string $input, string $key, string $value, QuoteInterface $quoter, ?string $prefix, ?string $suffix, string $expectedOutput): void { $output = Utils::replaceParamInQuery( $input, $value, $key, - new SnowflakeQuote(), + $quoter, $prefix, $suffix, ); @@ -70,11 +72,22 @@ public function replaceParamInQueryProvider(): array FROM 'sourceContainerUrl6336ebdee0b80' SQL; + $dedupQuerySynapse = << [ $defaultQuery, 'keyInOutput' => 'stageSchemaName', 'valueInQuery' => 'stageSchemaName6336e8dda7606', + new SnowflakeQuote(), '{{ ', ' }}', 'output' => << [ + $dedupQuerySynapse, + '$destDeduplicationTableName', + '_tmp', + new SynapseQuote(), + '{{ ', + ' }}', + << [ + $dedupQueryWithRenameSynapse, + '$destDeduplicationTableName', + '_tmp', + new SynapseQuote(), + '{{ ', + ' }}', + << [ + $dedupQueryWithRenameSynapse, + '$destDeduplicationTableName', + '_tmp_rename', + new SynapseQuote(), + '{{ ', + ' }}', + << Date: Wed, 19 Oct 2022 15:14:56 +0200 Subject: [PATCH 24/38] replace Synapse SECRET prefixed value --- .../Synapse/ImportFull/FromAbsGenerator.php | 9 ++++---- tests/phpunit/Generator/UtilsTest.php | 21 +++++++++++++++++++ 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/Generator/Synapse/ImportFull/FromAbsGenerator.php b/src/Generator/Synapse/ImportFull/FromAbsGenerator.php index f6d20c8..8ef4040 100644 --- a/src/Generator/Synapse/ImportFull/FromAbsGenerator.php +++ b/src/Generator/Synapse/ImportFull/FromAbsGenerator.php @@ -30,9 +30,6 @@ class FromAbsGenerator extends TestCase */ public function generate(array $columns, array $primaryKeys = []): array { - // TODO replace SECRET ($sourceSasToken): - // CREDENTIAL=(IDENTITY='Shared Access Signature', SECRET='?sourceSasToken634ec2b2aaa4f608157197'), - $sourceColumns = $columns; $stageColumns = []; @@ -51,12 +48,16 @@ public function generate(array $columns, array $primaryKeys = []): array ); $destPrimaryKeys = $primaryKeys; + $sourceSasToken = Utils::getUniqeId('sourceSasToken'); + $params = [ 'sourceFiles' => [ '#sourceFile1' => Utils::getUniqeId('sourceFile1'), ], '#sourceContainerUrl' => Utils::getUniqeId('sourceContainerUrl'), - '#sourceSasToken' => Utils::getUniqeId('sourceSasToken'), + '#sourceSasToken' => $sourceSasToken, + // generated sql contains different value (prefixed) -> key contains Twig format + '#\'?\' ~ sourceSasToken' => sprintf('?%s', $sourceSasToken), 'stageSchemaName' => Utils::getUniqeId('stageSchemaName'), 'stageTableName' => Utils::getUniqeId('__temp_stageTableName'), diff --git a/tests/phpunit/Generator/UtilsTest.php b/tests/phpunit/Generator/UtilsTest.php index ad3d1ef..804777f 100644 --- a/tests/phpunit/Generator/UtilsTest.php +++ b/tests/phpunit/Generator/UtilsTest.php @@ -82,6 +82,12 @@ public function replaceParamInQueryProvider(): array WITH (DISTRIBUTION=ROUND_ROBIN,CLUSTERED COLUMNSTORE INDEX) SQL; + $defaultQueryWithSecretSynapse = << [ $defaultQuery, @@ -179,6 +185,21 @@ public function replaceParamInQueryProvider(): array WITH (DISTRIBUTION=ROUND_ROBIN,CLUSTERED COLUMNSTORE INDEX) SQL, ], + 'test prefixed value produces Twig syntax - synapse' => [ + $defaultQueryWithSecretSynapse, + // '#' means value + Twig syntax + '#\'?\' ~ sourceSasSecret', + // prefixed by '?' + '?sourceSasToken634ff46baec58062943542', + new SynapseQuote(), + '{{ ', + ' }}', + << Date: Wed, 19 Oct 2022 15:22:58 +0200 Subject: [PATCH 25/38] replace dedup tables usign Twig syntax --- src/Generator/Synapse/ImportFull/FromAbsGenerator.php | 4 ++-- src/Generator/Synapse/ImportFull/FromTableGenerator.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Generator/Synapse/ImportFull/FromAbsGenerator.php b/src/Generator/Synapse/ImportFull/FromAbsGenerator.php index 8ef4040..2949a9d 100644 --- a/src/Generator/Synapse/ImportFull/FromAbsGenerator.php +++ b/src/Generator/Synapse/ImportFull/FromAbsGenerator.php @@ -62,8 +62,8 @@ public function generate(array $columns, array $primaryKeys = []): array 'stageSchemaName' => Utils::getUniqeId('stageSchemaName'), 'stageTableName' => Utils::getUniqeId('__temp_stageTableName'), // dedup table (suffix) - '$stageDeduplicationTableName' => '_tmp', - '$stageDeduplicationRenameTableName' => '_tmp_rename', + '$stageTableName ~ \'_tmp\'' => '_tmp', + '$stageTableName ~ \'_tmp_rename\'' => '_tmp_rename', 'destSchemaName' => Utils::getUniqeId('destSchemaName'), 'destTableName' => Utils::getUniqeId('destTableName'), diff --git a/src/Generator/Synapse/ImportFull/FromTableGenerator.php b/src/Generator/Synapse/ImportFull/FromTableGenerator.php index 3203fdb..38c5002 100644 --- a/src/Generator/Synapse/ImportFull/FromTableGenerator.php +++ b/src/Generator/Synapse/ImportFull/FromTableGenerator.php @@ -55,8 +55,8 @@ public function generate(array $columns, array $primaryKeys = []): array 'stageSchemaName' => Utils::getUniqeId('stageSchemaName'), 'stageTableName' => Utils::getUniqeId('__temp_stageTableName'), // dedup table (suffix) - '$stageDeduplicationTableName' => '_tmp', - '$stageDeduplicationRenameTableName' => '_tmp_rename', + '$stageTableName ~ \'_tmp\'' => '_tmp', + '$stageTableName ~ \'_tmp_rename\'' => '_tmp_rename', 'destSchemaName' => Utils::getUniqeId('destSchemaName'), 'destTableName' => Utils::getUniqeId('destTableName'), From 8972790f70b38c0c296647c0b45795190d240719 Mon Sep 17 00:00:00 2001 From: Martin Junger Date: Wed, 19 Oct 2022 15:30:13 +0200 Subject: [PATCH 26/38] update composer --- composer.lock | 3617 +++++++++++++++++++++++++------------------------ 1 file changed, 1811 insertions(+), 1806 deletions(-) diff --git a/composer.lock b/composer.lock index 03c7078..485c5b8 100644 --- a/composer.lock +++ b/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": "a5b739e193b83c3710d7cba096aba916", + "content-hash": "58f8077468ec440e7e9f8a40c6c39db2", "packages": [ { "name": "aws/aws-crt-php", @@ -58,16 +58,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.235.14", + "version": "3.239.0", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "d6a696800e1eceec47e8f84ded88a88f4790d016" + "reference": "33ae76381b77a1a2580817996dcc7b9e931ae5f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/d6a696800e1eceec47e8f84ded88a88f4790d016", - "reference": "d6a696800e1eceec47e8f84ded88a88f4790d016", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/33ae76381b77a1a2580817996dcc7b9e931ae5f4", + "reference": "33ae76381b77a1a2580817996dcc7b9e931ae5f4", "shasum": "" }, "require": { @@ -146,9 +146,9 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.235.14" + "source": "https://github.com/aws/aws-sdk-php/tree/3.239.0" }, - "time": "2022-09-22T18:16:42+00:00" + "time": "2022-10-18T18:17:00+00:00" }, { "name": "doctrine/cache", @@ -245,16 +245,16 @@ }, { "name": "doctrine/dbal", - "version": "3.4.4", + "version": "3.4.5", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "4cbbe6e4b9ef6c69d5f4c968c637476f47bb54f5" + "reference": "a5a58773109c0abb13e658c8ccd92aeec8d07f9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/4cbbe6e4b9ef6c69d5f4c968c637476f47bb54f5", - "reference": "4cbbe6e4b9ef6c69d5f4c968c637476f47bb54f5", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/a5a58773109c0abb13e658c8ccd92aeec8d07f9e", + "reference": "a5a58773109c0abb13e658c8ccd92aeec8d07f9e", "shasum": "" }, "require": { @@ -336,7 +336,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.4.4" + "source": "https://github.com/doctrine/dbal/tree/3.4.5" }, "funding": [ { @@ -352,7 +352,7 @@ "type": "tidelift" } ], - "time": "2022-09-01T21:26:42+00:00" + "time": "2022-09-23T17:48:57+00:00" }, { "name": "doctrine/deprecations", @@ -399,34 +399,35 @@ }, { "name": "doctrine/event-manager", - "version": "1.1.2", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/event-manager.git", - "reference": "eb2ecf80e3093e8f3c2769ac838e27d8ede8e683" + "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/eb2ecf80e3093e8f3c2769ac838e27d8ede8e683", - "reference": "eb2ecf80e3093e8f3c2769ac838e27d8ede8e683", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/95aa4cb529f1e96576f3fda9f5705ada4056a520", + "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520", "shasum": "" }, "require": { + "doctrine/deprecations": "^0.5.3 || ^1", "php": "^7.1 || ^8.0" }, "conflict": { "doctrine/common": "<2.9" }, "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "~1.4.10 || ^1.5.4", + "doctrine/coding-standard": "^9 || ^10", + "phpstan/phpstan": "~1.4.10 || ^1.8.8", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.22" + "vimeo/psalm": "^4.24" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" + "Doctrine\\Common\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -470,7 +471,7 @@ ], "support": { "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/1.1.2" + "source": "https://github.com/doctrine/event-manager/tree/1.2.0" }, "funding": [ { @@ -486,7 +487,77 @@ "type": "tidelift" } ], - "time": "2022-07-27T22:18:11+00:00" + "time": "2022-10-12T20:51:15+00:00" + }, + { + "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": "firebase/php-jwt", @@ -552,16 +623,16 @@ }, { "name": "google/auth", - "version": "v1.22.0", + "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/googleapis/google-auth-library-php.git", - "reference": "da4037df770027c8f7163595a29ec434f705f8b1" + "reference": "8da16102d2cd1bdc128d97f323553df465ee7701" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/da4037df770027c8f7163595a29ec434f705f8b1", - "reference": "da4037df770027c8f7163595a29ec434f705f8b1", + "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/8da16102d2cd1bdc128d97f323553df465ee7701", + "reference": "8da16102d2cd1bdc128d97f323553df465ee7701", "shasum": "" }, "require": { @@ -604,22 +675,22 @@ "support": { "docs": "https://googleapis.github.io/google-auth-library-php/main/", "issues": "https://github.com/googleapis/google-auth-library-php/issues", - "source": "https://github.com/googleapis/google-auth-library-php/tree/v1.22.0" + "source": "https://github.com/googleapis/google-auth-library-php/tree/v1.23.0" }, - "time": "2022-09-01T17:07:07+00:00" + "time": "2022-09-27T16:27:23+00:00" }, { "name": "google/cloud-core", - "version": "v1.47.2", + "version": "v1.47.3", "source": { "type": "git", "url": "https://github.com/googleapis/google-cloud-php-core.git", - "reference": "f30823d6ff2bf3d7d3a4b089804f8dc5a1680501" + "reference": "7e019423c1f0005d22fcd0fcd73c1a7a0710ac7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-cloud-php-core/zipball/f30823d6ff2bf3d7d3a4b089804f8dc5a1680501", - "reference": "f30823d6ff2bf3d7d3a4b089804f8dc5a1680501", + "url": "https://api.github.com/repos/googleapis/google-cloud-php-core/zipball/7e019423c1f0005d22fcd0fcd73c1a7a0710ac7a", + "reference": "7e019423c1f0005d22fcd0fcd73c1a7a0710ac7a", "shasum": "" }, "require": { @@ -634,6 +705,7 @@ }, "require-dev": { "erusev/parsedown": "^1.6", + "google/cloud-common-protos": "^0.3", "google/gax": "^1.9", "opis/closure": "^3", "phpdocumentor/reflection": "^3.0||^4.0", @@ -669,9 +741,9 @@ ], "description": "Google Cloud PHP shared dependency, providing functionality useful to all components.", "support": { - "source": "https://github.com/googleapis/google-cloud-php-core/tree/v1.47.2" + "source": "https://github.com/googleapis/google-cloud-php-core/tree/v1.47.3" }, - "time": "2022-08-23T20:22:22+00:00" + "time": "2022-10-14T17:32:26+00:00" }, { "name": "google/cloud-storage", @@ -1099,16 +1171,16 @@ }, { "name": "keboola/common-exceptions", - "version": "1.2.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/keboola/common-exceptions.git", - "reference": "e406d05ec9307a88790692a33e84490c0eed38ce" + "reference": "35ac327808f0e4157c9de6cbe0bf8536145cb5ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/keboola/common-exceptions/zipball/e406d05ec9307a88790692a33e84490c0eed38ce", - "reference": "e406d05ec9307a88790692a33e84490c0eed38ce", + "url": "https://api.github.com/repos/keboola/common-exceptions/zipball/35ac327808f0e4157c9de6cbe0bf8536145cb5ac", + "reference": "35ac327808f0e4157c9de6cbe0bf8536145cb5ac", "shasum": "" }, "require": { @@ -1133,9 +1205,9 @@ ], "description": "Common exceptions shared between different applications", "support": { - "source": "https://github.com/keboola/common-exceptions/tree/1.2.0" + "source": "https://github.com/keboola/common-exceptions/tree/1.2.1" }, - "time": "2021-07-26T14:42:14+00:00" + "time": "2022-10-02T21:12:00+00:00" }, { "name": "keboola/csv", @@ -1228,16 +1300,16 @@ }, { "name": "keboola/db-import-export", - "version": "dev-mj-update-php-temp", + "version": "v1.10.0", "source": { "type": "git", "url": "https://github.com/keboola/php-db-import-export.git", - "reference": "4f03763319f8105c66702032742686ee5e94ea4a" + "reference": "fd5a43f4f5c67ac32cc9094f82795ec8f3e9ca45" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/keboola/php-db-import-export/zipball/4f03763319f8105c66702032742686ee5e94ea4a", - "reference": "4f03763319f8105c66702032742686ee5e94ea4a", + "url": "https://api.github.com/repos/keboola/php-db-import-export/zipball/fd5a43f4f5c67ac32cc9094f82795ec8f3e9ca45", + "reference": "fd5a43f4f5c67ac32cc9094f82795ec8f3e9ca45", "shasum": "" }, "require": { @@ -1278,9 +1350,9 @@ "description": "Package allows to import files to Snowflake from multiple cloud storages", "support": { "issues": "https://github.com/keboola/php-db-import-export/issues", - "source": "https://github.com/keboola/php-db-import-export/tree/mj-update-php-temp" + "source": "https://github.com/keboola/php-db-import-export/tree/v1.10.0" }, - "time": "2022-09-23T05:26:46+00:00" + "time": "2022-09-26T13:42:12+00:00" }, { "name": "keboola/php-component", @@ -2026,612 +2098,678 @@ "time": "2021-06-14T00:11:39+00:00" }, { - "name": "psr/cache", - "version": "1.0.1", + "name": "myclabs/deep-copy", + "version": "1.11.0", "source": { "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.1 || ^8.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } + "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": { - "Psr\\Cache\\": "src/" + "DeepCopy\\": "src/DeepCopy/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for caching libraries", + "description": "Create deep copies (clones) of your objects", "keywords": [ - "cache", - "psr", - "psr-6" + "clone", + "copy", + "duplicate", + "object", + "object graph" ], "support": { - "source": "https://github.com/php-fig/cache/tree/master" + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" }, - "time": "2016-08-06T20:24:11+00:00" + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2022-03-03T13:19:32+00:00" }, { - "name": "psr/http-client", - "version": "1.0.1", + "name": "nikic/php-parser", + "version": "v4.15.1", "source": { "type": "git", - "url": "https://github.com/php-fig/http-client.git", - "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", - "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", + "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", "shasum": "" }, "require": { - "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0" + "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": "1.0.x-dev" + "dev-master": "4.9-dev" } }, "autoload": { "psr-4": { - "Psr\\Http\\Client\\": "src/" + "PhpParser\\": "lib/PhpParser" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Nikita Popov" } ], - "description": "Common interface for HTTP clients", - "homepage": "https://github.com/php-fig/http-client", + "description": "A PHP parser written in PHP", "keywords": [ - "http", - "http-client", - "psr", - "psr-18" + "parser", + "php" ], "support": { - "source": "https://github.com/php-fig/http-client/tree/master" + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.1" }, - "time": "2020-06-29T06:28:15+00:00" + "time": "2022-09-04T07:30:47+00:00" }, { - "name": "psr/http-message", - "version": "1.0.1", + "name": "phar-io/manifest", + "version": "2.0.3", "source": { "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + "url": "https://github.com/phar-io/manifest.git", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", "shasum": "" }, "require": { - "php": ">=5.3.0" + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "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": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { - "source": "https://github.com/php-fig/http-message/tree/master" + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.3" }, - "time": "2016-08-06T14:39:51+00:00" + "time": "2021-07-20T11:28:43+00:00" }, { - "name": "psr/log", - "version": "1.1.4", + "name": "phar-io/version", + "version": "3.2.1", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.2 || ^8.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "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": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], + "description": "Library for handling version information and constraints", "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" }, - "time": "2021-05-03T11:20:27+00:00" + "time": "2022-02-21T01:04:05+00:00" }, { - "name": "ralouphie/getallheaders", - "version": "3.0.3", + "name": "phpunit/php-code-coverage", + "version": "9.2.17", "source": { "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "aa94dc41e8661fe90c7316849907cba3007b10d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/aa94dc41e8661fe90c7316849907cba3007b10d8", + "reference": "aa94dc41e8661fe90c7316849907cba3007b10d8", "shasum": "" }, "require": { - "php": ">=5.6" + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.14", + "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": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcov": "*", + "ext-xdebug": "*" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.2-dev" + } + }, "autoload": { - "files": [ - "src/getallheaders.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "A polyfill for getallheaders.", + "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/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.17" }, - "time": "2019-03-08T08:55:37+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-08-30T12:24:04+00:00" }, { - "name": "rize/uri-template", - "version": "0.3.4", + "name": "phpunit/php-file-iterator", + "version": "3.0.6", "source": { "type": "git", - "url": "https://github.com/rize/UriTemplate.git", - "reference": "2a874863c48d643b9e2e254ab288ec203060a0b8" + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rize/UriTemplate/zipball/2a874863c48d643b9e2e254ab288ec203060a0b8", - "reference": "2a874863c48d643b9e2e254ab288ec203060a0b8", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "~4.8.36" + "phpunit/phpunit": "^9.3" }, "type": "library", - "autoload": { - "psr-4": { - "Rize\\": "src/Rize" + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Marut K", - "homepage": "http://twitter.com/rezigned" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "PHP URI Template (RFC 6570) supports both expansion & extraction", + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", "keywords": [ - "RFC 6570", - "template", - "uri" + "filesystem", + "iterator" ], "support": { - "issues": "https://github.com/rize/UriTemplate/issues", - "source": "https://github.com/rize/UriTemplate/tree/0.3.4" + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" }, "funding": [ { - "url": "https://www.paypal.me/rezigned", - "type": "custom" - }, - { - "url": "https://opencollective.com/rize-uri-template", - "type": "open_collective" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "time": "2021-10-09T06:30:16+00:00" + "time": "2021-12-02T12:48:52+00:00" }, { - "name": "seld/jsonlint", - "version": "1.9.0", + "name": "phpunit/php-invoker", + "version": "3.1.1", "source": { "type": "git", - "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "4211420d25eba80712bff236a98960ef68b866b7" + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/4211420d25eba80712bff236a98960ef68b866b7", - "reference": "4211420d25eba80712bff236a98960ef68b866b7", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", "shasum": "" }, "require": { - "php": "^5.3 || ^7.0 || ^8.0" + "php": ">=7.3" }, "require-dev": { - "phpstan/phpstan": "^1.5", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^8.5.13" + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" }, - "bin": [ - "bin/jsonlint" - ], "type": "library", - "autoload": { - "psr-4": { - "Seld\\JsonLint\\": "src/Seld/JsonLint/" + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "JSON Linter", + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", "keywords": [ - "json", - "linter", - "parser", - "validator" + "process" ], "support": { - "issues": "https://github.com/Seldaek/jsonlint/issues", - "source": "https://github.com/Seldaek/jsonlint/tree/1.9.0" + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" }, "funding": [ { - "url": "https://github.com/Seldaek", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint", - "type": "tidelift" } ], - "time": "2022-04-01T13:37:23+00:00" + "time": "2020-09-28T05:58:55+00:00" }, { - "name": "symfony/config", - "version": "v5.4.11", + "name": "phpunit/php-text-template", + "version": "2.0.4", "source": { "type": "git", - "url": "https://github.com/symfony/config.git", - "reference": "ec79e03125c1d2477e43dde8528535d90cc78379" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/ec79e03125c1d2477e43dde8528535d90cc78379", - "reference": "ec79e03125c1d2477e43dde8528535d90cc78379", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/filesystem": "^4.4|^5.0|^6.0", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php80": "^1.16", - "symfony/polyfill-php81": "^1.22" - }, - "conflict": { - "symfony/finder": "<4.4" + "php": ">=7.3" }, "require-dev": { - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/messenger": "^4.4|^5.0|^6.0", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/yaml": "^4.4|^5.0|^6.0" - }, - "suggest": { - "symfony/yaml": "To use the yaml reference dumper" + "phpunit/phpunit": "^9.3" }, "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Config\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", - "homepage": "https://symfony.com", + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], "support": { - "source": "https://github.com/symfony/config/tree/v5.4.11" + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2022-07-20T13:00:38+00:00" + "time": "2020-10-26T05:33:50+00:00" }, { - "name": "symfony/deprecation-contracts", - "version": "v2.5.2", + "name": "phpunit/php-timer", + "version": "5.0.3", "source": { "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "dev-master": "5.0-dev" } }, "autoload": { - "files": [ - "function.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2" + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2020-10-26T13:16:10+00:00" }, { - "name": "symfony/filesystem", - "version": "v5.4.12", + "name": "phpunit/phpunit", + "version": "9.5.25", "source": { "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "2d67c1f9a1937406a9be3171b4b22250c0a11447" + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/2d67c1f9a1937406a9be3171b4b22250c0a11447", - "reference": "2d67c1f9a1937406a9be3171b4b22250c0a11447", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d", + "reference": "3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8", - "symfony/polyfill-php80": "^1.16" + "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", + "phpunit/php-code-coverage": "^9.2.13", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.8", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.5", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^3.2", + "sebastian/version": "^3.0.2" }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*" + }, + "bin": [ + "phpunit" + ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.5-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Provides basic utilities for the filesystem", - "homepage": "https://symfony.com", + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.4.12" + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.25" }, "funding": [ { - "url": "https://symfony.com/sponsor", + "url": "https://phpunit.de/sponsors.html", "type": "custom" }, { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", "type": "tidelift" } ], - "time": "2022-08-02T13:48:16+00:00" + "time": "2022-09-25T03:44:45+00:00" }, { - "name": "symfony/finder", - "version": "v5.4.11", + "name": "psr/cache", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "7872a66f57caffa2916a584db1aa7f12adc76f8c" + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/7872a66f57caffa2916a584db1aa7f12adc76f8c", - "reference": "7872a66f57caffa2916a584db1aa7f12adc76f8c", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=5.3.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, "autoload": { "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Psr\\Cache\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2639,74 +2777,48 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Finds files and directories via an intuitive fluent interface", - "homepage": "https://symfony.com", + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.11" + "source": "https://github.com/php-fig/cache/tree/master" }, - "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-07-29T07:37:50+00:00" + "time": "2016-08-06T20:24:11+00:00" }, { - "name": "symfony/polyfill-ctype", - "version": "v1.26.0", + "name": "psr/http-client", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" + "url": "https://github.com/php-fig/http-client.git", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", "shasum": "" }, "require": { - "php": ">=7.1" - }, - "provide": { - "ext-ctype": "*" - }, - "suggest": { - "ext-ctype": "For best performance" + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "1.0.x-dev" } }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" + "Psr\\Http\\Client\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2715,80 +2827,49 @@ ], "authors": [ { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" + "http", + "http-client", + "psr", + "psr-18" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" + "source": "https://github.com/php-fig/http-client/tree/master" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2020-06-29T06:28:15+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.26.0", + "name": "psr/http-message", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", "shasum": "" }, "require": { - "php": ">=7.1" - }, - "provide": { - "ext-mbstring": "*" - }, - "suggest": { - "ext-mbstring": "For best performance" + "php": ">=5.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "1.0.x-dev" } }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" + "Psr\\Http\\Message\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2797,79 +2878,52 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" + "source": "https://github.com/php-fig/http-message/tree/master" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2016-08-06T14:39:51+00:00" }, { - "name": "symfony/polyfill-php80", - "version": "v1.26.0", + "name": "psr/log", + "version": "1.1.4", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" + "url": "https://github.com/php-fig/log.git", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=5.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "1.1.x-dev" } }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "classmap": [ - "Resources/stubs" - ] + "Psr\\Log\\": "Psr/Log/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2877,81 +2931,47 @@ ], "authors": [ { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" } ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" + "log", + "psr", + "psr-3" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" + "source": "https://github.com/php-fig/log/tree/1.1.4" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-10T07:21:04+00:00" + "time": "2021-05-03T11:20:27+00:00" }, { - "name": "symfony/polyfill-php81", - "version": "v1.26.0", + "name": "ralouphie/getallheaders", + "version": "3.0.3", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", - "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=5.6" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" }, + "type": "library", "autoload": { "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, - "classmap": [ - "Resources/stubs" + "src/getallheaders.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -2960,67 +2980,42 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" } ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], + "description": "A polyfill for getallheaders.", "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.26.0" + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2019-03-08T08:55:37+00:00" }, { - "name": "symfony/process", - "version": "v5.4.11", + "name": "rize/uri-template", + "version": "0.3.5", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "6e75fe6874cbc7e4773d049616ab450eff537bf1" + "url": "https://github.com/rize/UriTemplate.git", + "reference": "5ed4ba8ea34af84485dea815d4b6b620794d1168" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/6e75fe6874cbc7e4773d049616ab450eff537bf1", - "reference": "6e75fe6874cbc7e4773d049616ab450eff537bf1", + "url": "https://api.github.com/repos/rize/UriTemplate/zipball/5ed4ba8ea34af84485dea815d4b6b620794d1168", + "reference": "5ed4ba8ea34af84485dea815d4b6b620794d1168", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8.36" }, "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Rize\\": "src/Rize" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3028,181 +3023,121 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Marut K", + "homepage": "http://twitter.com/rezigned" } ], - "description": "Executes commands in sub-processes", - "homepage": "https://symfony.com", + "description": "PHP URI Template (RFC 6570) supports both expansion & extraction", + "keywords": [ + "RFC 6570", + "template", + "uri" + ], "support": { - "source": "https://github.com/symfony/process/tree/v5.4.11" + "issues": "https://github.com/rize/UriTemplate/issues", + "source": "https://github.com/rize/UriTemplate/tree/0.3.5" }, "funding": [ { - "url": "https://symfony.com/sponsor", + "url": "https://www.paypal.me/rezigned", "type": "custom" }, { - "url": "https://github.com/fabpot", + "url": "https://github.com/rezigned", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" + "url": "https://opencollective.com/rize-uri-template", + "type": "open_collective" } ], - "time": "2022-06-27T16:58:25+00:00" + "time": "2022-10-12T17:22:51+00:00" }, { - "name": "symfony/serializer", - "version": "v5.4.12", + "name": "sebastian/cli-parser", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/symfony/serializer.git", - "reference": "776fa3010f62b97a7119757a66596a654cd244d4" + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/776fa3010f62b97a7119757a66596a654cd244d4", - "reference": "776fa3010f62b97a7119757a66596a654cd244d4", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "doctrine/annotations": "<1.12", - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/dependency-injection": "<4.4", - "symfony/property-access": "<5.4", - "symfony/property-info": "<5.3.13", - "symfony/uid": "<5.3", - "symfony/yaml": "<4.4" + "php": ">=7.3" }, "require-dev": { - "doctrine/annotations": "^1.12", - "phpdocumentor/reflection-docblock": "^3.2|^4.0|^5.0", - "symfony/cache": "^4.4|^5.0|^6.0", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/filesystem": "^4.4|^5.0|^6.0", - "symfony/form": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/http-kernel": "^4.4|^5.0|^6.0", - "symfony/mime": "^4.4|^5.0|^6.0", - "symfony/property-access": "^5.4|^6.0", - "symfony/property-info": "^5.3.13|^6.0", - "symfony/uid": "^5.3|^6.0", - "symfony/validator": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0", - "symfony/var-exporter": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0" - }, - "suggest": { - "psr/cache-implementation": "For using the metadata cache.", - "symfony/config": "For using the XML mapping loader.", - "symfony/mime": "For using a MIME type guesser within the DataUriNormalizer.", - "symfony/property-access": "For using the ObjectNormalizer.", - "symfony/property-info": "To deserialize relations.", - "symfony/var-exporter": "For using the metadata compiler.", - "symfony/yaml": "For using the default YAML mapping loader." + "phpunit/phpunit": "^9.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\Serializer\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", - "homepage": "https://symfony.com", + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { - "source": "https://github.com/symfony/serializer/tree/v5.4.12" + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2022-08-26T10:32:10+00:00" + "time": "2020-09-28T06:08:49+00:00" }, { - "name": "tracy/tracy", - "version": "v2.9.4", + "name": "sebastian/code-unit", + "version": "1.0.8", "source": { "type": "git", - "url": "https://github.com/nette/tracy.git", - "reference": "0ed605329b095f5f5fe2db2adc3d1ee80c917294" + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/tracy/zipball/0ed605329b095f5f5fe2db2adc3d1ee80c917294", - "reference": "0ed605329b095f5f5fe2db2adc3d1ee80c917294", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", "shasum": "" }, "require": { - "ext-json": "*", - "ext-session": "*", - "php": ">=7.2 <8.2" - }, - "conflict": { - "nette/di": "<3.0" + "php": ">=7.3" }, "require-dev": { - "latte/latte": "^2.5", - "nette/di": "^3.0", - "nette/mail": "^3.0", - "nette/tester": "^2.2", - "nette/utils": "^3.0", - "phpstan/phpstan": "^1.0", - "psr/log": "^1.0 || ^2.0 || ^3.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.9-dev" + "dev-master": "1.0-dev" } }, "autoload": { - "files": [ - "src/Tracy/functions.php" - ], "classmap": [ - "src" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3211,345 +3146,372 @@ ], "authors": [ { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "😎 Tracy: the addictive tool to ease debugging PHP code for cool developers. Friendly design, logging, profiler, advanced features like debugging AJAX calls or CLI support. You will love it.", - "homepage": "https://tracy.nette.org", - "keywords": [ - "Xdebug", - "debug", - "debugger", - "nette", - "profiler" - ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", "support": { - "issues": "https://github.com/nette/tracy/issues", - "source": "https://github.com/nette/tracy/tree/v2.9.4" + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" }, - "time": "2022-07-19T14:06:15+00:00" - } - ], - "packages-dev": [ + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" + }, { - "name": "dealerdirect/phpcodesniffer-composer-installer", - "version": "v0.7.2", + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", "source": { "type": "git", - "url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git", - "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db" + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db", - "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", "shasum": "" }, "require": { - "composer-plugin-api": "^1.0 || ^2.0", - "php": ">=5.3", - "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0" + "php": ">=7.3" }, "require-dev": { - "composer/composer": "*", - "php-parallel-lint/php-parallel-lint": "^1.3.1", - "phpcompatibility/php-compatibility": "^9.0" + "phpunit/phpunit": "^9.3" }, - "type": "composer-plugin", + "type": "library", "extra": { - "class": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" - }, - "autoload": { - "psr-4": { - "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" + "branch-alias": { + "dev-master": "2.0-dev" } }, - "notification-url": "https://packagist.org/downloads/", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Franck Nijhof", - "email": "franck.nijhof@dealerdirect.com", - "homepage": "http://www.frenck.nl", - "role": "Developer / IT Manager" - }, - { - "name": "Contributors", - "homepage": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer/graphs/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "PHP_CodeSniffer Standards Composer Installer Plugin", - "homepage": "http://www.dealerdirect.com", - "keywords": [ - "PHPCodeSniffer", - "PHP_CodeSniffer", - "code quality", - "codesniffer", - "composer", - "installer", - "phpcbf", - "phpcs", - "plugin", - "qa", - "quality", - "standard", - "standards", - "style guide", - "stylecheck", - "tests" - ], + "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/dealerdirect/phpcodesniffer-composer-installer/issues", - "source": "https://github.com/dealerdirect/phpcodesniffer-composer-installer" + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" }, - "time": "2022-02-04T12:51:07+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:30:19+00:00" }, { - "name": "doctrine/instantiator", - "version": "1.4.1", + "name": "sebastian/comparator", + "version": "4.0.8", "source": { "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.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" + "phpunit/phpunit": "^9.3" }, "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" + "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": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", "keywords": [ - "constructor", - "instantiate" + "comparator", + "compare", + "equality" ], "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.1" + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" }, "funding": [ { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "time": "2022-03-03T08:28:38+00:00" + "time": "2022-09-14T12:41:17+00:00" }, { - "name": "keboola/coding-standard", - "version": "14.0.0", + "name": "sebastian/complexity", + "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/keboola/phpcs-standard.git", - "reference": "a39222d889f1411586d2b99386d1ab6886fe09fc" + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/keboola/phpcs-standard/zipball/a39222d889f1411586d2b99386d1ab6886fe09fc", - "reference": "a39222d889f1411586d2b99386d1ab6886fe09fc", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", "shasum": "" }, "require": { - "slevomat/coding-standard": "^8", - "squizlabs/php_codesniffer": "^3.2" + "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/" + ] }, - "type": "phpcodesniffer-standard", "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], - "description": "Keboola coding standard", + "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/keboola/phpcs-standard/issues", - "source": "https://github.com/keboola/phpcs-standard/tree/14.0.0" + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" }, - "time": "2022-07-11T11:34:29+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:52:27+00:00" }, { - "name": "keboola/datadir-tests", - "version": "5.5.0", + "name": "sebastian/diff", + "version": "4.0.4", "source": { "type": "git", - "url": "https://github.com/keboola/datadir-tests.git", - "reference": "78a8bb34fe09be4666b09080bfa289d61aec7f14" + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/keboola/datadir-tests/zipball/78a8bb34fe09be4666b09080bfa289d61aec7f14", - "reference": "78a8bb34fe09be4666b09080bfa289d61aec7f14", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", "shasum": "" }, "require": { - "ext-json": "*", - "keboola/php-temp": "^2.0", - "php": "^7.4|^8.0", - "phpunit/phpunit": "^9.5", - "symfony/filesystem": "^5.0|^6.0", - "symfony/finder": "^5.0|^6.0", - "symfony/process": "^5.0|^6.0" + "php": ">=7.3" }, "require-dev": { - "keboola/coding-standard": "^13.0", - "php-parallel-lint/php-parallel-lint": "^1.3", - "phpstan/phpstan": "^1.4" + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" }, "type": "library", - "autoload": { - "psr-4": { - "Keboola\\DatadirTests\\": "src/" + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "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" ], - "description": "Tool for functional testing of Keboola Connection components", "support": { - "issues": "https://github.com/keboola/datadir-tests/issues", - "source": "https://github.com/keboola/datadir-tests/tree/5.5.0" + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" }, - "time": "2022-09-06T13:23:13+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:10:38+00:00" }, { - "name": "myclabs/deep-copy", - "version": "1.11.0", + "name": "sebastian/environment", + "version": "5.1.4", "source": { "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" + "php": ">=7.3" }, "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" + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-posix": "*" }, "type": "library", - "autoload": { - "files": [ - "src/DeepCopy/deep_copy.php" - ], - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], - "description": "Create deep copies (clones) of your objects", + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" + "Xdebug", + "environment", + "hhvm" ], "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" }, "funding": [ { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "time": "2022-03-03T13:19:32+00:00" + "time": "2022-04-03T09:37:03+00:00" }, { - "name": "nikic/php-parser", - "version": "v4.15.1", + "name": "sebastian/exporter", + "version": "4.0.5", "source": { "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900" + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", - "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": ">=7.0" + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" }, "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" }, - "bin": [ - "bin/php-parse" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "4.9-dev" + "dev-master": "4.0-dev" } }, "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3557,45 +3519,74 @@ ], "authors": [ { - "name": "Nikita Popov" + "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": "A PHP parser written in PHP", + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", "keywords": [ - "parser", - "php" + "export", + "exporter" ], "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.1" + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" }, - "time": "2022-09-04T07:30:47+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-14T06:03:37+00:00" }, { - "name": "phar-io/manifest", - "version": "2.0.3", + "name": "sebastian/global-state", + "version": "5.0.5", "source": { "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "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": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-uopz": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -3608,47 +3599,55 @@ "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" + "email": "sebastian@phpunit.de" } ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.3" + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" }, - "time": "2021-07-20T11:28:43+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-02-14T08:28:10+00:00" }, { - "name": "phar-io/version", - "version": "3.2.1", + "name": "sebastian/lines-of-code", + "version": "1.0.3", "source": { "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "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/" @@ -3659,230 +3658,225 @@ "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" + "role": "lead" } ], - "description": "Library for handling version information and constraints", + "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/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" }, - "time": "2022-02-21T01:04:05+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-28T06:42:11+00:00" }, { - "name": "php-parallel-lint/php-parallel-lint", - "version": "v1.3.2", + "name": "sebastian/object-enumerator", + "version": "4.0.4", "source": { "type": "git", - "url": "https://github.com/php-parallel-lint/PHP-Parallel-Lint.git", - "reference": "6483c9832e71973ed29cf71bd6b3f4fde438a9de" + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-parallel-lint/PHP-Parallel-Lint/zipball/6483c9832e71973ed29cf71bd6b3f4fde438a9de", - "reference": "6483c9832e71973ed29cf71bd6b3f4fde438a9de", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", "shasum": "" }, "require": { - "ext-json": "*", - "php": ">=5.3.0" - }, - "replace": { - "grogy/php-parallel-lint": "*", - "jakub-onderka/php-parallel-lint": "*" + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" }, "require-dev": { - "nette/tester": "^1.3 || ^2.0", - "php-parallel-lint/php-console-highlighter": "0.* || ^1.0", - "squizlabs/php_codesniffer": "^3.6" - }, - "suggest": { - "php-parallel-lint/php-console-highlighter": "Highlight syntax in code snippet" + "phpunit/phpunit": "^9.3" }, - "bin": [ - "parallel-lint" - ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, "autoload": { "classmap": [ - "./src/" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-2-Clause" + "BSD-3-Clause" ], "authors": [ { - "name": "Jakub Onderka", - "email": "ahoj@jakubonderka.cz" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "This tool check syntax of PHP files about 20x faster than serial check.", - "homepage": "https://github.com/php-parallel-lint/PHP-Parallel-Lint", + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { - "issues": "https://github.com/php-parallel-lint/PHP-Parallel-Lint/issues", - "source": "https://github.com/php-parallel-lint/PHP-Parallel-Lint/tree/v1.3.2" + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" }, - "time": "2022-02-21T12:50:22+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:12:34+00:00" }, { - "name": "phpstan/phpdoc-parser", - "version": "1.8.0", + "name": "sebastian/object-reflector", + "version": "2.0.4", "source": { "type": "git", - "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "8dd908dd6156e974b9a0f8bb4cd5ad0707830f04" + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/8dd908dd6156e974b9a0f8bb4cd5ad0707830f04", - "reference": "8dd908dd6156e974b9a0f8bb4cd5ad0707830f04", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": ">=7.3" }, "require-dev": { - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.5", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.0", - "phpunit/phpunit": "^9.5", - "symfony/process": "^5.2" + "phpunit/phpunit": "^9.3" }, "type": "library", - "autoload": { - "psr-4": { - "PHPStan\\PhpDocParser\\": [ - "src/" - ] + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } ], - "description": "PHPDoc parser with support for nullable, intersection and generic types", + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { - "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.8.0" + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" }, - "time": "2022-09-04T18:59:06+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:14:26+00:00" }, { - "name": "phpstan/phpstan", - "version": "1.8.5", + "name": "sebastian/recursion-context", + "version": "4.0.4", "source": { "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "f6598a5ff12ca4499a836815e08b4d77a2ddeb20" + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/f6598a5ff12ca4499a836815e08b4d77a2ddeb20", - "reference": "f6598a5ff12ca4499a836815e08b4d77a2ddeb20", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", "shasum": "" }, "require": { - "php": "^7.2|^8.0" + "php": ">=7.3" }, - "conflict": { - "phpstan/phpstan-shim": "*" + "require-dev": { + "phpunit/phpunit": "^9.3" }, - "bin": [ - "phpstan", - "phpstan.phar" - ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, "autoload": { - "files": [ - "bootstrap.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], - "description": "PHPStan - PHP Static Analysis Tool", - "keywords": [ - "dev", - "static analysis" + "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/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/1.8.5" + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" }, "funding": [ { - "url": "https://github.com/ondrejmirtes", - "type": "github" - }, - { - "url": "https://github.com/phpstan", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", - "type": "tidelift" } ], - "time": "2022-09-07T16:05:32+00:00" + "time": "2020-10-26T13:17:30+00:00" }, { - "name": "phpunit/php-code-coverage", - "version": "9.2.17", + "name": "sebastian/resource-operations", + "version": "3.0.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "aa94dc41e8661fe90c7316849907cba3007b10d8" + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/aa94dc41e8661fe90c7316849907cba3007b10d8", - "reference": "aa94dc41e8661fe90c7316849907cba3007b10d8", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.14", - "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" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.2-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -3897,20 +3891,14 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "email": "sebastian@phpunit.de" } ], - "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" - ], + "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/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.17" + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" }, "funding": [ { @@ -3918,32 +3906,32 @@ "type": "github" } ], - "time": "2022-08-30T12:24:04+00:00" + "time": "2020-09-28T06:45:17+00:00" }, { - "name": "phpunit/php-file-iterator", - "version": "3.0.6", + "name": "sebastian/type", + "version": "3.2.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", + "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", "shasum": "" }, "require": { "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^9.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -3962,15 +3950,11 @@ "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" - ], + "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/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/3.2.0" }, "funding": [ { @@ -3978,36 +3962,29 @@ "type": "github" } ], - "time": "2021-12-02T12:48:52+00:00" + "time": "2022-09-12T14:47:03+00:00" }, { - "name": "phpunit/php-invoker", - "version": "3.1.1", + "name": "sebastian/version", + "version": "3.0.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", "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" + "dev-master": "3.0-dev" } }, "autoload": { @@ -4026,14 +4003,11 @@ "role": "lead" } ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], + "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/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" }, "funding": [ { @@ -4041,760 +4015,858 @@ "type": "github" } ], - "time": "2020-09-28T05:58:55+00:00" + "time": "2020-09-28T06:39:44+00:00" }, { - "name": "phpunit/php-text-template", - "version": "2.0.4", + "name": "seld/jsonlint", + "version": "1.9.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + "url": "https://github.com/Seldaek/jsonlint.git", + "reference": "4211420d25eba80712bff236a98960ef68b866b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/4211420d25eba80712bff236a98960ef68b866b7", + "reference": "4211420d25eba80712bff236a98960ef68b866b7", "shasum": "" }, "require": { - "php": ">=7.3" + "php": "^5.3 || ^7.0 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpstan/phpstan": "^1.5", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^8.5.13" }, + "bin": [ + "bin/jsonlint" + ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Seld\\JsonLint\\": "src/Seld/JsonLint/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" } ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "description": "JSON Linter", "keywords": [ - "template" + "json", + "linter", + "parser", + "validator" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + "issues": "https://github.com/Seldaek/jsonlint/issues", + "source": "https://github.com/Seldaek/jsonlint/tree/1.9.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://github.com/Seldaek", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint", + "type": "tidelift" } ], - "time": "2020-10-26T05:33:50+00:00" + "time": "2022-04-01T13:37:23+00:00" }, { - "name": "phpunit/php-timer", - "version": "5.0.3", + "name": "symfony/config", + "version": "v5.4.11", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + "url": "https://github.com/symfony/config.git", + "reference": "ec79e03125c1d2477e43dde8528535d90cc78379" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "url": "https://api.github.com/repos/symfony/config/zipball/ec79e03125c1d2477e43dde8528535d90cc78379", + "reference": "ec79e03125c1d2477e43dde8528535d90cc78379", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/filesystem": "^4.4|^5.0|^6.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.16", + "symfony/polyfill-php81": "^1.22" + }, + "conflict": { + "symfony/finder": "<4.4" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/messenger": "^4.4|^5.0|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/yaml": "^4.4|^5.0|^6.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" }, + "type": "library", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], + "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + "source": "https://github.com/symfony/config/tree/v5.4.11" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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": "2020-10-26T13:16:10+00:00" + "time": "2022-07-20T13:00:38+00:00" }, { - "name": "phpunit/phpunit", - "version": "9.5.24", + "name": "symfony/deprecation-contracts", + "version": "v2.5.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "d0aa6097bef9fd42458a9b3c49da32c6ce6129c5" + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d0aa6097bef9fd42458a9b3c49da32c6ce6129c5", - "reference": "d0aa6097bef9fd42458a9b3c49da32c6ce6129c5", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", "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", - "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.1", - "sebastian/version": "^3.0.2" - }, - "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" + "php": ">=7.1" }, - "bin": [ - "phpunit" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "9.5-dev" + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { "files": [ - "src/Framework/Assert/Functions.php" - ], - "classmap": [ - "src/" + "function.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.24" + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2" }, "funding": [ { - "url": "https://phpunit.de/sponsors.html", + "url": "https://symfony.com/sponsor", "type": "custom" }, { - "url": "https://github.com/sebastianbergmann", + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2022-08-30T07:42:16+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { - "name": "sebastian/cli-parser", - "version": "1.0.1", + "name": "symfony/filesystem", + "version": "v5.4.13", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + "url": "https://github.com/symfony/filesystem.git", + "reference": "ac09569844a9109a5966b9438fc29113ce77cf51" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/ac09569844a9109a5966b9438fc29113ce77cf51", + "reference": "ac09569844a9109a5966b9438fc29113ce77cf51", "shasum": "" }, "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8", + "symfony/polyfill-php80": "^1.16" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + "source": "https://github.com/symfony/filesystem/tree/v5.4.13" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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": "2020-09-28T06:08:49+00:00" + "time": "2022-09-21T19:53:16+00:00" }, { - "name": "sebastian/code-unit", - "version": "1.0.8", + "name": "symfony/finder", + "version": "v5.4.11", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + "url": "https://github.com/symfony/finder.git", + "reference": "7872a66f57caffa2916a584db1aa7f12adc76f8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "url": "https://api.github.com/repos/symfony/finder/zipball/7872a66f57caffa2916a584db1aa7f12adc76f8c", + "reference": "7872a66f57caffa2916a584db1aa7f12adc76f8c", "shasum": "" }, "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + "source": "https://github.com/symfony/finder/tree/v5.4.11" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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": "2020-10-26T13:08:54+00:00" + "time": "2022-07-29T07:37:50+00:00" }, { - "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", + "name": "symfony/polyfill-ctype", + "version": "v1.26.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=7.1" }, - "require-dev": { - "phpunit/phpunit": "^9.3" + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "classmap": [ - "src/" - ] + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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": "2020-09-28T05:30:19+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { - "name": "sebastian/comparator", - "version": "4.0.8", + "name": "symfony/polyfill-mbstring", + "version": "v1.26.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a" + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" + "php": ">=7.1" }, - "require-dev": { - "phpunit/phpunit": "^9.3" + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "classmap": [ - "src/" - ] + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", "keywords": [ - "comparator", - "compare", - "equality" + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" ], "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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-09-14T12:41:17+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { - "name": "sebastian/complexity", - "version": "2.0.2", + "name": "symfony/polyfill-php80", + "version": "v1.26.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", "shasum": "" }, "require": { - "nikic/php-parser": "^4.7", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, "classmap": [ - "src/" + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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": "2020-10-26T15:52:27+00:00" + "time": "2022-05-10T07:21:04+00:00" }, { - "name": "sebastian/diff", - "version": "4.0.4", + "name": "symfony/polyfill-php81", + "version": "v1.26.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", "shasum": "" }, "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, "classmap": [ - "src/" + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" + "compatibility", + "polyfill", + "portable", + "shim" ], "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.26.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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": "2020-10-26T13:10:38+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { - "name": "sebastian/environment", - "version": "5.1.4", + "name": "symfony/process", + "version": "v5.4.11", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" + "url": "https://github.com/symfony/process.git", + "reference": "6e75fe6874cbc7e4773d049616ab450eff537bf1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "url": "https://api.github.com/repos/symfony/process/zipball/6e75fe6874cbc7e4773d049616ab450eff537bf1", + "reference": "6e75fe6874cbc7e4773d049616ab450eff537bf1", "shasum": "" }, "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-posix": "*" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" + "source": "https://github.com/symfony/process/tree/v5.4.11" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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-03T09:37:03+00:00" + "time": "2022-06-27T16:58:25+00:00" }, { - "name": "sebastian/exporter", - "version": "4.0.5", + "name": "symfony/serializer", + "version": "v5.4.14", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" + "url": "https://github.com/symfony/serializer.git", + "reference": "21c329453e3c9345b51bf4b67b187c963a4edc45" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "url": "https://api.github.com/repos/symfony/serializer/zipball/21c329453e3c9345b51bf4b67b187c963a4edc45", + "reference": "21c329453e3c9345b51bf4b67b187c963a4edc45", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "doctrine/annotations": "<1.12", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/dependency-injection": "<4.4", + "symfony/property-access": "<5.4", + "symfony/property-info": "<5.3.13", + "symfony/uid": "<5.3", + "symfony/yaml": "<4.4" }, "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" + "doctrine/annotations": "^1.12", + "phpdocumentor/reflection-docblock": "^3.2|^4.0|^5.0", + "symfony/cache": "^4.4|^5.0|^6.0", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/filesystem": "^4.4|^5.0|^6.0", + "symfony/form": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/mime": "^4.4|^5.0|^6.0", + "symfony/property-access": "^5.4|^6.0", + "symfony/property-info": "^5.3.13|^6.0", + "symfony/uid": "^5.3|^6.0", + "symfony/validator": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0", + "symfony/var-exporter": "^4.4|^5.0|^6.0", + "symfony/yaml": "^4.4|^5.0|^6.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } + "suggest": { + "psr/cache-implementation": "For using the metadata cache.", + "symfony/config": "For using the XML mapping loader.", + "symfony/mime": "For using a MIME type guesser within the DataUriNormalizer.", + "symfony/property-access": "For using the ObjectNormalizer.", + "symfony/property-info": "To deserialize relations.", + "symfony/var-exporter": "For using the metadata compiler.", + "symfony/yaml": "For using the default YAML mapping loader." }, + "type": "library", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Serializer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "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": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "https://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], + "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" + "source": "https://github.com/symfony/serializer/tree/v5.4.14" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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-09-14T06:03:37+00:00" + "time": "2022-10-11T15:16:01+00:00" }, { - "name": "sebastian/global-state", - "version": "5.0.5", + "name": "theseer/tokenizer", + "version": "1.2.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" + "url": "https://github.com/theseer/tokenizer.git", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", "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": "*" + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, "autoload": { "classmap": [ "src/" @@ -4806,57 +4878,67 @@ ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" } ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://github.com/theseer", "type": "github" } ], - "time": "2022-02-14T08:28:10+00:00" + "time": "2021-07-28T10:34:58+00:00" }, { - "name": "sebastian/lines-of-code", - "version": "1.0.3", + "name": "tracy/tracy", + "version": "v2.9.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + "url": "https://github.com/nette/tracy.git", + "reference": "0ed605329b095f5f5fe2db2adc3d1ee80c917294" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "url": "https://api.github.com/repos/nette/tracy/zipball/0ed605329b095f5f5fe2db2adc3d1ee80c917294", + "reference": "0ed605329b095f5f5fe2db2adc3d1ee80c917294", "shasum": "" }, "require": { - "nikic/php-parser": "^4.6", - "php": ">=7.3" + "ext-json": "*", + "ext-session": "*", + "php": ">=7.2 <8.2" + }, + "conflict": { + "nette/di": "<3.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "latte/latte": "^2.5", + "nette/di": "^3.0", + "nette/mail": "^3.0", + "nette/tester": "^2.2", + "nette/utils": "^3.0", + "phpstan/phpstan": "^1.0", + "psr/log": "^1.0 || ^2.0 || ^3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "2.9-dev" } }, "autoload": { + "files": [ + "src/Tracy/functions.php" + ], "classmap": [ - "src/" + "src" ] }, "notification-url": "https://packagist.org/downloads/", @@ -4865,392 +4947,370 @@ ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" } ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "description": "😎 Tracy: the addictive tool to ease debugging PHP code for cool developers. Friendly design, logging, profiler, advanced features like debugging AJAX calls or CLI support. You will love it.", + "homepage": "https://tracy.nette.org", + "keywords": [ + "Xdebug", + "debug", + "debugger", + "nette", + "profiler" + ], "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + "issues": "https://github.com/nette/tracy/issues", + "source": "https://github.com/nette/tracy/tree/v2.9.4" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-28T06:42:11+00:00" - }, + "time": "2022-07-19T14:06:15+00:00" + } + ], + "packages-dev": [ { - "name": "sebastian/object-enumerator", - "version": "4.0.4", + "name": "dealerdirect/phpcodesniffer-composer-installer", + "version": "v0.7.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + "url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git", + "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db", + "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "composer-plugin-api": "^1.0 || ^2.0", + "php": ">=5.3", + "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "composer/composer": "*", + "php-parallel-lint/php-parallel-lint": "^1.3.1", + "phpcompatibility/php-compatibility": "^9.0" }, - "type": "library", + "type": "composer-plugin", "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } + "class": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Franck Nijhof", + "email": "franck.nijhof@dealerdirect.com", + "homepage": "http://www.frenck.nl", + "role": "Developer / IT Manager" + }, + { + "name": "Contributors", + "homepage": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer/graphs/contributors" } ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "description": "PHP_CodeSniffer Standards Composer Installer Plugin", + "homepage": "http://www.dealerdirect.com", + "keywords": [ + "PHPCodeSniffer", + "PHP_CodeSniffer", + "code quality", + "codesniffer", + "composer", + "installer", + "phpcbf", + "phpcs", + "plugin", + "qa", + "quality", + "standard", + "standards", + "style guide", + "stylecheck", + "tests" + ], "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + "issues": "https://github.com/dealerdirect/phpcodesniffer-composer-installer/issues", + "source": "https://github.com/dealerdirect/phpcodesniffer-composer-installer" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:12:34+00:00" + "time": "2022-02-04T12:51:07+00:00" }, { - "name": "sebastian/object-reflector", - "version": "2.0.4", + "name": "keboola/coding-standard", + "version": "14.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + "url": "https://github.com/keboola/phpcs-standard.git", + "reference": "a39222d889f1411586d2b99386d1ab6886fe09fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "url": "https://api.github.com/repos/keboola/phpcs-standard/zipball/a39222d889f1411586d2b99386d1ab6886fe09fc", + "reference": "a39222d889f1411586d2b99386d1ab6886fe09fc", "shasum": "" }, "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] + "slevomat/coding-standard": "^8", + "squizlabs/php_codesniffer": "^3.2" }, + "type": "phpcodesniffer-standard", "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } + "MIT" ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "description": "Keboola coding standard", "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + "issues": "https://github.com/keboola/phpcs-standard/issues", + "source": "https://github.com/keboola/phpcs-standard/tree/14.0.0" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:14:26+00:00" + "time": "2022-07-11T11:34:29+00:00" }, { - "name": "sebastian/recursion-context", - "version": "4.0.4", + "name": "keboola/datadir-tests", + "version": "5.5.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + "url": "https://github.com/keboola/datadir-tests.git", + "reference": "78a8bb34fe09be4666b09080bfa289d61aec7f14" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "url": "https://api.github.com/repos/keboola/datadir-tests/zipball/78a8bb34fe09be4666b09080bfa289d61aec7f14", + "reference": "78a8bb34fe09be4666b09080bfa289d61aec7f14", "shasum": "" }, "require": { - "php": ">=7.3" + "ext-json": "*", + "keboola/php-temp": "^2.0", + "php": "^7.4|^8.0", + "phpunit/phpunit": "^9.5", + "symfony/filesystem": "^5.0|^6.0", + "symfony/finder": "^5.0|^6.0", + "symfony/process": "^5.0|^6.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "keboola/coding-standard": "^13.0", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpstan/phpstan": "^1.4" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Keboola\\DatadirTests\\": "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" - } + "MIT" ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "description": "Tool for functional testing of Keboola Connection components", "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + "issues": "https://github.com/keboola/datadir-tests/issues", + "source": "https://github.com/keboola/datadir-tests/tree/5.5.0" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:17:30+00:00" + "time": "2022-09-06T13:23:13+00:00" }, { - "name": "sebastian/resource-operations", - "version": "3.0.3", + "name": "php-parallel-lint/php-parallel-lint", + "version": "v1.3.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + "url": "https://github.com/php-parallel-lint/PHP-Parallel-Lint.git", + "reference": "6483c9832e71973ed29cf71bd6b3f4fde438a9de" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "url": "https://api.github.com/repos/php-parallel-lint/PHP-Parallel-Lint/zipball/6483c9832e71973ed29cf71bd6b3f4fde438a9de", + "reference": "6483c9832e71973ed29cf71bd6b3f4fde438a9de", "shasum": "" }, "require": { - "php": ">=7.3" + "ext-json": "*", + "php": ">=5.3.0" + }, + "replace": { + "grogy/php-parallel-lint": "*", + "jakub-onderka/php-parallel-lint": "*" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "nette/tester": "^1.3 || ^2.0", + "php-parallel-lint/php-console-highlighter": "0.* || ^1.0", + "squizlabs/php_codesniffer": "^3.6" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } + "suggest": { + "php-parallel-lint/php-console-highlighter": "Highlight syntax in code snippet" }, + "bin": [ + "parallel-lint" + ], + "type": "library", "autoload": { "classmap": [ - "src/" + "./src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "BSD-2-Clause" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Jakub Onderka", + "email": "ahoj@jakubonderka.cz" } ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "description": "This tool check syntax of PHP files about 20x faster than serial check.", + "homepage": "https://github.com/php-parallel-lint/PHP-Parallel-Lint", "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + "issues": "https://github.com/php-parallel-lint/PHP-Parallel-Lint/issues", + "source": "https://github.com/php-parallel-lint/PHP-Parallel-Lint/tree/v1.3.2" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:45:17+00:00" + "time": "2022-02-21T12:50:22+00:00" }, { - "name": "sebastian/type", - "version": "3.2.0", + "name": "phpstan/phpdoc-parser", + "version": "1.11.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e" + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "7d1e81213b0c7eb8d5a9f524456cbc2778ed5c65" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", - "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/7d1e81213b0c7eb8d5a9f524456cbc2778ed5c65", + "reference": "7d1e81213b0c7eb8d5a9f524456cbc2778ed5c65", "shasum": "" }, "require": { - "php": ">=7.3" + "php": "^7.2 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^9.5" + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.5", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.0", + "phpunit/phpunit": "^9.5", + "symfony/process": "^5.2" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } + "MIT" ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", + "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2.0" + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.11.0" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-09-12T14:47:03+00:00" + "time": "2022-10-14T13:32:28+00:00" }, { - "name": "sebastian/version", - "version": "3.0.2", + "name": "phpstan/phpstan", + "version": "1.8.10", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" + "url": "https://github.com/phpstan/phpstan.git", + "reference": "0c4459dc42c568b818b3f25186589f3acddc1823" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/0c4459dc42c568b818b3f25186589f3acddc1823", + "reference": "0c4459dc42c568b818b3f25186589f3acddc1823", "shasum": "" }, "require": { - "php": ">=7.3" + "php": "^7.2|^8.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } + "conflict": { + "phpstan/phpstan-shim": "*" }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", "autoload": { - "classmap": [ - "src/" + "files": [ + "bootstrap.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } + "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" ], - "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" + "issues": "https://github.com/phpstan/phpstan/issues", + "source": "https://github.com/phpstan/phpstan/tree/1.8.10" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", + "type": "tidelift" } ], - "time": "2020-09-28T06:39:44+00:00" + "time": "2022-10-17T14:23:35+00:00" }, { "name": "slevomat/coding-standard", - "version": "8.5.1", + "version": "8.6.0", "source": { "type": "git", "url": "https://github.com/slevomat/coding-standard.git", - "reference": "971f489404350bf4608b7e59381e603c47700366" + "reference": "d4175d8bf1246f4bf8be04ab688fbdc6fed18ece" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/971f489404350bf4608b7e59381e603c47700366", - "reference": "971f489404350bf4608b7e59381e603c47700366", + "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/d4175d8bf1246f4bf8be04ab688fbdc6fed18ece", + "reference": "d4175d8bf1246f4bf8be04ab688fbdc6fed18ece", "shasum": "" }, "require": { "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7", "php": "^7.2 || ^8.0", - "phpstan/phpdoc-parser": ">=1.7.0 <1.9.0", + "phpstan/phpdoc-parser": ">=1.11.0 <1.12.0", "squizlabs/php_codesniffer": "^3.7.1" }, "require-dev": { "phing/phing": "2.17.4", "php-parallel-lint/php-parallel-lint": "1.3.2", - "phpstan/phpstan": "1.4.10|1.8.5", + "phpstan/phpstan": "1.4.10|1.8.9", "phpstan/phpstan-deprecation-rules": "1.0.0", "phpstan/phpstan-phpunit": "1.0.0|1.1.1", - "phpstan/phpstan-strict-rules": "1.4.3", - "phpunit/phpunit": "7.5.20|8.5.21|9.5.24" + "phpstan/phpstan-strict-rules": "1.4.4", + "phpunit/phpunit": "7.5.20|8.5.21|9.5.25" }, "type": "phpcodesniffer-standard", "extra": { @@ -5268,9 +5328,13 @@ "MIT" ], "description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.", + "keywords": [ + "dev", + "phpcs" + ], "support": { "issues": "https://github.com/slevomat/coding-standard/issues", - "source": "https://github.com/slevomat/coding-standard/tree/8.5.1" + "source": "https://github.com/slevomat/coding-standard/tree/8.6.0" }, "funding": [ { @@ -5282,7 +5346,7 @@ "type": "tidelift" } ], - "time": "2022-09-23T05:34:53+00:00" + "time": "2022-10-16T10:31:02+00:00" }, { "name": "squizlabs/php_codesniffer", @@ -5339,70 +5403,11 @@ "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" }, "time": "2022-06-18T07:21:10+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": [ - { - "package": "keboola/db-import-export", - "version": "dev-mj-update-php-temp", - "alias": "1.9.1", - "alias_normalized": "1.9.1.0" } ], + "aliases": [], "minimum-stability": "stable", - "stability-flags": { - "keboola/db-import-export": 20 - }, + "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": { From 15d675265829463e81ad04be7bcb00c7fc3093cd Mon Sep 17 00:00:00 2001 From: Martin Junger Date: Wed, 19 Oct 2022 15:40:48 +0200 Subject: [PATCH 27/38] fix cs --- .../Snowflake/ImportFull/FromAbsGenerator.php | 2 + .../Synapse/ImportFull/FromAbsGenerator.php | 2 + .../Synapse/ImportFull/FromTableGenerator.php | 2 + src/Generator/Utils.php | 29 ++++++++-- tests/phpunit/ConfigDefinitionTest.php | 9 ++-- tests/phpunit/Generator/UtilsTest.php | 53 +++++++++++++------ 6 files changed, 76 insertions(+), 21 deletions(-) diff --git a/src/Generator/Snowflake/ImportFull/FromAbsGenerator.php b/src/Generator/Snowflake/ImportFull/FromAbsGenerator.php index 3e29ed4..0506ad8 100644 --- a/src/Generator/Snowflake/ImportFull/FromAbsGenerator.php +++ b/src/Generator/Snowflake/ImportFull/FromAbsGenerator.php @@ -1,5 +1,7 @@ $valueInArray) { if ($valueInArray instanceof ColumnInterface) { - $query = self::replaceParamInQuery($query, $valueInArray->getColumnName(), $keyInArray, $quoter, $outputPrefix, $outputSuffix); + $query = self::replaceParamInQuery( + $query, + $valueInArray->getColumnName(), + $keyInArray, + $quoter, + $outputPrefix, + $outputSuffix + ); } else { - $query = self::replaceParamInQuery($query, $valueInArray, $keyInArray, $quoter, $outputPrefix, $outputSuffix); + $query = self::replaceParamInQuery( + $query, + $valueInArray, + $keyInArray, + $quoter, + $outputPrefix, + $outputSuffix + ); } } } else { - $query = self::replaceParamInQuery($query, $value, $key, $quoter, $outputPrefix, $outputSuffix); + $query = self::replaceParamInQuery( + $query, + $value, + $key, + $quoter, + $outputPrefix, + $outputSuffix + ); } } return $query; diff --git a/tests/phpunit/ConfigDefinitionTest.php b/tests/phpunit/ConfigDefinitionTest.php index 1054096..f175c36 100644 --- a/tests/phpunit/ConfigDefinitionTest.php +++ b/tests/phpunit/ConfigDefinitionTest.php @@ -1,5 +1,7 @@ 'fileAbs', 'columns' => [ 'col1', - 'col2' + 'col2', ], 'primaryKeys' => [ - 'col1' + 'col1', ], ], ], $processedConfig); diff --git a/tests/phpunit/Generator/UtilsTest.php b/tests/phpunit/Generator/UtilsTest.php index 804777f..681966b 100644 --- a/tests/phpunit/Generator/UtilsTest.php +++ b/tests/phpunit/Generator/UtilsTest.php @@ -1,5 +1,7 @@ assertSame($expected, $output); @@ -47,8 +55,15 @@ public function testReplaceParamsInQuery() /** * @dataProvider replaceParamInQueryProvider */ - public function testReplaceParamInQuery(string $input, string $key, string $value, QuoteInterface $quoter, ?string $prefix, ?string $suffix, string $expectedOutput): void - { + public function testReplaceParamInQuery( + string $input, + string $key, + string $value, + QuoteInterface $quoter, + ?string $prefix, + ?string $suffix, + string $expectedOutput + ): void { $output = Utils::replaceParamInQuery( $input, $value, @@ -60,6 +75,9 @@ public function testReplaceParamInQuery(string $input, string $key, string $valu $this->assertSame($expectedOutput, $output); } + /** + * @return string[] + */ public function replaceParamInQueryProvider(): array { $defaultQuery = << [ $defaultQuery, - 'keyInOutput' => 'stageSchemaName', - 'valueInQuery' => 'stageSchemaName6336e8dda7606', + 'stageSchemaName', + 'stageSchemaName6336e8dda7606', new SnowflakeQuote(), '{{ ', ' }}', @@ -123,7 +143,7 @@ public function replaceParamInQueryProvider(): array << [ $defaultQuery, @@ -135,7 +155,7 @@ public function replaceParamInQueryProvider(): array << [ $dedupQuerySnowflake, @@ -157,7 +177,8 @@ public function replaceParamInQueryProvider(): array '{{ ', ' }}', <<assertStringNotContainsString('.', $id); From b9d1d1b1ba2e1112da79a60f6937aa12408cc88f Mon Sep 17 00:00:00 2001 From: Martin Junger Date: Wed, 19 Oct 2022 16:13:05 +0200 Subject: [PATCH 28/38] fix stan --- phpstan.neon | 2 +- src/Component.php | 4 +- src/ConfigDefinition.php | 1 - src/Generator/Utils.php | 2 +- src/SyncAction/GenerateAction.php | 4 +- tests/phpunit/ConfigDefinitionTest.php | 1 + tests/phpunit/Generator/UtilsTest.php | 237 ++++++++++++------------- 7 files changed, 125 insertions(+), 126 deletions(-) diff --git a/phpstan.neon b/phpstan.neon index 142d498..53fcd73 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -1,3 +1,3 @@ parameters: ignoreErrors: - - '#Cannot call method end\(\) on Symfony\\Component\\Config\\Definition\\Builder\\NodeParentInterface\|null.#' + - '#Cannot call method enumNode\(\) on Symfony\\Component\\Config\\Definition\\Builder\\NodeParentInterface\|null.#' diff --git a/src/Component.php b/src/Component.php index 973aedf..5f0b5fa 100644 --- a/src/Component.php +++ b/src/Component.php @@ -19,7 +19,9 @@ protected function run(): void } /** - * @return array + * @codingStandardsIgnoreStart + * @return array{action: string, backendType: string, operation: string, columns: string[], primaryKeys: string[], source: string, output: array{queries: array{sql: string, description: string}[]}} + * @codingStandardsIgnoreEnd */ public function actionGenerate(): array { diff --git a/src/ConfigDefinition.php b/src/ConfigDefinition.php index 5960dd2..ff481cd 100644 --- a/src/ConfigDefinition.php +++ b/src/ConfigDefinition.php @@ -13,7 +13,6 @@ protected function getParametersDefinition(): ArrayNodeDefinition { $parametersNode = parent::getParametersDefinition(); // @formatter:off - /** @noinspection NullPointerExceptionInspection */ $parametersNode ->children() ->enumNode('backend') diff --git a/src/Generator/Utils.php b/src/Generator/Utils.php index d35650f..6ad2e44 100644 --- a/src/Generator/Utils.php +++ b/src/Generator/Utils.php @@ -16,7 +16,7 @@ class Utils * - '^foo' = identifier with prefix in value * - '$foo' = identifier with suffix in value * - * @param mixed[] $params + * @param array> $params */ public static function replaceParamsInQuery( string $query, diff --git a/src/SyncAction/GenerateAction.php b/src/SyncAction/GenerateAction.php index 04f0b52..6d53605 100644 --- a/src/SyncAction/GenerateAction.php +++ b/src/SyncAction/GenerateAction.php @@ -20,7 +20,9 @@ public function __construct(Config $config) } /** - * @return array + * @codingStandardsIgnoreStart + * @return array{action: string, backendType: string, operation: string, columns: string[], primaryKeys: string[], source: string, output: array{queries: array{sql: string, description: string}[]}} + * @codingStandardsIgnoreEnd */ public function run(): array { diff --git a/tests/phpunit/ConfigDefinitionTest.php b/tests/phpunit/ConfigDefinitionTest.php index f175c36..acf52b8 100644 --- a/tests/phpunit/ConfigDefinitionTest.php +++ b/tests/phpunit/ConfigDefinitionTest.php @@ -15,6 +15,7 @@ class ConfigDefinitionTest extends TestCase { /** * @dataProvider provideInvalidConfigs + * @param class-string<\Throwable> $expectedExceptionClass */ public function testInvalidConfigDefinition( string $inputConfig, diff --git a/tests/phpunit/Generator/UtilsTest.php b/tests/phpunit/Generator/UtilsTest.php index 681966b..07713b4 100644 --- a/tests/phpunit/Generator/UtilsTest.php +++ b/tests/phpunit/Generator/UtilsTest.php @@ -60,8 +60,8 @@ public function testReplaceParamInQuery( string $key, string $value, QuoteInterface $quoter, - ?string $prefix, - ?string $suffix, + string $prefix, + string $suffix, string $expectedOutput ): void { $output = Utils::replaceParamInQuery( @@ -75,10 +75,7 @@ public function testReplaceParamInQuery( $this->assertSame($expectedOutput, $output); } - /** - * @return string[] - */ - public function replaceParamInQueryProvider(): array + public function replaceParamInQueryProvider(): \Generator { $defaultQuery = << [ - $defaultQuery, - 'stageSchemaName', - 'stageSchemaName6336e8dda7606', - new SnowflakeQuote(), - '{{ ', - ' }}', - 'output' => << [ - $defaultQuery, - '#sourceContainerUrl', - 'sourceContainerUrl6336ebdee0b80', - new SnowflakeQuote(), - '{{ ', - ' }}', - << [ - $defaultQuery, - 'stageSchemaName', - 'stageSchemaName6336e8dda7606', - new SnowflakeQuote(), - '[', - ']', - << [ - $defaultQuery, - '#sourceContainerUrl', - 'sourceContainerUrl6336ebdee0b80', - new SnowflakeQuote(), - '[', - ']', - << [ - $dedupQuerySnowflake, - '^stageDeduplicationTableName', - '__temp_DEDUP_', - new SnowflakeQuote(), - '{{ ', - ' }}', - << [ - $dedupQuerySynapse, - '$destDeduplicationTableName', - '_tmp', - new SynapseQuote(), - '{{ ', - ' }}', - << [ - $dedupQueryWithRenameSynapse, - '$destDeduplicationTableName', - '_tmp', - new SynapseQuote(), - '{{ ', - ' }}', - << [ - $dedupQueryWithRenameSynapse, - '$destDeduplicationTableName', - '_tmp_rename', - new SynapseQuote(), - '{{ ', - ' }}', - << [ - $defaultQueryWithSecretSynapse, - // '#' means value + Twig syntax - '#\'?\' ~ sourceSasSecret', - // prefixed by '?' - '?sourceSasToken634ff46baec58062943542', - new SynapseQuote(), - '{{ ', - ' }}', - << [ + $defaultQuery, + 'stageSchemaName', + 'stageSchemaName6336e8dda7606', + new SnowflakeQuote(), + '{{ ', + ' }}', + 'output' => << [ + $defaultQuery, + '#sourceContainerUrl', + 'sourceContainerUrl6336ebdee0b80', + new SnowflakeQuote(), + '{{ ', + ' }}', + << [ + $defaultQuery, + 'stageSchemaName', + 'stageSchemaName6336e8dda7606', + new SnowflakeQuote(), + '[', + ']', + << [ + $defaultQuery, + '#sourceContainerUrl', + 'sourceContainerUrl6336ebdee0b80', + new SnowflakeQuote(), + '[', + ']', + << [ + $dedupQuerySnowflake, + '^stageDeduplicationTableName', + '__temp_DEDUP_', + new SnowflakeQuote(), + '{{ ', + ' }}', + << [ + $dedupQuerySynapse, + '$destDeduplicationTableName', + '_tmp', + new SynapseQuote(), + '{{ ', + ' }}', + << [ + $dedupQueryWithRenameSynapse, + '$destDeduplicationTableName', + '_tmp', + new SynapseQuote(), + '{{ ', + ' }}', + << [ + $dedupQueryWithRenameSynapse, + '$destDeduplicationTableName', + '_tmp_rename', + new SynapseQuote(), + '{{ ', + ' }}', + << [ + $defaultQueryWithSecretSynapse, + // '#' means value + Twig syntax + '#\'?\' ~ sourceSasSecret', + // prefixed by '?' + '?sourceSasToken634ff46baec58062943542', + new SynapseQuote(), + '{{ ', + ' }}', + << Date: Wed, 19 Oct 2022 17:30:53 +0200 Subject: [PATCH 29/38] update readme --- README.md | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 72737b9..e68ce66 100644 --- a/README.md +++ b/README.md @@ -6,16 +6,27 @@ Generates templates for Custom Query feature in Keboola Connection platform. Create configuration in `data/config.json` with: - `parameters`: - - `backendType`: one of supported backend (e.g. `snowflake`); required - - `operation`: one of supported operation (e.g. `tableCreate`); required -- `action`: one of supported sync action to be run - `generate`; required + - `backend`: one of supported backend: `synapse`, `snowflake`; required + - `operation`: one of supported operation: `importFull`, `importIncremental`; required + - `source`: one of supported operation: `table`, `fileAbs`; required + - `columns`: list of columns; required + - `primaryKeys`: list of primary keys; optional +- `action`: one of supported sync action to be run: `generate`; required for example: ```json { "parameters": { - "backendType": "snowflake", - "operation": "tableCreate" + "backend": "synapse", + "operation": "importFull", + "source": "fileAbs", + "columns": [ + "column1", + "column2" + ], + "primaryKeys": [ + "column1" + ] }, "action": "generate" } @@ -26,15 +37,15 @@ Run component: docker-compose run --rm dev ``` -Will return JSON with query template. +Will return JSON with query templates. ## Development Clone this repository and init the workspace with following command: ``` -git clone https://github.com/keboola/my-component -cd my-component +git clone https://github.com/keboola/component.app-custom-query-manager +cd component.app-custom-query-manager docker-compose build docker-compose run --rm dev composer install --no-scripts ``` From 8846d00c60fd826b14b25d4164a9205bc1cf97fc Mon Sep 17 00:00:00 2001 From: Martin Junger Date: Wed, 19 Oct 2022 17:32:03 +0200 Subject: [PATCH 30/38] fix rename backendType to backend --- src/Component.php | 2 +- src/SyncAction/GenerateAction.php | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Component.php b/src/Component.php index 5f0b5fa..d246fe9 100644 --- a/src/Component.php +++ b/src/Component.php @@ -20,7 +20,7 @@ protected function run(): void /** * @codingStandardsIgnoreStart - * @return array{action: string, backendType: string, operation: string, columns: string[], primaryKeys: string[], source: string, output: array{queries: array{sql: string, description: string}[]}} + * @return array{action: string, backend: string, operation: string, columns: string[], primaryKeys: string[], source: string, output: array{queries: array{sql: string, description: string}[]}} * @codingStandardsIgnoreEnd */ public function actionGenerate(): array diff --git a/src/SyncAction/GenerateAction.php b/src/SyncAction/GenerateAction.php index 6d53605..da4e1da 100644 --- a/src/SyncAction/GenerateAction.php +++ b/src/SyncAction/GenerateAction.php @@ -21,7 +21,7 @@ public function __construct(Config $config) /** * @codingStandardsIgnoreStart - * @return array{action: string, backendType: string, operation: string, columns: string[], primaryKeys: string[], source: string, output: array{queries: array{sql: string, description: string}[]}} + * @return array{action: string, backend: string, operation: string, columns: string[], primaryKeys: string[], source: string, output: array{queries: array{sql: string, description: string}[]}} * @codingStandardsIgnoreEnd */ public function run(): array @@ -63,11 +63,11 @@ public function run(): array return [ 'action' => self::NAME, - 'backendType' => $this->config->getBackend(), + 'backend' => $this->config->getBackend(), 'operation' => $this->config->getOperation(), + 'source' => $this->config->getSource(), 'columns' => $this->config->getColumns(), 'primaryKeys' => $this->config->getPrimaryKeys(), - 'source' => $this->config->getSource(), 'output' => [ 'queries' => $this->formatQueriesForOutput($queries), ], From 1511c13709a258be11f150087dace8affdb9b587 Mon Sep 17 00:00:00 2001 From: Martin Junger Date: Wed, 19 Oct 2022 17:32:57 +0200 Subject: [PATCH 31/38] add component test --- .../Snowflake/ImportFull/FromAbsGenerator.php | 10 +- .../Synapse/ImportFull/FromAbsGenerator.php | 10 +- .../Synapse/ImportFull/FromTableGenerator.php | 10 +- tests/functional/ComponentTest.php | 139 ++++++++++++++++++ tests/functional/DatadirTest.php | 11 -- .../expected/data/out/files/.gitkeep | 0 .../expected/data/out/tables/.gitkeep | 0 .../empty-app/source/data/config.json | 2 - 8 files changed, 154 insertions(+), 28 deletions(-) create mode 100644 tests/functional/ComponentTest.php delete mode 100644 tests/functional/DatadirTest.php delete mode 100644 tests/functional/empty-app/expected/data/out/files/.gitkeep delete mode 100644 tests/functional/empty-app/expected/data/out/tables/.gitkeep delete mode 100644 tests/functional/empty-app/source/data/config.json diff --git a/src/Generator/Snowflake/ImportFull/FromAbsGenerator.php b/src/Generator/Snowflake/ImportFull/FromAbsGenerator.php index 0506ad8..881111d 100644 --- a/src/Generator/Snowflake/ImportFull/FromAbsGenerator.php +++ b/src/Generator/Snowflake/ImportFull/FromAbsGenerator.php @@ -137,14 +137,14 @@ static function (...$values) use (&$queries) { // result $replacedQueries = []; - dump('=== queries'); + file_put_contents('php://stderr', '=== queries:' . PHP_EOL, FILE_APPEND); foreach ($queries as $query) { -// dump($query); -// dump('---'); +// file_put_contents('php://stderr', $query . PHP_EOL, FILE_APPEND); +// file_put_contents('php://stderr', '---' . PHP_EOL, FILE_APPEND); $replacedQuery = Utils::replaceParamsInQuery($query, $params, new SnowflakeQuote()); $replacedQueries[] = $replacedQuery; - dump($replacedQuery); - dump('---------'); + file_put_contents('php://stderr', $replacedQuery . PHP_EOL, FILE_APPEND); + file_put_contents('php://stderr', '---------' . PHP_EOL, FILE_APPEND); } return $replacedQueries; diff --git a/src/Generator/Synapse/ImportFull/FromAbsGenerator.php b/src/Generator/Synapse/ImportFull/FromAbsGenerator.php index 49e2100..eef36b3 100644 --- a/src/Generator/Synapse/ImportFull/FromAbsGenerator.php +++ b/src/Generator/Synapse/ImportFull/FromAbsGenerator.php @@ -160,14 +160,14 @@ static function (...$values) use (&$queries) { // result $replacedQueries = []; - dump('=== queries'); + file_put_contents('php://stderr', '=== queries:' . PHP_EOL, FILE_APPEND); foreach ($queries as $query) { -// dump($query); -// dump('---'); +// file_put_contents('php://stderr', $query . PHP_EOL, FILE_APPEND); +// file_put_contents('php://stderr', '---' . PHP_EOL, FILE_APPEND); $replacedQuery = Utils::replaceParamsInQuery($query, $params, new SynapseQuote()); $replacedQueries[] = $replacedQuery; - dump($replacedQuery); - dump('---------'); + file_put_contents('php://stderr', $replacedQuery . PHP_EOL, FILE_APPEND); + file_put_contents('php://stderr', '---------' . PHP_EOL, FILE_APPEND); } return $replacedQueries; diff --git a/src/Generator/Synapse/ImportFull/FromTableGenerator.php b/src/Generator/Synapse/ImportFull/FromTableGenerator.php index c85260d..70ea55f 100644 --- a/src/Generator/Synapse/ImportFull/FromTableGenerator.php +++ b/src/Generator/Synapse/ImportFull/FromTableGenerator.php @@ -152,14 +152,14 @@ static function (...$values) use (&$queries) { // result $replacedQueries = []; - dump('=== queries'); + file_put_contents('php://stderr', '=== queries:' . PHP_EOL, FILE_APPEND); foreach ($queries as $query) { -// dump($query); -// dump('---'); +// file_put_contents('php://stderr', $query . PHP_EOL, FILE_APPEND); +// file_put_contents('php://stderr', '---' . PHP_EOL, FILE_APPEND); $replacedQuery = Utils::replaceParamsInQuery($query, $params, new SynapseQuote()); $replacedQueries[] = $replacedQuery; - dump($replacedQuery); - dump('---------'); + file_put_contents('php://stderr', $replacedQuery . PHP_EOL, FILE_APPEND); + file_put_contents('php://stderr', '---------' . PHP_EOL, FILE_APPEND); } return $replacedQueries; diff --git a/tests/functional/ComponentTest.php b/tests/functional/ComponentTest.php new file mode 100644 index 0000000..138bbf1 --- /dev/null +++ b/tests/functional/ComponentTest.php @@ -0,0 +1,139 @@ +getTempDatadir($specification); + $data = [ + 'action' => 'generate', + 'parameters' => [ + 'backend' => 'synapse', + 'operation' => 'importFull', + 'source' => 'table', + 'columns' => [ + 'column1', + 'column2', + ], + 'primaryKeys' => [ + 'column1', + ], + ], + ]; + file_put_contents($tempDatadir->getTmpFolder() . '/config.json', json_encode($data)); + + $process = $this->runScript($tempDatadir->getTmpFolder()); + $this->assertMatchesSpecification($specification, $process, $tempDatadir->getTmpFolder()); + /** + * @codingStandardsIgnoreStart + * @var array{action: string, backend: string, operation: string, columns: string[], primaryKeys: string[], source: string, output: array{queries: array{sql: string, description: string}[]}} $output + * @codingStandardsIgnoreEnd + */ + $output = json_decode($process->getOutput(), true); + + self::assertIsArray($output); + + self::assertArrayHasKey('action', $output); + self::assertSame('generate', $output['action']); + self::assertArrayHasKey('backend', $output); + self::assertSame('synapse', $output['backend']); + self::assertArrayHasKey('operation', $output); + self::assertSame('importFull', $output['operation']); + self::assertArrayHasKey('source', $output); + self::assertSame('table', $output['source']); + self::assertArrayHasKey('columns', $output); + self::assertSame(['column1', 'column2'], $output['columns']); + self::assertArrayHasKey('primaryKeys', $output); + self::assertSame(['column1'], $output['primaryKeys']); + + self::assertArrayHasKey('output', $output); + self::assertArrayHasKey('queries', $output['output']); + + $queries = $output['output']['queries']; + self::assertCount(8, $queries); + self::assertArrayHasKey('sql', $queries[0]); + self::assertArrayHasKey('description', $queries[0]); + + self::assertStringStartsWith( + 'CREATE TABLE {{ id(stageSchemaName) }}.{{ id(stageTableName) }} ' . + '([column1] NVARCHAR(4000), [column2] NVARCHAR(4000)) ' . + 'WITH (DISTRIBUTION = ROUND_ROBIN,CLUSTERED COLUMNSTORE INDEX)', + $queries[0]['sql'] + ); + self::assertStringStartsWith( + 'INSERT INTO {{ id(stageSchemaName) }}.{{ id(stageTableName) }} ([column1], [column2]) ' . + 'SELECT', + $queries[1]['sql'] + ); + self::assertStringStartsWith( + "CREATE TABLE {{ id(destSchemaName) }}.{{ id(stageTableName ~ '_tmp') }} " . + 'WITH (DISTRIBUTION=ROUND_ROBIN,CLUSTERED COLUMNSTORE INDEX) AS SELECT', + $queries[2]['sql'] + ); + self::assertStringStartsWith( + 'RENAME OBJECT {{ id(destSchemaName) }}.{{ id(destTableName) }} TO', + $queries[3]['sql'] + ); + self::assertStringStartsWith( + "RENAME OBJECT {{ id(destSchemaName) }}.{{ id(stageTableName ~ '_tmp') }} TO", + $queries[4]['sql'] + ); + self::assertStringStartsWith( + "DROP TABLE {{ id(destSchemaName) }}.{{ id(stageTableName ~ '_tmp_rename') }}", + $queries[5]['sql'] + ); + self::assertStringStartsWith( + "IF OBJECT_ID (N'{{ id(destSchemaName) }}.{{ id(stageTableName ~ '_tmp') }}', N'U') " . + "IS NOT NULL DROP TABLE {{ id(destSchemaName) }}.{{ id(stageTableName ~ '_tmp') }}", + $queries[6]['sql'] + ); + self::assertStringStartsWith( + "IF OBJECT_ID (N'{{ id(destSchemaName) }}.{{ id(stageTableName ~ '_tmp_rename') }}', N'U') IS NOT NULL " . + "DROP TABLE {{ id(destSchemaName) }}.{{ id(stageTableName ~ '_tmp_rename') }}", + $queries[7]['sql'] + ); + } + + protected function runScript(string $datadirPath, ?string $runId = null): Process + { + $fs = new Filesystem(); + + $script = $this->getScript(); + if (!$fs->exists($script)) { + throw new DatadirTestsException(sprintf( + 'Cannot open script file "%s"', + $script + )); + } + + $runCommand = [ + 'php', + $script, + ]; + $runProcess = new Process($runCommand); + $runProcess->setEnv([ + 'KBC_DATADIR' => $datadirPath, + ]); + $runProcess->setTimeout(0); + $runProcess->run(); + return $runProcess; + } +} diff --git a/tests/functional/DatadirTest.php b/tests/functional/DatadirTest.php deleted file mode 100644 index 0a0e9a3..0000000 --- a/tests/functional/DatadirTest.php +++ /dev/null @@ -1,11 +0,0 @@ - Date: Wed, 19 Oct 2022 17:36:24 +0200 Subject: [PATCH 32/38] fix cs --- tests/phpunit/Generator/UtilsTest.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/phpunit/Generator/UtilsTest.php b/tests/phpunit/Generator/UtilsTest.php index 07713b4..d1c9426 100644 --- a/tests/phpunit/Generator/UtilsTest.php +++ b/tests/phpunit/Generator/UtilsTest.php @@ -4,6 +4,7 @@ namespace Keboola\CustomQueryManagerApp\Tests\Generator; +use Generator; use Keboola\CustomQueryManagerApp\Generator\Utils; use Keboola\TableBackendUtils\Escaping\QuoteInterface; use Keboola\TableBackendUtils\Escaping\Snowflake\SnowflakeQuote; @@ -75,7 +76,7 @@ public function testReplaceParamInQuery( $this->assertSame($expectedOutput, $output); } - public function replaceParamInQueryProvider(): \Generator + public function replaceParamInQueryProvider(): Generator { $defaultQuery = << Date: Thu, 20 Oct 2022 16:12:25 +0200 Subject: [PATCH 33/38] add Synapse/ImportFull/FromTableGenerator test --- tests/functional/ComponentTest.php | 42 +----------- .../ImportFull/FromTableGeneratorTest.php | 66 +++++++++++++++++++ 2 files changed, 69 insertions(+), 39 deletions(-) create mode 100644 tests/phpunit/Generator/Synapse/ImportFull/FromTableGeneratorTest.php diff --git a/tests/functional/ComponentTest.php b/tests/functional/ComponentTest.php index 138bbf1..ebbacb7 100644 --- a/tests/functional/ComponentTest.php +++ b/tests/functional/ComponentTest.php @@ -66,49 +66,13 @@ public function testGenerateSynapseFullImportTable(): void self::assertArrayHasKey('output', $output); self::assertArrayHasKey('queries', $output['output']); - $queries = $output['output']['queries']; - self::assertCount(8, $queries); + self::assertGreaterThan(0, count($queries)); self::assertArrayHasKey('sql', $queries[0]); + self::assertIsString($queries[0]['sql']); self::assertArrayHasKey('description', $queries[0]); + self::assertIsString($queries[0]['description']); - self::assertStringStartsWith( - 'CREATE TABLE {{ id(stageSchemaName) }}.{{ id(stageTableName) }} ' . - '([column1] NVARCHAR(4000), [column2] NVARCHAR(4000)) ' . - 'WITH (DISTRIBUTION = ROUND_ROBIN,CLUSTERED COLUMNSTORE INDEX)', - $queries[0]['sql'] - ); - self::assertStringStartsWith( - 'INSERT INTO {{ id(stageSchemaName) }}.{{ id(stageTableName) }} ([column1], [column2]) ' . - 'SELECT', - $queries[1]['sql'] - ); - self::assertStringStartsWith( - "CREATE TABLE {{ id(destSchemaName) }}.{{ id(stageTableName ~ '_tmp') }} " . - 'WITH (DISTRIBUTION=ROUND_ROBIN,CLUSTERED COLUMNSTORE INDEX) AS SELECT', - $queries[2]['sql'] - ); - self::assertStringStartsWith( - 'RENAME OBJECT {{ id(destSchemaName) }}.{{ id(destTableName) }} TO', - $queries[3]['sql'] - ); - self::assertStringStartsWith( - "RENAME OBJECT {{ id(destSchemaName) }}.{{ id(stageTableName ~ '_tmp') }} TO", - $queries[4]['sql'] - ); - self::assertStringStartsWith( - "DROP TABLE {{ id(destSchemaName) }}.{{ id(stageTableName ~ '_tmp_rename') }}", - $queries[5]['sql'] - ); - self::assertStringStartsWith( - "IF OBJECT_ID (N'{{ id(destSchemaName) }}.{{ id(stageTableName ~ '_tmp') }}', N'U') " . - "IS NOT NULL DROP TABLE {{ id(destSchemaName) }}.{{ id(stageTableName ~ '_tmp') }}", - $queries[6]['sql'] - ); - self::assertStringStartsWith( - "IF OBJECT_ID (N'{{ id(destSchemaName) }}.{{ id(stageTableName ~ '_tmp_rename') }}', N'U') IS NOT NULL " . - "DROP TABLE {{ id(destSchemaName) }}.{{ id(stageTableName ~ '_tmp_rename') }}", - $queries[7]['sql'] ); } diff --git a/tests/phpunit/Generator/Synapse/ImportFull/FromTableGeneratorTest.php b/tests/phpunit/Generator/Synapse/ImportFull/FromTableGeneratorTest.php new file mode 100644 index 0000000..dfeb48f --- /dev/null +++ b/tests/phpunit/Generator/Synapse/ImportFull/FromTableGeneratorTest.php @@ -0,0 +1,66 @@ +generate($columns, $primaryKeys); + + self::assertCount(8, $queries); + + self::assertStringStartsWith( + 'CREATE TABLE {{ id(stageSchemaName) }}.{{ id(stageTableName) }} ' . + '([column1] NVARCHAR(4000), [column2] NVARCHAR(4000)) ' . + 'WITH (DISTRIBUTION = ROUND_ROBIN,CLUSTERED COLUMNSTORE INDEX)', + $queries[0] + ); + self::assertStringStartsWith( + 'INSERT INTO {{ id(stageSchemaName) }}.{{ id(stageTableName) }} ([column1], [column2]) ' . + 'SELECT', + $queries[1] + ); + self::assertStringStartsWith( + "CREATE TABLE {{ id(destSchemaName) }}.{{ id(stageTableName ~ '_tmp') }} " . + 'WITH (DISTRIBUTION=ROUND_ROBIN,CLUSTERED COLUMNSTORE INDEX) AS SELECT', + $queries[2] + ); + self::assertStringStartsWith( + 'RENAME OBJECT {{ id(destSchemaName) }}.{{ id(destTableName) }} TO', + $queries[3] + ); + self::assertStringStartsWith( + "RENAME OBJECT {{ id(destSchemaName) }}.{{ id(stageTableName ~ '_tmp') }} TO", + $queries[4] + ); + self::assertStringStartsWith( + "DROP TABLE {{ id(destSchemaName) }}.{{ id(stageTableName ~ '_tmp_rename') }}", + $queries[5] + ); + self::assertStringStartsWith( + "IF OBJECT_ID (N'{{ id(destSchemaName) }}.{{ id(stageTableName ~ '_tmp') }}', N'U') " . + "IS NOT NULL DROP TABLE {{ id(destSchemaName) }}.{{ id(stageTableName ~ '_tmp') }}", + $queries[6] + ); + self::assertStringStartsWith( + "IF OBJECT_ID (N'{{ id(destSchemaName) }}.{{ id(stageTableName ~ '_tmp_rename') }}', N'U') IS NOT NULL " . + "DROP TABLE {{ id(destSchemaName) }}.{{ id(stageTableName ~ '_tmp_rename') }}", + $queries[7] + ); + } +} From 1e984ae9e3cd9e0b06a0267dc0dea205b26efa96 Mon Sep 17 00:00:00 2001 From: Martin Junger Date: Thu, 20 Oct 2022 16:16:52 +0200 Subject: [PATCH 34/38] add GeneratorFactory and test for GenerateAction --- src/Component.php | 2 + src/Config.php | 21 ++++- src/Generator/GeneratorFactory.php | 42 ++++++++++ src/Generator/GeneratorInterface.php | 15 ++++ .../Snowflake/ImportFull/FromAbsGenerator.php | 3 +- .../Synapse/ImportFull/FromAbsGenerator.php | 3 +- .../Synapse/ImportFull/FromTableGenerator.php | 3 +- src/SyncAction/GenerateAction.php | 54 ++++-------- tests/functional/ComponentTest.php | 6 -- .../SyncAction/GenerateActionTest.php | 82 +++++++++++++++++++ 10 files changed, 181 insertions(+), 50 deletions(-) create mode 100644 src/Generator/GeneratorFactory.php create mode 100644 src/Generator/GeneratorInterface.php create mode 100644 tests/functional/SyncAction/GenerateActionTest.php diff --git a/src/Component.php b/src/Component.php index d246fe9..2a47718 100644 --- a/src/Component.php +++ b/src/Component.php @@ -6,6 +6,7 @@ use Keboola\Component\BaseComponent; use Keboola\Component\UserException; +use Keboola\CustomQueryManagerApp\Generator\GeneratorFactory; use Keboola\CustomQueryManagerApp\SyncAction\GenerateAction; class Component extends BaseComponent @@ -29,6 +30,7 @@ public function actionGenerate(): array $config = $this->getConfig(); return (new GenerateAction( + new GeneratorFactory(), $config, ))->run(); } diff --git a/src/Config.php b/src/Config.php index 66db978..715718d 100644 --- a/src/Config.php +++ b/src/Config.php @@ -32,14 +32,24 @@ class Config extends BaseConfig self::SOURCE_TABLE, ]; + /** + * @return self::BACKEND_* + */ public function getBackend(): string { - return $this->getStringValue(['parameters', 'backend']); + $value = $this->getStringValue(['parameters', 'backend']); + /** @var self::BACKEND_* $value */ + return $value; } + /** + * @return self::OPERATION_* + */ public function getOperation(): string { - return $this->getStringValue(['parameters', 'operation']); + $value = $this->getStringValue(['parameters', 'operation']); + /** @var self::OPERATION_* $value */ + return $value; } /** @@ -58,8 +68,13 @@ public function getPrimaryKeys(): array return $this->getArrayValue(['parameters', 'primaryKeys']); } + /** + * @return self::SOURCE_* + */ public function getSource(): string { - return $this->getStringValue(['parameters', 'source']); + $value = $this->getStringValue(['parameters', 'source']); + /** @var self::SOURCE_* $value */ + return $value; } } diff --git a/src/Generator/GeneratorFactory.php b/src/Generator/GeneratorFactory.php new file mode 100644 index 0000000..dd12cdc --- /dev/null +++ b/src/Generator/GeneratorFactory.php @@ -0,0 +1,42 @@ +generatorFactory = $generatorFactory; $this->config = $config; } @@ -26,40 +29,15 @@ public function __construct(Config $config) */ public function run(): array { - $queries = []; - - if ($this->config->getBackend() === Config::BACKEND_SNOWFLAKE) { - if ($this->config->getOperation() === Config::OPERATION_IMPORT_FULL) { - if ($this->config->getSource() === Config::SOURCE_FILE_ABS) { - $generator = new Generator\Snowflake\ImportFull\FromAbsGenerator(); - $queries = $generator->generate( - $this->config->getColumns(), - $this->config->getPrimaryKeys(), - ); - } - } - } elseif ($this->config->getBackend() === Config::BACKEND_SYNAPSE) { - if ($this->config->getOperation() === Config::OPERATION_IMPORT_FULL) { - if ($this->config->getSource() === Config::SOURCE_FILE_ABS) { - $generator = new Generator\Synapse\ImportFull\FromAbsGenerator(); - $queries = $generator->generate( - $this->config->getColumns(), - $this->config->getPrimaryKeys(), - ); - } - if ($this->config->getSource() === Config::SOURCE_TABLE) { - $generator = new Generator\Synapse\ImportFull\FromTableGenerator(); - $queries = $generator->generate( - $this->config->getColumns(), - $this->config->getPrimaryKeys(), - ); - } - } - } - - if (empty($queries)) { - throw new UserException('Combination of Backend/Operation/Source not implemented yet'); - } + $generator = $this->generatorFactory->factory( + $this->config->getBackend(), + $this->config->getOperation(), + $this->config->getSource(), + ); + $queries = $generator->generate( + $this->config->getColumns(), + $this->config->getPrimaryKeys(), + ); return [ 'action' => self::NAME, diff --git a/tests/functional/ComponentTest.php b/tests/functional/ComponentTest.php index ebbacb7..8750339 100644 --- a/tests/functional/ComponentTest.php +++ b/tests/functional/ComponentTest.php @@ -52,17 +52,11 @@ public function testGenerateSynapseFullImportTable(): void self::assertIsArray($output); self::assertArrayHasKey('action', $output); - self::assertSame('generate', $output['action']); self::assertArrayHasKey('backend', $output); - self::assertSame('synapse', $output['backend']); self::assertArrayHasKey('operation', $output); - self::assertSame('importFull', $output['operation']); self::assertArrayHasKey('source', $output); - self::assertSame('table', $output['source']); self::assertArrayHasKey('columns', $output); - self::assertSame(['column1', 'column2'], $output['columns']); self::assertArrayHasKey('primaryKeys', $output); - self::assertSame(['column1'], $output['primaryKeys']); self::assertArrayHasKey('output', $output); self::assertArrayHasKey('queries', $output['output']); diff --git a/tests/functional/SyncAction/GenerateActionTest.php b/tests/functional/SyncAction/GenerateActionTest.php new file mode 100644 index 0000000..1d6c6e3 --- /dev/null +++ b/tests/functional/SyncAction/GenerateActionTest.php @@ -0,0 +1,82 @@ +createMock(FromTableGenerator::class); + $generator->expects($this->atLeastOnce())->method('generate') + ->with($columns, $primaryKeys) + ->willReturn([ + 'first sql', + 'second sql', + ]); + + $generatorFactory = $this->createMock(GeneratorFactory::class); + $generatorFactory->expects($this->atLeastOnce())->method('factory') + ->with($backend, $operation, $source) + ->willReturn($generator); + + $config = $this->createMock(Config::class); + $config->expects($this->atLeastOnce())->method('getBackend')->willReturn($backend); + $config->expects($this->atLeastOnce())->method('getOperation')->willReturn($operation); + $config->expects($this->atLeastOnce())->method('getSource')->willReturn($source); + $config->expects($this->atLeastOnce())->method('getColumns')->willReturn($columns); + $config->expects($this->atLeastOnce())->method('getPrimaryKeys')->willReturn($primaryKeys); + + $action = new GenerateAction($generatorFactory, $config); + $output = $action->run(); + + $this->assertArrayHasKey('action', $output); + $this->assertSame('generate', $output['action']); + + $this->assertArrayHasKey('backend', $output); + $this->assertSame($backend, $output['backend']); + + $this->assertArrayHasKey('operation', $output); + $this->assertSame($operation, $output['operation']); + + $this->assertArrayHasKey('source', $output); + $this->assertSame($source, $output['source']); + + $this->assertArrayHasKey('columns', $output); + $this->assertSame($columns, $output['columns']); + + $this->assertArrayHasKey('primaryKeys', $output); + $this->assertSame($primaryKeys, $output['primaryKeys']); + + $this->assertArrayHasKey('output', $output); + $this->assertArrayHasKey('queries', $output['output']); + + $queries = $output['output']['queries']; + $this->assertCount(2, $queries); + + $query = $queries[0]; + $this->assertArrayHasKey('sql', $query); + $this->assertSame('first sql', $query['sql']); + $this->assertArrayHasKey('description', $query); + $this->assertSame('', $query['description']); + + $query = $queries[1]; + $this->assertArrayHasKey('sql', $query); + $this->assertSame('second sql', $query['sql']); + $this->assertArrayHasKey('description', $query); + $this->assertSame('', $query['description']); + } +} From 7a4dee366e5f92d89b55851235c062fdfd123ad7 Mon Sep 17 00:00:00 2001 From: Martin Junger Date: Thu, 20 Oct 2022 16:18:25 +0200 Subject: [PATCH 35/38] add more tests for component --- tests/functional/ComponentTest.php | 90 ++++++++++++++++++++++++++++-- 1 file changed, 85 insertions(+), 5 deletions(-) diff --git a/tests/functional/ComponentTest.php b/tests/functional/ComponentTest.php index 8750339..cec953f 100644 --- a/tests/functional/ComponentTest.php +++ b/tests/functional/ComponentTest.php @@ -4,6 +4,7 @@ namespace Keboola\CustomQueryManagerApp\FunctionalTests; +use Generator; use Keboola\DatadirTests\AbstractDatadirTestCase; use Keboola\DatadirTests\DatadirTestSpecification; use Keboola\DatadirTests\Exception\DatadirTestsException; @@ -13,8 +14,14 @@ class ComponentTest extends AbstractDatadirTestCase { - public function testGenerateSynapseFullImportTable(): void - { + /** + * @dataProvider generateActionProvider + */ + public function testGenerateAction( + string $backend, + string $operation, + string $source + ): void { $specification = new DatadirTestSpecification( __DIR__, 0, @@ -26,9 +33,9 @@ public function testGenerateSynapseFullImportTable(): void $data = [ 'action' => 'generate', 'parameters' => [ - 'backend' => 'synapse', - 'operation' => 'importFull', - 'source' => 'table', + 'backend' => $backend, + 'operation' => $operation, + 'source' => $source, 'columns' => [ 'column1', 'column2', @@ -66,8 +73,81 @@ public function testGenerateSynapseFullImportTable(): void self::assertIsString($queries[0]['sql']); self::assertArrayHasKey('description', $queries[0]); self::assertIsString($queries[0]['description']); + } + public function generateActionProvider(): Generator + { + yield 'synapse-importFull-table' => [ + 'synapse', + 'importFull', + 'table', + ]; + yield 'synapse-importFull-fileAbs' => [ + 'synapse', + 'importFull', + 'fileAbs', + ]; + yield 'snowflake-importFull-fileAbs' => [ + 'snowflake', + 'importFull', + 'fileAbs', + ]; + } + + /** + * @dataProvider generateActionFailedProvider + */ + public function testGenerateActionFailed( + string $backend, + string $operation, + string $source, + string $expectedStderr + ): void { + $specification = new DatadirTestSpecification( + __DIR__, + 1, + null, + $expectedStderr, + null ); + $tempDatadir = $this->getTempDatadir($specification); + $data = [ + 'action' => 'generate', + 'parameters' => [ + 'backend' => $backend, + 'operation' => $operation, + 'source' => $source, + 'columns' => [ + 'column1', + 'column2', + ], + 'primaryKeys' => [ + 'column1', + ], + ], + ]; + file_put_contents($tempDatadir->getTmpFolder() . '/config.json', json_encode($data)); + + $process = $this->runScript($tempDatadir->getTmpFolder()); + $this->assertMatchesSpecification($specification, $process, $tempDatadir->getTmpFolder()); + $output = json_decode($process->getOutput(), true); + } + + public function generateActionFailedProvider(): Generator + { + yield 'combination not implemented yet' => [ + 'snowflake', + 'importIncremental', + 'table', + 'Combination of Backend/Operation/Source not implemented yet', + ]; + yield 'invalid backend value' => [ + 'redshift', + 'importFull', + 'table', + 'The value "redshift" is not allowed for path "root.parameters.backend".' . + ' Permissible values: "snowflake", "synapse"', + ]; } protected function runScript(string $datadirPath, ?string $runId = null): Process From fe32ecb9f3b066c8f3164966c5277644adc36370 Mon Sep 17 00:00:00 2001 From: Martin Junger Date: Fri, 21 Oct 2022 15:33:36 +0200 Subject: [PATCH 36/38] change Synapse identity to Managed --- src/Generator/Synapse/ImportFull/FromAbsGenerator.php | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/Generator/Synapse/ImportFull/FromAbsGenerator.php b/src/Generator/Synapse/ImportFull/FromAbsGenerator.php index e8c8bb3..f065d14 100644 --- a/src/Generator/Synapse/ImportFull/FromAbsGenerator.php +++ b/src/Generator/Synapse/ImportFull/FromAbsGenerator.php @@ -51,16 +51,11 @@ public function generate(array $columns, array $primaryKeys = []): array ); $destPrimaryKeys = $primaryKeys; - $sourceSasToken = Utils::getUniqeId('sourceSasToken'); - $params = [ 'sourceFiles' => [ '#sourceFile1' => Utils::getUniqeId('sourceFile1'), ], '#sourceContainerUrl' => Utils::getUniqeId('sourceContainerUrl'), - '#sourceSasToken' => $sourceSasToken, - // generated sql contains different value (prefixed) -> key contains Twig format - '#\'?\' ~ sourceSasToken' => sprintf('?%s', $sourceSasToken), 'stageSchemaName' => Utils::getUniqeId('stageSchemaName'), 'stageTableName' => Utils::getUniqeId('__temp_stageTableName'), @@ -90,7 +85,6 @@ static function (...$values) use (&$queries) { $source->expects(self::atLeastOnce())->method('getColumnsNames')->willReturn($sourceColumns); // ABS specific $source->expects(self::atLeastOnce())->method('getContainerUrl')->willReturn($params['#sourceContainerUrl']); - $source->expects(self::atLeastOnce())->method('getSasToken')->willReturn($params['#sourceSasToken']); // fake staging table $stagingTable = new SynapseTableDefinition( @@ -113,7 +107,8 @@ static function (...$values) use (&$queries) { [], false, false, - 1 + 1, + SynapseImportOptions::CREDENTIALS_MANAGED_IDENTITY, ); // fake destination $destination = new SynapseTableDefinition( From 5189c92bdf33889d59ea5e266db801a09696742c Mon Sep 17 00:00:00 2001 From: Martin Junger Date: Mon, 24 Oct 2022 13:54:26 +0200 Subject: [PATCH 37/38] ignore ext-odbc --- Dockerfile | 13 +------- README.md | 2 +- composer.lock | 84 +++++++++++++++++++++++++-------------------------- 3 files changed, 44 insertions(+), 55 deletions(-) diff --git a/Dockerfile b/Dockerfile index 947a8ff..5ed6101 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ FROM php:7.4-cli -ARG COMPOSER_FLAGS="--prefer-dist --no-interaction" +ARG COMPOSER_FLAGS="--ignore-platform-req=ext-odbc --prefer-dist --no-interaction" ARG DEBIAN_FRONTEND=noninteractive ENV COMPOSER_ALLOW_SUPERUSER 1 ENV COMPOSER_PROCESS_TIMEOUT 3600 @@ -14,21 +14,10 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ git \ locales \ unzip \ - unixodbc-dev \ && rm -r /var/lib/apt/lists/* \ && sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen \ && locale-gen -# ODBC -RUN set -x \ - && docker-php-source extract \ - && cd /usr/src/php/ext/odbc \ - && phpize \ - && sed -ri 's@^ *test +"\$PHP_.*" *= *"no" *&& *PHP_.*=yes *$@#&@g' configure \ - && ./configure --with-unixODBC=shared,/usr \ - && docker-php-ext-install odbc \ - && docker-php-source delete - RUN chmod +x /tmp/composer-install.sh \ && /tmp/composer-install.sh diff --git a/README.md b/README.md index e68ce66..1db79a0 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ Clone this repository and init the workspace with following command: git clone https://github.com/keboola/component.app-custom-query-manager cd component.app-custom-query-manager docker-compose build -docker-compose run --rm dev composer install --no-scripts +docker-compose run --rm dev composer install --ignore-platform-req=ext-odbc --no-scripts ``` Run the test suite using this command: diff --git a/composer.lock b/composer.lock index 485c5b8..5a6b5b6 100644 --- a/composer.lock +++ b/composer.lock @@ -58,16 +58,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.239.0", + "version": "3.240.0", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "33ae76381b77a1a2580817996dcc7b9e931ae5f4" + "reference": "95186e6a40670196cc2f9f752a38b863aa45a890" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/33ae76381b77a1a2580817996dcc7b9e931ae5f4", - "reference": "33ae76381b77a1a2580817996dcc7b9e931ae5f4", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/95186e6a40670196cc2f9f752a38b863aa45a890", + "reference": "95186e6a40670196cc2f9f752a38b863aa45a890", "shasum": "" }, "require": { @@ -146,9 +146,9 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.239.0" + "source": "https://github.com/aws/aws-sdk-php/tree/3.240.0" }, - "time": "2022-10-18T18:17:00+00:00" + "time": "2022-10-21T20:17:33+00:00" }, { "name": "doctrine/cache", @@ -245,23 +245,23 @@ }, { "name": "doctrine/dbal", - "version": "3.4.5", + "version": "3.5.1", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "a5a58773109c0abb13e658c8ccd92aeec8d07f9e" + "reference": "f38ee8aaca2d58ee88653cb34a6a3880c23f38a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/a5a58773109c0abb13e658c8ccd92aeec8d07f9e", - "reference": "a5a58773109c0abb13e658c8ccd92aeec8d07f9e", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/f38ee8aaca2d58ee88653cb34a6a3880c23f38a5", + "reference": "f38ee8aaca2d58ee88653cb34a6a3880c23f38a5", "shasum": "" }, "require": { "composer-runtime-api": "^2", "doctrine/cache": "^1.11|^2.0", "doctrine/deprecations": "^0.5.3|^1", - "doctrine/event-manager": "^1.0", + "doctrine/event-manager": "^1|^2", "php": "^7.4 || ^8.0", "psr/cache": "^1|^2|^3", "psr/log": "^1|^2|^3" @@ -269,14 +269,14 @@ "require-dev": { "doctrine/coding-standard": "10.0.0", "jetbrains/phpstorm-stubs": "2022.2", - "phpstan/phpstan": "1.8.3", - "phpstan/phpstan-strict-rules": "^1.3", - "phpunit/phpunit": "9.5.24", + "phpstan/phpstan": "1.8.10", + "phpstan/phpstan-strict-rules": "^1.4", + "phpunit/phpunit": "9.5.25", "psalm/plugin-phpunit": "0.17.0", "squizlabs/php_codesniffer": "3.7.1", "symfony/cache": "^5.4|^6.0", "symfony/console": "^4.4|^5.4|^6.0", - "vimeo/psalm": "4.27.0" + "vimeo/psalm": "4.29.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -336,7 +336,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.4.5" + "source": "https://github.com/doctrine/dbal/tree/3.5.1" }, "funding": [ { @@ -352,7 +352,7 @@ "type": "tidelift" } ], - "time": "2022-09-23T17:48:57+00:00" + "time": "2022-10-24T07:26:18+00:00" }, { "name": "doctrine/deprecations", @@ -1261,26 +1261,26 @@ }, { "name": "keboola/csv-options", - "version": "v1.0", + "version": "v1.2", "source": { "type": "git", "url": "https://github.com/keboola/php-csv-options.git", - "reference": "75f237da8ec2b8e2730e46c09c841f5a3345cf09" + "reference": "c7bedec1b466499ecda970504938a9c1f8b2bd2f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/keboola/php-csv-options/zipball/75f237da8ec2b8e2730e46c09c841f5a3345cf09", - "reference": "75f237da8ec2b8e2730e46c09c841f5a3345cf09", + "url": "https://api.github.com/repos/keboola/php-csv-options/zipball/c7bedec1b466499ecda970504938a9c1f8b2bd2f", + "reference": "c7bedec1b466499ecda970504938a9c1f8b2bd2f", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.1|^8.0" }, "require-dev": { - "jakub-onderka/php-parallel-lint": "^1.0", - "keboola/coding-standard": "^9", - "phpstan/phpstan-shim": "^0.11", - "phpunit/phpunit": "^7.0" + "keboola/coding-standard": "^13", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^7.5|^8.5" }, "type": "library", "autoload": { @@ -1294,9 +1294,9 @@ ], "description": "CSV options lib", "support": { - "source": "https://github.com/keboola/php-csv-options/tree/v1.0" + "source": "https://github.com/keboola/php-csv-options/tree/v1.2" }, - "time": "2019-11-19T14:28:22+00:00" + "time": "2022-10-21T10:34:33+00:00" }, { "name": "keboola/db-import-export", @@ -5181,16 +5181,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "1.11.0", + "version": "1.13.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "7d1e81213b0c7eb8d5a9f524456cbc2778ed5c65" + "reference": "33aefcdab42900e36366d0feab6206e2dd68f947" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/7d1e81213b0c7eb8d5a9f524456cbc2778ed5c65", - "reference": "7d1e81213b0c7eb8d5a9f524456cbc2778ed5c65", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/33aefcdab42900e36366d0feab6206e2dd68f947", + "reference": "33aefcdab42900e36366d0feab6206e2dd68f947", "shasum": "" }, "require": { @@ -5220,9 +5220,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.11.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.13.0" }, - "time": "2022-10-14T13:32:28+00:00" + "time": "2022-10-21T09:57:39+00:00" }, { "name": "phpstan/phpstan", @@ -5285,28 +5285,28 @@ }, { "name": "slevomat/coding-standard", - "version": "8.6.0", + "version": "8.6.2", "source": { "type": "git", "url": "https://github.com/slevomat/coding-standard.git", - "reference": "d4175d8bf1246f4bf8be04ab688fbdc6fed18ece" + "reference": "080f592b16f021a3a8e43d95ca8f57b87ddcf4e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/d4175d8bf1246f4bf8be04ab688fbdc6fed18ece", - "reference": "d4175d8bf1246f4bf8be04ab688fbdc6fed18ece", + "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/080f592b16f021a3a8e43d95ca8f57b87ddcf4e6", + "reference": "080f592b16f021a3a8e43d95ca8f57b87ddcf4e6", "shasum": "" }, "require": { "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7", "php": "^7.2 || ^8.0", - "phpstan/phpdoc-parser": ">=1.11.0 <1.12.0", + "phpstan/phpdoc-parser": ">=1.11.0 <1.14.0", "squizlabs/php_codesniffer": "^3.7.1" }, "require-dev": { "phing/phing": "2.17.4", "php-parallel-lint/php-parallel-lint": "1.3.2", - "phpstan/phpstan": "1.4.10|1.8.9", + "phpstan/phpstan": "1.4.10|1.8.10", "phpstan/phpstan-deprecation-rules": "1.0.0", "phpstan/phpstan-phpunit": "1.0.0|1.1.1", "phpstan/phpstan-strict-rules": "1.4.4", @@ -5334,7 +5334,7 @@ ], "support": { "issues": "https://github.com/slevomat/coding-standard/issues", - "source": "https://github.com/slevomat/coding-standard/tree/8.6.0" + "source": "https://github.com/slevomat/coding-standard/tree/8.6.2" }, "funding": [ { @@ -5346,7 +5346,7 @@ "type": "tidelift" } ], - "time": "2022-10-16T10:31:02+00:00" + "time": "2022-10-22T15:42:49+00:00" }, { "name": "squizlabs/php_codesniffer", From 444f00d431c7f5522a11393ec6a8d8b7621cbaca Mon Sep 17 00:00:00 2001 From: Martin Junger Date: Mon, 24 Oct 2022 13:54:52 +0200 Subject: [PATCH 38/38] remove debug dumps --- src/Generator/Snowflake/ImportFull/FromAbsGenerator.php | 5 ----- src/Generator/Synapse/ImportFull/FromAbsGenerator.php | 5 ----- src/Generator/Synapse/ImportFull/FromTableGenerator.php | 5 ----- 3 files changed, 15 deletions(-) diff --git a/src/Generator/Snowflake/ImportFull/FromAbsGenerator.php b/src/Generator/Snowflake/ImportFull/FromAbsGenerator.php index f2d01ea..4bf7b64 100644 --- a/src/Generator/Snowflake/ImportFull/FromAbsGenerator.php +++ b/src/Generator/Snowflake/ImportFull/FromAbsGenerator.php @@ -138,14 +138,9 @@ static function (...$values) use (&$queries) { // result $replacedQueries = []; - file_put_contents('php://stderr', '=== queries:' . PHP_EOL, FILE_APPEND); foreach ($queries as $query) { -// file_put_contents('php://stderr', $query . PHP_EOL, FILE_APPEND); -// file_put_contents('php://stderr', '---' . PHP_EOL, FILE_APPEND); $replacedQuery = Utils::replaceParamsInQuery($query, $params, new SnowflakeQuote()); $replacedQueries[] = $replacedQuery; - file_put_contents('php://stderr', $replacedQuery . PHP_EOL, FILE_APPEND); - file_put_contents('php://stderr', '---------' . PHP_EOL, FILE_APPEND); } return $replacedQueries; diff --git a/src/Generator/Synapse/ImportFull/FromAbsGenerator.php b/src/Generator/Synapse/ImportFull/FromAbsGenerator.php index f065d14..c47d420 100644 --- a/src/Generator/Synapse/ImportFull/FromAbsGenerator.php +++ b/src/Generator/Synapse/ImportFull/FromAbsGenerator.php @@ -156,14 +156,9 @@ static function (...$values) use (&$queries) { // result $replacedQueries = []; - file_put_contents('php://stderr', '=== queries:' . PHP_EOL, FILE_APPEND); foreach ($queries as $query) { -// file_put_contents('php://stderr', $query . PHP_EOL, FILE_APPEND); -// file_put_contents('php://stderr', '---' . PHP_EOL, FILE_APPEND); $replacedQuery = Utils::replaceParamsInQuery($query, $params, new SynapseQuote()); $replacedQueries[] = $replacedQuery; - file_put_contents('php://stderr', $replacedQuery . PHP_EOL, FILE_APPEND); - file_put_contents('php://stderr', '---------' . PHP_EOL, FILE_APPEND); } return $replacedQueries; diff --git a/src/Generator/Synapse/ImportFull/FromTableGenerator.php b/src/Generator/Synapse/ImportFull/FromTableGenerator.php index bc3198c..f340e49 100644 --- a/src/Generator/Synapse/ImportFull/FromTableGenerator.php +++ b/src/Generator/Synapse/ImportFull/FromTableGenerator.php @@ -153,14 +153,9 @@ static function (...$values) use (&$queries) { // result $replacedQueries = []; - file_put_contents('php://stderr', '=== queries:' . PHP_EOL, FILE_APPEND); foreach ($queries as $query) { -// file_put_contents('php://stderr', $query . PHP_EOL, FILE_APPEND); -// file_put_contents('php://stderr', '---' . PHP_EOL, FILE_APPEND); $replacedQuery = Utils::replaceParamsInQuery($query, $params, new SynapseQuote()); $replacedQueries[] = $replacedQuery; - file_put_contents('php://stderr', $replacedQuery . PHP_EOL, FILE_APPEND); - file_put_contents('php://stderr', '---------' . PHP_EOL, FILE_APPEND); } return $replacedQueries;