├── .gitignore ├── composer.json ├── bin └── fluid-precompile ├── src ├── ExternalApplication.php └── FluidPrecompiler.php ├── README.md └── composer.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /index.php 2 | /typo3 3 | /typo3_src 4 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "namelesscoder/typo3-cms-fluid-precompiler", 3 | "require": { 4 | "typo3/cms-backend": "^8.7 || ^9", 5 | "typo3/cms-core": "^8.7 || ^9", 6 | "typo3/cms-extbase": "^8.7 || ^9", 7 | "typo3/cms-fluid": "^8.7 || ^9", 8 | "typo3fluid/fluid": "^2.3" 9 | }, 10 | "autoload": { 11 | "psr-4": { 12 | "NamelessCoder\\CmsFluidPrecompiler\\": "src/" 13 | } 14 | }, 15 | "bin": [ 16 | "bin/fluid-precompile" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /bin/fluid-precompile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | compile(array_slice($argv, 1)); 34 | -------------------------------------------------------------------------------- /src/ExternalApplication.php: -------------------------------------------------------------------------------- 1 | entryPointLevel++; 60 | $entryDir = dirname($entryDir); 61 | } 62 | 63 | $this->defineLegacyConstants(); 64 | 65 | $this->bootstrap = Bootstrap::getInstance() 66 | ->initializeClassLoader($classLoader) 67 | ->setRequestType(TYPO3_REQUESTTYPE_BE | TYPO3_REQUESTTYPE_CLI) 68 | ->baseSetup($this->entryPointLevel) 69 | ->configure() 70 | ->loadExtensionTables() 71 | ->initializeCachingFramework(); 72 | 73 | $this->bootstrap; 74 | } 75 | 76 | } 77 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | TYPO3 CMS Fluid Template Precompiler 2 | ==================================== 3 | 4 | Command line tool which scans your TYPO3 site for and compiles without rendering, Fluid template files. Simply put, 5 | warms up the Fluid template cache by parsing and compiling all templates without rendering them. 6 | 7 | Also functions as a basic linting utility - any errors automatically cause the template to be uncompilable and the 8 | parsing-specific extension message such as "undeclared arguments passed to ViewHelper" is presented as failure message. 9 | 10 | 11 | Installation 12 | ------------ 13 | 14 | Only available through composer: 15 | 16 | composer require namelesscoder/typo3-cms-fluid-precompiler 17 | 18 | 19 | Purpose 20 | ------- 21 | 22 | The purpose of this utility is to allow Fluid templates to be compiled ("cached") without having to render each one, as 23 | is normally required before the Fluid template gets compiled. 24 | 25 | The intention is to enable: 26 | 27 | * Development / continuous integration (optional failure exit code) and reporting of uncompilable templates. 28 | * Fairly verbose output containing mitigation suggestions when a template is uncompilable. 29 | * Ability to "warm up" all Fluid templates' compiled states as part of a deployment script. 30 | 31 | The utility exclusively supports pre-compiling of templates which conform to the TYPO3 template folder naming 32 | conventions - that means that only templates which exist in the *default paths of each extension* will be compiled. 33 | And this means templates are expected in `EXT:$extkey/Resources/Private/Templates`, layouts are expected in 34 | `EXT:$extkey/Resources/Private/Layouts` and partials in `EXT:$extkey/Resources/Private/Partials`. Any template file not 35 | located in those paths will be ignored. 36 | 37 | 38 | Usage 39 | ----- 40 | 41 | All parameters can be combined as needed and all parameters have a short name like `-h` and a long name like `--help`. 42 | Only one of the parameters - `-e` or `--extension` - takes an argument value. 43 | 44 | ### Print this help text 45 | 46 | ./vendor/bin/fluid-precompile -h 47 | ./vendor/bin/fluid-precompile --help 48 | 49 | ### Pre-compile every template in every installed extension. 50 | 51 | ./vendor/bin/fluid-precompile 52 | 53 | ### Pre-compile every template in a specific, installed extension. 54 | 55 | ./vendor/bin/fluid-precompile -e my_extension 56 | ./vendor/bin/fluid-precompile --extension my_extension 57 | 58 | ### Silence output 59 | 60 | ./vendor/bin/fluid-precompile -s 61 | ./vendor/bin/fluid-precompile --silent 62 | 63 | ### Verbose output 64 | 65 | ./vendor/bin/fluid-precompile -v 66 | ./vendor/bin/fluid-precompile --verbose 67 | 68 | ### Fail (exit code 1) on any uncompilable template 69 | 70 | ./vendor/bin/fluid-precompile -f 71 | ./vendor/bin/fluid-precompile --fail 72 | 73 | 74 | CI Usage 75 | -------- 76 | 77 | The tool can also be used with Composer's `--require-dev` and called from a continuous integration framework, in case 78 | you want to prevent any uncompilable or otherwise error prone templates from being committed to your project. 79 | 80 | I recommend the following command to perform the check: 81 | 82 | ./vendor/bin/fluid-precompile -e $EXTKEY -v -f 83 | 84 | Which will attempt to compile all templates in extension `$EXTKEY` (which you must define/substitute, of course) and 85 | be verbose about the output (to include any failure messages and print all status for all templates) and finally to fail 86 | if any uncompilable templates are detected (but still report all failures if there are more than one). 87 | 88 | Bonus effect: this performs basic linting on your Fluid template files to ensure that they can be parsed correctly. 89 | Note that this doesn't necessarily mean that your templates also *render* correctly; the linting does not take things 90 | like TypoScript variables or potentially missing sections/partials into account, it only validates the syntax you used. 91 | 92 | 93 | A word on custom implementations 94 | -------------------------------- 95 | 96 | It is perfectly possible to implement your own template pre-compiling logic - and do so very quickly. If you look into 97 | the source code of the `FluidPrecompiler` class shipped with this utility you can see that the requirements are 98 | excessively simple: 99 | 100 | * You need the TYPO3 context, to include things like the cache definitions (a custom bootstrapping application class 101 | is used to do that - if you do this from within an existing TYPO3 context no such thing is necessary). 102 | * You need to build an instance of a RenderingContext which is specific to one extension - once you have the instance 103 | you can then override settings to provide different template paths. 104 | * The pre-compiling (in Fluid terms, warmup) result contains information about all detected files with their individual 105 | status and any failure reasons if the template was uncompilable. 106 | 107 | This makes it fairly easy to implement a custom warmup feature in for example a TYPO3 backend module, as hook that 108 | triggers after caches are flushed, as part of your extension installation process, and so on. 109 | 110 | When you encounter cases which appear to require a custom implementation, consider the following: 111 | 112 | * Are you breaking MVC in your template file naming - would it be better to conform to MVC? 113 | * Would it be better to place your Fluid template files in the default locations as per convention? 114 | * Is your rendering setup perhaps too complex - for example, does it demand a lot of custom View initialisation? 115 | * Are you placing your template files in `fileadmin`? Then urgently consider putting them in an extension. 116 | 117 | -------------------------------------------------------------------------------- /src/FluidPrecompiler.php: -------------------------------------------------------------------------------- 1 | parseArguments($consoleArguments); 26 | if ($arguments['help']) { 27 | echo PHP_EOL . file_get_contents(__DIR__ . '/../README.md'); 28 | } elseif ($arguments['extension']) { 29 | $this->warmupExtensionKey($arguments['extension'], $arguments); 30 | } else { 31 | $extensionKeys = $this->getInstalledExtensionKeys(); 32 | $indent = max(array_map('strlen', $extensionKeys)); 33 | foreach ($extensionKeys as $extensionKey) { 34 | $this->warmupExtensionKey($extensionKey, $arguments, $indent); 35 | } 36 | } 37 | if (!$arguments['silent']) { 38 | echo PHP_EOL; 39 | } 40 | } 41 | 42 | /** 43 | * @param string $extensionKey 44 | * @param array $arguments 45 | * @param integer $indent 46 | * @return void 47 | */ 48 | protected function warmupExtensionKey($extensionKey, array $arguments, $indent = 0) 49 | { 50 | if (!$arguments['silent']) { 51 | echo PHP_EOL . str_pad($extensionKey, $indent, ' ', STR_PAD_RIGHT); 52 | } 53 | 54 | $dir = trim(shell_exec('pwd')) . '/'; 55 | $renderingContext = $this->getRenderingContext($extensionKey); 56 | /** @var FluidCacheWarmupResult $result */ 57 | $result = $renderingContext->getCache()->getCacheWarmer()->warm($renderingContext); 58 | $uncompiledCount = 0; 59 | $compiledCount = 0; 60 | $allCount = count($result->getResults()); 61 | if (!$allCount) { 62 | if (!$arguments['silent']) { 63 | echo ' - no templates detected'; 64 | } 65 | return; 66 | } 67 | if ($arguments['verbose']) { 68 | echo PHP_EOL; 69 | } 70 | foreach ($result->getResults() as $templatePathAndFilename => $templateResult) { 71 | if (!$templateResult[FluidCacheWarmupResult::RESULT_COMPILABLE]) { 72 | ++$uncompiledCount; 73 | } else { 74 | ++$compiledCount; 75 | } 76 | if ($arguments['verbose'] && !$arguments['silent']) { 77 | /** @var FluidCacheWarmupResult $templateResult */ 78 | echo PHP_EOL . ' * ' . str_replace($dir, '', $templatePathAndFilename) . PHP_EOL; 79 | echo ' * Compilable: ' . 80 | $this->getLiteralBoolean($templateResult[FluidCacheWarmupResult::RESULT_COMPILABLE]) . 81 | PHP_EOL; 82 | if ($templateResult[FluidCacheWarmupResult::RESULT_COMPILABLE]) { 83 | echo ' * Uses Layout: ' . 84 | $this->getLiteralBoolean($templateResult[FluidCacheWarmupResult::RESULT_HASLAYOUT]) . 85 | PHP_EOL; 86 | echo ' * Compiled class: ' . 87 | $templateResult[FluidCacheWarmupResult::RESULT_COMPILEDCLASS] . 88 | PHP_EOL; 89 | } else { 90 | echo ' ! Failure: ' . 91 | $templateResult[FluidCacheWarmupResult::RESULT_FAILURE] . 92 | PHP_EOL; 93 | if (count($templateResult[FluidCacheWarmupResult::RESULT_MITIGATIONS])) { 94 | echo ' ! Mitigations:' . PHP_EOL; 95 | foreach ($templateResult[FluidCacheWarmupResult::RESULT_MITIGATIONS] as $mitigation) { 96 | echo ' * ' . $mitigation . PHP_EOL; 97 | } 98 | } 99 | 100 | } 101 | } 102 | } 103 | if (!$arguments['verbose'] && !$arguments['silent']) { 104 | echo str_pad( 105 | sprintf( 106 | ' - %d/%d templates compiled', 107 | $compiledCount, 108 | $allCount 109 | ), 110 | 32, 111 | ' ', 112 | STR_PAD_RIGHT 113 | ); 114 | echo sprintf( 115 | '(%d%%)', 116 | ceil($compiledCount / $allCount * 100) 117 | ); 118 | } 119 | if ($arguments['fail'] && $uncompiledCount) { 120 | if (!$arguments['silent']) { 121 | echo sprintf( 122 | '[!!] Failed to compile %d template(s) and -f was specified, exiting with error' . PHP_EOL, 123 | $uncompiledCount 124 | ); 125 | } 126 | exit(1); 127 | } 128 | } 129 | 130 | /** 131 | * @param mixed $value 132 | * @return string 133 | */ 134 | protected function getLiteralBoolean($value): string 135 | { 136 | return $value ? 'Yes' : 'No'; 137 | } 138 | 139 | /** 140 | * @param array $arguments 141 | * @return array 142 | */ 143 | protected function parseArguments(array $arguments): array 144 | { 145 | return [ 146 | 'verbose' => in_array('-v', $arguments) || in_array('--verbose', $arguments), 147 | 'fail' => in_array('-f', $arguments) || in_array('--fail', $arguments), 148 | 'silent' => in_array('-s', $arguments) || in_array('--silent', $arguments), 149 | 'help' => in_array('-h', $arguments) || in_array('--help', $arguments), 150 | 'extension' => $arguments[array_search('-e', $arguments) + 1] ?? $arguments[array_search('--extension', $arguments) + 1] ?? null, 151 | ]; 152 | } 153 | 154 | /** 155 | * @param string $extensionKey 156 | * @return RenderingContextInterface 157 | */ 158 | protected function getRenderingContext($extensionKey): RenderingContextInterface 159 | { 160 | /** @var RenderingContextInterface $context */ 161 | $context = GeneralUtility::makeInstance(ObjectManager::class)->get(RenderingContext::class); 162 | $context->getTemplatePaths()->fillDefaultsByPackageName($extensionKey); 163 | return $context; 164 | } 165 | 166 | /** 167 | * @return array 168 | */ 169 | protected function getInstalledExtensionKeys(): array 170 | { 171 | return ExtensionManagementUtility::getLoadedExtensionListArray(); 172 | } 173 | } 174 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "0926e3816ad9bd0024cc82c250a6cbd1", 8 | "packages": [ 9 | { 10 | "name": "cogpowered/finediff", 11 | "version": "0.3.1", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/cogpowered/FineDiff.git", 15 | "reference": "339ddc8c3afb656efed4f2f0a80e5c3d026f8ea8" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/cogpowered/FineDiff/zipball/339ddc8c3afb656efed4f2f0a80e5c3d026f8ea8", 20 | "reference": "339ddc8c3afb656efed4f2f0a80e5c3d026f8ea8", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "php": ">=5.3.0" 25 | }, 26 | "require-dev": { 27 | "mockery/mockery": "*", 28 | "phpunit/phpunit": "*" 29 | }, 30 | "type": "library", 31 | "autoload": { 32 | "psr-0": { 33 | "cogpowered\\FineDiff": "src/" 34 | } 35 | }, 36 | "notification-url": "https://packagist.org/downloads/", 37 | "license": [ 38 | "MIT" 39 | ], 40 | "authors": [ 41 | { 42 | "name": "Rob Crowe", 43 | "email": "rob@cogpowered.com" 44 | }, 45 | { 46 | "name": "Raymond Hill" 47 | } 48 | ], 49 | "description": "PHP implementation of a Fine granularity Diff engine", 50 | "homepage": "https://github.com/cogpowered/FineDiff", 51 | "keywords": [ 52 | "diff", 53 | "finediff", 54 | "opcode", 55 | "string", 56 | "text" 57 | ], 58 | "time": "2014-05-19T10:25:02+00:00" 59 | }, 60 | { 61 | "name": "doctrine/annotations", 62 | "version": "v1.3.1", 63 | "source": { 64 | "type": "git", 65 | "url": "https://github.com/doctrine/annotations.git", 66 | "reference": "bd4461328621bde0ae6b1b2675fbc6aca4ceb558" 67 | }, 68 | "dist": { 69 | "type": "zip", 70 | "url": "https://api.github.com/repos/doctrine/annotations/zipball/bd4461328621bde0ae6b1b2675fbc6aca4ceb558", 71 | "reference": "bd4461328621bde0ae6b1b2675fbc6aca4ceb558", 72 | "shasum": "" 73 | }, 74 | "require": { 75 | "doctrine/lexer": "1.*", 76 | "php": "^5.6 || ^7.0" 77 | }, 78 | "require-dev": { 79 | "doctrine/cache": "1.*", 80 | "phpunit/phpunit": "^5.6.1" 81 | }, 82 | "type": "library", 83 | "extra": { 84 | "branch-alias": { 85 | "dev-master": "1.4.x-dev" 86 | } 87 | }, 88 | "autoload": { 89 | "psr-4": { 90 | "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" 91 | } 92 | }, 93 | "notification-url": "https://packagist.org/downloads/", 94 | "license": [ 95 | "MIT" 96 | ], 97 | "authors": [ 98 | { 99 | "name": "Roman Borschel", 100 | "email": "roman@code-factory.org" 101 | }, 102 | { 103 | "name": "Benjamin Eberlei", 104 | "email": "kontakt@beberlei.de" 105 | }, 106 | { 107 | "name": "Guilherme Blanco", 108 | "email": "guilhermeblanco@gmail.com" 109 | }, 110 | { 111 | "name": "Jonathan Wage", 112 | "email": "jonwage@gmail.com" 113 | }, 114 | { 115 | "name": "Johannes Schmitt", 116 | "email": "schmittjoh@gmail.com" 117 | } 118 | ], 119 | "description": "Docblock Annotations Parser", 120 | "homepage": "http://www.doctrine-project.org", 121 | "keywords": [ 122 | "annotations", 123 | "docblock", 124 | "parser" 125 | ], 126 | "time": "2016-12-30T15:59:45+00:00" 127 | }, 128 | { 129 | "name": "doctrine/cache", 130 | "version": "v1.6.1", 131 | "source": { 132 | "type": "git", 133 | "url": "https://github.com/doctrine/cache.git", 134 | "reference": "b6f544a20f4807e81f7044d31e679ccbb1866dc3" 135 | }, 136 | "dist": { 137 | "type": "zip", 138 | "url": "https://api.github.com/repos/doctrine/cache/zipball/b6f544a20f4807e81f7044d31e679ccbb1866dc3", 139 | "reference": "b6f544a20f4807e81f7044d31e679ccbb1866dc3", 140 | "shasum": "" 141 | }, 142 | "require": { 143 | "php": "~5.5|~7.0" 144 | }, 145 | "conflict": { 146 | "doctrine/common": ">2.2,<2.4" 147 | }, 148 | "require-dev": { 149 | "phpunit/phpunit": "~4.8|~5.0", 150 | "predis/predis": "~1.0", 151 | "satooshi/php-coveralls": "~0.6" 152 | }, 153 | "type": "library", 154 | "extra": { 155 | "branch-alias": { 156 | "dev-master": "1.6.x-dev" 157 | } 158 | }, 159 | "autoload": { 160 | "psr-4": { 161 | "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" 162 | } 163 | }, 164 | "notification-url": "https://packagist.org/downloads/", 165 | "license": [ 166 | "MIT" 167 | ], 168 | "authors": [ 169 | { 170 | "name": "Roman Borschel", 171 | "email": "roman@code-factory.org" 172 | }, 173 | { 174 | "name": "Benjamin Eberlei", 175 | "email": "kontakt@beberlei.de" 176 | }, 177 | { 178 | "name": "Guilherme Blanco", 179 | "email": "guilhermeblanco@gmail.com" 180 | }, 181 | { 182 | "name": "Jonathan Wage", 183 | "email": "jonwage@gmail.com" 184 | }, 185 | { 186 | "name": "Johannes Schmitt", 187 | "email": "schmittjoh@gmail.com" 188 | } 189 | ], 190 | "description": "Caching library offering an object-oriented API for many cache backends", 191 | "homepage": "http://www.doctrine-project.org", 192 | "keywords": [ 193 | "cache", 194 | "caching" 195 | ], 196 | "time": "2016-10-29T11:16:17+00:00" 197 | }, 198 | { 199 | "name": "doctrine/collections", 200 | "version": "v1.4.0", 201 | "source": { 202 | "type": "git", 203 | "url": "https://github.com/doctrine/collections.git", 204 | "reference": "1a4fb7e902202c33cce8c55989b945612943c2ba" 205 | }, 206 | "dist": { 207 | "type": "zip", 208 | "url": "https://api.github.com/repos/doctrine/collections/zipball/1a4fb7e902202c33cce8c55989b945612943c2ba", 209 | "reference": "1a4fb7e902202c33cce8c55989b945612943c2ba", 210 | "shasum": "" 211 | }, 212 | "require": { 213 | "php": "^5.6 || ^7.0" 214 | }, 215 | "require-dev": { 216 | "doctrine/coding-standard": "~0.1@dev", 217 | "phpunit/phpunit": "^5.7" 218 | }, 219 | "type": "library", 220 | "extra": { 221 | "branch-alias": { 222 | "dev-master": "1.3.x-dev" 223 | } 224 | }, 225 | "autoload": { 226 | "psr-0": { 227 | "Doctrine\\Common\\Collections\\": "lib/" 228 | } 229 | }, 230 | "notification-url": "https://packagist.org/downloads/", 231 | "license": [ 232 | "MIT" 233 | ], 234 | "authors": [ 235 | { 236 | "name": "Roman Borschel", 237 | "email": "roman@code-factory.org" 238 | }, 239 | { 240 | "name": "Benjamin Eberlei", 241 | "email": "kontakt@beberlei.de" 242 | }, 243 | { 244 | "name": "Guilherme Blanco", 245 | "email": "guilhermeblanco@gmail.com" 246 | }, 247 | { 248 | "name": "Jonathan Wage", 249 | "email": "jonwage@gmail.com" 250 | }, 251 | { 252 | "name": "Johannes Schmitt", 253 | "email": "schmittjoh@gmail.com" 254 | } 255 | ], 256 | "description": "Collections Abstraction library", 257 | "homepage": "http://www.doctrine-project.org", 258 | "keywords": [ 259 | "array", 260 | "collections", 261 | "iterator" 262 | ], 263 | "time": "2017-01-03T10:49:41+00:00" 264 | }, 265 | { 266 | "name": "doctrine/common", 267 | "version": "v2.7.2", 268 | "source": { 269 | "type": "git", 270 | "url": "https://github.com/doctrine/common.git", 271 | "reference": "930297026c8009a567ac051fd545bf6124150347" 272 | }, 273 | "dist": { 274 | "type": "zip", 275 | "url": "https://api.github.com/repos/doctrine/common/zipball/930297026c8009a567ac051fd545bf6124150347", 276 | "reference": "930297026c8009a567ac051fd545bf6124150347", 277 | "shasum": "" 278 | }, 279 | "require": { 280 | "doctrine/annotations": "1.*", 281 | "doctrine/cache": "1.*", 282 | "doctrine/collections": "1.*", 283 | "doctrine/inflector": "1.*", 284 | "doctrine/lexer": "1.*", 285 | "php": "~5.6|~7.0" 286 | }, 287 | "require-dev": { 288 | "phpunit/phpunit": "^5.4.6" 289 | }, 290 | "type": "library", 291 | "extra": { 292 | "branch-alias": { 293 | "dev-master": "2.7.x-dev" 294 | } 295 | }, 296 | "autoload": { 297 | "psr-4": { 298 | "Doctrine\\Common\\": "lib/Doctrine/Common" 299 | } 300 | }, 301 | "notification-url": "https://packagist.org/downloads/", 302 | "license": [ 303 | "MIT" 304 | ], 305 | "authors": [ 306 | { 307 | "name": "Roman Borschel", 308 | "email": "roman@code-factory.org" 309 | }, 310 | { 311 | "name": "Benjamin Eberlei", 312 | "email": "kontakt@beberlei.de" 313 | }, 314 | { 315 | "name": "Guilherme Blanco", 316 | "email": "guilhermeblanco@gmail.com" 317 | }, 318 | { 319 | "name": "Jonathan Wage", 320 | "email": "jonwage@gmail.com" 321 | }, 322 | { 323 | "name": "Johannes Schmitt", 324 | "email": "schmittjoh@gmail.com" 325 | } 326 | ], 327 | "description": "Common Library for Doctrine projects", 328 | "homepage": "http://www.doctrine-project.org", 329 | "keywords": [ 330 | "annotations", 331 | "collections", 332 | "eventmanager", 333 | "persistence", 334 | "spl" 335 | ], 336 | "time": "2017-01-13T14:02:13+00:00" 337 | }, 338 | { 339 | "name": "doctrine/dbal", 340 | "version": "v2.5.12", 341 | "source": { 342 | "type": "git", 343 | "url": "https://github.com/doctrine/dbal.git", 344 | "reference": "7b9e911f9d8b30d43b96853dab26898c710d8f44" 345 | }, 346 | "dist": { 347 | "type": "zip", 348 | "url": "https://api.github.com/repos/doctrine/dbal/zipball/7b9e911f9d8b30d43b96853dab26898c710d8f44", 349 | "reference": "7b9e911f9d8b30d43b96853dab26898c710d8f44", 350 | "shasum": "" 351 | }, 352 | "require": { 353 | "doctrine/common": ">=2.4,<2.8-dev", 354 | "php": ">=5.3.2" 355 | }, 356 | "require-dev": { 357 | "phpunit/phpunit": "4.*", 358 | "symfony/console": "2.*||^3.0" 359 | }, 360 | "suggest": { 361 | "symfony/console": "For helpful console commands such as SQL execution and import of files." 362 | }, 363 | "bin": [ 364 | "bin/doctrine-dbal" 365 | ], 366 | "type": "library", 367 | "extra": { 368 | "branch-alias": { 369 | "dev-master": "2.5.x-dev" 370 | } 371 | }, 372 | "autoload": { 373 | "psr-0": { 374 | "Doctrine\\DBAL\\": "lib/" 375 | } 376 | }, 377 | "notification-url": "https://packagist.org/downloads/", 378 | "license": [ 379 | "MIT" 380 | ], 381 | "authors": [ 382 | { 383 | "name": "Roman Borschel", 384 | "email": "roman@code-factory.org" 385 | }, 386 | { 387 | "name": "Benjamin Eberlei", 388 | "email": "kontakt@beberlei.de" 389 | }, 390 | { 391 | "name": "Guilherme Blanco", 392 | "email": "guilhermeblanco@gmail.com" 393 | }, 394 | { 395 | "name": "Jonathan Wage", 396 | "email": "jonwage@gmail.com" 397 | } 398 | ], 399 | "description": "Database Abstraction Layer", 400 | "homepage": "http://www.doctrine-project.org", 401 | "keywords": [ 402 | "database", 403 | "dbal", 404 | "persistence", 405 | "queryobject" 406 | ], 407 | "time": "2017-02-08T12:53:47+00:00" 408 | }, 409 | { 410 | "name": "doctrine/inflector", 411 | "version": "v1.1.0", 412 | "source": { 413 | "type": "git", 414 | "url": "https://github.com/doctrine/inflector.git", 415 | "reference": "90b2128806bfde671b6952ab8bea493942c1fdae" 416 | }, 417 | "dist": { 418 | "type": "zip", 419 | "url": "https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae", 420 | "reference": "90b2128806bfde671b6952ab8bea493942c1fdae", 421 | "shasum": "" 422 | }, 423 | "require": { 424 | "php": ">=5.3.2" 425 | }, 426 | "require-dev": { 427 | "phpunit/phpunit": "4.*" 428 | }, 429 | "type": "library", 430 | "extra": { 431 | "branch-alias": { 432 | "dev-master": "1.1.x-dev" 433 | } 434 | }, 435 | "autoload": { 436 | "psr-0": { 437 | "Doctrine\\Common\\Inflector\\": "lib/" 438 | } 439 | }, 440 | "notification-url": "https://packagist.org/downloads/", 441 | "license": [ 442 | "MIT" 443 | ], 444 | "authors": [ 445 | { 446 | "name": "Roman Borschel", 447 | "email": "roman@code-factory.org" 448 | }, 449 | { 450 | "name": "Benjamin Eberlei", 451 | "email": "kontakt@beberlei.de" 452 | }, 453 | { 454 | "name": "Guilherme Blanco", 455 | "email": "guilhermeblanco@gmail.com" 456 | }, 457 | { 458 | "name": "Jonathan Wage", 459 | "email": "jonwage@gmail.com" 460 | }, 461 | { 462 | "name": "Johannes Schmitt", 463 | "email": "schmittjoh@gmail.com" 464 | } 465 | ], 466 | "description": "Common String Manipulations with regard to casing and singular/plural rules.", 467 | "homepage": "http://www.doctrine-project.org", 468 | "keywords": [ 469 | "inflection", 470 | "pluralize", 471 | "singularize", 472 | "string" 473 | ], 474 | "time": "2015-11-06T14:35:42+00:00" 475 | }, 476 | { 477 | "name": "doctrine/instantiator", 478 | "version": "1.0.5", 479 | "source": { 480 | "type": "git", 481 | "url": "https://github.com/doctrine/instantiator.git", 482 | "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" 483 | }, 484 | "dist": { 485 | "type": "zip", 486 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", 487 | "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", 488 | "shasum": "" 489 | }, 490 | "require": { 491 | "php": ">=5.3,<8.0-DEV" 492 | }, 493 | "require-dev": { 494 | "athletic/athletic": "~0.1.8", 495 | "ext-pdo": "*", 496 | "ext-phar": "*", 497 | "phpunit/phpunit": "~4.0", 498 | "squizlabs/php_codesniffer": "~2.0" 499 | }, 500 | "type": "library", 501 | "extra": { 502 | "branch-alias": { 503 | "dev-master": "1.0.x-dev" 504 | } 505 | }, 506 | "autoload": { 507 | "psr-4": { 508 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 509 | } 510 | }, 511 | "notification-url": "https://packagist.org/downloads/", 512 | "license": [ 513 | "MIT" 514 | ], 515 | "authors": [ 516 | { 517 | "name": "Marco Pivetta", 518 | "email": "ocramius@gmail.com", 519 | "homepage": "http://ocramius.github.com/" 520 | } 521 | ], 522 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 523 | "homepage": "https://github.com/doctrine/instantiator", 524 | "keywords": [ 525 | "constructor", 526 | "instantiate" 527 | ], 528 | "time": "2015-06-14T21:17:01+00:00" 529 | }, 530 | { 531 | "name": "doctrine/lexer", 532 | "version": "v1.0.1", 533 | "source": { 534 | "type": "git", 535 | "url": "https://github.com/doctrine/lexer.git", 536 | "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" 537 | }, 538 | "dist": { 539 | "type": "zip", 540 | "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", 541 | "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", 542 | "shasum": "" 543 | }, 544 | "require": { 545 | "php": ">=5.3.2" 546 | }, 547 | "type": "library", 548 | "extra": { 549 | "branch-alias": { 550 | "dev-master": "1.0.x-dev" 551 | } 552 | }, 553 | "autoload": { 554 | "psr-0": { 555 | "Doctrine\\Common\\Lexer\\": "lib/" 556 | } 557 | }, 558 | "notification-url": "https://packagist.org/downloads/", 559 | "license": [ 560 | "MIT" 561 | ], 562 | "authors": [ 563 | { 564 | "name": "Roman Borschel", 565 | "email": "roman@code-factory.org" 566 | }, 567 | { 568 | "name": "Guilherme Blanco", 569 | "email": "guilhermeblanco@gmail.com" 570 | }, 571 | { 572 | "name": "Johannes Schmitt", 573 | "email": "schmittjoh@gmail.com" 574 | } 575 | ], 576 | "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", 577 | "homepage": "http://www.doctrine-project.org", 578 | "keywords": [ 579 | "lexer", 580 | "parser" 581 | ], 582 | "time": "2014-09-09T13:34:57+00:00" 583 | }, 584 | { 585 | "name": "guzzlehttp/guzzle", 586 | "version": "6.2.2", 587 | "source": { 588 | "type": "git", 589 | "url": "https://github.com/guzzle/guzzle.git", 590 | "reference": "ebf29dee597f02f09f4d5bbecc68230ea9b08f60" 591 | }, 592 | "dist": { 593 | "type": "zip", 594 | "url": "https://api.github.com/repos/guzzle/guzzle/zipball/ebf29dee597f02f09f4d5bbecc68230ea9b08f60", 595 | "reference": "ebf29dee597f02f09f4d5bbecc68230ea9b08f60", 596 | "shasum": "" 597 | }, 598 | "require": { 599 | "guzzlehttp/promises": "^1.0", 600 | "guzzlehttp/psr7": "^1.3.1", 601 | "php": ">=5.5" 602 | }, 603 | "require-dev": { 604 | "ext-curl": "*", 605 | "phpunit/phpunit": "^4.0", 606 | "psr/log": "^1.0" 607 | }, 608 | "type": "library", 609 | "extra": { 610 | "branch-alias": { 611 | "dev-master": "6.2-dev" 612 | } 613 | }, 614 | "autoload": { 615 | "files": [ 616 | "src/functions_include.php" 617 | ], 618 | "psr-4": { 619 | "GuzzleHttp\\": "src/" 620 | } 621 | }, 622 | "notification-url": "https://packagist.org/downloads/", 623 | "license": [ 624 | "MIT" 625 | ], 626 | "authors": [ 627 | { 628 | "name": "Michael Dowling", 629 | "email": "mtdowling@gmail.com", 630 | "homepage": "https://github.com/mtdowling" 631 | } 632 | ], 633 | "description": "Guzzle is a PHP HTTP client library", 634 | "homepage": "http://guzzlephp.org/", 635 | "keywords": [ 636 | "client", 637 | "curl", 638 | "framework", 639 | "http", 640 | "http client", 641 | "rest", 642 | "web service" 643 | ], 644 | "time": "2016-10-08T15:01:37+00:00" 645 | }, 646 | { 647 | "name": "guzzlehttp/promises", 648 | "version": "v1.3.1", 649 | "source": { 650 | "type": "git", 651 | "url": "https://github.com/guzzle/promises.git", 652 | "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" 653 | }, 654 | "dist": { 655 | "type": "zip", 656 | "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", 657 | "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", 658 | "shasum": "" 659 | }, 660 | "require": { 661 | "php": ">=5.5.0" 662 | }, 663 | "require-dev": { 664 | "phpunit/phpunit": "^4.0" 665 | }, 666 | "type": "library", 667 | "extra": { 668 | "branch-alias": { 669 | "dev-master": "1.4-dev" 670 | } 671 | }, 672 | "autoload": { 673 | "psr-4": { 674 | "GuzzleHttp\\Promise\\": "src/" 675 | }, 676 | "files": [ 677 | "src/functions_include.php" 678 | ] 679 | }, 680 | "notification-url": "https://packagist.org/downloads/", 681 | "license": [ 682 | "MIT" 683 | ], 684 | "authors": [ 685 | { 686 | "name": "Michael Dowling", 687 | "email": "mtdowling@gmail.com", 688 | "homepage": "https://github.com/mtdowling" 689 | } 690 | ], 691 | "description": "Guzzle promises library", 692 | "keywords": [ 693 | "promise" 694 | ], 695 | "time": "2016-12-20T10:07:11+00:00" 696 | }, 697 | { 698 | "name": "guzzlehttp/psr7", 699 | "version": "1.3.1", 700 | "source": { 701 | "type": "git", 702 | "url": "https://github.com/guzzle/psr7.git", 703 | "reference": "5c6447c9df362e8f8093bda8f5d8873fe5c7f65b" 704 | }, 705 | "dist": { 706 | "type": "zip", 707 | "url": "https://api.github.com/repos/guzzle/psr7/zipball/5c6447c9df362e8f8093bda8f5d8873fe5c7f65b", 708 | "reference": "5c6447c9df362e8f8093bda8f5d8873fe5c7f65b", 709 | "shasum": "" 710 | }, 711 | "require": { 712 | "php": ">=5.4.0", 713 | "psr/http-message": "~1.0" 714 | }, 715 | "provide": { 716 | "psr/http-message-implementation": "1.0" 717 | }, 718 | "require-dev": { 719 | "phpunit/phpunit": "~4.0" 720 | }, 721 | "type": "library", 722 | "extra": { 723 | "branch-alias": { 724 | "dev-master": "1.4-dev" 725 | } 726 | }, 727 | "autoload": { 728 | "psr-4": { 729 | "GuzzleHttp\\Psr7\\": "src/" 730 | }, 731 | "files": [ 732 | "src/functions_include.php" 733 | ] 734 | }, 735 | "notification-url": "https://packagist.org/downloads/", 736 | "license": [ 737 | "MIT" 738 | ], 739 | "authors": [ 740 | { 741 | "name": "Michael Dowling", 742 | "email": "mtdowling@gmail.com", 743 | "homepage": "https://github.com/mtdowling" 744 | } 745 | ], 746 | "description": "PSR-7 message implementation", 747 | "keywords": [ 748 | "http", 749 | "message", 750 | "stream", 751 | "uri" 752 | ], 753 | "time": "2016-06-24T23:00:38+00:00" 754 | }, 755 | { 756 | "name": "mso/idna-convert", 757 | "version": "v1.1.0", 758 | "source": { 759 | "type": "git", 760 | "url": "https://github.com/phlylabs/idna-convert.git", 761 | "reference": "a6dfb6f87611e3a89d2eec4924a0f51db755c573" 762 | }, 763 | "dist": { 764 | "type": "zip", 765 | "url": "https://api.github.com/repos/phlylabs/idna-convert/zipball/a6dfb6f87611e3a89d2eec4924a0f51db755c573", 766 | "reference": "a6dfb6f87611e3a89d2eec4924a0f51db755c573", 767 | "shasum": "" 768 | }, 769 | "require": { 770 | "ext-pcre": "*", 771 | "php": ">=5.6.0" 772 | }, 773 | "type": "library", 774 | "extra": { 775 | "branch-alias": { 776 | "dev-master": "1.0.x-dev" 777 | } 778 | }, 779 | "autoload": { 780 | "psr-4": { 781 | "Mso\\IdnaConvert\\": "src" 782 | } 783 | }, 784 | "notification-url": "https://packagist.org/downloads/", 785 | "license": [ 786 | "LGPL-2.1+" 787 | ], 788 | "authors": [ 789 | { 790 | "name": "Matthias Sommerfeld", 791 | "email": "mso@phlylabs.de", 792 | "role": "Developer" 793 | } 794 | ], 795 | "description": "A library for encoding and decoding internationalized domain names", 796 | "homepage": "http://idnaconv.net/", 797 | "keywords": [ 798 | "idn", 799 | "idna", 800 | "php" 801 | ], 802 | "time": "2016-06-19T18:08:43+00:00" 803 | }, 804 | { 805 | "name": "psr/http-message", 806 | "version": "1.0.1", 807 | "source": { 808 | "type": "git", 809 | "url": "https://github.com/php-fig/http-message.git", 810 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" 811 | }, 812 | "dist": { 813 | "type": "zip", 814 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", 815 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", 816 | "shasum": "" 817 | }, 818 | "require": { 819 | "php": ">=5.3.0" 820 | }, 821 | "type": "library", 822 | "extra": { 823 | "branch-alias": { 824 | "dev-master": "1.0.x-dev" 825 | } 826 | }, 827 | "autoload": { 828 | "psr-4": { 829 | "Psr\\Http\\Message\\": "src/" 830 | } 831 | }, 832 | "notification-url": "https://packagist.org/downloads/", 833 | "license": [ 834 | "MIT" 835 | ], 836 | "authors": [ 837 | { 838 | "name": "PHP-FIG", 839 | "homepage": "http://www.php-fig.org/" 840 | } 841 | ], 842 | "description": "Common interface for HTTP messages", 843 | "homepage": "https://github.com/php-fig/http-message", 844 | "keywords": [ 845 | "http", 846 | "http-message", 847 | "psr", 848 | "psr-7", 849 | "request", 850 | "response" 851 | ], 852 | "time": "2016-08-06T14:39:51+00:00" 853 | }, 854 | { 855 | "name": "psr/log", 856 | "version": "1.0.2", 857 | "source": { 858 | "type": "git", 859 | "url": "https://github.com/php-fig/log.git", 860 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" 861 | }, 862 | "dist": { 863 | "type": "zip", 864 | "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", 865 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", 866 | "shasum": "" 867 | }, 868 | "require": { 869 | "php": ">=5.3.0" 870 | }, 871 | "type": "library", 872 | "extra": { 873 | "branch-alias": { 874 | "dev-master": "1.0.x-dev" 875 | } 876 | }, 877 | "autoload": { 878 | "psr-4": { 879 | "Psr\\Log\\": "Psr/Log/" 880 | } 881 | }, 882 | "notification-url": "https://packagist.org/downloads/", 883 | "license": [ 884 | "MIT" 885 | ], 886 | "authors": [ 887 | { 888 | "name": "PHP-FIG", 889 | "homepage": "http://www.php-fig.org/" 890 | } 891 | ], 892 | "description": "Common interface for logging libraries", 893 | "homepage": "https://github.com/php-fig/log", 894 | "keywords": [ 895 | "log", 896 | "psr", 897 | "psr-3" 898 | ], 899 | "time": "2016-10-10T12:19:37+00:00" 900 | }, 901 | { 902 | "name": "swiftmailer/swiftmailer", 903 | "version": "v5.4.6", 904 | "source": { 905 | "type": "git", 906 | "url": "https://github.com/swiftmailer/swiftmailer.git", 907 | "reference": "81fdccfaf8bdc5d5d7a1ef6bb3a61bbb1a6c4a3e" 908 | }, 909 | "dist": { 910 | "type": "zip", 911 | "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/81fdccfaf8bdc5d5d7a1ef6bb3a61bbb1a6c4a3e", 912 | "reference": "81fdccfaf8bdc5d5d7a1ef6bb3a61bbb1a6c4a3e", 913 | "shasum": "" 914 | }, 915 | "require": { 916 | "php": ">=5.3.3" 917 | }, 918 | "require-dev": { 919 | "mockery/mockery": "~0.9.1", 920 | "symfony/phpunit-bridge": "~3.2" 921 | }, 922 | "type": "library", 923 | "extra": { 924 | "branch-alias": { 925 | "dev-master": "5.4-dev" 926 | } 927 | }, 928 | "autoload": { 929 | "files": [ 930 | "lib/swift_required.php" 931 | ] 932 | }, 933 | "notification-url": "https://packagist.org/downloads/", 934 | "license": [ 935 | "MIT" 936 | ], 937 | "authors": [ 938 | { 939 | "name": "Chris Corbyn" 940 | }, 941 | { 942 | "name": "Fabien Potencier", 943 | "email": "fabien@symfony.com" 944 | } 945 | ], 946 | "description": "Swiftmailer, free feature-rich PHP mailer", 947 | "homepage": "http://swiftmailer.org", 948 | "keywords": [ 949 | "email", 950 | "mail", 951 | "mailer" 952 | ], 953 | "time": "2017-02-13T07:52:53+00:00" 954 | }, 955 | { 956 | "name": "symfony/console", 957 | "version": "v3.2.3", 958 | "source": { 959 | "type": "git", 960 | "url": "https://github.com/symfony/console.git", 961 | "reference": "7a8405a9fc175f87fed8a3c40856b0d866d61936" 962 | }, 963 | "dist": { 964 | "type": "zip", 965 | "url": "https://api.github.com/repos/symfony/console/zipball/7a8405a9fc175f87fed8a3c40856b0d866d61936", 966 | "reference": "7a8405a9fc175f87fed8a3c40856b0d866d61936", 967 | "shasum": "" 968 | }, 969 | "require": { 970 | "php": ">=5.5.9", 971 | "symfony/debug": "~2.8|~3.0", 972 | "symfony/polyfill-mbstring": "~1.0" 973 | }, 974 | "require-dev": { 975 | "psr/log": "~1.0", 976 | "symfony/event-dispatcher": "~2.8|~3.0", 977 | "symfony/filesystem": "~2.8|~3.0", 978 | "symfony/process": "~2.8|~3.0" 979 | }, 980 | "suggest": { 981 | "psr/log": "For using the console logger", 982 | "symfony/event-dispatcher": "", 983 | "symfony/filesystem": "", 984 | "symfony/process": "" 985 | }, 986 | "type": "library", 987 | "extra": { 988 | "branch-alias": { 989 | "dev-master": "3.2-dev" 990 | } 991 | }, 992 | "autoload": { 993 | "psr-4": { 994 | "Symfony\\Component\\Console\\": "" 995 | }, 996 | "exclude-from-classmap": [ 997 | "/Tests/" 998 | ] 999 | }, 1000 | "notification-url": "https://packagist.org/downloads/", 1001 | "license": [ 1002 | "MIT" 1003 | ], 1004 | "authors": [ 1005 | { 1006 | "name": "Fabien Potencier", 1007 | "email": "fabien@symfony.com" 1008 | }, 1009 | { 1010 | "name": "Symfony Community", 1011 | "homepage": "https://symfony.com/contributors" 1012 | } 1013 | ], 1014 | "description": "Symfony Console Component", 1015 | "homepage": "https://symfony.com", 1016 | "time": "2017-02-06T12:04:21+00:00" 1017 | }, 1018 | { 1019 | "name": "symfony/debug", 1020 | "version": "v3.2.3", 1021 | "source": { 1022 | "type": "git", 1023 | "url": "https://github.com/symfony/debug.git", 1024 | "reference": "b4d9818f127c60ce21ed62c395da7df868dc8477" 1025 | }, 1026 | "dist": { 1027 | "type": "zip", 1028 | "url": "https://api.github.com/repos/symfony/debug/zipball/b4d9818f127c60ce21ed62c395da7df868dc8477", 1029 | "reference": "b4d9818f127c60ce21ed62c395da7df868dc8477", 1030 | "shasum": "" 1031 | }, 1032 | "require": { 1033 | "php": ">=5.5.9", 1034 | "psr/log": "~1.0" 1035 | }, 1036 | "conflict": { 1037 | "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" 1038 | }, 1039 | "require-dev": { 1040 | "symfony/class-loader": "~2.8|~3.0", 1041 | "symfony/http-kernel": "~2.8|~3.0" 1042 | }, 1043 | "type": "library", 1044 | "extra": { 1045 | "branch-alias": { 1046 | "dev-master": "3.2-dev" 1047 | } 1048 | }, 1049 | "autoload": { 1050 | "psr-4": { 1051 | "Symfony\\Component\\Debug\\": "" 1052 | }, 1053 | "exclude-from-classmap": [ 1054 | "/Tests/" 1055 | ] 1056 | }, 1057 | "notification-url": "https://packagist.org/downloads/", 1058 | "license": [ 1059 | "MIT" 1060 | ], 1061 | "authors": [ 1062 | { 1063 | "name": "Fabien Potencier", 1064 | "email": "fabien@symfony.com" 1065 | }, 1066 | { 1067 | "name": "Symfony Community", 1068 | "homepage": "https://symfony.com/contributors" 1069 | } 1070 | ], 1071 | "description": "Symfony Debug Component", 1072 | "homepage": "https://symfony.com", 1073 | "time": "2017-01-28T02:37:08+00:00" 1074 | }, 1075 | { 1076 | "name": "symfony/finder", 1077 | "version": "v3.2.3", 1078 | "source": { 1079 | "type": "git", 1080 | "url": "https://github.com/symfony/finder.git", 1081 | "reference": "8c71141cae8e2957946b403cc71a67213c0380d6" 1082 | }, 1083 | "dist": { 1084 | "type": "zip", 1085 | "url": "https://api.github.com/repos/symfony/finder/zipball/8c71141cae8e2957946b403cc71a67213c0380d6", 1086 | "reference": "8c71141cae8e2957946b403cc71a67213c0380d6", 1087 | "shasum": "" 1088 | }, 1089 | "require": { 1090 | "php": ">=5.5.9" 1091 | }, 1092 | "type": "library", 1093 | "extra": { 1094 | "branch-alias": { 1095 | "dev-master": "3.2-dev" 1096 | } 1097 | }, 1098 | "autoload": { 1099 | "psr-4": { 1100 | "Symfony\\Component\\Finder\\": "" 1101 | }, 1102 | "exclude-from-classmap": [ 1103 | "/Tests/" 1104 | ] 1105 | }, 1106 | "notification-url": "https://packagist.org/downloads/", 1107 | "license": [ 1108 | "MIT" 1109 | ], 1110 | "authors": [ 1111 | { 1112 | "name": "Fabien Potencier", 1113 | "email": "fabien@symfony.com" 1114 | }, 1115 | { 1116 | "name": "Symfony Community", 1117 | "homepage": "https://symfony.com/contributors" 1118 | } 1119 | ], 1120 | "description": "Symfony Finder Component", 1121 | "homepage": "https://symfony.com", 1122 | "time": "2017-01-02T20:32:22+00:00" 1123 | }, 1124 | { 1125 | "name": "symfony/polyfill-mbstring", 1126 | "version": "v1.3.0", 1127 | "source": { 1128 | "type": "git", 1129 | "url": "https://github.com/symfony/polyfill-mbstring.git", 1130 | "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4" 1131 | }, 1132 | "dist": { 1133 | "type": "zip", 1134 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/e79d363049d1c2128f133a2667e4f4190904f7f4", 1135 | "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4", 1136 | "shasum": "" 1137 | }, 1138 | "require": { 1139 | "php": ">=5.3.3" 1140 | }, 1141 | "suggest": { 1142 | "ext-mbstring": "For best performance" 1143 | }, 1144 | "type": "library", 1145 | "extra": { 1146 | "branch-alias": { 1147 | "dev-master": "1.3-dev" 1148 | } 1149 | }, 1150 | "autoload": { 1151 | "psr-4": { 1152 | "Symfony\\Polyfill\\Mbstring\\": "" 1153 | }, 1154 | "files": [ 1155 | "bootstrap.php" 1156 | ] 1157 | }, 1158 | "notification-url": "https://packagist.org/downloads/", 1159 | "license": [ 1160 | "MIT" 1161 | ], 1162 | "authors": [ 1163 | { 1164 | "name": "Nicolas Grekas", 1165 | "email": "p@tchwork.com" 1166 | }, 1167 | { 1168 | "name": "Symfony Community", 1169 | "homepage": "https://symfony.com/contributors" 1170 | } 1171 | ], 1172 | "description": "Symfony polyfill for the Mbstring extension", 1173 | "homepage": "https://symfony.com", 1174 | "keywords": [ 1175 | "compatibility", 1176 | "mbstring", 1177 | "polyfill", 1178 | "portable", 1179 | "shim" 1180 | ], 1181 | "time": "2016-11-14T01:06:16+00:00" 1182 | }, 1183 | { 1184 | "name": "symfony/yaml", 1185 | "version": "v3.2.3", 1186 | "source": { 1187 | "type": "git", 1188 | "url": "https://github.com/symfony/yaml.git", 1189 | "reference": "e1718c6bf57e1efbb8793ada951584b2ab27775b" 1190 | }, 1191 | "dist": { 1192 | "type": "zip", 1193 | "url": "https://api.github.com/repos/symfony/yaml/zipball/e1718c6bf57e1efbb8793ada951584b2ab27775b", 1194 | "reference": "e1718c6bf57e1efbb8793ada951584b2ab27775b", 1195 | "shasum": "" 1196 | }, 1197 | "require": { 1198 | "php": ">=5.5.9" 1199 | }, 1200 | "require-dev": { 1201 | "symfony/console": "~2.8|~3.0" 1202 | }, 1203 | "suggest": { 1204 | "symfony/console": "For validating YAML files using the lint command" 1205 | }, 1206 | "type": "library", 1207 | "extra": { 1208 | "branch-alias": { 1209 | "dev-master": "3.2-dev" 1210 | } 1211 | }, 1212 | "autoload": { 1213 | "psr-4": { 1214 | "Symfony\\Component\\Yaml\\": "" 1215 | }, 1216 | "exclude-from-classmap": [ 1217 | "/Tests/" 1218 | ] 1219 | }, 1220 | "notification-url": "https://packagist.org/downloads/", 1221 | "license": [ 1222 | "MIT" 1223 | ], 1224 | "authors": [ 1225 | { 1226 | "name": "Fabien Potencier", 1227 | "email": "fabien@symfony.com" 1228 | }, 1229 | { 1230 | "name": "Symfony Community", 1231 | "homepage": "https://symfony.com/contributors" 1232 | } 1233 | ], 1234 | "description": "Symfony Yaml Component", 1235 | "homepage": "https://symfony.com", 1236 | "time": "2017-01-21T17:06:35+00:00" 1237 | }, 1238 | { 1239 | "name": "typo3/class-alias-loader", 1240 | "version": "1.0.0", 1241 | "source": { 1242 | "type": "git", 1243 | "url": "https://github.com/TYPO3/class-alias-loader.git", 1244 | "reference": "a9dd295c81ed0b51455644be420ab9210cad688f" 1245 | }, 1246 | "dist": { 1247 | "type": "zip", 1248 | "url": "https://api.github.com/repos/TYPO3/class-alias-loader/zipball/a9dd295c81ed0b51455644be420ab9210cad688f", 1249 | "reference": "a9dd295c81ed0b51455644be420ab9210cad688f", 1250 | "shasum": "" 1251 | }, 1252 | "require": { 1253 | "composer-plugin-api": "^1.0", 1254 | "php": ">=5.3.7" 1255 | }, 1256 | "replace": { 1257 | "helhum/class-alias-loader": "*" 1258 | }, 1259 | "require-dev": { 1260 | "composer/composer": "dev-master", 1261 | "mikey179/vfsstream": "1.4.*@dev", 1262 | "phpunit/phpunit": "~4.7.0" 1263 | }, 1264 | "type": "composer-plugin", 1265 | "extra": { 1266 | "class": "TYPO3\\ClassAliasLoader\\Plugin", 1267 | "branch-alias": { 1268 | "dev-master": "1.0.x-dev" 1269 | } 1270 | }, 1271 | "autoload": { 1272 | "psr-4": { 1273 | "TYPO3\\ClassAliasLoader\\": "src/" 1274 | } 1275 | }, 1276 | "notification-url": "https://packagist.org/downloads/", 1277 | "license": [ 1278 | "MIT" 1279 | ], 1280 | "authors": [ 1281 | { 1282 | "name": "Helmut Hummel", 1283 | "email": "info@helhum.io" 1284 | } 1285 | ], 1286 | "description": "Amends the composer class loader to support class aliases to provide backwards compatibility for packages", 1287 | "homepage": "http://github.com/TYPO3/class-alias-loader", 1288 | "keywords": [ 1289 | "alias", 1290 | "autoloader", 1291 | "classloader", 1292 | "composer" 1293 | ], 1294 | "time": "2015-10-06T10:25:44+00:00" 1295 | }, 1296 | { 1297 | "name": "typo3/cms", 1298 | "version": "8.5.1", 1299 | "source": { 1300 | "type": "git", 1301 | "url": "https://github.com/TYPO3/TYPO3.CMS.git", 1302 | "reference": "37ad0060363bfee3bc7acecbd68fe67cec819360" 1303 | }, 1304 | "dist": { 1305 | "type": "zip", 1306 | "url": "https://api.github.com/repos/TYPO3/TYPO3.CMS/zipball/37ad0060363bfee3bc7acecbd68fe67cec819360", 1307 | "reference": "37ad0060363bfee3bc7acecbd68fe67cec819360", 1308 | "shasum": "" 1309 | }, 1310 | "require": { 1311 | "cogpowered/finediff": "~0.3.1", 1312 | "doctrine/dbal": "~2.5.4", 1313 | "doctrine/instantiator": "~1.0.4", 1314 | "ext-json": "*", 1315 | "ext-pcre": "*", 1316 | "ext-session": "*", 1317 | "ext-xml": "*", 1318 | "guzzlehttp/guzzle": "^6.2.1", 1319 | "mso/idna-convert": "^1.1.0", 1320 | "php": "^7.0", 1321 | "psr/http-message": "~1.0", 1322 | "psr/log": "~1.0.0", 1323 | "swiftmailer/swiftmailer": "~5.4.5", 1324 | "symfony/console": "^2.7 || ^3.0", 1325 | "symfony/finder": "^2.7 || ^3.0", 1326 | "symfony/polyfill-mbstring": "^1.2", 1327 | "symfony/yaml": "^2.7 || ^3.0", 1328 | "typo3/class-alias-loader": "^1.0", 1329 | "typo3/cms-composer-installers": "^1.2.8", 1330 | "typo3fluid/fluid": "^2.0" 1331 | }, 1332 | "replace": { 1333 | "typo3/cms-about": "self.version", 1334 | "typo3/cms-backend": "self.version", 1335 | "typo3/cms-belog": "self.version", 1336 | "typo3/cms-beuser": "self.version", 1337 | "typo3/cms-compatibility7": "self.version", 1338 | "typo3/cms-context-help": "self.version", 1339 | "typo3/cms-core": "self.version", 1340 | "typo3/cms-cshmanual": "self.version", 1341 | "typo3/cms-css-styled-content": "self.version", 1342 | "typo3/cms-documentation": "self.version", 1343 | "typo3/cms-extbase": "self.version", 1344 | "typo3/cms-extensionmanager": "self.version", 1345 | "typo3/cms-feedit": "self.version", 1346 | "typo3/cms-felogin": "self.version", 1347 | "typo3/cms-filelist": "self.version", 1348 | "typo3/cms-filemetadata": "self.version", 1349 | "typo3/cms-fluid": "self.version", 1350 | "typo3/cms-fluid-styled-content": "self.version", 1351 | "typo3/cms-form": "self.version", 1352 | "typo3/cms-frontend": "self.version", 1353 | "typo3/cms-func": "self.version", 1354 | "typo3/cms-func-wizards": "self.version", 1355 | "typo3/cms-impexp": "self.version", 1356 | "typo3/cms-indexed-search": "self.version", 1357 | "typo3/cms-info": "self.version", 1358 | "typo3/cms-info-pagetsconfig": "self.version", 1359 | "typo3/cms-install": "self.version", 1360 | "typo3/cms-lang": "self.version", 1361 | "typo3/cms-linkvalidator": "self.version", 1362 | "typo3/cms-lowlevel": "self.version", 1363 | "typo3/cms-opendocs": "self.version", 1364 | "typo3/cms-recordlist": "self.version", 1365 | "typo3/cms-recycler": "self.version", 1366 | "typo3/cms-reports": "self.version", 1367 | "typo3/cms-rsaauth": "self.version", 1368 | "typo3/cms-rte-ckeditor": "self.version", 1369 | "typo3/cms-rtehtmlarea": "self.version", 1370 | "typo3/cms-saltedpasswords": "self.version", 1371 | "typo3/cms-scheduler": "self.version", 1372 | "typo3/cms-setup": "self.version", 1373 | "typo3/cms-sv": "self.version", 1374 | "typo3/cms-sys-action": "self.version", 1375 | "typo3/cms-sys-note": "self.version", 1376 | "typo3/cms-t3editor": "self.version", 1377 | "typo3/cms-t3skin": "self.version", 1378 | "typo3/cms-taskcenter": "self.version", 1379 | "typo3/cms-tstemplate": "self.version", 1380 | "typo3/cms-version": "self.version", 1381 | "typo3/cms-viewpage": "self.version", 1382 | "typo3/cms-wizard-crpages": "self.version", 1383 | "typo3/cms-wizard-sortpages": "self.version", 1384 | "typo3/cms-workspaces": "self.version" 1385 | }, 1386 | "require-dev": { 1387 | "7elix/styleguide": "~8.0.0", 1388 | "codeception/codeception": "^2.2", 1389 | "fiunchinho/phpunit-randomizer": "~2.0.3", 1390 | "friendsofphp/php-cs-fixer": "^1.12", 1391 | "mikey179/vfsstream": "~1.6.0", 1392 | "phpunit/phpunit": "^5.6", 1393 | "se/selenium-server-standalone": "~2.53" 1394 | }, 1395 | "suggest": { 1396 | "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", 1397 | "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", 1398 | "ext-mysqli": "", 1399 | "ext-openssl": "", 1400 | "ext-soap": "", 1401 | "ext-zip": "", 1402 | "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" 1403 | }, 1404 | "bin": [ 1405 | "typo3/sysext/core/bin/typo3" 1406 | ], 1407 | "type": "typo3-cms-core", 1408 | "extra": { 1409 | "typo3/class-alias-loader": { 1410 | "always-add-alias-loader": true, 1411 | "class-alias-maps": [ 1412 | "typo3/sysext/fluid/Migrations/Code/ClassAliasMap.php", 1413 | "typo3/sysext/version/Migrations/Code/ClassAliasMap.php" 1414 | ] 1415 | }, 1416 | "branch-alias": { 1417 | "dev-master": "8.x-dev" 1418 | } 1419 | }, 1420 | "autoload": { 1421 | "psr-4": { 1422 | "TYPO3\\CMS\\About\\": "typo3/sysext/about/Classes/", 1423 | "TYPO3\\CMS\\Backend\\": "typo3/sysext/backend/Classes/", 1424 | "TYPO3\\CMS\\Belog\\": "typo3/sysext/belog/Classes/", 1425 | "TYPO3\\CMS\\Beuser\\": "typo3/sysext/beuser/Classes/", 1426 | "TYPO3\\CMS\\ContextHelp\\": "typo3/sysext/context_help/Classes/", 1427 | "TYPO3\\CMS\\Core\\": "typo3/sysext/core/Classes/", 1428 | "TYPO3\\CMS\\Cshmanual\\": "typo3/sysext/cshmanual/Classes/", 1429 | "TYPO3\\CMS\\CssStyledContent\\": "typo3/sysext/css_styled_content/Classes/", 1430 | "TYPO3\\CMS\\Documentation\\": "typo3/sysext/documentation/Classes/", 1431 | "TYPO3\\CMS\\Extbase\\": "typo3/sysext/extbase/Classes/", 1432 | "TYPO3\\CMS\\Extensionmanager\\": "typo3/sysext/extensionmanager/Classes/", 1433 | "TYPO3\\CMS\\Feedit\\": "typo3/sysext/feedit/Classes/", 1434 | "TYPO3\\CMS\\Felogin\\": "typo3/sysext/felogin/Classes/", 1435 | "TYPO3\\CMS\\Filelist\\": "typo3/sysext/filelist/Classes/", 1436 | "TYPO3\\CMS\\Fluid\\": "typo3/sysext/fluid/Classes/", 1437 | "TYPO3\\CMS\\FluidStyledContent\\": "typo3/sysext/fluid_styled_content/Classes/", 1438 | "TYPO3\\CMS\\Form\\": "typo3/sysext/form/Classes/", 1439 | "TYPO3\\CMS\\Frontend\\": "typo3/sysext/frontend/Classes/", 1440 | "TYPO3\\CMS\\Func\\": "typo3/sysext/func/Classes/", 1441 | "TYPO3\\CMS\\Impexp\\": "typo3/sysext/impexp/Classes/", 1442 | "TYPO3\\CMS\\IndexedSearch\\": "typo3/sysext/indexed_search/Classes/", 1443 | "TYPO3\\CMS\\IndexedSearchMysql\\": "typo3/sysext/indexed_search_mysql/Classes/", 1444 | "TYPO3\\CMS\\Info\\": "typo3/sysext/info/Classes/", 1445 | "TYPO3\\CMS\\InfoPagetsconfig\\": "typo3/sysext/info_pagetsconfig/Classes/", 1446 | "TYPO3\\CMS\\Install\\": "typo3/sysext/install/Classes/", 1447 | "TYPO3\\CMS\\Lang\\": "typo3/sysext/lang/Classes/", 1448 | "TYPO3\\CMS\\Linkvalidator\\": "typo3/sysext/linkvalidator/Classes/", 1449 | "TYPO3\\CMS\\Lowlevel\\": "typo3/sysext/lowlevel/Classes/", 1450 | "TYPO3\\CMS\\Opendocs\\": "typo3/sysext/opendocs/Classes/", 1451 | "TYPO3\\CMS\\Recordlist\\": "typo3/sysext/recordlist/Classes/", 1452 | "TYPO3\\CMS\\Recycler\\": "typo3/sysext/recycler/Classes/", 1453 | "TYPO3\\CMS\\Reports\\": "typo3/sysext/reports/Classes/", 1454 | "TYPO3\\CMS\\Rsaauth\\": "typo3/sysext/rsaauth/Classes/", 1455 | "TYPO3\\CMS\\RteCKEditor\\": "typo3/sysext/rte_ckeditor/Classes/", 1456 | "TYPO3\\CMS\\Rtehtmlarea\\": "typo3/sysext/rtehtmlarea/Classes/", 1457 | "TYPO3\\CMS\\Saltedpasswords\\": "typo3/sysext/saltedpasswords/Classes/", 1458 | "TYPO3\\CMS\\Scheduler\\": "typo3/sysext/scheduler/Classes/", 1459 | "TYPO3\\CMS\\Setup\\": "typo3/sysext/setup/Classes/", 1460 | "TYPO3\\CMS\\Sv\\": "typo3/sysext/sv/Classes/", 1461 | "TYPO3\\CMS\\SysAction\\": "typo3/sysext/sys_action/Classes/", 1462 | "TYPO3\\CMS\\SysNote\\": "typo3/sysext/sys_note/Classes/", 1463 | "TYPO3\\CMS\\T3editor\\": "typo3/sysext/t3editor/Classes/", 1464 | "TYPO3\\CMS\\Taskcenter\\": "typo3/sysext/taskcenter/Classes/", 1465 | "TYPO3\\CMS\\Tstemplate\\": "typo3/sysext/tstemplate/Classes/", 1466 | "TYPO3\\CMS\\Version\\": "typo3/sysext/version/Classes/", 1467 | "TYPO3\\CMS\\Viewpage\\": "typo3/sysext/viewpage/Classes/", 1468 | "TYPO3\\CMS\\WizardCrpages\\": "typo3/sysext/wizard_crpages/Classes/", 1469 | "TYPO3\\CMS\\WizardSortpages\\": "typo3/sysext/wizard_sortpages/Classes/", 1470 | "TYPO3\\CMS\\Workspaces\\": "typo3/sysext/workspaces/Classes/" 1471 | }, 1472 | "classmap": [ 1473 | "typo3/sysext/core/Resources/PHP/" 1474 | ], 1475 | "files": [ 1476 | "typo3/sysext/core/Resources/PHP/GlobalDebugFunctions.php" 1477 | ] 1478 | }, 1479 | "notification-url": "https://packagist.org/downloads/", 1480 | "license": [ 1481 | "GPL-2.0+" 1482 | ], 1483 | "authors": [ 1484 | { 1485 | "name": "The TYPO3 Community", 1486 | "homepage": "https://typo3.org/community/", 1487 | "role": "Contributor" 1488 | }, 1489 | { 1490 | "name": "TYPO3 CMS Core Team", 1491 | "homepage": "https://forge.typo3.org/projects/typo3cms-core", 1492 | "role": "Developer" 1493 | } 1494 | ], 1495 | "description": "TYPO3 CMS is a free open source Content Management Framework initially created by Kasper Skaarhoj and licensed under GNU/GPL.", 1496 | "homepage": "https://typo3.org/", 1497 | "keywords": [ 1498 | "Content management system", 1499 | "cms", 1500 | "extbase", 1501 | "typo3" 1502 | ], 1503 | "time": "2017-01-03T11:16:11+00:00" 1504 | }, 1505 | { 1506 | "name": "typo3/cms-composer-installers", 1507 | "version": "1.3.1", 1508 | "source": { 1509 | "type": "git", 1510 | "url": "https://github.com/TYPO3/CmsComposerInstallers.git", 1511 | "reference": "cb25a053cdba0fcc43a9f56f5e086f77eed6b916" 1512 | }, 1513 | "dist": { 1514 | "type": "zip", 1515 | "url": "https://api.github.com/repos/TYPO3/CmsComposerInstallers/zipball/cb25a053cdba0fcc43a9f56f5e086f77eed6b916", 1516 | "reference": "cb25a053cdba0fcc43a9f56f5e086f77eed6b916", 1517 | "shasum": "" 1518 | }, 1519 | "require": { 1520 | "composer-plugin-api": "^1.0.0" 1521 | }, 1522 | "conflict": { 1523 | "composer/installers": "<1.0.24 || >1.0.24" 1524 | }, 1525 | "replace": { 1526 | "lw/typo3cms-installers": "*", 1527 | "netresearch/composer-installers": "*" 1528 | }, 1529 | "require-dev": { 1530 | "composer/composer": "1.*" 1531 | }, 1532 | "type": "composer-plugin", 1533 | "extra": { 1534 | "class": "TYPO3\\CMS\\Composer\\Installer\\Plugin", 1535 | "branch-alias": { 1536 | "dev-master": "1.3.x-dev" 1537 | } 1538 | }, 1539 | "autoload": { 1540 | "psr-4": { 1541 | "TYPO3\\CMS\\Composer\\": "src/" 1542 | } 1543 | }, 1544 | "notification-url": "https://packagist.org/downloads/", 1545 | "license": [ 1546 | "GPL-2.0+" 1547 | ], 1548 | "authors": [ 1549 | { 1550 | "name": "Christian Opitz", 1551 | "email": "christian.opitz@netresearch.de" 1552 | }, 1553 | { 1554 | "name": "Lars Peipmann", 1555 | "email": "lars@peipmann.de" 1556 | }, 1557 | { 1558 | "name": "Helmut Hummel", 1559 | "email": "info@helhum.io" 1560 | } 1561 | ], 1562 | "description": "TYPO3 CMS Installers", 1563 | "homepage": "https://github.com/TYPO3/CmsComposerInstallers", 1564 | "keywords": [ 1565 | "cms", 1566 | "core", 1567 | "extension", 1568 | "installer", 1569 | "typo3" 1570 | ], 1571 | "time": "2016-07-05T09:38:42+00:00" 1572 | }, 1573 | { 1574 | "name": "typo3fluid/fluid", 1575 | "version": "2.2.0", 1576 | "source": { 1577 | "type": "git", 1578 | "url": "https://github.com/TYPO3/Fluid.git", 1579 | "reference": "48e434663ec3844bd8f8f91f8fa33587b1a643e2" 1580 | }, 1581 | "dist": { 1582 | "type": "zip", 1583 | "url": "https://api.github.com/repos/TYPO3/Fluid/zipball/48e434663ec3844bd8f8f91f8fa33587b1a643e2", 1584 | "reference": "48e434663ec3844bd8f8f91f8fa33587b1a643e2", 1585 | "shasum": "" 1586 | }, 1587 | "require": { 1588 | "php": ">=5.5.0" 1589 | }, 1590 | "require-dev": { 1591 | "mikey179/vfsstream": "^1.6", 1592 | "phpunit/phpunit": "^4.8", 1593 | "satooshi/php-coveralls": "^1.0", 1594 | "squizlabs/php_codesniffer": "^2.7" 1595 | }, 1596 | "bin": [ 1597 | "bin/fluid" 1598 | ], 1599 | "type": "library", 1600 | "autoload": { 1601 | "psr-4": { 1602 | "TYPO3Fluid\\Fluid\\": "src/" 1603 | } 1604 | }, 1605 | "notification-url": "https://packagist.org/downloads/", 1606 | "license": [ 1607 | "LGPL-3.0" 1608 | ], 1609 | "description": "The TYPO3 Fluid template rendering engine", 1610 | "time": "2017-01-18T15:34:20+00:00" 1611 | } 1612 | ], 1613 | "packages-dev": [], 1614 | "aliases": [], 1615 | "minimum-stability": "stable", 1616 | "stability-flags": [], 1617 | "prefer-stable": false, 1618 | "prefer-lowest": false, 1619 | "platform": [], 1620 | "platform-dev": [] 1621 | } 1622 | --------------------------------------------------------------------------------