diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8b2a513 --- /dev/null +++ b/LICENSE @@ -0,0 +1,19 @@ +# The MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md index cfae0ab..85444b7 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,12 @@ # Stamp -Stamp helps you to generate common repository files like `README.md`, `LICENSE`, `.gitignore`, `Dockerfile` etc. +Stamp generate files by applying data to templates. + +## Use-cases: + +* Generate common repository files like README.md, LICENSE, .gitignore, etc (by combining stamp with [metaculous](https://github.com/linkorb/metaculous)) +* Static site generator +* Documentation generator ## Installation @@ -10,22 +16,19 @@ Stamp helps you to generate common repository files like `README.md`, `LICENSE`, vendor/bin/stamp --help -## Workflow: +## How does it work? -### 1. Load `stamp.yml` configuration: +When you run `stamp generate`, Stamp will look for it's configuration in a file called `stamp.yaml` in the current directory. You can also pass a specify config file using `-c`. -Stamp looks for a file called `stamp.yml` in your project root (or you can specify one using `-c`) -and json file `metaculous.json` generated by linkorb/metaculous (or you can specify one using `-j`) +Additionally, stamp loads data from a file called `data.json`, or you can specify one using `-j`. -The config defines: +For example `stamp.yaml` and `data.json` files, please check the `example/` directory. -1. Project specific variables (i.e. license, project name, etc) -2. A list of files to be generated. Each file can have a name, template (file or url) and a set of variables, that override the project variables for this file only. - +Stamp will then loop through the `templates` defined in the config file, and use the template files defined by the `src` key, and generate the file defined by the `dest` key. -### 2. Generate files +By specifying an `items` key, one template may be applied multiple times, resulting in multiple output files. -Stamp loops through all the files defined in `stamp.yml`, loads their template, inserts the collected data, and saves the file to disk. +By specifying a `variables` key, the variables at the template level will get merged with the project level variables before being passed to the template, allowing you to override/add variables at the template level. ## stamp.yml example: @@ -33,54 +36,55 @@ Here's a simple example `stamp.yml` file: ```yml variables: - project: - title: Hello world + title: Hello world + license: mit files: - README.md: - template: stamp/README.md.twig + - src: stamp/README.md.twig + dest: README.md variables: - title: Hello world - blocks: - - "@doc/intro.md" - - "@doc/installation.md" + title: Hello world README file - LICENSE.md: - template: https://raw.githubusercontent.com/IQAndreas/markdown-licenses/master/mit.md + - src: https://raw.githubusercontent.com/IQAndreas/markdown-licenses/master/{{ license }}.md + dest: LICENSE - CONTRIBUTING.md: - template: https://raw.githubusercontent.com/gitlabhq/gitlabhq/master/CONTRIBUTING.md + - src: https://raw.githubusercontent.com/gitlabhq/gitlabhq/master/CONTRIBUTING.md + dest: CONTRIBUTING.md ``` Simply type `stamp generate` (or `vendor/bin/stamp generate`) in the root of your project, and the listed files will be (re)generated based on their templates. -Using URLs as templates allow you to manage your templates in one location, making it easy to update your projects based on updated templates. +Using URLs as templates allow you to manage your templates in one location (a git repository), making it easy to update your projects based on updated templates. + +Stamp supports multiple template languages/engines, which will be used based on the template file (src) file extension: + +* `.twig`: Use the [Twig](https://twig.symfony.com/) template language +* `.hbs`, `.handlebars`: Use the [Handlebars](https://handlebarsjs.com/) template language (powered by [LightnCandy](https://github.com/zordius/lightncandy)) +* `.mustache`: Use the [Mustache](https://mustache.github.io/) template language (powered by [LightnCandy](https://github.com/zordius/lightncandy)) + +## Functions + +In `stamp.yaml`, you define `src`/`dest` filenames and `items` variables. +These keys all support "expressions" in which you could optionally use a set of functions to apply to variables. + +* `strtolower`: lowercase the variable +* `dict`: Convert a key/value dictionary into an array of `item.key` and `item.value` items. -When the template files end in `.twig`, Stamp will use Twig to process the template based on the variables defined on the file and globally on the project. +More functions can easily be registered in the constructor of `src/Generator.php`. ## Development / debugging: -The `examples/` directory contains a collection of common files. While developing analyzers, you can run `./bin/stamp generate -c examples/full-project/stamp.yml` to run stamp in the context of the `examples/full-project/` directory. - -You can use the following command to debug the data that will be injected into any templates (including the output from the analyzers): - - ./bin/stamp generate -c examples/full-project/stamp.yml - -## Todo: - -* [x] Analyzer for `Dockerfile`: Simply define a variable if it exists. -* [x] Analyzer for `docker-compose.yml`: Import the YAML as-is. Can be used to list defined containers. -* [x] Analyzer for `Makefile`: Import the targets + comments, using the regex in `examples/full-project/Makefile` -* [x] Analyzer for `bower.json`: Import the JSON as-is. Can be used to list jobs -* [x] Analyzer for `.env.dist`: Import variables, their default values, and comments (line before the variable) -* [x] Analyzer for `.circleci/config.yml`: Import the YAML as-is. Can be used to list jobs -* [x] Analyzer for `.editorconfig`: Simply define a variable if it exists. -* [x] Analyzer for `schema.xml`: Used to document schema -* [x] Analyzer for `routes`: Used to document routes. Looks for `app/config/routes.yml` (Radvance) -* [x] Analyzer for `routes`: Used to document routes. Uses symfony `bin/console debug:router --format JSON` to import route data -* [x] Analyzer for `doctrine-schema`: Find a way to load doctrine schema into an array for entity documentation -* [x] Analyzer for `fixtures`: (Haigha). Simply define a variable if it exists. -* [x] Analyzer for `anonymizer.yml`: Simply define a variable if it exists. -* [x] Analyzer for `github`: Request repository data like contributors, title, etc. -* [x] Allow to use project variables in template filenames/urls (i.e. to fetch the proper license file) -* [x] Allow to use either twig or handlebars templates (using `zordius/lightncandy`) +The `examples/` directory contains an example configuration (`stamp.yaml`), data file (`data.json`) and template files. + +## License + +MIT. Please refer to the [license file](LICENSE) for details. + +## Brought to you by the LinkORB Engineering team + +
+Check out our other projects at [linkorb.com/engineering](http://www.linkorb.com/engineering). + +Btw, we're hiring! + + diff --git a/composer.json b/composer.json index ec2c9dd..72c8a00 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,6 @@ { "name": "linkorb/stamp", - "description": "Stamp: Generate common repository files like README.md, LICENSE, etc", + "description": "Stamp: Generate files from templates and data files", "homepage": "https://github.com/linkorb/stamp", "keywords": ["stamp", "linkorb"], "type": "library", @@ -17,7 +17,8 @@ "twig/twig": "^1.0", "symfony/dotenv": "^3.0|^4.0", "symfony/routing": "^3.0|^4.0", - "zordius/lightncandy": "^0.0|^1.0" + "zordius/lightncandy": "^0.0|^1.0", + "symfony/expression-language": "^4.2" }, "autoload": { "psr-4": { diff --git a/composer.lock b/composer.lock index b9e82b6..b077e67 100644 --- a/composer.lock +++ b/composer.lock @@ -4,32 +4,34 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "7653aa9f073c2ce5b9f5f5478f3f6318", + "content-hash": "e7d644f2b327fce255904e9d3029f971", "packages": [ { - "name": "alom/graphviz", - "version": "v1.1.0", + "name": "psr/cache", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/alexandresalome/graphviz.git", - "reference": "fc55ffa0661ca87aef91a224b994168892f258dd" + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/alexandresalome/graphviz/zipball/fc55ffa0661ca87aef91a224b994168892f258dd", - "reference": "fc55ffa0661ca87aef91a224b994168892f258dd", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", "shasum": "" }, "require": { "php": ">=5.3.0" }, - "require-dev": { - "phpunit/phpunit": "3.7.*" - }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, "autoload": { - "psr-0": { - "Alom": "src/" + "psr-4": { + "Psr\\Cache\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -38,47 +40,45 @@ ], "authors": [ { - "name": "Alexandre Salomé", - "email": "alexandre.salome@gmail.com", - "homepage": "http://alexandre-salome.fr" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Graphviz generation for PHP", - "homepage": "http://github.com/alexandresalome/graphviz", + "description": "Common interface for caching libraries", "keywords": [ - "dot", - "graphviz" + "cache", + "psr", + "psr-6" ], - "time": "2016-07-11T22:16:41+00:00" + "time": "2016-08-06T20:24:11+00:00" }, { - "name": "clue/stream-filter", - "version": "v1.4.0", + "name": "psr/log", + "version": "1.1.0", "source": { "type": "git", - "url": "https://github.com/clue/php-stream-filter.git", - "reference": "d80fdee9b3a7e0d16fc330a22f41f3ad0eeb09d0" + "url": "https://github.com/php-fig/log.git", + "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/clue/php-stream-filter/zipball/d80fdee9b3a7e0d16fc330a22f41f3ad0eeb09d0", - "reference": "d80fdee9b3a7e0d16fc330a22f41f3ad0eeb09d0", + "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", + "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", "shasum": "" }, "require": { - "php": ">=5.3" - }, - "require-dev": { - "phpunit/phpunit": "^5.0 || ^4.8" + "php": ">=5.3.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, "autoload": { "psr-4": { - "Clue\\StreamFilter\\": "src/" - }, - "files": [ - "src/functions.php" - ] + "Psr\\Log\\": "Psr/Log/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -86,62 +86,45 @@ ], "authors": [ { - "name": "Christian Lück", - "email": "christian@lueck.tv" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "A simple and modern approach to stream filtering in PHP", - "homepage": "https://github.com/clue/php-stream-filter", + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", "keywords": [ - "bucket brigade", - "callback", - "filter", - "php_user_filter", - "stream", - "stream_filter_append", - "stream_filter_register" + "log", + "psr", + "psr-3" ], - "time": "2017-08-18T09:54:01+00:00" + "time": "2018-11-20T15:27:04+00:00" }, { - "name": "guzzlehttp/guzzle", - "version": "6.3.3", + "name": "psr/simple-cache", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", "shasum": "" }, "require": { - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.4", - "php": ">=5.5" - }, - "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.0" - }, - "suggest": { - "psr/log": "Required for using the Log middleware" + "php": ">=5.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "6.3-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { - "files": [ - "src/functions_include.php" - ], "psr-4": { - "GuzzleHttp\\": "src/" + "Psr\\SimpleCache\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -150,56 +133,73 @@ ], "authors": [ { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", + "description": "Common interfaces for simple caching", "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" ], - "time": "2018-04-22T15:46:56+00:00" + "time": "2017-10-23T01:57:42+00:00" }, { - "name": "guzzlehttp/promises", - "version": "v1.3.1", + "name": "symfony/cache", + "version": "v4.2.8", "source": { "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + "url": "https://github.com/symfony/cache.git", + "reference": "9e64db924324700e19ef4f21c2c279a35ff9bdff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "url": "https://api.github.com/repos/symfony/cache/zipball/9e64db924324700e19ef4f21c2c279a35ff9bdff", + "reference": "9e64db924324700e19ef4f21c2c279a35ff9bdff", "shasum": "" }, "require": { - "php": ">=5.5.0" + "php": "^7.1.3", + "psr/cache": "~1.0", + "psr/log": "~1.0", + "psr/simple-cache": "^1.0", + "symfony/contracts": "^1.0", + "symfony/var-exporter": "^4.2" + }, + "conflict": { + "doctrine/dbal": "<2.5", + "symfony/dependency-injection": "<3.4", + "symfony/var-dumper": "<3.4" + }, + "provide": { + "psr/cache-implementation": "1.0", + "psr/simple-cache-implementation": "1.0", + "symfony/cache-contracts-implementation": "1.0" }, "require-dev": { - "phpunit/phpunit": "^4.0" + "cache/integration-tests": "dev-master", + "doctrine/cache": "~1.6", + "doctrine/dbal": "~2.5", + "predis/predis": "~1.1", + "symfony/config": "~4.2", + "symfony/dependency-injection": "~3.4|~4.1", + "symfony/var-dumper": "^4.1.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "4.2-dev" } }, "autoload": { "psr-4": { - "GuzzleHttp\\Promise\\": "src/" + "Symfony\\Component\\Cache\\": "" }, - "files": [ - "src/functions_include.php" + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -208,53 +208,70 @@ ], "authors": [ { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Guzzle promises library", + "description": "Symfony Cache component with PSR-6, PSR-16, and tags", + "homepage": "https://symfony.com", "keywords": [ - "promise" + "caching", + "psr6" ], - "time": "2016-12-20T10:07:11+00:00" + "time": "2019-04-16T09:36:45+00:00" }, { - "name": "guzzlehttp/psr7", - "version": "1.4.2", + "name": "symfony/console", + "version": "v4.1.7", "source": { "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" + "url": "https://github.com/symfony/console.git", + "reference": "432122af37d8cd52fba1b294b11976e0d20df595" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", - "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "url": "https://api.github.com/repos/symfony/console/zipball/432122af37d8cd52fba1b294b11976e0d20df595", + "reference": "432122af37d8cd52fba1b294b11976e0d20df595", "shasum": "" }, "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0" + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0" }, - "provide": { - "psr/http-message-implementation": "1.0" + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/process": "<3.3" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "psr/log": "~1.0", + "symfony/config": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~3.4|~4.0", + "symfony/lock": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0" + }, + "suggest": { + "psr/log-implementation": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "4.1-dev" } }, "autoload": { "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" + "Symfony\\Component\\Console\\": "" }, - "files": [ - "src/functions_include.php" + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -263,68 +280,59 @@ ], "authors": [ { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Tobias Schultze", - "homepage": "https://github.com/Tobion" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "request", - "response", - "stream", - "uri", - "url" - ], - "time": "2017-03-20T17:10:46+00:00" + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2018-10-31T09:30:44+00:00" }, { - "name": "knplabs/github-api", - "version": "2.10.1", + "name": "symfony/contracts", + "version": "v1.0.2", "source": { "type": "git", - "url": "https://github.com/KnpLabs/php-github-api.git", - "reference": "493423ae7ad1fa9075924cdfb98537828b9e80b5" + "url": "https://github.com/symfony/contracts.git", + "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/KnpLabs/php-github-api/zipball/493423ae7ad1fa9075924cdfb98537828b9e80b5", - "reference": "493423ae7ad1fa9075924cdfb98537828b9e80b5", + "url": "https://api.github.com/repos/symfony/contracts/zipball/1aa7ab2429c3d594dd70689604b5cf7421254cdf", + "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0", - "php-http/cache-plugin": "^1.4", - "php-http/client-common": "^1.6", - "php-http/client-implementation": "^1.0", - "php-http/discovery": "^1.0", - "php-http/httplug": "^1.1", - "psr/cache": "^1.0", - "psr/http-message": "^1.0" + "php": "^7.1.3" }, "require-dev": { - "cache/array-adapter": "^0.4", - "guzzlehttp/psr7": "^1.2", - "php-http/guzzle6-adapter": "^1.0", - "php-http/mock-client": "^1.0", - "phpunit/phpunit": "^5.5 || ^6.0" + "psr/cache": "^1.0", + "psr/container": "^1.0" + }, + "suggest": { + "psr/cache": "When using the Cache contracts", + "psr/container": "When using the Service contracts", + "symfony/cache-contracts-implementation": "", + "symfony/service-contracts-implementation": "", + "symfony/translation-contracts-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.10.x-dev" + "dev-master": "1.0-dev" } }, "autoload": { "psr-4": { - "Github\\": "lib/Github/" - } + "Symfony\\Contracts\\": "" + }, + "exclude-from-classmap": [ + "**/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -332,60 +340,59 @@ ], "authors": [ { - "name": "Thibault Duplessis", - "email": "thibault.duplessis@gmail.com", - "homepage": "http://ornicar.github.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "KnpLabs Team", - "homepage": "http://knplabs.com" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "GitHub API v3 client", - "homepage": "https://github.com/KnpLabs/php-github-api", + "description": "A set of abstractions extracted out of the Symfony components", + "homepage": "https://symfony.com", "keywords": [ - "api", - "gh", - "gist", - "github" - ], - "time": "2018-09-05T19:12:14+00:00" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2018-12-05T08:06:11+00:00" }, { - "name": "php-http/cache-plugin", - "version": "v1.5.0", + "name": "symfony/dotenv", + "version": "v4.1.7", "source": { "type": "git", - "url": "https://github.com/php-http/cache-plugin.git", - "reference": "c573ac6ea9b4e33fad567f875b844229d18000b9" + "url": "https://github.com/symfony/dotenv.git", + "reference": "9f3074b55bc56627f61fb2c17d573ee7df8e1319" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/cache-plugin/zipball/c573ac6ea9b4e33fad567f875b844229d18000b9", - "reference": "c573ac6ea9b4e33fad567f875b844229d18000b9", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/9f3074b55bc56627f61fb2c17d573ee7df8e1319", + "reference": "9f3074b55bc56627f61fb2c17d573ee7df8e1319", "shasum": "" }, "require": { - "php": "^5.4 || ^7.0", - "php-http/client-common": "^1.1", - "php-http/message-factory": "^1.0", - "psr/cache": "^1.0", - "symfony/options-resolver": "^2.6 || ^3.0 || ^4.0" + "php": "^7.1.3" }, "require-dev": { - "henrikbjorn/phpspec-code-coverage": "^1.0", - "phpspec/phpspec": "^2.5" + "symfony/process": "~3.4|~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.5-dev" + "dev-master": "4.1-dev" } }, "autoload": { "psr-4": { - "Http\\Client\\Common\\Plugin\\": "src/" - } + "Symfony\\Component\\Dotenv\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -393,60 +400,55 @@ ], "authors": [ { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "PSR-6 Cache plugin for HTTPlug", - "homepage": "http://httplug.io", + "description": "Registers environment variables from a .env file", + "homepage": "https://symfony.com", "keywords": [ - "cache", - "http", - "httplug", - "plugin" + "dotenv", + "env", + "environment" ], - "time": "2017-11-29T20:45:41+00:00" + "time": "2018-10-12T12:56:03+00:00" }, { - "name": "php-http/client-common", - "version": "1.8.1", + "name": "symfony/expression-language", + "version": "v4.2.8", "source": { "type": "git", - "url": "https://github.com/php-http/client-common.git", - "reference": "0b9ce659aa46aee106f8c66597ea0c070fcd9dff" + "url": "https://github.com/symfony/expression-language.git", + "reference": "a69b153996a13ffdb05395e8724c7217a8448e9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/client-common/zipball/0b9ce659aa46aee106f8c66597ea0c070fcd9dff", - "reference": "0b9ce659aa46aee106f8c66597ea0c070fcd9dff", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/a69b153996a13ffdb05395e8724c7217a8448e9e", + "reference": "a69b153996a13ffdb05395e8724c7217a8448e9e", "shasum": "" }, "require": { - "php": "^5.4 || ^7.0", - "php-http/httplug": "^1.1", - "php-http/message": "^1.6", - "php-http/message-factory": "^1.0", - "symfony/options-resolver": "^2.6 || ^3.0 || ^4.0" - }, - "require-dev": { - "guzzlehttp/psr7": "^1.4", - "phpspec/phpspec": "^2.5 || ^3.4 || ^4.2" - }, - "suggest": { - "php-http/cache-plugin": "PSR-6 Cache plugin", - "php-http/logger-plugin": "PSR-3 Logger plugin", - "php-http/stopwatch-plugin": "Symfony Stopwatch plugin" + "php": "^7.1.3", + "symfony/cache": "~3.4|~4.0", + "symfony/contracts": "^1.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.8-dev" + "dev-master": "4.2-dev" } }, "autoload": { "psr-4": { - "Http\\Client\\Common\\": "src/" - } + "Symfony\\Component\\ExpressionLanguage\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -454,58 +456,51 @@ ], "authors": [ { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Common HTTP Client implementations and tools for HTTPlug", - "homepage": "http://httplug.io", - "keywords": [ - "client", - "common", - "http", - "httplug" - ], - "time": "2018-10-09T06:46:29+00:00" + "description": "Symfony ExpressionLanguage Component", + "homepage": "https://symfony.com", + "time": "2019-01-16T20:31:39+00:00" }, { - "name": "php-http/discovery", - "version": "1.4.0", + "name": "symfony/polyfill-ctype", + "version": "v1.10.0", "source": { "type": "git", - "url": "https://github.com/php-http/discovery.git", - "reference": "9a6cb24de552bfe1aa9d7d1569e2d49c5b169a33" + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "e3d826245268269cd66f8326bd8bc066687b4a19" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/discovery/zipball/9a6cb24de552bfe1aa9d7d1569e2d49c5b169a33", - "reference": "9a6cb24de552bfe1aa9d7d1569e2d49c5b169a33", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19", + "reference": "e3d826245268269cd66f8326bd8bc066687b4a19", "shasum": "" }, "require": { - "php": "^5.5 || ^7.0" - }, - "require-dev": { - "henrikbjorn/phpspec-code-coverage": "^2.0.2", - "php-http/httplug": "^1.0", - "php-http/message-factory": "^1.0", - "phpspec/phpspec": "^2.4", - "puli/composer-plugin": "1.0.0-beta10" + "php": ">=5.3.3" }, "suggest": { - "php-http/message": "Allow to use Guzzle, Diactoros or Slim Framework factories", - "puli/composer-plugin": "Sets up Puli which is recommended for Discovery to work. Check http://docs.php-http.org/en/latest/discovery.html for more details." + "ext-ctype": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.9-dev" } }, "autoload": { "psr-4": { - "Http\\Discovery\\": "src/" - } + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -513,60 +508,57 @@ ], "authors": [ { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + }, + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" } ], - "description": "Finds installed HTTPlug implementations and PSR-7 message factories", - "homepage": "http://php-http.org", + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", "keywords": [ - "adapter", - "client", - "discovery", - "factory", - "http", - "message", - "psr7" + "compatibility", + "ctype", + "polyfill", + "portable" ], - "time": "2018-02-06T10:55:24+00:00" + "time": "2018-08-06T14:22:27+00:00" }, { - "name": "php-http/guzzle6-adapter", - "version": "v1.1.1", + "name": "symfony/polyfill-mbstring", + "version": "v1.10.0", "source": { "type": "git", - "url": "https://github.com/php-http/guzzle6-adapter.git", - "reference": "a56941f9dc6110409cfcddc91546ee97039277ab" + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "c79c051f5b3a46be09205c73b80b346e4153e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/guzzle6-adapter/zipball/a56941f9dc6110409cfcddc91546ee97039277ab", - "reference": "a56941f9dc6110409cfcddc91546ee97039277ab", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494", + "reference": "c79c051f5b3a46be09205c73b80b346e4153e494", "shasum": "" }, "require": { - "guzzlehttp/guzzle": "^6.0", - "php": ">=5.5.0", - "php-http/httplug": "^1.0" - }, - "provide": { - "php-http/async-client-implementation": "1.0", - "php-http/client-implementation": "1.0" + "php": ">=5.3.3" }, - "require-dev": { - "ext-curl": "*", - "php-http/adapter-integration-tests": "^0.4" + "suggest": { + "ext-mbstring": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2-dev" + "dev-master": "1.9-dev" } }, "autoload": { "psr-4": { - "Http\\Adapter\\Guzzle6\\": "src/" - } + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -574,55 +566,77 @@ ], "authors": [ { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "David de Boer", - "email": "david@ddeboer.nl" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Guzzle 6 HTTP Adapter", - "homepage": "http://httplug.io", + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", "keywords": [ - "Guzzle", - "http" + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" ], - "time": "2016-05-10T06:13:32+00:00" + "time": "2018-09-21T13:07:52+00:00" }, { - "name": "php-http/httplug", - "version": "v1.1.0", + "name": "symfony/routing", + "version": "v4.1.7", "source": { "type": "git", - "url": "https://github.com/php-http/httplug.git", - "reference": "1c6381726c18579c4ca2ef1ec1498fdae8bdf018" + "url": "https://github.com/symfony/routing.git", + "reference": "d4a3c14cfbe6b9c05a1d6e948654022d4d1ad3fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/httplug/zipball/1c6381726c18579c4ca2ef1ec1498fdae8bdf018", - "reference": "1c6381726c18579c4ca2ef1ec1498fdae8bdf018", + "url": "https://api.github.com/repos/symfony/routing/zipball/d4a3c14cfbe6b9c05a1d6e948654022d4d1ad3fd", + "reference": "d4a3c14cfbe6b9c05a1d6e948654022d4d1ad3fd", "shasum": "" }, "require": { - "php": ">=5.4", - "php-http/promise": "^1.0", - "psr/http-message": "^1.0" + "php": "^7.1.3" + }, + "conflict": { + "symfony/config": "<3.4", + "symfony/dependency-injection": "<3.4", + "symfony/yaml": "<3.4" }, "require-dev": { - "henrikbjorn/phpspec-code-coverage": "^1.0", - "phpspec/phpspec": "^2.4" + "doctrine/annotations": "~1.0", + "psr/log": "~1.0", + "symfony/config": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/http-foundation": "~3.4|~4.0", + "symfony/yaml": "~3.4|~4.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } + "suggest": { + "doctrine/annotations": "For using the annotation loader", + "symfony/config": "For using the all-in-one router or any loader", + "symfony/dependency-injection": "For loading routes from a service", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } }, "autoload": { "psr-4": { - "Http\\Client\\": "src/" - } + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -630,73 +644,56 @@ ], "authors": [ { - "name": "Eric GELOEN", - "email": "geloen.eric@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "HTTPlug, the HTTP client abstraction for PHP", - "homepage": "http://httplug.io", + "description": "Symfony Routing Component", + "homepage": "https://symfony.com", "keywords": [ - "client", - "http" + "router", + "routing", + "uri", + "url" ], - "time": "2016-08-31T08:30:17+00:00" + "time": "2018-10-28T18:38:52+00:00" }, { - "name": "php-http/message", - "version": "1.7.2", + "name": "symfony/var-exporter", + "version": "v4.2.8", "source": { "type": "git", - "url": "https://github.com/php-http/message.git", - "reference": "b159ffe570dffd335e22ef0b91a946eacb182fa1" + "url": "https://github.com/symfony/var-exporter.git", + "reference": "57e00f3e0a3deee65b67cf971455b98afeacca46" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/message/zipball/b159ffe570dffd335e22ef0b91a946eacb182fa1", - "reference": "b159ffe570dffd335e22ef0b91a946eacb182fa1", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/57e00f3e0a3deee65b67cf971455b98afeacca46", + "reference": "57e00f3e0a3deee65b67cf971455b98afeacca46", "shasum": "" }, "require": { - "clue/stream-filter": "^1.4", - "php": "^5.4 || ^7.0", - "php-http/message-factory": "^1.0.2", - "psr/http-message": "^1.0" - }, - "provide": { - "php-http/message-factory-implementation": "1.0" + "php": "^7.1.3" }, "require-dev": { - "akeneo/phpspec-skip-example-extension": "^1.0", - "coduo/phpspec-data-provider-extension": "^1.0", - "ext-zlib": "*", - "guzzlehttp/psr7": "^1.0", - "henrikbjorn/phpspec-code-coverage": "^1.0", - "phpspec/phpspec": "^2.4", - "slim/slim": "^3.0", - "zendframework/zend-diactoros": "^1.0" - }, - "suggest": { - "ext-zlib": "Used with compressor/decompressor streams", - "guzzlehttp/psr7": "Used with Guzzle PSR-7 Factories", - "slim/slim": "Used with Slim Framework PSR-7 implementation", - "zendframework/zend-diactoros": "Used with Diactoros Factories" + "symfony/var-dumper": "^4.1.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6-dev" + "dev-master": "4.2-dev" } }, "autoload": { "psr-4": { - "Http\\Message\\": "src/" + "Symfony\\Component\\VarExporter\\": "" }, - "files": [ - "src/filters.php" + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -705,47 +702,66 @@ ], "authors": [ { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "HTTP Message related tools", - "homepage": "http://php-http.org", + "description": "A blend of var_export() + serialize() to turn any serializable data structure to plain PHP code", + "homepage": "https://symfony.com", "keywords": [ - "http", - "message", - "psr-7" + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "serialize" ], - "time": "2018-11-01T09:32:41+00:00" + "time": "2019-04-09T20:09:28+00:00" }, { - "name": "php-http/message-factory", - "version": "v1.0.2", + "name": "symfony/yaml", + "version": "v4.1.7", "source": { "type": "git", - "url": "https://github.com/php-http/message-factory.git", - "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1" + "url": "https://github.com/symfony/yaml.git", + "reference": "367e689b2fdc19965be435337b50bc8adf2746c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1", - "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1", + "url": "https://api.github.com/repos/symfony/yaml/zipball/367e689b2fdc19965be435337b50bc8adf2746c9", + "reference": "367e689b2fdc19965be435337b50bc8adf2746c9", "shasum": "" }, "require": { - "php": ">=5.4", - "psr/http-message": "^1.0" + "php": "^7.1.3", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/console": "<3.4" + }, + "require-dev": { + "symfony/console": "~3.4|~4.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "4.1-dev" } }, "autoload": { "psr-4": { - "Http\\Message\\": "src/" - } + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -753,97 +769,113 @@ ], "authors": [ { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Factory interfaces for PSR-7 HTTP Message", - "homepage": "http://php-http.org", - "keywords": [ - "factory", - "http", - "message", - "stream", - "uri" - ], - "time": "2015-12-19T14:08:53+00:00" + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2018-10-02T16:36:10+00:00" }, { - "name": "php-http/promise", - "version": "v1.0.0", + "name": "twig/twig", + "version": "v1.35.4", "source": { "type": "git", - "url": "https://github.com/php-http/promise.git", - "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980" + "url": "https://github.com/twigphp/Twig.git", + "reference": "7e081e98378a1e78c29cc9eba4aefa5d78a05d2a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/promise/zipball/dc494cdc9d7160b9a09bd5573272195242ce7980", - "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/7e081e98378a1e78c29cc9eba4aefa5d78a05d2a", + "reference": "7e081e98378a1e78c29cc9eba4aefa5d78a05d2a", "shasum": "" }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-ctype": "^1.8" + }, "require-dev": { - "henrikbjorn/phpspec-code-coverage": "^1.0", - "phpspec/phpspec": "^2.4" + "psr/container": "^1.0", + "symfony/debug": "^2.7", + "symfony/phpunit-bridge": "^3.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "1.35-dev" } }, "autoload": { + "psr-0": { + "Twig_": "lib/" + }, "psr-4": { - "Http\\Promise\\": "src/" + "Twig\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" }, { - "name": "Joel Wurtz", - "email": "joel.wurtz@gmail.com" + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + }, + { + "name": "Twig Team", + "homepage": "https://twig.symfony.com/contributors", + "role": "Contributors" } ], - "description": "Promise used for asynchronous HTTP requests", - "homepage": "http://httplug.io", + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "https://twig.symfony.com", "keywords": [ - "promise" + "templating" ], - "time": "2016-01-26T13:27:02+00:00" + "time": "2018-07-13T07:12:17+00:00" }, { - "name": "psr/cache", - "version": "1.0.1", + "name": "zordius/lightncandy", + "version": "v1.2.2", "source": { "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + "url": "https://github.com/zordius/lightncandy.git", + "reference": "448cb2855d7301fa5380d8228255d46e9be92903" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "url": "https://api.github.com/repos/zordius/lightncandy/zipball/448cb2855d7301fa5380d8228255d46e9be92903", + "reference": "448cb2855d7301fa5380d8228255d46e9be92903", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "4.8.35" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.2.3-dev" } }, "autoload": { "psr-4": { - "Psr\\Cache\\": "src/" + "LightnCandy\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -852,44 +884,47 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Zordius Chen", + "email": "zordius@gmail.com" } ], - "description": "Common interface for caching libraries", + "description": "An extremely fast PHP implementation of handlebars ( http://handlebarsjs.com/ ) and mustache ( http://mustache.github.io/ ).", + "homepage": "https://github.com/zordius/lightncandy", "keywords": [ - "cache", - "psr", - "psr-6" + "handlebars", + "logicless", + "mustache", + "php", + "template" ], - "time": "2016-08-06T20:24:11+00:00" - }, + "time": "2018-03-19T07:06:10+00:00" + } + ], + "packages-dev": [ { - "name": "psr/http-message", - "version": "1.0.1", + "name": "alom/graphviz", + "version": "v1.1.0", "source": { "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + "url": "https://github.com/alexandresalome/graphviz.git", + "reference": "fc55ffa0661ca87aef91a224b994168892f258dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "url": "https://api.github.com/repos/alexandresalome/graphviz/zipball/fc55ffa0661ca87aef91a224b994168892f258dd", + "reference": "fc55ffa0661ca87aef91a224b994168892f258dd", "shasum": "" }, "require": { "php": ">=5.3.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } + "require-dev": { + "phpunit/phpunit": "3.7.*" }, + "type": "library", "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" + "psr-0": { + "Alom": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -898,70 +933,46 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Alexandre Salomé", + "email": "alexandre.salome@gmail.com", + "homepage": "http://alexandre-salome.fr" } ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", + "description": "Graphviz generation for PHP", + "homepage": "http://github.com/alexandresalome/graphviz", "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" + "dot", + "graphviz" ], - "time": "2016-08-06T14:39:51+00:00" + "time": "2016-07-11T22:16:41+00:00" }, { - "name": "symfony/console", - "version": "v4.1.7", + "name": "clue/stream-filter", + "version": "v1.4.0", "source": { "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "432122af37d8cd52fba1b294b11976e0d20df595" + "url": "https://github.com/clue/php-stream-filter.git", + "reference": "d80fdee9b3a7e0d16fc330a22f41f3ad0eeb09d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/432122af37d8cd52fba1b294b11976e0d20df595", - "reference": "432122af37d8cd52fba1b294b11976e0d20df595", + "url": "https://api.github.com/repos/clue/php-stream-filter/zipball/d80fdee9b3a7e0d16fc330a22f41f3ad0eeb09d0", + "reference": "d80fdee9b3a7e0d16fc330a22f41f3ad0eeb09d0", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/dependency-injection": "<3.4", - "symfony/process": "<3.3" + "php": ">=5.3" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "~3.4|~4.0", - "symfony/lock": "~3.4|~4.0", - "symfony/process": "~3.4|~4.0" - }, - "suggest": { - "psr/log-implementation": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" + "phpunit/phpunit": "^5.0 || ^4.8" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.1-dev" - } - }, "autoload": { "psr-4": { - "Symfony\\Component\\Console\\": "" + "Clue\\StreamFilter\\": "src/" }, - "exclude-from-classmap": [ - "/Tests/" + "files": [ + "src/functions.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -970,105 +981,90 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Christian Lück", + "email": "christian@lueck.tv" } ], - "description": "Symfony Console Component", - "homepage": "https://symfony.com", - "time": "2018-10-31T09:30:44+00:00" + "description": "A simple and modern approach to stream filtering in PHP", + "homepage": "https://github.com/clue/php-stream-filter", + "keywords": [ + "bucket brigade", + "callback", + "filter", + "php_user_filter", + "stream", + "stream_filter_append", + "stream_filter_register" + ], + "time": "2017-08-18T09:54:01+00:00" }, { - "name": "symfony/dotenv", - "version": "v4.1.7", + "name": "dnoegel/php-xdg-base-dir", + "version": "0.1", "source": { "type": "git", - "url": "https://github.com/symfony/dotenv.git", - "reference": "9f3074b55bc56627f61fb2c17d573ee7df8e1319" + "url": "https://github.com/dnoegel/php-xdg-base-dir.git", + "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/9f3074b55bc56627f61fb2c17d573ee7df8e1319", - "reference": "9f3074b55bc56627f61fb2c17d573ee7df8e1319", + "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/265b8593498b997dc2d31e75b89f053b5cc9621a", + "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": ">=5.3.2" }, "require-dev": { - "symfony/process": "~3.4|~4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.1-dev" - } + "phpunit/phpunit": "@stable" }, + "type": "project", "autoload": { "psr-4": { - "Symfony\\Component\\Dotenv\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "XdgBaseDir\\": "src/" + } }, "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": "Registers environment variables from a .env file", - "homepage": "https://symfony.com", - "keywords": [ - "dotenv", - "env", - "environment" - ], - "time": "2018-10-12T12:56:03+00:00" + "description": "implementation of xdg base directory specification for php", + "time": "2014-10-24T07:27:01+00:00" }, { - "name": "symfony/options-resolver", - "version": "v4.1.7", + "name": "doctrine/instantiator", + "version": "1.1.0", "source": { "type": "git", - "url": "https://github.com/symfony/options-resolver.git", - "reference": "40f0e40d37c1c8a762334618dea597d64bbb75ff" + "url": "https://github.com/doctrine/instantiator.git", + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/40f0e40d37c1c8a762334618dea597d64bbb75ff", - "reference": "40f0e40d37c1c8a762334618dea597d64bbb75ff", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": "^7.1" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "^6.2.3", + "squizlabs/php_codesniffer": "^3.0.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.1-dev" + "dev-master": "1.2.x-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\OptionsResolver\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1076,56 +1072,59 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" } ], - "description": "Symfony OptionsResolver Component", - "homepage": "https://symfony.com", + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", "keywords": [ - "config", - "configuration", - "options" + "constructor", + "instantiate" ], - "time": "2018-09-18T12:45:12+00:00" + "time": "2017-07-22T11:58:36+00:00" }, { - "name": "symfony/polyfill-ctype", - "version": "v1.10.0", + "name": "guzzlehttp/guzzle", + "version": "6.3.3", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "e3d826245268269cd66f8326bd8bc066687b4a19" + "url": "https://github.com/guzzle/guzzle.git", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19", - "reference": "e3d826245268269cd66f8326bd8bc066687b4a19", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", "shasum": "" }, "require": { - "php": ">=5.3.3" + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.0" }, "suggest": { - "ext-ctype": "For best performance" + "psr/log": "Required for using the Log middleware" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "6.3-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, "files": [ - "bootstrap.php" - ] + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1133,56 +1132,56 @@ ], "authors": [ { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - }, - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" } ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" ], - "time": "2018-08-06T14:22:27+00:00" + "time": "2018-04-22T15:46:56+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.10.0", + "name": "guzzlehttp/promises", + "version": "v1.3.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "c79c051f5b3a46be09205c73b80b346e4153e494" + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494", - "reference": "c79c051f5b3a46be09205c73b80b346e4153e494", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=5.5.0" }, - "suggest": { - "ext-mbstring": "For best performance" + "require-dev": { + "phpunit/phpunit": "^4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "1.4-dev" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" + "GuzzleHttp\\Promise\\": "src/" }, "files": [ - "bootstrap.php" + "src/functions_include.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -1191,76 +1190,53 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" } ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", + "description": "Guzzle promises library", "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" + "promise" ], - "time": "2018-09-21T13:07:52+00:00" + "time": "2016-12-20T10:07:11+00:00" }, { - "name": "symfony/routing", - "version": "v4.1.7", + "name": "guzzlehttp/psr7", + "version": "1.4.2", "source": { "type": "git", - "url": "https://github.com/symfony/routing.git", - "reference": "d4a3c14cfbe6b9c05a1d6e948654022d4d1ad3fd" + "url": "https://github.com/guzzle/psr7.git", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/d4a3c14cfbe6b9c05a1d6e948654022d4d1ad3fd", - "reference": "d4a3c14cfbe6b9c05a1d6e948654022d4d1ad3fd", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": ">=5.4.0", + "psr/http-message": "~1.0" }, - "conflict": { - "symfony/config": "<3.4", - "symfony/dependency-injection": "<3.4", - "symfony/yaml": "<3.4" + "provide": { + "psr/http-message-implementation": "1.0" }, "require-dev": { - "doctrine/annotations": "~1.0", - "psr/log": "~1.0", - "symfony/config": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/expression-language": "~3.4|~4.0", - "symfony/http-foundation": "~3.4|~4.0", - "symfony/yaml": "~3.4|~4.0" - }, - "suggest": { - "doctrine/annotations": "For using the annotation loader", - "symfony/config": "For using the all-in-one router or any loader", - "symfony/dependency-injection": "For loading routes from a service", - "symfony/expression-language": "For using expression matching", - "symfony/http-foundation": "For using a Symfony Request object", - "symfony/yaml": "For using the YAML loader" + "phpunit/phpunit": "~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.1-dev" + "dev-master": "1.4-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Routing\\": "" + "GuzzleHttp\\Psr7\\": "src/" }, - "exclude-from-classmap": [ - "/Tests/" + "files": [ + "src/functions_include.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -1269,64 +1245,100 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" } ], - "description": "Symfony Routing Component", - "homepage": "https://symfony.com", + "description": "PSR-7 message implementation that also provides common utility methods", "keywords": [ - "router", - "routing", + "http", + "message", + "request", + "response", + "stream", "uri", "url" ], - "time": "2018-10-28T18:38:52+00:00" + "time": "2017-03-20T17:10:46+00:00" }, { - "name": "symfony/yaml", - "version": "v4.1.7", + "name": "jakub-onderka/php-console-color", + "version": "v0.2", "source": { "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "367e689b2fdc19965be435337b50bc8adf2746c9" + "url": "https://github.com/JakubOnderka/PHP-Console-Color.git", + "reference": "d5deaecff52a0d61ccb613bb3804088da0307191" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/367e689b2fdc19965be435337b50bc8adf2746c9", - "reference": "367e689b2fdc19965be435337b50bc8adf2746c9", + "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/d5deaecff52a0d61ccb613bb3804088da0307191", + "reference": "d5deaecff52a0d61ccb613bb3804088da0307191", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "symfony/console": "<3.4" + "php": ">=5.4.0" }, "require-dev": { - "symfony/console": "~3.4|~4.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" + "jakub-onderka/php-code-style": "1.0", + "jakub-onderka/php-parallel-lint": "1.0", + "jakub-onderka/php-var-dump-check": "0.*", + "phpunit/phpunit": "~4.3", + "squizlabs/php_codesniffer": "1.*" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.1-dev" + "autoload": { + "psr-4": { + "JakubOnderka\\PhpConsoleColor\\": "src/" } }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Jakub Onderka", + "email": "jakub.onderka@gmail.com" + } + ], + "time": "2018-09-29T17:23:10+00:00" + }, + { + "name": "jakub-onderka/php-console-highlighter", + "version": "v0.4", + "source": { + "type": "git", + "url": "https://github.com/JakubOnderka/PHP-Console-Highlighter.git", + "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/9f7a229a69d52506914b4bc61bfdb199d90c5547", + "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "jakub-onderka/php-console-color": "~0.2", + "php": ">=5.4.0" + }, + "require-dev": { + "jakub-onderka/php-code-style": "~1.0", + "jakub-onderka/php-parallel-lint": "~1.0", + "jakub-onderka/php-var-dump-check": "~0.1", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~1.5" + }, + "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "JakubOnderka\\PhpConsoleHighlighter\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1334,204 +1346,377 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Jakub Onderka", + "email": "acci@acci.cz", + "homepage": "http://www.acci.cz/" } ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com", - "time": "2018-10-02T16:36:10+00:00" + "description": "Highlight PHP code in terminal", + "time": "2018-09-29T18:48:56+00:00" }, { - "name": "twig/twig", - "version": "v1.35.4", + "name": "knplabs/github-api", + "version": "2.10.1", "source": { "type": "git", - "url": "https://github.com/twigphp/Twig.git", - "reference": "7e081e98378a1e78c29cc9eba4aefa5d78a05d2a" + "url": "https://github.com/KnpLabs/php-github-api.git", + "reference": "493423ae7ad1fa9075924cdfb98537828b9e80b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/7e081e98378a1e78c29cc9eba4aefa5d78a05d2a", - "reference": "7e081e98378a1e78c29cc9eba4aefa5d78a05d2a", + "url": "https://api.github.com/repos/KnpLabs/php-github-api/zipball/493423ae7ad1fa9075924cdfb98537828b9e80b5", + "reference": "493423ae7ad1fa9075924cdfb98537828b9e80b5", "shasum": "" }, "require": { - "php": ">=5.3.3", - "symfony/polyfill-ctype": "^1.8" + "php": "^5.6 || ^7.0", + "php-http/cache-plugin": "^1.4", + "php-http/client-common": "^1.6", + "php-http/client-implementation": "^1.0", + "php-http/discovery": "^1.0", + "php-http/httplug": "^1.1", + "psr/cache": "^1.0", + "psr/http-message": "^1.0" }, "require-dev": { - "psr/container": "^1.0", - "symfony/debug": "^2.7", - "symfony/phpunit-bridge": "^3.3" + "cache/array-adapter": "^0.4", + "guzzlehttp/psr7": "^1.2", + "php-http/guzzle6-adapter": "^1.0", + "php-http/mock-client": "^1.0", + "phpunit/phpunit": "^5.5 || ^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.35-dev" + "dev-master": "2.10.x-dev" } }, "autoload": { - "psr-0": { - "Twig_": "lib/" - }, "psr-4": { - "Twig\\": "src/" + "Github\\": "lib/Github/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com", - "homepage": "http://fabien.potencier.org", - "role": "Lead Developer" - }, - { - "name": "Armin Ronacher", - "email": "armin.ronacher@active-4.com", - "role": "Project Founder" + "name": "Thibault Duplessis", + "email": "thibault.duplessis@gmail.com", + "homepage": "http://ornicar.github.com" }, { - "name": "Twig Team", - "homepage": "https://twig.symfony.com/contributors", - "role": "Contributors" + "name": "KnpLabs Team", + "homepage": "http://knplabs.com" } ], - "description": "Twig, the flexible, fast, and secure template language for PHP", - "homepage": "https://twig.symfony.com", + "description": "GitHub API v3 client", + "homepage": "https://github.com/KnpLabs/php-github-api", "keywords": [ - "templating" + "api", + "gh", + "gist", + "github" ], - "time": "2018-07-13T07:12:17+00:00" + "time": "2018-09-05T19:12:14+00:00" }, { - "name": "zordius/lightncandy", - "version": "v1.2.2", + "name": "myclabs/deep-copy", + "version": "1.8.1", "source": { "type": "git", - "url": "https://github.com/zordius/lightncandy.git", - "reference": "448cb2855d7301fa5380d8228255d46e9be92903" + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zordius/lightncandy/zipball/448cb2855d7301fa5380d8228255d46e9be92903", - "reference": "448cb2855d7301fa5380d8228255d46e9be92903", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", + "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", "shasum": "" }, "require": { - "php": ">=5.4.0" + "php": "^7.1" + }, + "replace": { + "myclabs/deep-copy": "self.version" }, "require-dev": { - "phpunit/phpunit": "4.8.35" + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" }, "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "time": "2018-06-11T23:09:50+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.1.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "d0230c5c77a7e3cfa69446febf340978540958c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/d0230c5c77a7e3cfa69446febf340978540958c0", + "reference": "d0230c5c77a7e3cfa69446febf340978540958c0", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.5 || ^7.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.3-dev" + "dev-master": "4.1-dev" } }, "autoload": { "psr-4": { - "LightnCandy\\": "src" + "PhpParser\\": "lib/PhpParser" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Zordius Chen", - "email": "zordius@gmail.com" + "name": "Nikita Popov" } ], - "description": "An extremely fast PHP implementation of handlebars ( http://handlebarsjs.com/ ) and mustache ( http://mustache.github.io/ ).", - "homepage": "https://github.com/zordius/lightncandy", + "description": "A PHP parser written in PHP", "keywords": [ - "handlebars", - "logicless", - "mustache", - "php", - "template" + "parser", + "php" ], - "time": "2018-03-19T07:06:10+00:00" - } - ], - "packages-dev": [ + "time": "2018-10-10T09:24:14+00:00" + }, { - "name": "dnoegel/php-xdg-base-dir", - "version": "0.1", + "name": "phar-io/manifest", + "version": "1.0.3", "source": { "type": "git", - "url": "https://github.com/dnoegel/php-xdg-base-dir.git", - "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a" + "url": "https://github.com/phar-io/manifest.git", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/265b8593498b997dc2d31e75b89f053b5cc9621a", - "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", "shasum": "" }, "require": { - "php": ">=5.3.2" + "ext-dom": "*", + "ext-phar": "*", + "phar-io/version": "^2.0", + "php": "^5.6 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.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)", + "time": "2018-07-08T19:23:20+00:00" + }, + { + "name": "phar-io/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.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", + "time": "2018-07-08T19:19:57+00:00" + }, + { + "name": "php-http/cache-plugin", + "version": "v1.5.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/cache-plugin.git", + "reference": "c573ac6ea9b4e33fad567f875b844229d18000b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/cache-plugin/zipball/c573ac6ea9b4e33fad567f875b844229d18000b9", + "reference": "c573ac6ea9b4e33fad567f875b844229d18000b9", + "shasum": "" + }, + "require": { + "php": "^5.4 || ^7.0", + "php-http/client-common": "^1.1", + "php-http/message-factory": "^1.0", + "psr/cache": "^1.0", + "symfony/options-resolver": "^2.6 || ^3.0 || ^4.0" }, "require-dev": { - "phpunit/phpunit": "@stable" + "henrikbjorn/phpspec-code-coverage": "^1.0", + "phpspec/phpspec": "^2.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + } }, - "type": "project", "autoload": { "psr-4": { - "XdgBaseDir\\": "src/" + "Http\\Client\\Common\\Plugin\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "implementation of xdg base directory specification for php", - "time": "2014-10-24T07:27:01+00:00" + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "PSR-6 Cache plugin for HTTPlug", + "homepage": "http://httplug.io", + "keywords": [ + "cache", + "http", + "httplug", + "plugin" + ], + "time": "2017-11-29T20:45:41+00:00" }, { - "name": "doctrine/instantiator", - "version": "1.1.0", + "name": "php-http/client-common", + "version": "1.8.1", "source": { "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda" + "url": "https://github.com/php-http/client-common.git", + "reference": "0b9ce659aa46aee106f8c66597ea0c070fcd9dff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", - "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", + "url": "https://api.github.com/repos/php-http/client-common/zipball/0b9ce659aa46aee106f8c66597ea0c070fcd9dff", + "reference": "0b9ce659aa46aee106f8c66597ea0c070fcd9dff", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^5.4 || ^7.0", + "php-http/httplug": "^1.1", + "php-http/message": "^1.6", + "php-http/message-factory": "^1.0", + "symfony/options-resolver": "^2.6 || ^3.0 || ^4.0" }, "require-dev": { - "athletic/athletic": "~0.1.8", - "ext-pdo": "*", - "ext-phar": "*", - "phpunit/phpunit": "^6.2.3", - "squizlabs/php_codesniffer": "^3.0.2" + "guzzlehttp/psr7": "^1.4", + "phpspec/phpspec": "^2.5 || ^3.4 || ^4.2" + }, + "suggest": { + "php-http/cache-plugin": "PSR-6 Cache plugin", + "php-http/logger-plugin": "PSR-3 Logger plugin", + "php-http/stopwatch-plugin": "Symfony Stopwatch plugin" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "1.8-dev" } }, "autoload": { "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + "Http\\Client\\Common\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1540,91 +1725,118 @@ ], "authors": [ { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" } ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", + "description": "Common HTTP Client implementations and tools for HTTPlug", + "homepage": "http://httplug.io", "keywords": [ - "constructor", - "instantiate" + "client", + "common", + "http", + "httplug" ], - "time": "2017-07-22T11:58:36+00:00" + "time": "2018-10-09T06:46:29+00:00" }, { - "name": "jakub-onderka/php-console-color", - "version": "v0.2", + "name": "php-http/discovery", + "version": "1.4.0", "source": { "type": "git", - "url": "https://github.com/JakubOnderka/PHP-Console-Color.git", - "reference": "d5deaecff52a0d61ccb613bb3804088da0307191" + "url": "https://github.com/php-http/discovery.git", + "reference": "9a6cb24de552bfe1aa9d7d1569e2d49c5b169a33" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/d5deaecff52a0d61ccb613bb3804088da0307191", - "reference": "d5deaecff52a0d61ccb613bb3804088da0307191", + "url": "https://api.github.com/repos/php-http/discovery/zipball/9a6cb24de552bfe1aa9d7d1569e2d49c5b169a33", + "reference": "9a6cb24de552bfe1aa9d7d1569e2d49c5b169a33", "shasum": "" }, "require": { - "php": ">=5.4.0" + "php": "^5.5 || ^7.0" }, "require-dev": { - "jakub-onderka/php-code-style": "1.0", - "jakub-onderka/php-parallel-lint": "1.0", - "jakub-onderka/php-var-dump-check": "0.*", - "phpunit/phpunit": "~4.3", - "squizlabs/php_codesniffer": "1.*" + "henrikbjorn/phpspec-code-coverage": "^2.0.2", + "php-http/httplug": "^1.0", + "php-http/message-factory": "^1.0", + "phpspec/phpspec": "^2.4", + "puli/composer-plugin": "1.0.0-beta10" + }, + "suggest": { + "php-http/message": "Allow to use Guzzle, Diactoros or Slim Framework factories", + "puli/composer-plugin": "Sets up Puli which is recommended for Discovery to work. Check http://docs.php-http.org/en/latest/discovery.html for more details." }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, "autoload": { "psr-4": { - "JakubOnderka\\PhpConsoleColor\\": "src/" + "Http\\Discovery\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-2-Clause" + "MIT" ], "authors": [ { - "name": "Jakub Onderka", - "email": "jakub.onderka@gmail.com" + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" } ], - "time": "2018-09-29T17:23:10+00:00" + "description": "Finds installed HTTPlug implementations and PSR-7 message factories", + "homepage": "http://php-http.org", + "keywords": [ + "adapter", + "client", + "discovery", + "factory", + "http", + "message", + "psr7" + ], + "time": "2018-02-06T10:55:24+00:00" }, { - "name": "jakub-onderka/php-console-highlighter", - "version": "v0.4", + "name": "php-http/guzzle6-adapter", + "version": "v1.1.1", "source": { "type": "git", - "url": "https://github.com/JakubOnderka/PHP-Console-Highlighter.git", - "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547" + "url": "https://github.com/php-http/guzzle6-adapter.git", + "reference": "a56941f9dc6110409cfcddc91546ee97039277ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/9f7a229a69d52506914b4bc61bfdb199d90c5547", - "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547", + "url": "https://api.github.com/repos/php-http/guzzle6-adapter/zipball/a56941f9dc6110409cfcddc91546ee97039277ab", + "reference": "a56941f9dc6110409cfcddc91546ee97039277ab", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "jakub-onderka/php-console-color": "~0.2", - "php": ">=5.4.0" + "guzzlehttp/guzzle": "^6.0", + "php": ">=5.5.0", + "php-http/httplug": "^1.0" + }, + "provide": { + "php-http/async-client-implementation": "1.0", + "php-http/client-implementation": "1.0" }, "require-dev": { - "jakub-onderka/php-code-style": "~1.0", - "jakub-onderka/php-parallel-lint": "~1.0", - "jakub-onderka/php-var-dump-check": "~0.1", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~1.5" + "ext-curl": "*", + "php-http/adapter-integration-tests": "^0.4" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, "autoload": { "psr-4": { - "JakubOnderka\\PhpConsoleHighlighter\\": "src/" + "Http\\Adapter\\Guzzle6\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1633,214 +1845,249 @@ ], "authors": [ { - "name": "Jakub Onderka", - "email": "acci@acci.cz", - "homepage": "http://www.acci.cz/" + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + }, + { + "name": "David de Boer", + "email": "david@ddeboer.nl" } ], - "description": "Highlight PHP code in terminal", - "time": "2018-09-29T18:48:56+00:00" + "description": "Guzzle 6 HTTP Adapter", + "homepage": "http://httplug.io", + "keywords": [ + "Guzzle", + "http" + ], + "time": "2016-05-10T06:13:32+00:00" }, { - "name": "myclabs/deep-copy", - "version": "1.8.1", + "name": "php-http/httplug", + "version": "v1.1.0", "source": { "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8" + "url": "https://github.com/php-http/httplug.git", + "reference": "1c6381726c18579c4ca2ef1ec1498fdae8bdf018" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", - "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", + "url": "https://api.github.com/repos/php-http/httplug/zipball/1c6381726c18579c4ca2ef1ec1498fdae8bdf018", + "reference": "1c6381726c18579c4ca2ef1ec1498fdae8bdf018", "shasum": "" }, "require": { - "php": "^7.1" - }, - "replace": { - "myclabs/deep-copy": "self.version" + "php": ">=5.4", + "php-http/promise": "^1.0", + "psr/http-message": "^1.0" }, "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "henrikbjorn/phpspec-code-coverage": "^1.0", + "phpspec/phpspec": "^2.4" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, "autoload": { "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, - "files": [ - "src/DeepCopy/deep_copy.php" - ] + "Http\\Client\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Create deep copies (clones) of your objects", + "authors": [ + { + "name": "Eric GELOEN", + "email": "geloen.eric@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "HTTPlug, the HTTP client abstraction for PHP", + "homepage": "http://httplug.io", "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" + "client", + "http" ], - "time": "2018-06-11T23:09:50+00:00" + "time": "2016-08-31T08:30:17+00:00" }, { - "name": "nikic/php-parser", - "version": "v4.1.0", + "name": "php-http/message", + "version": "1.7.2", "source": { "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "d0230c5c77a7e3cfa69446febf340978540958c0" + "url": "https://github.com/php-http/message.git", + "reference": "b159ffe570dffd335e22ef0b91a946eacb182fa1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/d0230c5c77a7e3cfa69446febf340978540958c0", - "reference": "d0230c5c77a7e3cfa69446febf340978540958c0", + "url": "https://api.github.com/repos/php-http/message/zipball/b159ffe570dffd335e22ef0b91a946eacb182fa1", + "reference": "b159ffe570dffd335e22ef0b91a946eacb182fa1", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": ">=7.0" + "clue/stream-filter": "^1.4", + "php": "^5.4 || ^7.0", + "php-http/message-factory": "^1.0.2", + "psr/http-message": "^1.0" + }, + "provide": { + "php-http/message-factory-implementation": "1.0" }, "require-dev": { - "phpunit/phpunit": "^6.5 || ^7.0" + "akeneo/phpspec-skip-example-extension": "^1.0", + "coduo/phpspec-data-provider-extension": "^1.0", + "ext-zlib": "*", + "guzzlehttp/psr7": "^1.0", + "henrikbjorn/phpspec-code-coverage": "^1.0", + "phpspec/phpspec": "^2.4", + "slim/slim": "^3.0", + "zendframework/zend-diactoros": "^1.0" + }, + "suggest": { + "ext-zlib": "Used with compressor/decompressor streams", + "guzzlehttp/psr7": "Used with Guzzle PSR-7 Factories", + "slim/slim": "Used with Slim Framework PSR-7 implementation", + "zendframework/zend-diactoros": "Used with Diactoros Factories" }, - "bin": [ - "bin/php-parse" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "4.1-dev" + "dev-master": "1.6-dev" } }, "autoload": { "psr-4": { - "PhpParser\\": "lib/PhpParser" - } + "Http\\Message\\": "src/" + }, + "files": [ + "src/filters.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Nikita Popov" + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" } ], - "description": "A PHP parser written in PHP", + "description": "HTTP Message related tools", + "homepage": "http://php-http.org", "keywords": [ - "parser", - "php" + "http", + "message", + "psr-7" ], - "time": "2018-10-10T09:24:14+00:00" + "time": "2018-11-01T09:32:41+00:00" }, { - "name": "phar-io/manifest", - "version": "1.0.3", + "name": "php-http/message-factory", + "version": "v1.0.2", "source": { "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" + "url": "https://github.com/php-http/message-factory.git", + "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", - "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "url": "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1", + "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-phar": "*", - "phar-io/version": "^2.0", - "php": "^5.6 || ^7.0" + "php": ">=5.4", + "psr/http-message": "^1.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.0-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Http\\Message\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "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" + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" } ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "time": "2018-07-08T19:23:20+00:00" + "description": "Factory interfaces for PSR-7 HTTP Message", + "homepage": "http://php-http.org", + "keywords": [ + "factory", + "http", + "message", + "stream", + "uri" + ], + "time": "2015-12-19T14:08:53+00:00" }, { - "name": "phar-io/version", - "version": "2.0.1", + "name": "php-http/promise", + "version": "v1.0.0", "source": { "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" + "url": "https://github.com/php-http/promise.git", + "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", - "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "url": "https://api.github.com/repos/php-http/promise/zipball/dc494cdc9d7160b9a09bd5573272195242ce7980", + "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980", "shasum": "" }, - "require": { - "php": "^5.6 || ^7.0" + "require-dev": { + "henrikbjorn/phpspec-code-coverage": "^1.0", + "phpspec/phpspec": "^2.4" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Http\\Promise\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" }, { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" + "name": "Joel Wurtz", + "email": "joel.wurtz@gmail.com" } ], - "description": "Library for handling version information and constraints", - "time": "2018-07-08T19:19:57+00:00" + "description": "Promise used for asynchronous HTTP requests", + "homepage": "http://httplug.io", + "keywords": [ + "promise" + ], + "time": "2016-01-26T13:27:02+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -2393,6 +2640,56 @@ ], "time": "2018-10-23T05:57:41+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" + ], + "time": "2016-08-06T14:39:51+00:00" + }, { "name": "psy/psysh", "version": "v0.9.9", @@ -3030,6 +3327,60 @@ "homepage": "https://github.com/sebastianbergmann/version", "time": "2016-10-03T07:35:21+00:00" }, + { + "name": "symfony/options-resolver", + "version": "v4.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "40f0e40d37c1c8a762334618dea597d64bbb75ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/40f0e40d37c1c8a762334618dea597d64bbb75ff", + "reference": "40f0e40d37c1c8a762334618dea597d64bbb75ff", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "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": "Symfony OptionsResolver Component", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "time": "2018-09-18T12:45:12+00:00" + }, { "name": "symfony/polyfill-php72", "version": "v1.10.0", diff --git a/example/data.json b/example/data.json new file mode 100644 index 0000000..393969c --- /dev/null +++ b/example/data.json @@ -0,0 +1,36 @@ +{ + "products": { + "apple": { + "title": "Apple", + "image": "https://upload.wikimedia.org/wikipedia/commons/5/53/Apple_in_lightbox.png", + "tags": [ + "fruit", + "red" + ] + }, + "kiwi": { + "title": "Kiwi", + "image": "https://upload.wikimedia.org/wikipedia/commons/a/ae/Kiwifruit-Actinidia_deliciosa_half.jpg", + "tags": [ + "fruit", + "green" + ] + }, + "palmtree": { + "title": "Palmtree", + "image": "https://upload.wikimedia.org/wikipedia/commons/9/9b/Under_the_palm_tree_%285889915132%29.jpg", + "tags": [ + "flora", + "green" + ] + }, + "rose": { + "title": "Rose", + "image": "https://upload.wikimedia.org/wikipedia/commons/thumb/3/33/A_red_rose_for_Elena_-_Creative_Commons_by_gnuckx_%284693403926%29.jpg/1599px-A_red_rose_for_Elena_-_Creative_Commons_by_gnuckx_%284693403926%29.jpg", + "tags": [ + "flora", + "red" + ] + } + } +} \ No newline at end of file diff --git a/example/output/LICENSE b/example/output/LICENSE new file mode 100644 index 0000000..8b2a513 --- /dev/null +++ b/example/output/LICENSE @@ -0,0 +1,19 @@ +# The MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/example/output/about.html b/example/output/about.html new file mode 100644 index 0000000..bc87b54 --- /dev/null +++ b/example/output/about.html @@ -0,0 +1,39 @@ + + + + + + + + + + Hello world + + + + + + + + + + + + + +
+

Hello world

+ +
+

Tags:

+ + +
+
+ + \ No newline at end of file diff --git a/example/output/author.alice.md b/example/output/author.alice.md new file mode 100644 index 0000000..02d8af6 --- /dev/null +++ b/example/output/author.alice.md @@ -0,0 +1,4 @@ +# Author: alice + +Email: alice@example.com + diff --git a/example/output/author.joe.md b/example/output/author.joe.md new file mode 100644 index 0000000..7fde713 --- /dev/null +++ b/example/output/author.joe.md @@ -0,0 +1,4 @@ +# Author: joe + +Email: joe@example.com + diff --git a/example/output/index.md b/example/output/index.md new file mode 100644 index 0000000..4bba76b --- /dev/null +++ b/example/output/index.md @@ -0,0 +1,13 @@ +My Hello world +=========== + +This is the README of My Hello world + +License: MIT + +## Products: + +* [Apple](product.apple.md) +* [Kiwi](product.kiwi.md) +* [Palmtree](product.palmtree.md) +* [Rose](product.rose.md) diff --git a/example/output/license.md b/example/output/license.md new file mode 100644 index 0000000..8b2a513 --- /dev/null +++ b/example/output/license.md @@ -0,0 +1,19 @@ +# The MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/example/output/product.apple.md b/example/output/product.apple.md new file mode 100644 index 0000000..d4f04e5 --- /dev/null +++ b/example/output/product.apple.md @@ -0,0 +1,8 @@ +# product "Apple" (apple) + + + +## Tags: + +* fruit +* red diff --git a/example/output/product.kiwi.md b/example/output/product.kiwi.md new file mode 100644 index 0000000..856e603 --- /dev/null +++ b/example/output/product.kiwi.md @@ -0,0 +1,8 @@ +# product "Kiwi" (kiwi) + + + +## Tags: + +* fruit +* green diff --git a/example/output/product.palmtree.md b/example/output/product.palmtree.md new file mode 100644 index 0000000..028b2b6 --- /dev/null +++ b/example/output/product.palmtree.md @@ -0,0 +1,8 @@ +# product "Palmtree" (palmtree) + + + +## Tags: + +* flora +* green diff --git a/example/output/product.rose.md b/example/output/product.rose.md new file mode 100644 index 0000000..184f2a7 --- /dev/null +++ b/example/output/product.rose.md @@ -0,0 +1,8 @@ +# product "Rose" (rose) + + + +## Tags: + +* flora +* red diff --git a/example/stamp.yaml b/example/stamp.yaml new file mode 100644 index 0000000..14d9b54 --- /dev/null +++ b/example/stamp.yaml @@ -0,0 +1,42 @@ +variables: + license: MIT + title: Hello world + # license: "{{ analyzer['composer.json']['license'] }}" + radvance: + schema: + references: + username: user_data + +templates: + - src: templates/index.md.twig + dest: "output/index.md" + + variables: # Variable overrides specific to this template only + title: My Hello world + # blocks: # Include custom documentation blocks with local or remote content + # - "templates/intro.md" + # - "https://raw.githubusercontent.com/rodrigorm/phpqa-make/master/Makefile" + + - src: templates/author.md.mustache # In practice a remote URL would be used here + dest: "output/author.{{ item.name }}.md" + items: # demonstrate template-specific items + - name: joe + email: joe@example.com + - name: alice + email: alice@example.com + + - src: templates/product.md.hbs + dest: "output/product.{{ item.key }}.md" + items: "{{ dict(products) }}" # create one output (dest) file per item in the dictionary + + - src: "https://raw.githubusercontent.com/linkorb/stamp-templates/master/license/{{ strtolower(license) }}.md" + dest: "output/LICENSE" # Output a single file + + - src: templates/about.html.twig + dest: "output/about.html" # HTML / layout example + + # - src: https://example.com/stamps/CONTRIBUTING.md.twig + # dest: output/CONTRIBUTING.md.twig + + # - src: https://example.com/stamps/Dockerfile.twig + # dest: Dockerfile.twig \ No newline at end of file diff --git a/example/templates/about.html.twig b/example/templates/about.html.twig new file mode 100644 index 0000000..ebd2982 --- /dev/null +++ b/example/templates/about.html.twig @@ -0,0 +1,15 @@ +{% extends 'templates/base.html.twig' %} + +{% block body %} +

{{ title }}

+ +
+

Tags:

+ + +
+{% endblock %} \ No newline at end of file diff --git a/example/templates/author.md.mustache b/example/templates/author.md.mustache new file mode 100644 index 0000000..7f6bc17 --- /dev/null +++ b/example/templates/author.md.mustache @@ -0,0 +1,4 @@ +# Author: {{ item.name }} + +Email: {{ item.email }} + diff --git a/example/templates/base.html.twig b/example/templates/base.html.twig new file mode 100644 index 0000000..31bdc99 --- /dev/null +++ b/example/templates/base.html.twig @@ -0,0 +1,28 @@ + + + + + + + + + + {{ title }} + + + + + + + + + + + + + +
+ {% block body %}{% endblock body %} +
+ + \ No newline at end of file diff --git a/example/templates/index.md.twig b/example/templates/index.md.twig new file mode 100644 index 0000000..1015a18 --- /dev/null +++ b/example/templates/index.md.twig @@ -0,0 +1,12 @@ +{{ title }} +=========== + +This is the README of {{ title }} + +License: {{ license }} + +## Products: + +{% for code, product in products %} +* [{{ product.title }}](product.{{ code }}.md) +{% endfor %} \ No newline at end of file diff --git a/example/templates/product.md.hbs b/example/templates/product.md.hbs new file mode 100644 index 0000000..2a56eda --- /dev/null +++ b/example/templates/product.md.hbs @@ -0,0 +1,9 @@ +# product "{{ item.value.title }}" ({{ item.key }}) + + + +## Tags: + +{{#each item.value.tags }} +* {{.}} +{{/each}} \ No newline at end of file diff --git a/examples/empty-project/README.md.twig b/examples/empty-project/README.md.twig deleted file mode 100644 index e999489..0000000 --- a/examples/empty-project/README.md.twig +++ /dev/null @@ -1,50 +0,0 @@ -# {{ project.title }} - - -## Installation - -{% if analyzer['package.json'] is defined %} -### NPM - -This project uses [NPM](https://npmjs.org/) to manage it's Node dependencies. - -Learn more about NPM [here](https://docs.npmjs.com/getting-started/what-is-npm). - -Fetch any requirements using the following command: - - $ npm install - -{% endif %} - -{% if analyzer['composer.json'] is defined %} -### Composer - -This project uses [composer](https://getcomposer.org/doc/00-intro.md) to manage it's PHP dependencies. - -Learn more about Composer [here](https://getcomposer.org/doc/00-intro.md) - -Fetch any requirements using the following command: - - $ composer install - -{% endif %} - -{% if analyzer['package.json']['scripts'] is defined %} -## NPM Scripts - -The following NPM scripts have beenb made available: - -{% for name,command in analyzer['package.json']['scripts'] %} -* **{{ name }}**: `{{ command }}` -{% endfor %} - -{% endif %} - - -## Documentation - -{% for block in blocks %} -{{ block|raw }} -{% endfor %} - -Cool stuff here diff --git a/examples/empty-project/doc/installation.md b/examples/empty-project/doc/installation.md deleted file mode 100644 index 71d454d..0000000 --- a/examples/empty-project/doc/installation.md +++ /dev/null @@ -1,6 +0,0 @@ -#### Installation details go here - -asdkjhakj akjaksd - - ./bin/install --yes - diff --git a/examples/empty-project/doc/intro.md b/examples/empty-project/doc/intro.md deleted file mode 100644 index 1049722..0000000 --- a/examples/empty-project/doc/intro.md +++ /dev/null @@ -1,7 +0,0 @@ -#### Introduction - -Here's a cool introduction - -### Some sub intro - -Bla \ No newline at end of file diff --git a/examples/empty-project/stamp.yml b/examples/empty-project/stamp.yml deleted file mode 100644 index 1592084..0000000 --- a/examples/empty-project/stamp.yml +++ /dev/null @@ -1,13 +0,0 @@ -variables: - project: - title: Hello world - license: mit - -files: - README.md: - template: README.md.twig # In practice a remote URL would be used here - variables: # Variable overrides specific to this file only - title: Hello world - blocks: # Include custom documentation blocks with local or remote content - - "@doc/intro.md" - - "@doc/installation.md" diff --git a/examples/full-project/.circleci/config.yml b/examples/full-project/.circleci/config.yml deleted file mode 100644 index 4284813..0000000 --- a/examples/full-project/.circleci/config.yml +++ /dev/null @@ -1,45 +0,0 @@ -version: 2 - -install_composer: &install_composer - run: | - cd /tmp - EXPECTED_SIGNATURE=$(curl -q https://composer.github.io/installer.sig) - php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" - ACTUAL_SIGNATURE=$(php -r "echo hash_file('SHA384', 'composer-setup.php');") - if [ "$EXPECTED_SIGNATURE" != "$ACTUAL_SIGNATURE" ] - then - >&2 echo 'ERROR: Invalid installer signature' - rm composer-setup.php - exit 1 - fi - sudo php composer-setup.php --quiet --install-dir /usr/local/bin --filename composer - RESULT=$? - rm composer-setup.php - exit $RESULT - -jobs: - build: - docker: - - image: circleci/php:7.1.5-browsers - - working_directory: ~/networq-php - - steps: - - checkout - - - restore_cache: - keys: - - v1-dependencies-{{ checksum "composer.json" }} - - v1-dependencies- - - - run: - <<: *install_composer - - - run: composer install -n --prefer-dist - - - save_cache: - paths: - - ./vendor - key: v1-dependencies-{{ checksum "composer.json" }} - - - run: ./vendor/bin/grumphp run diff --git a/examples/full-project/.editorconfig b/examples/full-project/.editorconfig deleted file mode 100644 index 47bea71..0000000 --- a/examples/full-project/.editorconfig +++ /dev/null @@ -1,15 +0,0 @@ -root = true - -[*] -charset = utf-8 -end_of_line = lf -indent_style = space -indent_size = 2 -insert_final_newline = true -trim_trailing_whitespace = true - -[*.php] -indent_size = 4 - -[{Makefile,**.mk}] -indent_style = tab diff --git a/examples/full-project/.env.dist b/examples/full-project/.env.dist deleted file mode 100644 index 8d19674..0000000 --- a/examples/full-project/.env.dist +++ /dev/null @@ -1,8 +0,0 @@ -# Application environments. -APP_ENV=DEBUG # Options: DEBUG | PROD - -# PDO URL. For example -PDO_URL=mysql://username:password@localhost/dbname - -# Token to do XYZ -XYZ_TOKEN="MTIzNA==" diff --git a/examples/full-project/Dockerfile b/examples/full-project/Dockerfile deleted file mode 100644 index 28ae734..0000000 --- a/examples/full-project/Dockerfile +++ /dev/null @@ -1,52 +0,0 @@ -FROM ubuntu:14.04 - -RUN apt-get update - -## -# Base -## - -RUN apt-get install -y python-setuptools git curl - -## -# PHP & nginx -## - -## Install required packages -RUN apt-get install -y php5-cli php5-fpm nginx php5-mysql php5-curl - -## Patch-up the fpm version of php.ini -RUN echo "cgi.fix_pathinfo = 0;" >> /etc/php5/fpm/php.ini - -## Make sure nginx stays in the foreground -RUN echo "daemon off;" >> /etc/nginx/nginx.conf -ADD docker/nginx.conf /etc/nginx/sites-available/default - -## -# Composer -## - -RUN (curl -sS https://getcomposer.org/installer | php && mv composer.phar /usr/local/bin/composer) - -## -# Build. -## - -RUN mkdir /share - -## hack database host to dev machine -RUN echo "10.0.2.2 mysqlhost" >> /etc/hosts - - -## Copy all files from the local directory into the container's /app directory -ADD . /app - -## Run `composer install` inside the container's /app directory -RUN cd /app && composer install --prefer-dist --no-progress --ignore-platform-reqs - -## Announce that this container exposes port 80 -## Note: it doesn't become accessible unless you 'expose' it during `docker run` with -P -EXPOSE 80 - -## Start the container's single process (php5-fpm in background, nginx in foreground) -CMD ["sh", "-c", "service php5-fpm start && nginx"] diff --git a/examples/full-project/INSTALL.md.handlebars b/examples/full-project/INSTALL.md.handlebars deleted file mode 100644 index 64d70ee..0000000 --- a/examples/full-project/INSTALL.md.handlebars +++ /dev/null @@ -1,25 +0,0 @@ -# Installation Guide - -{{#if analyzer.[package.json] }} -## NPM - -This project uses [NPM](https://npmjs.org/) to manage it's Node dependencies. - -Learn more about NPM [here](https://docs.npmjs.com/getting-started/what-is-npm). - -Fetch any requirements using the following command: - - $ npm install -{{/if}} - -{{#if analyzer.[composer.json] }} -## Composer - -This project uses [composer](https://getcomposer.org/doc/00-intro.md) to manage it's PHP dependencies. - -Learn more about Composer [here](https://getcomposer.org/doc/00-intro.md) - -Fetch any requirements using the following command: - - $ composer install -{{/if}} diff --git a/examples/full-project/Makefile b/examples/full-project/Makefile deleted file mode 100644 index 08dc62e..0000000 --- a/examples/full-project/Makefile +++ /dev/null @@ -1,32 +0,0 @@ -.PHONY: help - -.PHONY: clean -clean: ## Clean working directory - @echo "Cleaning" - @rm -rf ./vendor - @rm -f .env - @echo "Done!" - -.env: - @echo "Copying .env from .env.dist" - @cp .env.dist .env - -build: .env vendor ## Build it - @echo "Building" - -composer.lock: ## Generate composer.lock - @echo "Generating composer.lock" - @composer update - -vendor: composer.lock - @echo "Installing vendor libraries ..." - @composer install - @touch vendor/ - -test: build phpqa-phpcs - -phpqa-phpcs: - vendor/bin/phpcs --standard=PSR2 src/ - -help: ## This help message - @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' diff --git a/examples/full-project/README.md.twig b/examples/full-project/README.md.twig deleted file mode 100644 index 67930cd..0000000 --- a/examples/full-project/README.md.twig +++ /dev/null @@ -1,24 +0,0 @@ -# {{ variables.project.title }} - -{% if analyzer['package.json']['scripts'] is defined %} -## NPM Scripts - -The following NPM scripts have been made available: - -{% for name,command in analyzer['package.json']['scripts'] %} -* **{{ name }}**: `{{ command }}` -{% endfor %} - -{% endif %} - -## Installation - -See [Installation Guide](INSTALL.md) - -## Documentation - -{% for block in blocks %} -{{ block|raw }} -{% endfor %} - -Cool stuff here diff --git a/examples/full-project/anonymizer.yml b/examples/full-project/anonymizer.yml deleted file mode 100644 index 7adb190..0000000 --- a/examples/full-project/anonymizer.yml +++ /dev/null @@ -1,10 +0,0 @@ -columns: - user.username: - method: faker - arguments: - formatter: userName - - user.email: - method: faker - arguments: - formatter: email diff --git a/examples/full-project/bin/.doctrine.mapping.convert.yaml/App.Entity.Comment.orm.yml b/examples/full-project/bin/.doctrine.mapping.convert.yaml/App.Entity.Comment.orm.yml deleted file mode 100644 index 49ffea2..0000000 --- a/examples/full-project/bin/.doctrine.mapping.convert.yaml/App.Entity.Comment.orm.yml +++ /dev/null @@ -1,52 +0,0 @@ -App\Entity\Comment: - type: entity - table: symfony_demo_comment - id: - id: - type: integer - scale: 0 - length: null - unique: false - nullable: false - precision: 0 - id: true - generator: - strategy: IDENTITY - fields: - content: - type: text - scale: 0 - length: null - unique: false - nullable: false - precision: 0 - publishedAt: - type: datetime - scale: 0 - length: null - unique: false - nullable: false - precision: 0 - column: published_at - manyToOne: - post: - targetEntity: App\Entity\Post - cascade: { } - fetch: LAZY - mappedBy: null - inversedBy: comments - joinColumns: - post_id: - referencedColumnName: id - orphanRemoval: false - author: - targetEntity: App\Entity\User - cascade: { } - fetch: LAZY - mappedBy: null - inversedBy: null - joinColumns: - author_id: - referencedColumnName: id - orphanRemoval: false - lifecycleCallbacks: { } diff --git a/examples/full-project/bin/.doctrine.mapping.convert.yaml/App.Entity.Post.orm.yml b/examples/full-project/bin/.doctrine.mapping.convert.yaml/App.Entity.Post.orm.yml deleted file mode 100644 index 6de3ede..0000000 --- a/examples/full-project/bin/.doctrine.mapping.convert.yaml/App.Entity.Post.orm.yml +++ /dev/null @@ -1,99 +0,0 @@ -App\Entity\Post: - type: entity - table: symfony_demo_post - repositoryClass: App\Repository\PostRepository - id: - id: - type: integer - scale: 0 - length: null - unique: false - nullable: false - precision: 0 - id: true - generator: - strategy: IDENTITY - fields: - title: - type: string - scale: 0 - length: null - unique: false - nullable: false - precision: 0 - slug: - type: string - scale: 0 - length: null - unique: false - nullable: false - precision: 0 - summary: - type: string - scale: 0 - length: null - unique: false - nullable: false - precision: 0 - content: - type: text - scale: 0 - length: null - unique: false - nullable: false - precision: 0 - publishedAt: - type: datetime - scale: 0 - length: null - unique: false - nullable: false - precision: 0 - column: published_at - manyToOne: - author: - targetEntity: App\Entity\User - cascade: { } - fetch: LAZY - mappedBy: null - inversedBy: null - joinColumns: - author_id: - referencedColumnName: id - orphanRemoval: false - oneToMany: - comments: - targetEntity: App\Entity\Comment - cascade: - - remove - - persist - fetch: LAZY - mappedBy: post - inversedBy: null - orphanRemoval: true - orderBy: - publishedAt: DESC - manyToMany: - tags: - targetEntity: App\Entity\Tag - cascade: - - persist - fetch: LAZY - mappedBy: null - inversedBy: null - joinTable: - name: symfony_demo_post_tag - schema: null - joinColumns: - - - name: post_id - referencedColumnName: id - onDelete: CASCADE - inverseJoinColumns: - - - name: tag_id - referencedColumnName: id - onDelete: CASCADE - orderBy: - name: ASC - lifecycleCallbacks: { } diff --git a/examples/full-project/bin/.doctrine.mapping.convert.yaml/App.Entity.Tag.orm.yml b/examples/full-project/bin/.doctrine.mapping.convert.yaml/App.Entity.Tag.orm.yml deleted file mode 100644 index 61c6e09..0000000 --- a/examples/full-project/bin/.doctrine.mapping.convert.yaml/App.Entity.Tag.orm.yml +++ /dev/null @@ -1,46 +0,0 @@ -App\Entity\Tag: - type: entity - table: symfony_demo_tag - id: - id: - type: integer - scale: 0 - length: null - unique: false - nullable: false - precision: 0 - id: true - generator: - strategy: IDENTITY - fields: - name: - type: string - scale: 0 - length: null - unique: true - nullable: false - precision: 0 - manyToMany: - tags: - targetEntity: App\Entity\Post - cascade: - - persist - fetch: LAZY - mappedBy: null - inversedBy: null - joinTable: - name: symfony_demo_post_tag - schema: null - joinColumns: - - - name: tag_id - referencedColumnName: id - onDelete: CASCADE - inverseJoinColumns: - - - name: post_id - referencedColumnName: id - onDelete: CASCADE - orderBy: - name: ASC - lifecycleCallbacks: { } diff --git a/examples/full-project/bin/.doctrine.mapping.convert.yaml/App.Entity.User.orm.yml b/examples/full-project/bin/.doctrine.mapping.convert.yaml/App.Entity.User.orm.yml deleted file mode 100644 index e260312..0000000 --- a/examples/full-project/bin/.doctrine.mapping.convert.yaml/App.Entity.User.orm.yml +++ /dev/null @@ -1,53 +0,0 @@ -App\Entity\User: - type: entity - table: symfony_demo_user - repositoryClass: App\Repository\UserRepository - id: - id: - type: integer - scale: 0 - length: null - unique: false - nullable: false - precision: 0 - id: true - generator: - strategy: IDENTITY - fields: - fullName: - type: string - scale: 0 - length: null - unique: false - nullable: false - precision: 0 - column: full_name - username: - type: string - scale: 0 - length: null - unique: true - nullable: false - precision: 0 - email: - type: string - scale: 0 - length: null - unique: true - nullable: false - precision: 0 - password: - type: string - scale: 0 - length: null - unique: false - nullable: false - precision: 0 - roles: - type: json - scale: 0 - length: null - unique: false - nullable: false - precision: 0 - lifecycleCallbacks: { } diff --git a/examples/full-project/bin/console b/examples/full-project/bin/console deleted file mode 100755 index 212bdc2..0000000 --- a/examples/full-project/bin/console +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env bash - -[ "$1" = "doctrine:mapping:convert" ] && cp -R $(dirname "$0")/.doctrine.mapping.convert.yaml/* "$3" - -[ "$1" = "debug:router" ] && cat << EOF -{ - "admin_index": { - "path": "/{_locale}/admin/post/", - "pathRegex": "#^/(?P<_locale>en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg)/admin/post/$#sD", - "host": "ANY", - "hostRegex": "", - "scheme": "ANY", - "method": "GET", - "class": "Symfony\\\\Component\\\\Routing\\\\Route", - "defaults": { - "_controller": "App\\\\Controller\\\\Admin\\\\BlogController::index", - "_locale": "en" - }, - "requirements": { - "_locale": "en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg" - }, - "options": { - "compiler_class": "Symfony\\\\Component\\\\Routing\\\\RouteCompiler" - } - }, - "admin_post_index": { - "path": "/{_locale}/admin/post/", - "pathRegex": "#^/(?P<_locale>en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg)/admin/post/$#sD", - "host": "ANY", - "hostRegex": "", - "scheme": "ANY", - "method": "GET", - "class": "Symfony\\\\Component\\\\Routing\\\\Route", - "defaults": { - "_controller": "App\\\\Controller\\\\Admin\\\\BlogController::index", - "_locale": "en" - }, - "requirements": { - "_locale": "en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg" - }, - "options": { - "compiler_class": "Symfony\\\\Component\\\\Routing\\\\RouteCompiler" - } - }, - "admin_post_new": { - "path": "/{_locale}/admin/post/new", - "pathRegex": "#^/(?P<_locale>en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg)/admin/post/new$#sD", - "host": "ANY", - "hostRegex": "", - "scheme": "ANY", - "method": "GET|POST", - "class": "Symfony\\\\Component\\\\Routing\\\\Route", - "defaults": { - "_controller": "App\\\\Controller\\\\Admin\\\\BlogController::new", - "_locale": "en" - }, - "requirements": { - "_locale": "en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg" - }, - "options": { - "compiler_class": "Symfony\\\\Component\\\\Routing\\\\RouteCompiler" - } - } -} -EOF diff --git a/examples/full-project/bower.json b/examples/full-project/bower.json deleted file mode 100644 index a376279..0000000 --- a/examples/full-project/bower.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "myProject", - "version": "1.0.0", - "dependencies": { - "bootstrap": "~3.3.0", - "bootswatch-dist": "3.3.0-lumen", - "font-awesome": "~4.3.0", - "jquery": ">= 1.9.1" - } -} diff --git a/examples/full-project/composer.json b/examples/full-project/composer.json deleted file mode 100644 index b1e9966..0000000 --- a/examples/full-project/composer.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "acme/example", - "description": "Acme Example project", - "homepage": "https://github.com/acme/example", - "keywords": ["example", "acme"], - "authors": [ - { - "name": "Joe Johnson", - "email": "joe@exampl.com", - "role": "Development" - } - ], - "require": { - "symfony/console": "^4.0" - }, - "license": "MIT" -} diff --git a/examples/full-project/doc/installation.md b/examples/full-project/doc/installation.md deleted file mode 100644 index da8a876..0000000 --- a/examples/full-project/doc/installation.md +++ /dev/null @@ -1,6 +0,0 @@ -#### Installation details go here - -Lorem ipsum dolor sit amet: - - ./bin/install --yes - diff --git a/examples/full-project/doc/intro.md b/examples/full-project/doc/intro.md deleted file mode 100644 index 1049722..0000000 --- a/examples/full-project/doc/intro.md +++ /dev/null @@ -1,7 +0,0 @@ -#### Introduction - -Here's a cool introduction - -### Some sub intro - -Bla \ No newline at end of file diff --git a/examples/full-project/docker-compose.yml b/examples/full-project/docker-compose.yml deleted file mode 100644 index 3ace790..0000000 --- a/examples/full-project/docker-compose.yml +++ /dev/null @@ -1,39 +0,0 @@ -version: '2' -services: - php: - build: ./docker/. - networks: - - frontend - - backend - volumes: - - './:/usr/share/nginx/html' - depends_on: - - mysql - nginx: - image: 'nginx:1.11' - ports: - - '8989:80' - networks: - - frontend - volumes: - - './:/usr/share/nginx/html:ro' - - './docker/nginx.conf:/etc/nginx/conf.d/default.conf' - depends_on: - - php - mysql: - image: 'mysql:5.7' - networks: - - backend - environment: - MYSQL_ROOT_PASSWORD: hello - volumes: - - mysql-data:/var/lib/mysql -networks: - frontend: - backend: - -volumes: - mysql-data: - driver: local - - diff --git a/examples/full-project/fixtures/comment.yml b/examples/full-project/fixtures/comment.yml deleted file mode 100644 index 415a552..0000000 --- a/examples/full-project/fixtures/comment.yml +++ /dev/null @@ -1,7 +0,0 @@ -table.comments: - random_comment{1..5}: - author_user_name: - author_display_name: - created_at: fake('dateTime'))> - message: - status: diff --git a/examples/full-project/package.json b/examples/full-project/package.json deleted file mode 100644 index 22730a9..0000000 --- a/examples/full-project/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "example-react", - "version": "0.1.0", - "private": true, - "dependencies": { - "react": "^16.4.2", - "react-dom": "^16.4.2", - "react-scripts": "1.1.4" - }, - "scripts": { - "start": "react-scripts start", - "build": "react-scripts build", - "test": "react-scripts test --env=jsdom", - "eject": "react-scripts eject" - } -} \ No newline at end of file diff --git a/examples/full-project/schema.xml b/examples/full-project/schema.xml deleted file mode 100644 index e69de29..0000000 diff --git a/examples/full-project/stamp.yml b/examples/full-project/stamp.yml deleted file mode 100644 index e0cf81a..0000000 --- a/examples/full-project/stamp.yml +++ /dev/null @@ -1,28 +0,0 @@ -variables: - project: - title: Hello world - license: "{{ analyzer['composer.json']['license'] }}" - radvance: - schema: - references: - username: user_data - -files: - README.md: - template: README.md.twig # In practice a remote URL would be used here - variables: # Variable overrides specific to this file only - title: Hello world - blocks: # Include custom documentation blocks with local or remote content - - "doc/intro.md" - - "doc/installation.md" - - "https://raw.githubusercontent.com/rodrigorm/phpqa-make/master/Makefile" - INSTALL.md: - template: INSTALL.md.handlebars - - LICENSE.md: - template: "https://raw.githubusercontent.com/linkorb/stamp-templates/master/license/{{ analyzer['composer.json']['license'] | lower }}.md" - - # CONTRIBUTING.md: - # template: https://example.com/stamps/CONTRIBUTING.md.twig - # Dockerfile: - # template: https://example.com/stamps/Dockerfile.twig diff --git a/src/Command/GenerateCommand.php b/src/Command/GenerateCommand.php index 403d22e..e2ff478 100644 --- a/src/Command/GenerateCommand.php +++ b/src/Command/GenerateCommand.php @@ -23,20 +23,20 @@ protected function configure() $this ->setName('generate') - ->setDescription('Generate files from stamp.yml') + ->setDescription('Generate files from stamp.yaml') ->addOption( 'config', 'c', InputOption::VALUE_REQUIRED, 'Configuration file to use', - getcwd() . '/stamp.yml' + getcwd() . '/stamp.yaml' ) ->addOption( 'json', 'j', InputOption::VALUE_REQUIRED, - 'Json file to use (used by default - metaculous.json)', - getcwd() . '/metaculous.json' + 'JSON file to use (used by default - data.json)', + getcwd() . '/data.json' ) ; } @@ -54,18 +54,21 @@ protected function execute(InputInterface $input, OutputInterface $output) $output->writeLn("Using configuration file: " . $configFilename); $projectLoader = new YamlProjectLoader(); $project = $projectLoader->loadFile($configFilename); + $jsonFilename = $input->getOption('json'); $json = []; if (!file_exists($jsonFilename)) { - throw new RuntimeException("Json file not found: " . $jsonFilename); + throw new RuntimeException("JSON file not found: " . $jsonFilename); } $jsonData = json_decode(file_get_contents($jsonFilename), true); if (json_last_error() !== JSON_ERROR_NONE) { - throw new RuntimeException("Error parsing json file: " . $jsonFilename); + throw new RuntimeException("Error parsing JSON file: " . $jsonFilename); } - $project->setAnalyzedData($jsonData); - + //TODO: merge jsonData with main project data + $variables = array_merge_recursive($jsonData, $project->getVariables()); + $project->setVariables($variables); + // print_r($project); exit(); $generator = new Generator($project); $generator->generate(); } diff --git a/src/Generator.php b/src/Generator.php index 1a89a68..a04a7b4 100644 --- a/src/Generator.php +++ b/src/Generator.php @@ -3,83 +3,147 @@ namespace Stamp; use Stamp\Model\Project; -use Stamp\Model\File; +use Stamp\Model\Template; use LightnCandy\LightnCandy; +use Symfony\Component\ExpressionLanguage\ExpressionLanguage; use Twig_Environment; use Twig_Loader_String; +use Twig_Loader_Filesystem; + +use RuntimeException; class Generator { private $twig; + private $expressionLanguage; public function __construct(Project $project) { $this->project = $project; - $this->twig = new Twig_Environment(new Twig_Loader_String()); + $loader = new Twig_Loader_String(); + //$loader->addPath($project->getBasePath(), 'project'); + $loader = new Twig_Loader_Filesystem($project->getBasePath()); + + + $this->twig = new Twig_Environment($loader); + $this->expressionLanguage = new ExpressionLanguage(); + + $this->expressionLanguage->register( + 'dict', + function ($items) {}, + function ($arguments, $items) { + $res = []; + foreach ($items as $key => $value) { + $res[] = [ + 'key' => $key, + 'value' => $value, + ]; + } + return $res; + } + ); + + $this->expressionLanguage->register( + 'strtolower', + function ($items) {}, + function ($arguments, $str) { + return strtolower($str); + } + ); + } public function generate() { - foreach ($this->project->getFiles() as $file) { - $this->generateFile($file); + foreach ($this->project->getTemplates() as $template) { + $this->generateTemplate($template); } } - - protected function process(&$item, &$key) + + public function generateTemplate(Template $template) { - if ($item[0]=='@') { - $filename = substr($item, 1); - $item = $this->loadString($filename); + $items = $template->getItems(); + $variables = $this->project->getVariables(); + $variables = array_merge($variables, $template->getVariables()); + if ($items) { + if (is_string($items)) { + if ($items[0]=='{') { + $expression = trim($items, '{} '); + + $items = $this->expressionLanguage->evaluate($expression, $variables); + } + } + } + if (!$items) { + $items = [ + 'default' + ]; } + foreach ($items as $item) { + $variables['item'] = $item; + $src = $template->getSrc(); + $dest = $template->getDest(); + $src = $this->interpolate($src, $variables); + $dest = $this->interpolate($dest, $variables); + $content = $this->getContent($src); + + $extension = pathinfo($src, PATHINFO_EXTENSION); + $out = $this->renderContent($content, $extension, $variables); + + $destFilename = $this->normalizeFilename($dest); + $destPath = dirname($destFilename); + + if (!file_exists($destPath)) { + mkdir($destPath, 0777, true); + } + file_put_contents( + $destFilename, + $out + ); + } + + } - public function generateFile(File $file) - { - file_put_contents( - $this->project->getBasePath() . '/' . $file->getName(), - $this->renderFile($file) - ); + public function interpolate(string $str, array $variables) { + preg_match_all('/\{\{(.*?)\}\}/i', $str, $matches, PREG_PATTERN_ORDER); + for ($i = 0; $i < count($matches[1]); $i++) { + $expression = trim($matches[1][$i]); + + // turn sub-keys into objects for dot-notation access in expressions + $variables2 = []; + foreach ($variables as $k=>$v) { + $variables2[$k] = json_decode(json_encode($v)); + } + // evaluate + $res = $this->expressionLanguage->evaluate($expression, $variables2); + $str = str_replace($matches[0][$i], $res, $str); + } + return $str; } - public function renderFile(File $file): string + public function renderContent(string $content, string $extension, array $variables): string { - $analyzed = ['analyzer' => $this->project->getAnalyzedData()]; - $config = $this->interpolate($this->project->getConfig(), $analyzed); - $fileConfig = $this->interpolate($file->getVariables(), $analyzed); - $blocks = isset($fileConfig['blocks']) ? array_map( - function($block) { - return $this->loadString($block); - }, $fileConfig['blocks'] - ) : []; - - $data = array_merge_recursive( - $analyzed, - $config, - $fileConfig, - ['blocks' => $blocks] - ); - - $templateStringTemplate = $this->twig->createTemplate($file->getTemplate()); - $templateString = $this->loadString($templateStringTemplate->render($data)); - - if ($file->hasTemplateExtension('twig')) { - $template = $this->twig->createTemplate($templateString); - return $template->render($data); - } else if ($file->hasTemplateExtension('handlebars')) { - $renderWith = LightnCandy::FLAG_HANDLEBARSJS; - } else if ($file->hasTemplateExtension('hbs')) { - $renderWith = LightnCandy::FLAG_HANDLEBARSJS; - } else if ($file->hasTemplateExtension('mustache')) { - $renderWith = LightnCandy::FLAG_MUSTACHE; - } else { - return $templateString; + switch ($extension) { + case 'twig': + $template = $this->twig->createTemplate($content); + return $template->render($variables); + case 'hbs': + case 'handlebars': + $renderWith = LightnCandy::FLAG_HANDLEBARSJS; + break; + case 'mustache': + $renderWith = LightnCandy::FLAG_MUSTACHE; + break; + default: + return $content; } if (isset($renderWith)) { $t = LightnCandy::compile( - $templateString, + $content, [ 'flags' => $renderWith, 'helpers' => [ @@ -100,34 +164,28 @@ function($block) { ); $renderer = LightnCandy::prepare($t); - return $renderer($data, []); + return $renderer($variables, []); } + return null; } - public function interpolate(array $config, array $analyzerResults): array { - $data = array_merge_recursive($config, $analyzerResults); - $twig = new \Twig_Environment(new \Twig_Loader_String()); - - array_walk_recursive($config, function(&$value, $key) use ($data, $twig) { - $template = $twig->createTemplate($value); - $value = $template->render($data); - }); - - return $config; - } - public function loadString($template) + public function normalizeFilename(string $filename): string { - if (substr($template, 0, 4)=='http') { - // Load over HTTP - return file_get_contents($template); + if (substr($filename, 0, 4)=='http') { + return $filename; } - if (substr($template, 0, 1)=='/') { + if (substr($filename, 0, 1)=='/') { // absolute path - return file_get_contents($template); + return $filename; } - - // relative path - return file_get_contents($this->project->getBasePath() . '/' . $template); + + return $this->project->getBasePath() . '/' . $filename; + } + + public function getContent(string $filename): string + { + $filename = $this->normalizeFilename($filename); + return file_get_contents($filename); } } diff --git a/src/Loader/ArrayProjectLoader.php b/src/Loader/ArrayProjectLoader.php index 3e79c3d..5d81426 100644 --- a/src/Loader/ArrayProjectLoader.php +++ b/src/Loader/ArrayProjectLoader.php @@ -3,20 +3,19 @@ namespace Stamp\Loader; use Stamp\Model\Project; -use Stamp\Model\File; +use Stamp\Model\Template; class ArrayProjectLoader { - public function load($data, $basePath) + public function load(array $config, $basePath) { - $project = new Project($basePath, $data); + $project = new Project($basePath, $config['variables'] ?? []); - foreach ($data['files'] ?? [] as $name => $fileData) { - $template = $fileData['template'] ?? null; - $variables = $fileData['variables'] ?? []; - $file = new File($name, $template, $variables); - $project->addFile($file); + foreach ($config['templates'] ?? [] as $templateConfig) { + $template = Template::buildFromConfig($templateConfig); + $project->addTemplate($template); } + return $project; } } diff --git a/src/Model/File.php b/src/Model/File.php deleted file mode 100644 index 25017ed..0000000 --- a/src/Model/File.php +++ /dev/null @@ -1,43 +0,0 @@ -name = $name; - $this->template = $template; - $this->variables = $variables; - } - - public function getName() - { - return $this->name; - } - - public function getTemplateExtensions(): array - { - $extensions = explode('.', $this->getTemplate()); - return array_splice($extensions, 1); - } - - public function hasTemplateExtension(string $ext): bool - { - return array_search($ext, $this->getTemplateExtensions()) !== false; - } - - public function getTemplate() - { - return $this->template; - } - - public function getVariables() - { - return $this->variables; - } -} diff --git a/src/Model/Project.php b/src/Model/Project.php index 7726da3..04eaff4 100644 --- a/src/Model/Project.php +++ b/src/Model/Project.php @@ -4,24 +4,24 @@ class Project { - protected $files = []; - protected $config = []; - protected $analyzedData = []; + protected $templates = []; + protected $variables = []; protected $basePath; - public function __construct($basePath, $config = []) + public function __construct($basePath, $variables = []) { $this->basePath = $basePath; - $this->config = $config; + $this->variables = $variables; } public function getVariables(): array { - return $this->config['variables'] ?? []; + return $this->variables ?? []; } - public function getConfig(): array { - return $this->config; + public function setVariables(array $variables): void + { + $this->variables = $variables; } public function getBasePath() @@ -29,49 +29,17 @@ public function getBasePath() return $this->basePath; } - public function addFile(File $file) - { - $this->files[$file->getName()] = $file; - } - public function getFiles() + public function addTemplate(Template $template) { - return $this->files; + $this->templates[] = $template; } - /** - * @param array $analyzedData - */ - public function setAnalyzedData(array $analyzedData): void + public function getTemplates() { - $this->analyzedData = $analyzedData; - } - - /** - * @return array - */ - public function getAnalyzedData(): array - { - return $this->analyzedData; + return $this->templates; } public function getFilepath(string $filename): string { return $this->getBasePath() . '/' . $filename; } - - public function hasConsole(): bool - { - return file_exists( - $this->getFilepath('bin/console') - ); - } - - public function console(string $cmd): ?string { - $console = $this->getFilepath('bin/console'); - - if (!$this->hasConsole()) { - return null; - } - - return shell_exec("$console $cmd"); - } } diff --git a/src/Model/Template.php b/src/Model/Template.php new file mode 100644 index 0000000..b8f7fe7 --- /dev/null +++ b/src/Model/Template.php @@ -0,0 +1,45 @@ +src = $config['src'] ?? null; + $file->dest = $config['dest'] ?? null; + $file->items = $config['items'] ?? null; + $file->variables = $config['variables'] ?? []; + return $file; + } + + public function getSrc(): string + { + return $this->src; + } + + public function getDest(): string + { + return $this->dest; + } + + public function getVariables(): array + { + return $this->variables; + } + + public function getItems() + { + return $this->items; + } +} diff --git a/tests/Model/FileTest.php b/tests/Model/FileTest.php deleted file mode 100644 index 2d70b1b..0000000 --- a/tests/Model/FileTest.php +++ /dev/null @@ -1,19 +0,0 @@ -assertEquals(['html', 'twig'], $file->getTemplateExtensions()); - - $this->assertTrue($file->hasTemplateExtension('html')); - $this->assertTrue($file->hasTemplateExtension('twig')); - $this->assertFalse($file->hasTemplateExtension('php')); - } -}