├── .gitignore
├── .scrutinizer.yml
├── .travis.yml
├── CacheWarmer
└── AspectCacheWarmer.php
├── Command
├── CacheWarmupCommand.php
├── DebugAdvisorCommand.php
└── DebugAspectCommand.php
├── DependencyInjection
├── Compiler
│ └── AspectCollectorPass.php
├── Configuration.php
└── GoAopExtension.php
├── GoAopBundle.php
├── Kernel
└── AspectSymfonyKernel.php
├── README.md
├── Resources
├── config
│ ├── commands.xml
│ ├── schema
│ │ └── configuration-1.0.0.xsd
│ └── services.xml
└── meta
│ └── LICENSE
├── Tests
├── CacheWarmer
│ └── AspectCacheWarmerTest.php
├── Command
│ ├── CacheWarmupCommandTest.php
│ ├── DebugAdvisorCommandTest.php
│ └── DebugAspectCommandTest.php
├── DependencyInjection
│ ├── Compiler
│ │ └── AspectCollectorPassTest.php
│ ├── ConfigurationTest.php
│ └── GoAopExtensionTest.php
├── Fixtures
│ ├── config
│ │ ├── empty.xml
│ │ ├── full.xml
│ │ └── full.yml
│ ├── mock
│ │ ├── AopComposerLoader.php
│ │ └── DebugClassLoader.php
│ └── project
│ │ ├── app
│ │ ├── AppKernel.php
│ │ └── config
│ │ │ └── config.yml
│ │ ├── bin
│ │ └── console
│ │ ├── src
│ │ ├── Annotation
│ │ │ └── Loggable.php
│ │ ├── Application
│ │ │ └── Main.php
│ │ └── Aspect
│ │ │ └── LoggingAspect.php
│ │ └── var
│ │ ├── cache
│ │ └── .gitkeep
│ │ └── logs
│ │ └── .gitkeep
├── GoAopBundleTest.php
└── Kernel
│ └── AspectSymfonyKernelTest.php
├── composer.json
├── composer.lock
└── phpunit.xml
/.gitignore:
--------------------------------------------------------------------------------
1 | /vendor/
2 | /build/
3 | /Tests/Fixtures/project/var/cache/*
4 | /Tests/Fixtures/project/var/logs/*
5 |
--------------------------------------------------------------------------------
/.scrutinizer.yml:
--------------------------------------------------------------------------------
1 | filter:
2 | excluded_paths: [vendor/*, Tests/*, bin/*, Resources/]
3 | checks:
4 | php: true
5 | tools:
6 | external_code_coverage:
7 | timeout: 600
8 | php_sim: true
9 | php_mess_detector: true
10 | php_cs_fixer: true
11 | php_analyzer: true
12 | php_code_sniffer: true
13 | sensiolabs_security_checker: true
14 | php_loc:
15 | enabled: true
16 | excluded_dirs: [vendor]
17 | php_pdepend:
18 | enabled: true
19 | excluded_dirs: [vendor, Tests, bin]
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: php
2 |
3 | php:
4 | - 5.6
5 | - 7.0
6 | - 7.1
7 |
8 | sudo: false
9 |
10 | env:
11 | - SYMFONY_VERSION=v3
12 | - SYMFONY_VERSION=v4
13 |
14 | matrix:
15 | exclude:
16 | - php: 5.6
17 | env: SYMFONY_VERSION=v4
18 | - php: 7.0
19 | env: SYMFONY_VERSION=v4
20 |
21 | cache:
22 | directories:
23 | - $HOME/.composer/cache/files
24 |
25 | before_install:
26 | - composer self-update
27 |
28 | install:
29 | - if [ "$SYMFONY_VERSION" != "" ]; then composer require "dunglas/symfony-lock:${SYMFONY_VERSION}" --no-update; fi;
30 | - composer update --prefer-source
31 |
32 | script: vendor/bin/phpunit --coverage-clover=coverage.clover
--------------------------------------------------------------------------------
/CacheWarmer/AspectCacheWarmer.php:
--------------------------------------------------------------------------------
1 |
6 | *
7 | * This source file is subject to the license that is bundled
8 | * with this source code in the file LICENSE.
9 | */
10 |
11 | namespace Go\Symfony\GoAopBundle\CacheWarmer;
12 |
13 |
14 | use Go\Core\AspectKernel;
15 | use Go\Instrument\ClassLoading\CachePathManager;
16 | use Go\Instrument\ClassLoading\SourceTransformingLoader;
17 | use Go\Instrument\FileSystem\Enumerator;
18 | use Go\Instrument\Transformer\FilterInjectorTransformer;
19 | use Symfony\Component\HttpKernel\CacheWarmer\CacheWarmer;
20 |
21 | /**
22 | * Warming the cache with injected advices
23 | *
24 | * NB: in some cases hierarchy analysis can trigger "Fatal Error: class XXX not found". This is means, that there is
25 | * some class with unresolved parent classes. To avoid this issue, just exclude bad classes from analysis via
26 | * 'excludePaths' configuration option.
27 | */
28 | class AspectCacheWarmer extends CacheWarmer
29 | {
30 | /**
31 | * Instance of aspect kernel
32 | *
33 | * @var AspectKernel
34 | */
35 | private $aspectKernel;
36 |
37 | /**
38 | * @var CachePathManager
39 | */
40 | private $cachePathManager;
41 |
42 | /**
43 | * @param AspectKernel $aspectKernel
44 | * @param CachePathManager $cachePathManager
45 | */
46 | public function __construct(AspectKernel $aspectKernel, CachePathManager $cachePathManager)
47 | {
48 | $this->aspectKernel = $aspectKernel;
49 | $this->cachePathManager = $cachePathManager;
50 | }
51 |
52 | /**
53 | * Checks whether this warmer is optional or not.
54 | *
55 | * Optional warmers can be ignored on certain conditions.
56 | *
57 | * A warmer should return true if the cache can be
58 | * generated incrementally and on-demand.
59 | *
60 | * @return bool true if the warmer is optional, false otherwise
61 | */
62 | public function isOptional()
63 | {
64 | return false;
65 | }
66 |
67 | /**
68 | * Warms up the cache.
69 | *
70 | * @param string $cacheDir The cache directory
71 | */
72 | public function warmUp($cacheDir)
73 | {
74 | $options = $this->aspectKernel->getOptions();
75 | $oldCacheDir = $this->cachePathManager->getCacheDir();
76 |
77 | $this->cachePathManager->setCacheDir($cacheDir.'/aspect');
78 |
79 | $enumerator = new Enumerator($options['appDir'], $options['includePaths'], $options['excludePaths']);
80 | $iterator = $enumerator->enumerate();
81 |
82 | set_error_handler(function ($errno, $errstr, $errfile, $errline) {
83 | throw new \ErrorException($errstr, $errno, 0, $errfile, $errline);
84 | });
85 |
86 | foreach ($iterator as $file) {
87 | $realPath = $file->getRealPath();
88 | try {
89 | // This will trigger creation of cache
90 | file_get_contents(
91 | FilterInjectorTransformer::PHP_FILTER_READ.
92 | SourceTransformingLoader::FILTER_IDENTIFIER.
93 | "/resource=" . $realPath
94 | );
95 | } catch (\Exception $e) {
96 | /* noop */
97 | }
98 | }
99 |
100 | restore_error_handler();
101 | $this->cachePathManager->flushCacheState();
102 | $this->cachePathManager->setCacheDir($oldCacheDir);
103 | }
104 | }
105 |
--------------------------------------------------------------------------------
/Command/CacheWarmupCommand.php:
--------------------------------------------------------------------------------
1 |
6 | *
7 | * This source file is subject to the license that is bundled
8 | * with this source code in the file LICENSE.
9 | */
10 |
11 | namespace Go\Symfony\GoAopBundle\Command;
12 |
13 | use Go\Core\AspectKernel;
14 | use Symfony\Component\Console\Input\InputInterface;
15 | use Symfony\Component\Console\Output\OutputInterface;
16 | use Go\Console\Command\CacheWarmupCommand as BaseCommand;
17 |
18 | /**
19 | * Console command for warming the cache
20 | *
21 | * @codeCoverageIgnore
22 | */
23 | class CacheWarmupCommand extends BaseCommand
24 | {
25 | public function __construct(AspectKernel $aspectKernel)
26 | {
27 | parent::__construct(null);
28 | $this->aspectKernel = $aspectKernel;
29 | }
30 |
31 | /**
32 | * {@inheritdoc}
33 | */
34 | protected function configure()
35 | {
36 | parent::configure();
37 | $arguments = $this->getDefinition()->getArguments();
38 | unset($arguments['loader']);
39 | $this->getDefinition()->setArguments($arguments);
40 | }
41 |
42 | /**
43 | * {@inheritdoc}
44 | */
45 | protected function loadAspectKernel(InputInterface $input, OutputInterface $output)
46 | {
47 | /* noop */
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/Command/DebugAdvisorCommand.php:
--------------------------------------------------------------------------------
1 |
6 | *
7 | * This source file is subject to the license that is bundled
8 | * with this source code in the file LICENSE.
9 | */
10 |
11 | namespace Go\Symfony\GoAopBundle\Command;
12 |
13 | use Go\Core\AspectKernel;
14 | use Symfony\Component\Console\Input\InputInterface;
15 | use Symfony\Component\Console\Output\OutputInterface;
16 | use Go\Console\Command\DebugAdvisorCommand as BaseCommand;
17 |
18 | /**
19 | * Console command to debug an advisors
20 | *
21 | * @codeCoverageIgnore
22 | */
23 | class DebugAdvisorCommand extends BaseCommand
24 | {
25 | public function __construct(AspectKernel $aspectKernel)
26 | {
27 | parent::__construct(null);
28 | $this->aspectKernel = $aspectKernel;
29 | }
30 |
31 | /**
32 | * {@inheritdoc}
33 | */
34 | protected function configure()
35 | {
36 | parent::configure();
37 | $arguments = $this->getDefinition()->getArguments();
38 | unset($arguments['loader']);
39 | $this->getDefinition()->setArguments($arguments);
40 | }
41 |
42 | /**
43 | * {@inheritdoc}
44 | */
45 | protected function loadAspectKernel(InputInterface $input, OutputInterface $output)
46 | {
47 | /* noop */
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/Command/DebugAspectCommand.php:
--------------------------------------------------------------------------------
1 |
6 | *
7 | * This source file is subject to the license that is bundled
8 | * with this source code in the file LICENSE.
9 | */
10 |
11 | namespace Go\Symfony\GoAopBundle\Command;
12 |
13 | use Go\Core\AspectKernel;
14 | use Symfony\Component\Console\Input\InputInterface;
15 | use Symfony\Component\Console\Output\OutputInterface;
16 | use Go\Console\Command\DebugAspectCommand as BaseCommand;
17 |
18 | /**
19 | * Class DebugAspectCommand
20 | *
21 | * Console command for querying an information about aspects
22 | *
23 | * @codeCoverageIgnore
24 | */
25 | class DebugAspectCommand extends BaseCommand
26 | {
27 | public function __construct(AspectKernel $aspectKernel)
28 | {
29 | parent::__construct(null);
30 | $this->aspectKernel = $aspectKernel;
31 | }
32 |
33 | /**
34 | * {@inheritdoc}
35 | */
36 | protected function configure()
37 | {
38 | parent::configure();
39 | $arguments = $this->getDefinition()->getArguments();
40 | unset($arguments['loader']);
41 | $this->getDefinition()->setArguments($arguments);
42 | }
43 |
44 | /**
45 | * {@inheritdoc}
46 | */
47 | protected function loadAspectKernel(InputInterface $input, OutputInterface $output)
48 | {
49 | /* noop */
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/DependencyInjection/Compiler/AspectCollectorPass.php:
--------------------------------------------------------------------------------
1 |
6 | *
7 | * This source file is subject to the license that is bundled
8 | * with this source code in the file LICENSE.
9 | */
10 |
11 | namespace Go\Symfony\GoAopBundle\DependencyInjection\Compiler;
12 |
13 | use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
14 | use Symfony\Component\DependencyInjection\ContainerBuilder;
15 | use Symfony\Component\DependencyInjection\Reference;
16 |
17 | /**
18 | * Collects all aspects into the one single parameter
19 | */
20 | class AspectCollectorPass implements CompilerPassInterface
21 | {
22 | /**
23 | * {@inheritdoc}
24 | */
25 | public function process(ContainerBuilder $container)
26 | {
27 | if (!$container->hasDefinition('goaop.aspect.container')) {
28 | return;
29 | }
30 |
31 | $aspectIds = $container->findTaggedServiceIds('goaop.aspect');
32 | $aspectContainer = $container->getDefinition('goaop.aspect.container');
33 | foreach ($aspectIds as $aspectId => $aspectTags) {
34 | $aspectContainer->addMethodCall('registerAspect', array(new Reference($aspectId)));
35 | }
36 | }
37 | }
--------------------------------------------------------------------------------
/DependencyInjection/Configuration.php:
--------------------------------------------------------------------------------
1 |
6 | *
7 | * This source file is subject to the license that is bundled
8 | * with this source code in the file LICENSE.
9 | */
10 |
11 | namespace Go\Symfony\GoAopBundle\DependencyInjection;
12 |
13 |
14 | use Go\Aop\Features;
15 | use Go\Symfony\GoAopBundle\Kernel\AspectSymfonyKernel;
16 | use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
17 | use Symfony\Component\Config\Definition\Builder\TreeBuilder;
18 | use Symfony\Component\Config\Definition\ConfigurationInterface;
19 | use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException;
20 | use Symfony\Component\HttpKernel\Kernel;
21 |
22 | class Configuration implements ConfigurationInterface
23 | {
24 | const CONFIGURATION_ROOT_NODE = 'go_aop';
25 |
26 | /**
27 | * Generates the configuration tree builder.
28 | *
29 | * @return \Symfony\Component\Config\Definition\Builder\TreeBuilder The tree builder
30 | */
31 | public function getConfigTreeBuilder()
32 | {
33 | $treeBuilder = new TreeBuilder(self::CONFIGURATION_ROOT_NODE);
34 | $rootNode = $this->getRootNode($treeBuilder);
35 | $features = (new \ReflectionClass('Go\Aop\Features'))->getConstants();
36 |
37 | $rootNode
38 | ->children()
39 | ->booleanNode('cache_warmer')->defaultTrue()->end()
40 | ->booleanNode('doctrine_support')->defaultFalse()->end()
41 | ->arrayNode('options')
42 | ->addDefaultsIfNotSet()
43 | ->fixXmlConfig('feature', 'features')
44 | ->fixXmlConfig('include_path', 'include_paths')
45 | ->fixXmlConfig('exclude_path', 'exclude_paths')
46 | ->children()
47 | ->scalarNode('features')
48 | ->beforeNormalization()
49 | ->ifArray()
50 | ->then(function ($v) use ($features) {
51 | $featureMask = 0;
52 | foreach ($v as $featureName) {
53 | $featureName = strtoupper($featureName);
54 | if (!isset($features[$featureName])) {
55 | throw new InvalidConfigurationException("Uknown feature: {$featureName}");
56 | }
57 | $featureMask |= $features[$featureName];
58 | }
59 |
60 | return $featureMask;
61 | })
62 | ->end()
63 | ->defaultValue(0)
64 | ->end()
65 | ->scalarNode('app_dir')->defaultValue('%kernel.root_dir%/../src')->end()
66 | ->scalarNode('cache_dir')->defaultValue('%kernel.cache_dir%/aspect')->end()
67 | ->scalarNode('cache_file_mode')->end()
68 | ->booleanNode('debug')->defaultValue('%kernel.debug%')->end()
69 | ->scalarNode('container_class')->end()
70 | ->arrayNode('include_paths')
71 | ->prototype('scalar')->end()
72 | ->end()
73 | ->arrayNode('exclude_paths')
74 | ->prototype('scalar')->end()
75 | ->end()
76 | ->end()
77 | ->end()
78 | ->end()
79 | ;
80 |
81 | return $treeBuilder;
82 | }
83 |
84 | /**
85 | * @param TreeBuilder $treeBuilder
86 | *
87 | * @return ArrayNodeDefinition
88 | */
89 | private function getRootNode(TreeBuilder $treeBuilder)
90 | {
91 | if (Kernel::VERSION_ID >= 40200) {
92 | return $treeBuilder->getRootNode();
93 | }
94 |
95 | return $treeBuilder->root(self::CONFIGURATION_ROOT_NODE);
96 | }
97 | }
98 |
--------------------------------------------------------------------------------
/DependencyInjection/GoAopExtension.php:
--------------------------------------------------------------------------------
1 |
6 | *
7 | * This source file is subject to the license that is bundled
8 | * with this source code in the file LICENSE.
9 | */
10 |
11 | namespace Go\Symfony\GoAopBundle\DependencyInjection;
12 |
13 |
14 | use Go\Aop\Aspect;
15 | use Symfony\Component\Config\FileLocator;
16 | use Symfony\Component\DependencyInjection\ContainerBuilder;
17 | use Symfony\Component\HttpKernel\DependencyInjection\Extension;
18 | use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
19 |
20 | class GoAopExtension extends Extension
21 | {
22 | /**
23 | * {@inheritdoc}
24 | */
25 | public function getNamespace()
26 | {
27 | return 'http://go.aopphp.com/xsd-schema/go-aop-bundle';
28 | }
29 |
30 | /**
31 | * {@inheritdoc}
32 | */
33 | public function getXsdValidationBasePath()
34 | {
35 | return __DIR__ . '/../Resources/config/schema';
36 | }
37 |
38 | /**
39 | * Loads a specific configuration.
40 | *
41 | * @param array $config An array of configuration values
42 | * @param ContainerBuilder $container A ContainerBuilder instance
43 | *
44 | * @throws \InvalidArgumentException When provided tag is not defined in this extension
45 | *
46 | * @api
47 | */
48 | public function load(array $config, ContainerBuilder $container)
49 | {
50 | $loader = new XmlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
51 | $loader->load('services.xml');
52 | $loader->load('commands.xml');
53 |
54 | $configurator = new Configuration();
55 | $config = $this->processConfiguration($configurator, $config);
56 |
57 | $normalizedOptions = array();
58 | foreach ($config['options'] as $optionKey => $value) {
59 | // this will convert 'under_scores' into 'underScores'
60 | $optionKey = lcfirst(str_replace(' ', '', ucwords(str_replace('_', ' ', $optionKey))));
61 | $normalizedOptions[$optionKey] = $value;
62 | }
63 | $container->setParameter('goaop.options', $normalizedOptions);
64 |
65 | if ($config['cache_warmer']) {
66 | $definition = $container->getDefinition('goaop.cache.warmer');
67 | $definition->addTag('kernel.cache_warmer');
68 | }
69 |
70 | if ($config['doctrine_support']) {
71 | $container
72 | ->getDefinition('goaop.bridge.doctrine.metadata_load_interceptor')
73 | ->addTag('doctrine.event_subscriber');
74 | }
75 |
76 | // Service autoconfiguration is available in Symfony 3.3+
77 | if (method_exists($container, 'registerForAutoconfiguration')) {
78 | $container
79 | ->registerForAutoconfiguration(Aspect::class)
80 | ->addTag('goaop.aspect');
81 | }
82 | }
83 | }
84 |
--------------------------------------------------------------------------------
/GoAopBundle.php:
--------------------------------------------------------------------------------
1 |
6 | *
7 | * This source file is subject to the license that is bundled
8 | * with this source code in the file LICENSE.
9 | */
10 |
11 | namespace Go\Symfony\GoAopBundle;
12 |
13 |
14 | use Go\Instrument\ClassLoading\AopComposerLoader;
15 | use Go\Symfony\GoAopBundle\DependencyInjection\Compiler\AspectCollectorPass;
16 | use Symfony\Component\Debug\DebugClassLoader;
17 | use Symfony\Component\DependencyInjection\ContainerBuilder;
18 | use Symfony\Component\HttpKernel\Bundle\Bundle;
19 |
20 | class GoAopBundle extends Bundle
21 | {
22 | /**
23 | * {@inheritdoc}
24 | */
25 | public function build(ContainerBuilder $container)
26 | {
27 | $bundles = $container->getParameter('kernel.bundles');
28 | $firstBundle = key($bundles);
29 | if ($firstBundle !== $this->name) {
30 | $message = "Please move the {$this->name} initialization to the top in your Kernel->init()";
31 | throw new \InvalidArgumentException($message);
32 | }
33 |
34 | $container->addCompilerPass(new AspectCollectorPass());
35 | }
36 |
37 | /**
38 | * {@inheritdoc}
39 | */
40 | public function boot()
41 | {
42 | // it is a quick way to check if loader was enabled
43 | $wasDebugEnabled = class_exists(DebugClassLoader::class, false);
44 | if ($wasDebugEnabled) {
45 | // disable temporary to apply AOP loader first
46 | DebugClassLoader::disable();
47 | }
48 | $this->container->get('goaop.aspect.container');
49 | if (!AopComposerLoader::wasInitialized()) {
50 | throw new \RuntimeException("Initialization of AOP loader was failed, probably due to Debug::enable()");
51 | }
52 | if ($wasDebugEnabled) {
53 | DebugClassLoader::enable();
54 | }
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/Kernel/AspectSymfonyKernel.php:
--------------------------------------------------------------------------------
1 |
6 | *
7 | * This source file is subject to the license that is bundled
8 | * with this source code in the file LICENSE.
9 | */
10 |
11 | namespace Go\Symfony\GoAopBundle\Kernel;
12 |
13 | use Go\Core\AspectContainer;
14 | use Go\Core\AspectKernel;
15 | use Go\Instrument\ClassLoading\AopComposerLoader;
16 | use Symfony\Component\Debug\DebugClassLoader;
17 |
18 | class AspectSymfonyKernel extends AspectKernel
19 | {
20 | /**
21 | * Configure an AspectContainer with advisors, aspects and pointcuts
22 | *
23 | * @param AspectContainer $container
24 | *
25 | * @return void
26 | */
27 | protected function configureAop(AspectContainer $container)
28 | {
29 | /* noop */
30 | }
31 |
32 | /**
33 | * Cache warmer in SF doesn't call Bundle::boot, so we need to duplicate this logic one more time
34 | *
35 | * @inheritDoc
36 | */
37 | public function init(array $options = [])
38 | {
39 | // it is a quick way to check if loader was enabled
40 | $wasDebugEnabled = class_exists(DebugClassLoader::class, false);
41 | if ($wasDebugEnabled) {
42 | // disable temporary to apply AOP loader first
43 | DebugClassLoader::disable();
44 | }
45 | parent::init($options);
46 |
47 | if (!AopComposerLoader::wasInitialized()) {
48 | throw new \RuntimeException("Initialization of AOP loader was failed, probably due to Debug::enable()");
49 | }
50 | if ($wasDebugEnabled) {
51 | DebugClassLoader::enable();
52 | }
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | GoAopBundle
2 | ==============
3 |
4 | [](https://scrutinizer-ci.com/g/goaop/goaop-symfony-bundle/?branch=master)
5 | [](https://travis-ci.org/goaop/goaop-symfony-bundle.svg?branch=master)
6 | [](https://github.com/goaop/goaop-symfony-bundle/releases/latest)
7 | [](https://php.net/)
8 | [](https://packagist.org/packages/goaop/goaop-symfony-bundle)
9 |
10 | The GoAopBundle adds support for Aspect-Oriented Programming via Go! AOP Framework for Symfony2 applications.
11 | **Symfony 3.4 and upper versions are not supported!** Global rewrite of bundle is required to make it working for newer versions of Symfony.
12 |
13 | Overview
14 | --------
15 |
16 | Aspect-Oriented Paradigm allows to extend the standard Object-Oriented Paradigm with special instruments for effective solving of cross-cutting concerns in your application. This code is typically present everywhere in your application (for example, logging, caching, monitoring, etc) and there is no easy way to fix this without AOP.
17 |
18 | AOP defines new instruments for developers, they are:
19 |
20 | * Joinpoint - place in your code that can be used for interception, for example, execution of single public method or accessing of single object property.
21 | * Pointcut is a list of joinpoints defined with a special regexp-like expression for your source code, for example, all public and protected methods in the concrete class or namespace.
22 | * Advice is an additional callback that will be called before, after or around concrete joinpoint. For PHP each advice is represented as a `\Closure` instance, wrapped into the interceptor object.
23 | * Aspect is a special class that combines pointcuts and advices together, each pointcut is defined as an annotation and each advice is a method inside this aspect.
24 |
25 | You can read more about AOP in different sources, there are good articles for Java language and they can be applied for PHP too, because it's general paradigm.
26 |
27 | Installation
28 | ------------
29 |
30 | GoAopBundle can be easily installed with composer. Just ask a composer to download the bundle with dependencies by running the command:
31 |
32 | ```bash
33 | $ composer require goaop/goaop-symfony-bundle
34 | ```
35 |
36 | Versions 1.x are for Symfony >=2.0,<2.7
37 | Versions 2.x(master) are for Symfony >= 2.7 and 3.x
38 |
39 | Then enable the bundle in the kernel:
40 | ```php
41 | // app/AppKernel.php
42 |
43 | public function registerBundles()
44 | {
45 | $bundles = array(
46 | new Go\Symfony\GoAopBundle\GoAopBundle(),
47 | // ...
48 | );
49 | }
50 | ```
51 | Make sure that bundle is the first item in this list. This is required for the AOP engine to work correctly.
52 |
53 | Configuration
54 | -------------
55 |
56 | Configuration for bundle is required for additional tuning of AOP kernel and source code whitelistsing/blacklisting.
57 |
58 | ```yaml
59 | # app/config/config.yml
60 | go_aop:
61 | # This setting enables or disables an automatic AOP cache warming in the application.
62 | # By default, cache_warmer is enabled (true), disable it only if you have serious issues with
63 | # cache warming process.
64 | cache_warmer: true
65 |
66 | # This setting enables or disables workaround for weaving of Doctrine ORM entities. By default,
67 | # it is disabled. If you are using Doctrine ORM and you are using AOP to weave Doctrine entities,
68 | # enable this feature. For details about this known issue, see https://github.com/goaop/framework/issues/327
69 | doctrine_support: false
70 |
71 | # Additional settings for the Go! AOP kernel initialization
72 | options:
73 | # Debug mode for the AOP, enable it for debugging and switch off for production mode to have a
74 | # better runtime performance for your application
75 | debug: %kernel.debug%
76 |
77 | # Application root directory, AOP will be applied ONLY to the files in this directory, by default it's
78 | # src/ directory of your application.
79 | app_dir: "%kernel.root_dir%/../src"
80 |
81 | # AOP cache directory where all transformed files will be stored.
82 | cache_dir: %kernel.cache_dir%/aspect
83 |
84 | # Whitelist is array of directories where AOP should be enabled, leave it empty to process all files
85 | include_paths: []
86 |
87 | # Exclude list is array of directories where AOP should NOT be enabled, leave it empty to process all files
88 | exclude_paths: []
89 |
90 | # AOP container class name can be used for extending AOP engine or services adjustment
91 | container_class: ~
92 |
93 | # List of enabled features for AOP kernel, this allows to enable function interception, support for
94 | # read-only file systems, etc. Each item should be a name of constant from the `Go\Aop\Features` class.
95 | features: []
96 |
97 | ```
98 |
99 | XML format is supported for configuration of this bundle as well, for XML format please use provided
100 | [XML schema file](Resources/config/schema/configuration-1.0.0.xsd).
101 |
102 | Defining new aspects
103 | --------------------
104 |
105 | Aspects are services in the Symfony2 apllications and loaded into the AOP container with the help of compiler pass that collects all services tagged with `goaop.aspect` tag. Here is an example how to implement a logging aspect that will log information about public method invocations in the src/ directory.
106 |
107 |
108 | Definition of aspect class with pointuct and logging advice
109 | ```php
110 | logger = $logger;
132 | }
133 |
134 | /**
135 | * Writes a log info before method execution
136 | *
137 | * @param MethodInvocation $invocation
138 | * @Before("execution(public **->*(*))")
139 | */
140 | public function beforeMethod(MethodInvocation $invocation)
141 | {
142 | $this->logger->info($invocation, $invocation->getArguments());
143 | }
144 | }
145 | ```
146 |
147 | Registration of aspect in the container:
148 |
149 | ```yaml
150 | services:
151 | logging.aspect:
152 | class: App\Aspect\LoggingAspect
153 | arguments: ["@logger"]
154 | tags:
155 | - { name: goaop.aspect }
156 | ```
157 |
158 | If you're using Symfony 3.3+ with autowired and autoconfigured services, your aspects will be
159 | registered automatically.
160 |
161 | Known issues and workarounds
162 | ----------------------------
163 |
164 | - By default, it is not possible to weave Doctrine ORM entities without additional configuration
165 | (see [https://github.com/goaop/framework/issues/327](https://github.com/goaop/framework/issues/327)).
166 | However, this bundle delivers workaround that can be easily enabled in configuration (see section
167 | about configuration in text above). Workaround is disabled by default in order to save some performances.
168 | - It is possible to get into circular reference issue when registering an aspect which has dependency on
169 | service that uses weaved class, or depends on service that has weaved class. Currently, detection of
170 | such scenario is not implemented, however, there are two workarounds:
171 | - Instead of injecting weaved service in aspect, you can inject either service container or service
172 | locator (see [https://symfony.com/doc/master/service_container/service_locators.html](https://symfony.com/doc/master/service_container/service_locators.html)).
173 | - Instead of injecting weaved service in aspect, you can define weaved service as "lazy" that will
174 | inject its lazy loading proxy (see [https://symfony.com/doc/current/service_container/lazy_services.html](https://symfony.com/doc/current/service_container/lazy_services.html)).
175 |
176 |
177 |
178 | License
179 | -------
180 |
181 | This bundle is under the MIT license. See the complete license in the bundle:
182 |
183 | Resources/meta/LICENSE
184 |
--------------------------------------------------------------------------------
/Resources/config/commands.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Resources/config/schema/configuration-1.0.0.xsd:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/Resources/config/services.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | %goaop.options%
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | aspect.cache.path.manager
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/Resources/meta/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2016 Lisachenko Alexander
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
20 |
--------------------------------------------------------------------------------
/Tests/CacheWarmer/AspectCacheWarmerTest.php:
--------------------------------------------------------------------------------
1 |
6 | *
7 | * This source file is subject to the license that is bundled
8 | * with this source code in the file LICENSE.
9 | */
10 |
11 | namespace Go\Symfony\GoAopBundle\Tests\CacheWarmer;
12 |
13 | use Go\Aop\Proxy;
14 | use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
15 | use Symfony\Component\Filesystem\Filesystem;
16 | use Go\Symfony\GoAopBundle\Tests\TestProject\Application\Main;
17 |
18 | /**
19 | * Class AspectCacheWarmerTest
20 | */
21 | class AspectCacheWarmerTest extends WebTestCase
22 | {
23 | protected $cacheDir = __DIR__.'/../Fixtures/project/var/cache/test';
24 |
25 | public function setUp()
26 | {
27 | $filesystem = new Filesystem();
28 |
29 | if ($filesystem->exists($this->cacheDir)) {
30 | $filesystem->remove($this->cacheDir);
31 | }
32 | }
33 |
34 | /**
35 | * @test
36 | * @runInSeparateProcess
37 | */
38 | public function itWarmsUpCache()
39 | {
40 | $this->assertFalse(file_exists($this->cacheDir));
41 |
42 | self::bootKernel();
43 |
44 | $this->assertTrue(file_exists($this->cacheDir.'/aspect/_proxies/Application/Main.php'));
45 | $this->assertTrue(file_exists($this->cacheDir.'/aspect/Application/Main.php'));
46 |
47 | $reflection = new \ReflectionClass(Main::class);
48 | $this->assertTrue($reflection->implementsInterface(Proxy::class));
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/Tests/Command/CacheWarmupCommandTest.php:
--------------------------------------------------------------------------------
1 |
6 | *
7 | * This source file is subject to the license that is bundled
8 | * with this source code in the file LICENSE.
9 | */
10 |
11 | namespace Go\Symfony\GoAopBundle\Tests\Command;
12 |
13 | use PHPUnit\Framework\TestCase;
14 | use Symfony\Component\Filesystem\Filesystem;
15 | use Symfony\Component\Process\Process;
16 |
17 | /**
18 | * Class CacheWarmupCommandTest
19 | */
20 | class CacheWarmupCommandTest extends TestCase
21 | {
22 | protected $aspectCacheDir = __DIR__.'/../Fixtures/project/var/cache/test/aspect';
23 |
24 | public function setUp()
25 | {
26 | $filesystem = new Filesystem();
27 |
28 | if ($filesystem->exists($this->aspectCacheDir)) {
29 | $filesystem->remove($this->aspectCacheDir);
30 | }
31 | }
32 |
33 | /**
34 | * @test
35 | * @runInSeparateProcess
36 | */
37 | public function itWarmsUpCache()
38 | {
39 | $this->assertFalse(file_exists($this->aspectCacheDir));
40 |
41 | $process = new Process(sprintf('php %s cache:warmup:aop', realpath(__DIR__.'/../Fixtures/project/bin/console')));
42 | $process->run();
43 |
44 | $this->assertTrue($process->isSuccessful(), 'Unable to execute "cache:warmup:aop" command.');
45 |
46 | $this->assertTrue(file_exists($this->aspectCacheDir.'/_proxies/Application/Main.php'));
47 | $this->assertTrue(file_exists($this->aspectCacheDir.'/Application/Main.php'));
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/Tests/Command/DebugAdvisorCommandTest.php:
--------------------------------------------------------------------------------
1 |
6 | *
7 | * This source file is subject to the license that is bundled
8 | * with this source code in the file LICENSE.
9 | */
10 |
11 | namespace Go\Symfony\GoAopBundle\Tests\Command;
12 |
13 | use PHPUnit\Framework\TestCase;
14 | use Symfony\Component\Process\Process;
15 |
16 | class DebugAdvisorCommandTest extends TestCase
17 | {
18 | public function setUp()
19 | {
20 | $process = new Process(sprintf('php %s cache:warmup:aop', realpath(__DIR__.'/../Fixtures/project/bin/console')));
21 | $process->run();
22 |
23 | $this->assertTrue($process->isSuccessful(), 'Unable to execute "cache:warmup:aop" command.');
24 | }
25 |
26 | /**
27 | * @test
28 | * @runInSeparateProcess
29 | */
30 | public function itDisplaysAdvisorsDebugInfo()
31 | {
32 | $process = new Process(sprintf('php %s debug:advisor', realpath(__DIR__.'/../Fixtures/project/bin/console')));
33 | $process->run();
34 |
35 | $this->assertTrue($process->isSuccessful(), 'Unable to execute "debug:advisor" command.');
36 |
37 | $output = $process->getOutput();
38 |
39 | $expected = [
40 | 'List of registered advisors in the container',
41 | 'Go\Symfony\GoAopBundle\Tests\TestProject\Aspect\LoggingAspect->beforeMethod',
42 | '@execution(Go\Symfony\GoAopBundle\Tests\TestProject\Annotation\Loggable)',
43 | ];
44 |
45 | foreach ($expected as $string) {
46 | $this->assertContains($string, $output);
47 | }
48 | }
49 |
50 | /**
51 | * @test
52 | * @runInSeparateProcess
53 | */
54 | public function itDisplaysStatedAdvisorDebugInfo()
55 | {
56 | $process = new Process(sprintf('php %s debug:advisor --advisor="Go\Symfony\GoAopBundle\Tests\TestProject\Aspect\LoggingAspect->beforeMethod"', realpath(__DIR__.'/../Fixtures/project/bin/console')));
57 | $process->run();
58 |
59 | $this->assertTrue($process->isSuccessful(), 'Unable to execute "debug:advisor" command.');
60 |
61 | $output = $process->getOutput();
62 |
63 | $expected = [
64 | 'Total 3 files to analyze.',
65 | '-> matching method Go\Symfony\GoAopBundle\Tests\TestProject\Application\Main->doSomething',
66 | ];
67 |
68 | foreach ($expected as $string) {
69 | $this->assertContains($string, $output);
70 | }
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/Tests/Command/DebugAspectCommandTest.php:
--------------------------------------------------------------------------------
1 |
6 | *
7 | * This source file is subject to the license that is bundled
8 | * with this source code in the file LICENSE.
9 | */
10 |
11 | namespace Go\Symfony\GoAopBundle\Tests\Command;
12 |
13 | use PHPUnit\Framework\TestCase;
14 | use Symfony\Component\Process\Process;
15 |
16 | /**
17 | * Class DebugAspectCommandTest
18 | */
19 | class DebugAspectCommandTest extends TestCase
20 | {
21 | public function setUp()
22 | {
23 | $process = new Process(sprintf('php %s cache:warmup:aop', realpath(__DIR__.'/../Fixtures/project/bin/console')));
24 | $process->run();
25 |
26 | $this->assertTrue($process->isSuccessful(), 'Unable to execute "cache:warmup:aop" command.');
27 | }
28 |
29 | /**
30 | * @test
31 | * @runInSeparateProcess
32 | */
33 | public function itDisplaysAspectsDebugInfo()
34 | {
35 | $process = new Process(sprintf('php %s debug:aspect', realpath(__DIR__.'/../Fixtures/project/bin/console')));
36 | $process->run();
37 |
38 | $this->assertTrue($process->isSuccessful(), 'Unable to execute "debug:aspect" command.');
39 |
40 | $output = $process->getOutput();
41 |
42 | $expected = [
43 | 'Go\Symfony\GoAopBundle\Kernel\AspectSymfonyKernel has following enabled aspects',
44 | 'Go\Symfony\GoAopBundle\Tests\TestProject\Aspect\LoggingAspect',
45 | 'Go\Symfony\GoAopBundle\Tests\TestProject\Aspect\LoggingAspect->beforeMethod'
46 | ];
47 |
48 | foreach ($expected as $string) {
49 | $this->assertContains($string, $output);
50 | }
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/Tests/DependencyInjection/Compiler/AspectCollectorPassTest.php:
--------------------------------------------------------------------------------
1 |
6 | *
7 | * This source file is subject to the license that is bundled
8 | * with this source code in the file LICENSE.
9 | */
10 |
11 | namespace Go\Symfony\GoAopBundle\Tests\DependencyInjection\Compiler;
12 |
13 | use Go\Symfony\GoAopBundle\DependencyInjection\Compiler\AspectCollectorPass;
14 | use Matthias\SymfonyDependencyInjectionTest\PhpUnit\AbstractCompilerPassTestCase;
15 | use Symfony\Component\DependencyInjection\ContainerBuilder;
16 | use Symfony\Component\DependencyInjection\Definition;
17 | use Symfony\Component\DependencyInjection\Reference;
18 |
19 | /**
20 | * Class AspectCollectorPassTest
21 | */
22 | class AspectCollectorPassTest extends AbstractCompilerPassTestCase
23 | {
24 | /**
25 | * @test
26 | */
27 | public function itRegistersAspects()
28 | {
29 | $this->setDefinition('goaop.aspect.container', new Definition());
30 |
31 | $someAspect = new Definition();
32 | $someAspect->addTag('goaop.aspect');
33 | $this->setDefinition('some_aspect', $someAspect);
34 |
35 | $someOtherAspect = new Definition();
36 | $someOtherAspect->addTag('goaop.aspect');
37 | $this->setDefinition('some_other_aspect', $someOtherAspect);
38 |
39 | $this->compile();
40 |
41 | $this->assertContainerBuilderHasServiceDefinitionWithMethodCall('goaop.aspect.container', 'registerAspect', [new Reference('some_aspect')], 0);
42 | $this->assertContainerBuilderHasServiceDefinitionWithMethodCall('goaop.aspect.container', 'registerAspect', [new Reference('some_other_aspect')], 1);
43 | }
44 |
45 | /**
46 | * {@inheritdoc}
47 | */
48 | protected function registerCompilerPass(ContainerBuilder $container)
49 | {
50 | $container->addCompilerPass(new AspectCollectorPass());
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/Tests/DependencyInjection/ConfigurationTest.php:
--------------------------------------------------------------------------------
1 |
6 | *
7 | * This source file is subject to the license that is bundled
8 | * with this source code in the file LICENSE.
9 | */
10 |
11 | namespace Go\Symfony\GoAopBundle\Tests\DependencyInjection;
12 |
13 | use Go\Symfony\GoAopBundle\DependencyInjection\Configuration;
14 | use Go\Symfony\GoAopBundle\DependencyInjection\GoAopExtension;
15 | use Matthias\SymfonyDependencyInjectionTest\PhpUnit\AbstractExtensionConfigurationTestCase;
16 |
17 | /**
18 | * Class ConfigurationTest
19 | */
20 | class ConfigurationTest extends AbstractExtensionConfigurationTestCase
21 | {
22 | /**
23 | * @test
24 | */
25 | public function itHasReasonableDefaults()
26 | {
27 | $expectedConfiguration = [
28 | 'cache_warmer' => true,
29 | 'doctrine_support' => false,
30 | 'options' => [
31 | 'features' => 0,
32 | 'app_dir' => '%kernel.root_dir%/../src',
33 | 'cache_dir' => '%kernel.cache_dir%/aspect',
34 | 'debug' => '%kernel.debug%',
35 | 'include_paths' => [],
36 | 'exclude_paths' => [],
37 | ],
38 | ];
39 |
40 | $sources = [
41 | __DIR__ . '/../Fixtures/config/empty.xml',
42 | ];
43 |
44 | $this->assertProcessedConfigurationEquals($expectedConfiguration, $sources);
45 | }
46 |
47 | /**
48 | * @test
49 | */
50 | public function itCanBeFullyConfiguredViaYml()
51 | {
52 | $expectedConfiguration = [
53 | 'cache_warmer' => false,
54 | 'doctrine_support' => true,
55 | 'options' => [
56 | 'debug' => false,
57 | 'features' => 7,
58 | 'app_dir' => '/my/app/dir',
59 | 'cache_dir' => '/my/cache/dir',
60 | 'include_paths' => [
61 | '/path/to/include',
62 | '/other/path/to/include',
63 | ],
64 | 'exclude_paths' => [
65 | '/path/to/exclude',
66 | '/other/path/to/exclude',
67 | ],
68 | 'container_class' => 'Container\Class',
69 | ],
70 | ];
71 |
72 | $sources = [
73 | __DIR__ . '/../Fixtures/config/full.yml',
74 | ];
75 |
76 | $this->assertProcessedConfigurationEquals($expectedConfiguration, $sources);
77 | }
78 |
79 | /**
80 | * @test
81 | */
82 | public function itCanBeFullyConfiguredViaXml()
83 | {
84 | $expectedConfiguration = [
85 | 'cache_warmer' => false,
86 | 'doctrine_support' => true,
87 | 'options' => [
88 | 'debug' => false,
89 | 'features' => 7,
90 | 'app_dir' => '/my/app/dir',
91 | 'cache_dir' => '/my/cache/dir',
92 | 'include_paths' => [
93 | '/path/to/include',
94 | '/other/path/to/include',
95 | ],
96 | 'exclude_paths' => [
97 | '/path/to/exclude',
98 | '/other/path/to/exclude',
99 | ],
100 | 'container_class' => 'Container\Class',
101 | ],
102 | ];
103 |
104 | $sources = [
105 | __DIR__ . '/../Fixtures/config/full.xml',
106 | ];
107 |
108 | $this->assertProcessedConfigurationEquals($expectedConfiguration, $sources);
109 | }
110 |
111 | /**
112 | * {@inheritdoc}
113 | */
114 | protected function getContainerExtension()
115 | {
116 | return new GoAopExtension();
117 | }
118 |
119 | /**
120 | * {@inheritdoc}
121 | */
122 | protected function getConfiguration()
123 | {
124 | return new Configuration();
125 | }
126 | }
127 |
--------------------------------------------------------------------------------
/Tests/DependencyInjection/GoAopExtensionTest.php:
--------------------------------------------------------------------------------
1 |
6 | *
7 | * This source file is subject to the license that is bundled
8 | * with this source code in the file LICENSE.
9 | */
10 |
11 | namespace Go\Symfony\GoAopBundle\Tests\DependencyInjection;
12 |
13 | use Go\Aop\Aspect;
14 | use Go\Symfony\GoAopBundle\DependencyInjection\GoAopExtension;
15 | use Matthias\SymfonyDependencyInjectionTest\PhpUnit\AbstractExtensionTestCase;
16 |
17 | /**
18 | * Class GoAopExtensionTest
19 | */
20 | class GoAopExtensionTest extends AbstractExtensionTestCase
21 | {
22 | /**
23 | * @test
24 | */
25 | public function itLoadsServices()
26 | {
27 | $this->load();
28 |
29 | $expectedServices = [
30 | 'goaop.aspect.kernel',
31 | 'goaop.aspect.container',
32 | 'goaop.cache.path.manager',
33 | 'goaop.cache.warmer',
34 | 'goaop.command.warmup',
35 | 'goaop.command.debug_advisor',
36 | 'goaop.command.debug_aspect',
37 | 'goaop.bridge.doctrine.metadata_load_interceptor',
38 | ];
39 |
40 | foreach ($expectedServices as $id) {
41 | $this->assertContainerBuilderHasService($id);
42 | }
43 |
44 | $this->assertEquals(count($expectedServices), count(array_filter($this->container->getDefinitions(), function ($id) {
45 | return 0 === strpos($id, 'goaop.');
46 | }, ARRAY_FILTER_USE_KEY)));
47 | }
48 |
49 | /**
50 | * @test
51 | */
52 | public function itNormalizesAndSetsAspectKernelOptions()
53 | {
54 | $this->load();
55 |
56 | $this->assertEquals([
57 | 'features' => 0,
58 | 'appDir' => '%kernel.root_dir%/../src',
59 | 'cacheDir' => '%kernel.cache_dir%/aspect',
60 | 'debug' => '%kernel.debug%',
61 | 'includePaths' => [],
62 | 'excludePaths' => [],
63 | ], $this->container->getParameter('goaop.options'));
64 | }
65 |
66 | /**
67 | * @test
68 | */
69 | public function itDisablesCacheWarmer()
70 | {
71 | $this->load([
72 | 'cache_warmer' => false,
73 | ]);
74 |
75 | $definition = $this->container->getDefinition('goaop.cache.warmer');
76 |
77 | $this->assertFalse($definition->hasTag('kernel.cache_warmer'));
78 | }
79 |
80 | /**
81 | * @test
82 | */
83 | public function itEnablesDoctrineSupport()
84 | {
85 | $this->load([
86 | 'doctrine_support' => true,
87 | ]);
88 |
89 | $this->assertContainerBuilderHasServiceDefinitionWithTag('goaop.bridge.doctrine.metadata_load_interceptor', 'doctrine.event_subscriber');
90 | }
91 |
92 | /**
93 | * @test
94 | */
95 | public function itRegistersAspectInterfaceForAutoconfiguration()
96 | {
97 | if (!method_exists($this->container, 'getAutoconfiguredInstanceof')) {
98 | $this->markTestSkipped('Service autoconfiguration is available in Symfony 3.3+');
99 | }
100 |
101 | $this->load();
102 |
103 | $autoconfigure = $this->container->getAutoconfiguredInstanceof();
104 |
105 | $this->assertTrue($autoconfigure[Aspect::class]->hasTag('goaop.aspect'));
106 | }
107 |
108 | /**
109 | * {@inheritdoc}
110 | */
111 | protected function getContainerExtensions()
112 | {
113 | return [
114 | new GoAopExtension(),
115 | ];
116 | }
117 | }
118 |
--------------------------------------------------------------------------------
/Tests/Fixtures/config/empty.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/Tests/Fixtures/config/full.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
14 | false
15 |
16 | true
17 |
18 |
19 |
20 | false
21 | /my/app/dir
22 | /my/cache/dir
23 |
24 | /path/to/include
25 | /other/path/to/include
26 |
27 | /path/to/exclude
28 | /other/path/to/exclude
29 |
30 | Container\Class
31 |
32 | INTERCEPT_FUNCTIONS
33 | INTERCEPT_INCLUDES
34 | INTERCEPT_INITIALIZATIONS
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/Tests/Fixtures/config/full.yml:
--------------------------------------------------------------------------------
1 | go_aop:
2 | cache_warmer: false
3 | doctrine_support: true
4 | options:
5 | debug: false
6 | app_dir: /my/app/dir
7 | cache_dir: /my/cache/dir
8 | include_paths:
9 | - /path/to/include
10 | - /other/path/to/include
11 | exclude_paths:
12 | - /path/to/exclude
13 | - /other/path/to/exclude
14 | container_class: Container\Class
15 | features:
16 | - INTERCEPT_FUNCTIONS
17 | - INTERCEPT_INITIALIZATIONS
18 | - INTERCEPT_INCLUDES
--------------------------------------------------------------------------------
/Tests/Fixtures/mock/AopComposerLoader.php:
--------------------------------------------------------------------------------
1 |
6 | *
7 | * This source file is subject to the license that is bundled
8 | * with this source code in the file LICENSE.
9 | */
10 |
11 | namespace Go\Instrument\ClassLoading;
12 |
13 | /**
14 | * Class AopComposerLoader
15 | *
16 | * A mock class for testing initialization flow.
17 | */
18 | class AopComposerLoader
19 | {
20 | public static $initialized = true;
21 |
22 | public static function init() { /* noop */ }
23 |
24 | public static function wasInitialized()
25 | {
26 | return self::$initialized;
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/Tests/Fixtures/mock/DebugClassLoader.php:
--------------------------------------------------------------------------------
1 |
6 | *
7 | * This source file is subject to the license that is bundled
8 | * with this source code in the file LICENSE.
9 | */
10 |
11 | namespace Symfony\Component\Debug;
12 |
13 | /**
14 | * Class DebugClassLoader
15 | *
16 | * A mock class for testing initialization flow.
17 | */
18 | class DebugClassLoader
19 | {
20 | public static $enabled = false;
21 | public static $invocations = [];
22 |
23 | public static function enable()
24 | {
25 | self::$enabled = true;
26 | self::$invocations[] = 'enable';
27 | }
28 |
29 | public static function disable()
30 | {
31 | self::$enabled = false;
32 | self::$invocations[] = 'disable';
33 | }
34 |
35 | public static function reset()
36 | {
37 | self::$enabled = false;
38 | self::$invocations = [];
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/Tests/Fixtures/project/app/AppKernel.php:
--------------------------------------------------------------------------------
1 | getEnvironment();
24 | }
25 |
26 | public function getLogDir()
27 | {
28 | return dirname(__DIR__).'/var/logs';
29 | }
30 |
31 | public function registerContainerConfiguration(LoaderInterface $loader)
32 | {
33 | $loader->load($this->getRootDir().'/config/config.yml');
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/Tests/Fixtures/project/app/config/config.yml:
--------------------------------------------------------------------------------
1 | framework:
2 | test: ~
3 | session:
4 | storage_id: session.storage.mock_file
5 | profiler:
6 | collect: false
7 | secret: not_so_secret
8 | default_locale: en
9 | trusted_hosts: ~
10 | fragments: ~
11 | http_method_override: true
12 | assets: false
13 |
14 | services:
15 | logger:
16 | class: Psr\Log\NullLogger
17 |
18 | logging.aspect:
19 | class: Go\Symfony\GoAopBundle\Tests\TestProject\Aspect\LoggingAspect
20 | arguments: ["@logger"]
21 | tags:
22 | - { name: goaop.aspect }
23 |
--------------------------------------------------------------------------------
/Tests/Fixtures/project/bin/console:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env php
2 | run($input);
20 |
--------------------------------------------------------------------------------
/Tests/Fixtures/project/src/Annotation/Loggable.php:
--------------------------------------------------------------------------------
1 | logger = $logger;
23 | }
24 |
25 | /**
26 | * Writes a log info before method execution
27 | *
28 | * @param MethodInvocation $invocation
29 | * @Before("@execution(Go\Symfony\GoAopBundle\Tests\TestProject\Annotation\Loggable)")
30 | */
31 | public function beforeMethod(MethodInvocation $invocation)
32 | {
33 | $this->logger->info($invocation, $invocation->getArguments());
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/Tests/Fixtures/project/var/cache/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/goaop/goaop-symfony-bundle/76f41a21139b4aac1c618dbfb2369ddab9d7a839/Tests/Fixtures/project/var/cache/.gitkeep
--------------------------------------------------------------------------------
/Tests/Fixtures/project/var/logs/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/goaop/goaop-symfony-bundle/76f41a21139b4aac1c618dbfb2369ddab9d7a839/Tests/Fixtures/project/var/logs/.gitkeep
--------------------------------------------------------------------------------
/Tests/GoAopBundleTest.php:
--------------------------------------------------------------------------------
1 |
6 | *
7 | * This source file is subject to the license that is bundled
8 | * with this source code in the file LICENSE.
9 | */
10 |
11 | namespace Go\Symfony\GoAopBundle\Tests;
12 |
13 | use Go\Instrument\ClassLoading\AopComposerLoader;
14 | use Go\Symfony\GoAopBundle\DependencyInjection\Compiler\AspectCollectorPass;
15 | use Go\Symfony\GoAopBundle\GoAopBundle;
16 | use PHPUnit\Framework\TestCase;
17 | use Symfony\Component\Debug\DebugClassLoader;
18 | use Symfony\Component\DependencyInjection\ContainerBuilder;
19 | use Symfony\Component\DependencyInjection\ContainerInterface;
20 |
21 | /**
22 | * Class GoAopBundleTest
23 | */
24 | class GoAopBundleTest extends TestCase
25 | {
26 | /**
27 | * @test
28 | * @expectedException \InvalidArgumentException
29 | */
30 | public function itThrowsExceptionWhenBundleIsNotRegisteredAsFirstBundle()
31 | {
32 | $container = $this->getMockBuilder(ContainerBuilder::class)->getMock();
33 |
34 | $container
35 | ->method('getParameter')
36 | ->with('kernel.bundles')
37 | ->willReturn(['ArbitraryBundleName' => 'A bundle']);
38 |
39 | $bundle = new GoAopBundle();
40 |
41 | $bundle->getName(); // invoke resolution of bundle name
42 |
43 | $bundle->build($container);
44 | }
45 |
46 | /**
47 | * @test
48 | */
49 | public function itRegistersAspectCollectorPassPass()
50 | {
51 | $container = $this->getMockBuilder(ContainerBuilder::class)->getMock();
52 |
53 | $container
54 | ->method('getParameter')
55 | ->with('kernel.bundles')
56 | ->willReturn(['GoAopBundle' => 'A bundle']);
57 |
58 | $container
59 | ->expects($spy = $this->exactly(1))
60 | ->method('addCompilerPass');
61 |
62 | $bundle = new GoAopBundle();
63 |
64 | $bundle->getName(); // invoke resolution of bundle name
65 |
66 | $bundle->build($container);
67 |
68 | $invocation = $spy->getInvocations()[0];
69 | $this->assertInstanceOf(AspectCollectorPass::class, $invocation->parameters[0]);
70 | }
71 |
72 | /**
73 | * @test
74 | * @runInSeparateProcess
75 | */
76 | public function itBoots()
77 | {
78 | require_once __DIR__.'/Fixtures/mock/DebugClassLoader.php';
79 | require_once __DIR__.'/Fixtures/mock/AopComposerLoader.php';
80 |
81 | $container = $this->getMockBuilder(ContainerInterface::class)->getMock();
82 |
83 | $container
84 | ->expects($this->once())
85 | ->method('get')
86 | ->with('goaop.aspect.container');
87 |
88 | $bundle = new GoAopBundle();
89 | $bundle->setContainer($container);
90 |
91 | DebugClassLoader::reset();
92 | DebugClassLoader::enable();
93 | $this->assertTrue(DebugClassLoader::$enabled);
94 |
95 | $bundle->boot();
96 |
97 | $this->assertTrue(DebugClassLoader::$enabled);
98 | $this->assertEquals(['enable', 'disable', 'enable'], DebugClassLoader::$invocations);
99 | }
100 |
101 | /**
102 | * @test
103 | * @runInSeparateProcess
104 | * @expectedException \RuntimeException
105 | * @expectedExceptionMessage Initialization of AOP loader was failed, probably due to Debug::enable()
106 | */
107 | public function itThrowsExceptionOnBootWithoutAopComposerLoader()
108 | {
109 | require_once __DIR__.'/Fixtures/mock/DebugClassLoader.php';
110 | require_once __DIR__.'/Fixtures/mock/AopComposerLoader.php';
111 |
112 | $container = $this->getMockBuilder(ContainerInterface::class)->getMock();
113 |
114 | $container
115 | ->expects($this->once())
116 | ->method('get')
117 | ->with('goaop.aspect.container');
118 |
119 | $bundle = new GoAopBundle();
120 | $bundle->setContainer($container);
121 |
122 | AopComposerLoader::$initialized = false;
123 |
124 | $bundle->boot();
125 | }
126 | }
127 |
--------------------------------------------------------------------------------
/Tests/Kernel/AspectSymfonyKernelTest.php:
--------------------------------------------------------------------------------
1 |
6 | *
7 | * This source file is subject to the license that is bundled
8 | * with this source code in the file LICENSE.
9 | */
10 |
11 | namespace Go\Symfony\GoAopBundle\Tests\Kernel;
12 |
13 | use Go\Instrument\ClassLoading\AopComposerLoader;
14 | use Go\Symfony\GoAopBundle\Kernel\AspectSymfonyKernel;
15 | use PHPUnit\Framework\TestCase;
16 | use Symfony\Component\Debug\DebugClassLoader;
17 |
18 | /**
19 | * Class AspectSymfonyKernelTest
20 | */
21 | class AspectSymfonyKernelTest extends TestCase
22 | {
23 | /**
24 | * @test
25 | * @runInSeparateProcess
26 | */
27 | public function itInitializesAspectKernel()
28 | {
29 | require_once __DIR__ . '/../Fixtures/mock/DebugClassLoader.php';
30 |
31 | DebugClassLoader::reset();
32 | DebugClassLoader::enable();
33 | $this->assertTrue(DebugClassLoader::$enabled);
34 |
35 | AspectSymfonyKernel::getInstance()->init([
36 | 'appDir' => __DIR__,
37 | 'cacheDir' => sys_get_temp_dir(),
38 | ]);
39 |
40 | $this->assertTrue(DebugClassLoader::$enabled);
41 | $this->assertEquals(['enable', 'disable', 'enable'], DebugClassLoader::$invocations);
42 | }
43 |
44 | /**
45 | * @test
46 | * @runInSeparateProcess
47 | * @expectedException \RuntimeException
48 | * @expectedExceptionMessage Initialization of AOP loader was failed, probably due to Debug::enable()
49 | */
50 | public function itThrowsExceptionWhenIntializationIsImpossible()
51 | {
52 | require_once __DIR__ . '/../Fixtures/mock/DebugClassLoader.php';
53 | require_once __DIR__ . '/../Fixtures/mock/AopComposerLoader.php';
54 |
55 | AopComposerLoader::$initialized = false;
56 |
57 | AspectSymfonyKernel::getInstance()->init([
58 | 'appDir' => __DIR__,
59 | 'cacheDir' => sys_get_temp_dir(),
60 | ]);
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "goaop/goaop-symfony-bundle",
3 | "description": "Integration bridge for Go! AOP framework",
4 | "type": "symfony-bundle",
5 | "require": {
6 | "goaop/framework": "^2.1.2",
7 | "symfony/framework-bundle": "^2.6|^3.0|^4.0|^5.0",
8 | "symfony/console": "^2.6|^3.0|^4.0"
9 | },
10 | "require-dev": {
11 | "phpunit/phpunit": "^5.7",
12 | "symfony/phpunit-bridge": "^3.3.4|^4.0",
13 | "symfony/debug": "^2.7|^3.0|^4.0",
14 | "matthiasnoback/symfony-dependency-injection-test": "^1.1.0",
15 | "doctrine/orm": "^2.5",
16 | "symfony/filesystem": "^2.8|^3.0|^4.0",
17 | "symfony/process": "^3.3|^4.0",
18 | "symfony/expression-language": "^3.3|^4.0",
19 | "roave/security-advisories": "dev-master"
20 | },
21 | "license": "MIT",
22 | "authors": [
23 | {
24 | "name": "Lisachenko Alexander",
25 | "email": "lisachenko.it@gmail.com"
26 | }
27 | ],
28 | "autoload": {
29 | "psr-4": {
30 | "Go\\Symfony\\GoAopBundle\\": "./"
31 | },
32 | "exclude-from-classmap": [ "./Tests/" ]
33 | },
34 | "autoload-dev": {
35 | "psr-4": {
36 | "": "./Tests/Fixtures/project/app/",
37 | "Go\\Symfony\\GoAopBundle\\Tests\\TestProject\\": "./Tests/Fixtures/project/src/"
38 | }
39 | },
40 | "extra": {
41 | "branch-alias": {
42 | "dev-master": "2.x-dev"
43 | }
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/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": "49b5ffc682a405ef19eb0071bff87b0f",
8 | "packages": [
9 | {
10 | "name": "doctrine/annotations",
11 | "version": "v1.6.0",
12 | "source": {
13 | "type": "git",
14 | "url": "https://github.com/doctrine/annotations.git",
15 | "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5"
16 | },
17 | "dist": {
18 | "type": "zip",
19 | "url": "https://api.github.com/repos/doctrine/annotations/zipball/c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5",
20 | "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5",
21 | "shasum": ""
22 | },
23 | "require": {
24 | "doctrine/lexer": "1.*",
25 | "php": "^7.1"
26 | },
27 | "require-dev": {
28 | "doctrine/cache": "1.*",
29 | "phpunit/phpunit": "^6.4"
30 | },
31 | "type": "library",
32 | "extra": {
33 | "branch-alias": {
34 | "dev-master": "1.6.x-dev"
35 | }
36 | },
37 | "autoload": {
38 | "psr-4": {
39 | "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations"
40 | }
41 | },
42 | "notification-url": "https://packagist.org/downloads/",
43 | "license": [
44 | "MIT"
45 | ],
46 | "authors": [
47 | {
48 | "name": "Roman Borschel",
49 | "email": "roman@code-factory.org"
50 | },
51 | {
52 | "name": "Benjamin Eberlei",
53 | "email": "kontakt@beberlei.de"
54 | },
55 | {
56 | "name": "Guilherme Blanco",
57 | "email": "guilhermeblanco@gmail.com"
58 | },
59 | {
60 | "name": "Jonathan Wage",
61 | "email": "jonwage@gmail.com"
62 | },
63 | {
64 | "name": "Johannes Schmitt",
65 | "email": "schmittjoh@gmail.com"
66 | }
67 | ],
68 | "description": "Docblock Annotations Parser",
69 | "homepage": "http://www.doctrine-project.org",
70 | "keywords": [
71 | "annotations",
72 | "docblock",
73 | "parser"
74 | ],
75 | "time": "2017-12-06T07:11:42+00:00"
76 | },
77 | {
78 | "name": "doctrine/lexer",
79 | "version": "v1.0.1",
80 | "source": {
81 | "type": "git",
82 | "url": "https://github.com/doctrine/lexer.git",
83 | "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c"
84 | },
85 | "dist": {
86 | "type": "zip",
87 | "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c",
88 | "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c",
89 | "shasum": ""
90 | },
91 | "require": {
92 | "php": ">=5.3.2"
93 | },
94 | "type": "library",
95 | "extra": {
96 | "branch-alias": {
97 | "dev-master": "1.0.x-dev"
98 | }
99 | },
100 | "autoload": {
101 | "psr-0": {
102 | "Doctrine\\Common\\Lexer\\": "lib/"
103 | }
104 | },
105 | "notification-url": "https://packagist.org/downloads/",
106 | "license": [
107 | "MIT"
108 | ],
109 | "authors": [
110 | {
111 | "name": "Roman Borschel",
112 | "email": "roman@code-factory.org"
113 | },
114 | {
115 | "name": "Guilherme Blanco",
116 | "email": "guilhermeblanco@gmail.com"
117 | },
118 | {
119 | "name": "Johannes Schmitt",
120 | "email": "schmittjoh@gmail.com"
121 | }
122 | ],
123 | "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.",
124 | "homepage": "http://www.doctrine-project.org",
125 | "keywords": [
126 | "lexer",
127 | "parser"
128 | ],
129 | "time": "2014-09-09T13:34:57+00:00"
130 | },
131 | {
132 | "name": "goaop/framework",
133 | "version": "2.1.2",
134 | "source": {
135 | "type": "git",
136 | "url": "https://github.com/goaop/framework.git",
137 | "reference": "6e2a0fe13c1943db02a67588cfd27692bddaffa5"
138 | },
139 | "dist": {
140 | "type": "zip",
141 | "url": "https://api.github.com/repos/goaop/framework/zipball/6e2a0fe13c1943db02a67588cfd27692bddaffa5",
142 | "reference": "6e2a0fe13c1943db02a67588cfd27692bddaffa5",
143 | "shasum": ""
144 | },
145 | "require": {
146 | "doctrine/annotations": "~1.0",
147 | "goaop/parser-reflection": "~1.2",
148 | "jakubledl/dissect": "~1.0",
149 | "php": ">=5.6.0"
150 | },
151 | "require-dev": {
152 | "adlawson/vfs": "^0.12",
153 | "doctrine/orm": "^2.5",
154 | "phpunit/phpunit": "^4.8",
155 | "symfony/console": "^2.7|^3.0"
156 | },
157 | "suggest": {
158 | "symfony/console": "Enables the usage of the command-line tool."
159 | },
160 | "bin": [
161 | "bin/aspect"
162 | ],
163 | "type": "library",
164 | "extra": {
165 | "branch-alias": {
166 | "dev-master": "2.0-dev"
167 | }
168 | },
169 | "autoload": {
170 | "psr-4": {
171 | "Go\\": "src/"
172 | }
173 | },
174 | "notification-url": "https://packagist.org/downloads/",
175 | "license": [
176 | "MIT"
177 | ],
178 | "authors": [
179 | {
180 | "name": "Lisachenko Alexander",
181 | "homepage": "https://github.com/lisachenko"
182 | }
183 | ],
184 | "description": "Framework for aspect-oriented programming in PHP.",
185 | "homepage": "http://go.aopphp.com/",
186 | "keywords": [
187 | "aop",
188 | "aspect",
189 | "library",
190 | "php"
191 | ],
192 | "time": "2017-07-12T11:46:25+00:00"
193 | },
194 | {
195 | "name": "goaop/parser-reflection",
196 | "version": "1.4.0",
197 | "source": {
198 | "type": "git",
199 | "url": "https://github.com/goaop/parser-reflection.git",
200 | "reference": "adfc38fee63014880932ebcc4810871b8e33edc9"
201 | },
202 | "dist": {
203 | "type": "zip",
204 | "url": "https://api.github.com/repos/goaop/parser-reflection/zipball/adfc38fee63014880932ebcc4810871b8e33edc9",
205 | "reference": "adfc38fee63014880932ebcc4810871b8e33edc9",
206 | "shasum": ""
207 | },
208 | "require": {
209 | "nikic/php-parser": "^1.2|^2.0|^3.0",
210 | "php": ">=5.6.0"
211 | },
212 | "require-dev": {
213 | "phpunit/phpunit": "~4.0"
214 | },
215 | "type": "library",
216 | "extra": {
217 | "branch-alias": {
218 | "dev-master": "1.x-dev"
219 | }
220 | },
221 | "autoload": {
222 | "psr-4": {
223 | "Go\\ParserReflection\\": "src"
224 | },
225 | "files": [
226 | "src/bootstrap.php"
227 | ],
228 | "exclude-from-classmap": [
229 | "/tests/"
230 | ]
231 | },
232 | "notification-url": "https://packagist.org/downloads/",
233 | "license": [
234 | "MIT"
235 | ],
236 | "authors": [
237 | {
238 | "name": "Alexander Lisachenko",
239 | "email": "lisachenko.it@gmail.com"
240 | }
241 | ],
242 | "description": "Provides reflection information, based on raw source",
243 | "time": "2017-09-03T14:59:13+00:00"
244 | },
245 | {
246 | "name": "jakubledl/dissect",
247 | "version": "v1.0.1",
248 | "source": {
249 | "type": "git",
250 | "url": "https://github.com/jakubledl/dissect.git",
251 | "reference": "d3a391de31e45a247e95cef6cf58a91c05af67c4"
252 | },
253 | "dist": {
254 | "type": "zip",
255 | "url": "https://api.github.com/repos/jakubledl/dissect/zipball/d3a391de31e45a247e95cef6cf58a91c05af67c4",
256 | "reference": "d3a391de31e45a247e95cef6cf58a91c05af67c4",
257 | "shasum": ""
258 | },
259 | "require": {
260 | "php": ">=5.3.3"
261 | },
262 | "require-dev": {
263 | "symfony/console": "~2.1"
264 | },
265 | "suggest": {
266 | "symfony/console": "for the command-line tool"
267 | },
268 | "bin": [
269 | "bin/dissect.php",
270 | "bin/dissect"
271 | ],
272 | "type": "library",
273 | "autoload": {
274 | "psr-0": {
275 | "Dissect": [
276 | "src/"
277 | ]
278 | }
279 | },
280 | "notification-url": "https://packagist.org/downloads/",
281 | "license": [
282 | "unlicense"
283 | ],
284 | "authors": [
285 | {
286 | "name": "Jakub Lédl",
287 | "email": "jakubledl@gmail.com"
288 | }
289 | ],
290 | "description": "Lexing and parsing in pure PHP",
291 | "homepage": "https://github.com/jakubledl/dissect",
292 | "keywords": [
293 | "ast",
294 | "lexing",
295 | "parser",
296 | "parsing"
297 | ],
298 | "time": "2013-01-29T21:29:14+00:00"
299 | },
300 | {
301 | "name": "nikic/php-parser",
302 | "version": "v3.1.2",
303 | "source": {
304 | "type": "git",
305 | "url": "https://github.com/nikic/PHP-Parser.git",
306 | "reference": "08131e7ff29de6bb9f12275c7d35df71f25f4d89"
307 | },
308 | "dist": {
309 | "type": "zip",
310 | "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/08131e7ff29de6bb9f12275c7d35df71f25f4d89",
311 | "reference": "08131e7ff29de6bb9f12275c7d35df71f25f4d89",
312 | "shasum": ""
313 | },
314 | "require": {
315 | "ext-tokenizer": "*",
316 | "php": ">=5.5"
317 | },
318 | "require-dev": {
319 | "phpunit/phpunit": "~4.0|~5.0"
320 | },
321 | "bin": [
322 | "bin/php-parse"
323 | ],
324 | "type": "library",
325 | "extra": {
326 | "branch-alias": {
327 | "dev-master": "3.0-dev"
328 | }
329 | },
330 | "autoload": {
331 | "psr-4": {
332 | "PhpParser\\": "lib/PhpParser"
333 | }
334 | },
335 | "notification-url": "https://packagist.org/downloads/",
336 | "license": [
337 | "BSD-3-Clause"
338 | ],
339 | "authors": [
340 | {
341 | "name": "Nikita Popov"
342 | }
343 | ],
344 | "description": "A PHP parser written in PHP",
345 | "keywords": [
346 | "parser",
347 | "php"
348 | ],
349 | "time": "2017-11-04T11:48:34+00:00"
350 | },
351 | {
352 | "name": "psr/cache",
353 | "version": "1.0.1",
354 | "source": {
355 | "type": "git",
356 | "url": "https://github.com/php-fig/cache.git",
357 | "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8"
358 | },
359 | "dist": {
360 | "type": "zip",
361 | "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8",
362 | "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8",
363 | "shasum": ""
364 | },
365 | "require": {
366 | "php": ">=5.3.0"
367 | },
368 | "type": "library",
369 | "extra": {
370 | "branch-alias": {
371 | "dev-master": "1.0.x-dev"
372 | }
373 | },
374 | "autoload": {
375 | "psr-4": {
376 | "Psr\\Cache\\": "src/"
377 | }
378 | },
379 | "notification-url": "https://packagist.org/downloads/",
380 | "license": [
381 | "MIT"
382 | ],
383 | "authors": [
384 | {
385 | "name": "PHP-FIG",
386 | "homepage": "http://www.php-fig.org/"
387 | }
388 | ],
389 | "description": "Common interface for caching libraries",
390 | "keywords": [
391 | "cache",
392 | "psr",
393 | "psr-6"
394 | ],
395 | "time": "2016-08-06T20:24:11+00:00"
396 | },
397 | {
398 | "name": "psr/container",
399 | "version": "1.0.0",
400 | "source": {
401 | "type": "git",
402 | "url": "https://github.com/php-fig/container.git",
403 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
404 | },
405 | "dist": {
406 | "type": "zip",
407 | "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
408 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
409 | "shasum": ""
410 | },
411 | "require": {
412 | "php": ">=5.3.0"
413 | },
414 | "type": "library",
415 | "extra": {
416 | "branch-alias": {
417 | "dev-master": "1.0.x-dev"
418 | }
419 | },
420 | "autoload": {
421 | "psr-4": {
422 | "Psr\\Container\\": "src/"
423 | }
424 | },
425 | "notification-url": "https://packagist.org/downloads/",
426 | "license": [
427 | "MIT"
428 | ],
429 | "authors": [
430 | {
431 | "name": "PHP-FIG",
432 | "homepage": "http://www.php-fig.org/"
433 | }
434 | ],
435 | "description": "Common Container Interface (PHP FIG PSR-11)",
436 | "homepage": "https://github.com/php-fig/container",
437 | "keywords": [
438 | "PSR-11",
439 | "container",
440 | "container-interface",
441 | "container-interop",
442 | "psr"
443 | ],
444 | "time": "2017-02-14T16:28:37+00:00"
445 | },
446 | {
447 | "name": "psr/log",
448 | "version": "1.0.2",
449 | "source": {
450 | "type": "git",
451 | "url": "https://github.com/php-fig/log.git",
452 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
453 | },
454 | "dist": {
455 | "type": "zip",
456 | "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
457 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
458 | "shasum": ""
459 | },
460 | "require": {
461 | "php": ">=5.3.0"
462 | },
463 | "type": "library",
464 | "extra": {
465 | "branch-alias": {
466 | "dev-master": "1.0.x-dev"
467 | }
468 | },
469 | "autoload": {
470 | "psr-4": {
471 | "Psr\\Log\\": "Psr/Log/"
472 | }
473 | },
474 | "notification-url": "https://packagist.org/downloads/",
475 | "license": [
476 | "MIT"
477 | ],
478 | "authors": [
479 | {
480 | "name": "PHP-FIG",
481 | "homepage": "http://www.php-fig.org/"
482 | }
483 | ],
484 | "description": "Common interface for logging libraries",
485 | "homepage": "https://github.com/php-fig/log",
486 | "keywords": [
487 | "log",
488 | "psr",
489 | "psr-3"
490 | ],
491 | "time": "2016-10-10T12:19:37+00:00"
492 | },
493 | {
494 | "name": "psr/simple-cache",
495 | "version": "1.0.0",
496 | "source": {
497 | "type": "git",
498 | "url": "https://github.com/php-fig/simple-cache.git",
499 | "reference": "753fa598e8f3b9966c886fe13f370baa45ef0e24"
500 | },
501 | "dist": {
502 | "type": "zip",
503 | "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/753fa598e8f3b9966c886fe13f370baa45ef0e24",
504 | "reference": "753fa598e8f3b9966c886fe13f370baa45ef0e24",
505 | "shasum": ""
506 | },
507 | "require": {
508 | "php": ">=5.3.0"
509 | },
510 | "type": "library",
511 | "extra": {
512 | "branch-alias": {
513 | "dev-master": "1.0.x-dev"
514 | }
515 | },
516 | "autoload": {
517 | "psr-4": {
518 | "Psr\\SimpleCache\\": "src/"
519 | }
520 | },
521 | "notification-url": "https://packagist.org/downloads/",
522 | "license": [
523 | "MIT"
524 | ],
525 | "authors": [
526 | {
527 | "name": "PHP-FIG",
528 | "homepage": "http://www.php-fig.org/"
529 | }
530 | ],
531 | "description": "Common interfaces for simple caching",
532 | "keywords": [
533 | "cache",
534 | "caching",
535 | "psr",
536 | "psr-16",
537 | "simple-cache"
538 | ],
539 | "time": "2017-01-02T13:31:39+00:00"
540 | },
541 | {
542 | "name": "roave/security-advisories",
543 | "version": "dev-master",
544 | "source": {
545 | "type": "git",
546 | "url": "https://github.com/Roave/SecurityAdvisories.git",
547 | "reference": "40b035345ed34a4cc92c842f60a6cc739101542f"
548 | },
549 | "dist": {
550 | "type": "zip",
551 | "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/40b035345ed34a4cc92c842f60a6cc739101542f",
552 | "reference": "40b035345ed34a4cc92c842f60a6cc739101542f",
553 | "shasum": ""
554 | },
555 | "conflict": {
556 | "adodb/adodb-php": "<5.20.6",
557 | "amphp/artax": "<1.0.6|>=2,<2.0.6",
558 | "aws/aws-sdk-php": ">=3,<3.2.1",
559 | "bugsnag/bugsnag-laravel": ">=2,<2.0.2",
560 | "cakephp/cakephp": ">=1.3,<1.3.18|>=2,<2.4.99|>=2.5,<2.5.99|>=2.6,<2.6.12|>=2.7,<2.7.6|>=3,<3.0.15|>=3.1,<3.1.4",
561 | "cart2quote/module-quotation": ">=4.1.6,<=4.4.5|>=5,<5.4.4",
562 | "cartalyst/sentry": "<=2.1.6",
563 | "codeigniter/framework": "<=3.0.6",
564 | "composer/composer": "<=1.0.0-alpha11",
565 | "contao-components/mediaelement": ">=2.14.2,<2.21.1",
566 | "contao/core": ">=2,<3.5.31",
567 | "contao/core-bundle": ">=4,<4.4.8",
568 | "contao/listing-bundle": ">=4,<4.4.8",
569 | "doctrine/annotations": ">=1,<1.2.7",
570 | "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2",
571 | "doctrine/common": ">=2,<2.4.3|>=2.5,<2.5.1",
572 | "doctrine/dbal": ">=2,<2.0.8|>=2.1,<2.1.2",
573 | "doctrine/doctrine-bundle": "<1.5.2",
574 | "doctrine/doctrine-module": "<=0.7.1",
575 | "doctrine/mongodb-odm": ">=1,<1.0.2",
576 | "doctrine/mongodb-odm-bundle": ">=2,<3.0.1",
577 | "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1",
578 | "dompdf/dompdf": ">=0.6,<0.6.2",
579 | "drupal/core": ">=8,<8.3.7",
580 | "drupal/drupal": ">=8,<8.3.7",
581 | "ezsystems/ezpublish-legacy": ">=5.3,<5.3.12.2|>=5.4,<5.4.10.1|>=2017.8,<2017.8.1.1",
582 | "firebase/php-jwt": "<2",
583 | "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2",
584 | "friendsofsymfony/user-bundle": ">=1.2,<1.3.5",
585 | "gree/jose": "<=2.2",
586 | "gregwar/rst": "<1.0.3",
587 | "guzzlehttp/guzzle": ">=6,<6.2.1|>=4.0.0-rc2,<4.2.4|>=5,<5.3.1",
588 | "illuminate/auth": ">=4,<4.0.99|>=4.1,<4.1.26",
589 | "illuminate/database": ">=4,<4.0.99|>=4.1,<4.1.29",
590 | "joomla/session": "<1.3.1",
591 | "laravel/framework": ">=4,<4.0.99|>=4.1,<4.1.29",
592 | "laravel/socialite": ">=1,<1.0.99|>=2,<2.0.10",
593 | "magento/magento1ce": ">=1.5.0.1,<1.9.3.2",
594 | "magento/magento1ee": ">=1.9,<1.14.3.2",
595 | "magento/magento2ce": ">=2,<2.2",
596 | "monolog/monolog": ">=1.8,<1.12",
597 | "namshi/jose": "<2.2",
598 | "onelogin/php-saml": "<2.10.4",
599 | "oro/crm": ">=1.7,<1.7.4",
600 | "oro/platform": ">=1.7,<1.7.4",
601 | "phpmailer/phpmailer": ">=5,<5.2.24",
602 | "phpunit/phpunit": ">=4.8.19,<4.8.28|>=5.0.10,<5.6.3",
603 | "phpxmlrpc/extras": "<6.0.1",
604 | "pusher/pusher-php-server": "<2.2.1",
605 | "sabre/dav": ">=1.6,<1.6.99|>=1.7,<1.7.11|>=1.8,<1.8.9",
606 | "shopware/shopware": "<5.2.25",
607 | "silverstripe/cms": ">=3,<=3.0.11|>=3.1,<3.1.11",
608 | "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3",
609 | "silverstripe/framework": ">=3,<3.3",
610 | "silverstripe/userforms": "<3",
611 | "simplesamlphp/saml2": "<1.8.1|>=1.9,<1.9.1|>=1.10,<1.10.3|>=2,<2.3.3",
612 | "simplesamlphp/simplesamlphp": "<1.14.16",
613 | "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1",
614 | "socalnick/scn-social-auth": "<1.15.2",
615 | "squizlabs/php_codesniffer": ">=1,<2.8.1",
616 | "swiftmailer/swiftmailer": ">=4,<5.4.5",
617 | "symfony/dependency-injection": ">=2,<2.0.17",
618 | "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13",
619 | "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2",
620 | "symfony/http-foundation": ">=2,<2.3.27|>=2.4,<2.5.11|>=2.6,<2.6.6",
621 | "symfony/http-kernel": ">=2,<2.3.29|>=2.4,<2.5.12|>=2.6,<2.6.8",
622 | "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13",
623 | "symfony/routing": ">=2,<2.0.19",
624 | "symfony/security": ">=2,<2.0.25|>=2.1,<2.1.13|>=2.2,<2.2.9|>=2.3,<2.3.37|>=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8.23,<2.8.25|>=3.2.10,<3.2.12|>=3.3.3,<3.3.5",
625 | "symfony/security-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<2.8.6|>=2.8.23,<2.8.25|>=3,<3.0.6|>=3.2.10,<3.2.12|>=3.3.3,<3.3.5",
626 | "symfony/security-csrf": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13",
627 | "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13",
628 | "symfony/serializer": ">=2,<2.0.11",
629 | "symfony/symfony": ">=2,<2.3.41|>=2.4,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13",
630 | "symfony/translation": ">=2,<2.0.17",
631 | "symfony/validator": ">=2,<2.0.24|>=2.1,<2.1.12|>=2.2,<2.2.5|>=2.3,<2.3.3",
632 | "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4",
633 | "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7",
634 | "thelia/backoffice-default-template": ">=2.1,<2.1.2",
635 | "thelia/thelia": ">=2.1,<2.1.2|>=2.1.0-beta1,<2.1.3",
636 | "twig/twig": "<1.20",
637 | "typo3/cms": ">=6.2,<6.2.30|>=7,<7.6.22|>=8,<8.7.5",
638 | "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.10|>=3.1,<3.1.7|>=3.2,<3.2.7|>=3.3,<3.3.5",
639 | "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4",
640 | "willdurand/js-translation-bundle": "<2.1.1",
641 | "yiisoft/yii": ">=1.1.14,<1.1.15",
642 | "yiisoft/yii2": "<2.0.5",
643 | "yiisoft/yii2-bootstrap": "<2.0.4",
644 | "yiisoft/yii2-dev": "<2.0.4",
645 | "yiisoft/yii2-gii": "<2.0.4",
646 | "yiisoft/yii2-jui": "<2.0.4",
647 | "zendframework/zend-cache": ">=2.4,<2.4.8|>=2.5,<2.5.3",
648 | "zendframework/zend-captcha": ">=2,<2.4.9|>=2.5,<2.5.2",
649 | "zendframework/zend-crypt": ">=2,<2.4.9|>=2.5,<2.5.2",
650 | "zendframework/zend-db": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.10|>=2.3,<2.3.5",
651 | "zendframework/zend-diactoros": ">=1,<1.0.4",
652 | "zendframework/zend-form": ">=2,<2.2.7|>=2.3,<2.3.1",
653 | "zendframework/zend-http": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.3,<2.3.8|>=2.4,<2.4.1",
654 | "zendframework/zend-json": ">=2.1,<2.1.6|>=2.2,<2.2.6",
655 | "zendframework/zend-ldap": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.8|>=2.3,<2.3.3",
656 | "zendframework/zend-mail": ">=2,<2.4.11|>=2.5,<2.7.2",
657 | "zendframework/zend-navigation": ">=2,<2.2.7|>=2.3,<2.3.1",
658 | "zendframework/zend-session": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.9|>=2.3,<2.3.4",
659 | "zendframework/zend-validator": ">=2.3,<2.3.6",
660 | "zendframework/zend-view": ">=2,<2.2.7|>=2.3,<2.3.1",
661 | "zendframework/zend-xmlrpc": ">=2.1,<2.1.6|>=2.2,<2.2.6",
662 | "zendframework/zendframework": ">=2,<2.4.11|>=2.5,<2.5.1",
663 | "zendframework/zendframework1": "<1.12.20",
664 | "zendframework/zendopenid": ">=2,<2.0.2",
665 | "zendframework/zendxml": ">=1,<1.0.1",
666 | "zetacomponents/mail": "<1.8.2",
667 | "zf-commons/zfc-user": "<1.2.2",
668 | "zfcampus/zf-apigility-doctrine": ">=1,<1.0.3",
669 | "zfr/zfr-oauth2-server-module": "<0.1.2"
670 | },
671 | "type": "metapackage",
672 | "notification-url": "https://packagist.org/downloads/",
673 | "license": [
674 | "MIT"
675 | ],
676 | "authors": [
677 | {
678 | "name": "Marco Pivetta",
679 | "email": "ocramius@gmail.com",
680 | "role": "maintainer"
681 | }
682 | ],
683 | "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it",
684 | "time": "2017-12-12T00:38:43+00:00"
685 | },
686 | {
687 | "name": "symfony/cache",
688 | "version": "v4.0.2",
689 | "source": {
690 | "type": "git",
691 | "url": "https://github.com/symfony/cache.git",
692 | "reference": "d00351f230ca037ca13f6fec3411e002043f7421"
693 | },
694 | "dist": {
695 | "type": "zip",
696 | "url": "https://api.github.com/repos/symfony/cache/zipball/d00351f230ca037ca13f6fec3411e002043f7421",
697 | "reference": "d00351f230ca037ca13f6fec3411e002043f7421",
698 | "shasum": ""
699 | },
700 | "require": {
701 | "php": "^7.1.3",
702 | "psr/cache": "~1.0",
703 | "psr/log": "~1.0",
704 | "psr/simple-cache": "^1.0"
705 | },
706 | "conflict": {
707 | "symfony/var-dumper": "<3.4"
708 | },
709 | "provide": {
710 | "psr/cache-implementation": "1.0",
711 | "psr/simple-cache-implementation": "1.0"
712 | },
713 | "require-dev": {
714 | "cache/integration-tests": "dev-master",
715 | "doctrine/cache": "~1.6",
716 | "doctrine/dbal": "~2.4",
717 | "predis/predis": "~1.0"
718 | },
719 | "type": "library",
720 | "extra": {
721 | "branch-alias": {
722 | "dev-master": "4.0-dev"
723 | }
724 | },
725 | "autoload": {
726 | "psr-4": {
727 | "Symfony\\Component\\Cache\\": ""
728 | },
729 | "exclude-from-classmap": [
730 | "/Tests/"
731 | ]
732 | },
733 | "notification-url": "https://packagist.org/downloads/",
734 | "license": [
735 | "MIT"
736 | ],
737 | "authors": [
738 | {
739 | "name": "Nicolas Grekas",
740 | "email": "p@tchwork.com"
741 | },
742 | {
743 | "name": "Symfony Community",
744 | "homepage": "https://symfony.com/contributors"
745 | }
746 | ],
747 | "description": "Symfony Cache component with PSR-6, PSR-16, and tags",
748 | "homepage": "https://symfony.com",
749 | "keywords": [
750 | "caching",
751 | "psr6"
752 | ],
753 | "time": "2017-12-08T16:11:45+00:00"
754 | },
755 | {
756 | "name": "symfony/config",
757 | "version": "v4.0.2",
758 | "source": {
759 | "type": "git",
760 | "url": "https://github.com/symfony/config.git",
761 | "reference": "0356e6d5298e9e72212c0bad65c2f1b49e42d622"
762 | },
763 | "dist": {
764 | "type": "zip",
765 | "url": "https://api.github.com/repos/symfony/config/zipball/0356e6d5298e9e72212c0bad65c2f1b49e42d622",
766 | "reference": "0356e6d5298e9e72212c0bad65c2f1b49e42d622",
767 | "shasum": ""
768 | },
769 | "require": {
770 | "php": "^7.1.3",
771 | "symfony/filesystem": "~3.4|~4.0"
772 | },
773 | "conflict": {
774 | "symfony/finder": "<3.4"
775 | },
776 | "require-dev": {
777 | "symfony/finder": "~3.4|~4.0",
778 | "symfony/yaml": "~3.4|~4.0"
779 | },
780 | "suggest": {
781 | "symfony/yaml": "To use the yaml reference dumper"
782 | },
783 | "type": "library",
784 | "extra": {
785 | "branch-alias": {
786 | "dev-master": "4.0-dev"
787 | }
788 | },
789 | "autoload": {
790 | "psr-4": {
791 | "Symfony\\Component\\Config\\": ""
792 | },
793 | "exclude-from-classmap": [
794 | "/Tests/"
795 | ]
796 | },
797 | "notification-url": "https://packagist.org/downloads/",
798 | "license": [
799 | "MIT"
800 | ],
801 | "authors": [
802 | {
803 | "name": "Fabien Potencier",
804 | "email": "fabien@symfony.com"
805 | },
806 | {
807 | "name": "Symfony Community",
808 | "homepage": "https://symfony.com/contributors"
809 | }
810 | ],
811 | "description": "Symfony Config Component",
812 | "homepage": "https://symfony.com",
813 | "time": "2017-12-14T19:48:22+00:00"
814 | },
815 | {
816 | "name": "symfony/console",
817 | "version": "v4.0.2",
818 | "source": {
819 | "type": "git",
820 | "url": "https://github.com/symfony/console.git",
821 | "reference": "de8cf039eacdec59d83f7def67e3b8ff5ed46714"
822 | },
823 | "dist": {
824 | "type": "zip",
825 | "url": "https://api.github.com/repos/symfony/console/zipball/de8cf039eacdec59d83f7def67e3b8ff5ed46714",
826 | "reference": "de8cf039eacdec59d83f7def67e3b8ff5ed46714",
827 | "shasum": ""
828 | },
829 | "require": {
830 | "php": "^7.1.3",
831 | "symfony/polyfill-mbstring": "~1.0"
832 | },
833 | "conflict": {
834 | "symfony/dependency-injection": "<3.4",
835 | "symfony/process": "<3.3"
836 | },
837 | "require-dev": {
838 | "psr/log": "~1.0",
839 | "symfony/config": "~3.4|~4.0",
840 | "symfony/dependency-injection": "~3.4|~4.0",
841 | "symfony/event-dispatcher": "~3.4|~4.0",
842 | "symfony/lock": "~3.4|~4.0",
843 | "symfony/process": "~3.4|~4.0"
844 | },
845 | "suggest": {
846 | "psr/log": "For using the console logger",
847 | "symfony/event-dispatcher": "",
848 | "symfony/lock": "",
849 | "symfony/process": ""
850 | },
851 | "type": "library",
852 | "extra": {
853 | "branch-alias": {
854 | "dev-master": "4.0-dev"
855 | }
856 | },
857 | "autoload": {
858 | "psr-4": {
859 | "Symfony\\Component\\Console\\": ""
860 | },
861 | "exclude-from-classmap": [
862 | "/Tests/"
863 | ]
864 | },
865 | "notification-url": "https://packagist.org/downloads/",
866 | "license": [
867 | "MIT"
868 | ],
869 | "authors": [
870 | {
871 | "name": "Fabien Potencier",
872 | "email": "fabien@symfony.com"
873 | },
874 | {
875 | "name": "Symfony Community",
876 | "homepage": "https://symfony.com/contributors"
877 | }
878 | ],
879 | "description": "Symfony Console Component",
880 | "homepage": "https://symfony.com",
881 | "time": "2017-12-14T19:48:22+00:00"
882 | },
883 | {
884 | "name": "symfony/debug",
885 | "version": "v4.0.2",
886 | "source": {
887 | "type": "git",
888 | "url": "https://github.com/symfony/debug.git",
889 | "reference": "8c3e709209ce3b952a31c0f4a31ac7703c3d0226"
890 | },
891 | "dist": {
892 | "type": "zip",
893 | "url": "https://api.github.com/repos/symfony/debug/zipball/8c3e709209ce3b952a31c0f4a31ac7703c3d0226",
894 | "reference": "8c3e709209ce3b952a31c0f4a31ac7703c3d0226",
895 | "shasum": ""
896 | },
897 | "require": {
898 | "php": "^7.1.3",
899 | "psr/log": "~1.0"
900 | },
901 | "conflict": {
902 | "symfony/http-kernel": "<3.4"
903 | },
904 | "require-dev": {
905 | "symfony/http-kernel": "~3.4|~4.0"
906 | },
907 | "type": "library",
908 | "extra": {
909 | "branch-alias": {
910 | "dev-master": "4.0-dev"
911 | }
912 | },
913 | "autoload": {
914 | "psr-4": {
915 | "Symfony\\Component\\Debug\\": ""
916 | },
917 | "exclude-from-classmap": [
918 | "/Tests/"
919 | ]
920 | },
921 | "notification-url": "https://packagist.org/downloads/",
922 | "license": [
923 | "MIT"
924 | ],
925 | "authors": [
926 | {
927 | "name": "Fabien Potencier",
928 | "email": "fabien@symfony.com"
929 | },
930 | {
931 | "name": "Symfony Community",
932 | "homepage": "https://symfony.com/contributors"
933 | }
934 | ],
935 | "description": "Symfony Debug Component",
936 | "homepage": "https://symfony.com",
937 | "time": "2017-12-12T08:41:51+00:00"
938 | },
939 | {
940 | "name": "symfony/dependency-injection",
941 | "version": "v4.0.2",
942 | "source": {
943 | "type": "git",
944 | "url": "https://github.com/symfony/dependency-injection.git",
945 | "reference": "d2fa088b5fd7d429974a36bf1a9846b912d9d124"
946 | },
947 | "dist": {
948 | "type": "zip",
949 | "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/d2fa088b5fd7d429974a36bf1a9846b912d9d124",
950 | "reference": "d2fa088b5fd7d429974a36bf1a9846b912d9d124",
951 | "shasum": ""
952 | },
953 | "require": {
954 | "php": "^7.1.3",
955 | "psr/container": "^1.0"
956 | },
957 | "conflict": {
958 | "symfony/config": "<3.4",
959 | "symfony/finder": "<3.4",
960 | "symfony/proxy-manager-bridge": "<3.4",
961 | "symfony/yaml": "<3.4"
962 | },
963 | "provide": {
964 | "psr/container-implementation": "1.0"
965 | },
966 | "require-dev": {
967 | "symfony/config": "~3.4|~4.0",
968 | "symfony/expression-language": "~3.4|~4.0",
969 | "symfony/yaml": "~3.4|~4.0"
970 | },
971 | "suggest": {
972 | "symfony/config": "",
973 | "symfony/expression-language": "For using expressions in service container configuration",
974 | "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required",
975 | "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them",
976 | "symfony/yaml": ""
977 | },
978 | "type": "library",
979 | "extra": {
980 | "branch-alias": {
981 | "dev-master": "4.0-dev"
982 | }
983 | },
984 | "autoload": {
985 | "psr-4": {
986 | "Symfony\\Component\\DependencyInjection\\": ""
987 | },
988 | "exclude-from-classmap": [
989 | "/Tests/"
990 | ]
991 | },
992 | "notification-url": "https://packagist.org/downloads/",
993 | "license": [
994 | "MIT"
995 | ],
996 | "authors": [
997 | {
998 | "name": "Fabien Potencier",
999 | "email": "fabien@symfony.com"
1000 | },
1001 | {
1002 | "name": "Symfony Community",
1003 | "homepage": "https://symfony.com/contributors"
1004 | }
1005 | ],
1006 | "description": "Symfony DependencyInjection Component",
1007 | "homepage": "https://symfony.com",
1008 | "time": "2017-12-14T19:48:22+00:00"
1009 | },
1010 | {
1011 | "name": "symfony/event-dispatcher",
1012 | "version": "v4.0.2",
1013 | "source": {
1014 | "type": "git",
1015 | "url": "https://github.com/symfony/event-dispatcher.git",
1016 | "reference": "d4face19ed8002eec8280bc1c5ec18130472bf43"
1017 | },
1018 | "dist": {
1019 | "type": "zip",
1020 | "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d4face19ed8002eec8280bc1c5ec18130472bf43",
1021 | "reference": "d4face19ed8002eec8280bc1c5ec18130472bf43",
1022 | "shasum": ""
1023 | },
1024 | "require": {
1025 | "php": "^7.1.3"
1026 | },
1027 | "conflict": {
1028 | "symfony/dependency-injection": "<3.4"
1029 | },
1030 | "require-dev": {
1031 | "psr/log": "~1.0",
1032 | "symfony/config": "~3.4|~4.0",
1033 | "symfony/dependency-injection": "~3.4|~4.0",
1034 | "symfony/expression-language": "~3.4|~4.0",
1035 | "symfony/stopwatch": "~3.4|~4.0"
1036 | },
1037 | "suggest": {
1038 | "symfony/dependency-injection": "",
1039 | "symfony/http-kernel": ""
1040 | },
1041 | "type": "library",
1042 | "extra": {
1043 | "branch-alias": {
1044 | "dev-master": "4.0-dev"
1045 | }
1046 | },
1047 | "autoload": {
1048 | "psr-4": {
1049 | "Symfony\\Component\\EventDispatcher\\": ""
1050 | },
1051 | "exclude-from-classmap": [
1052 | "/Tests/"
1053 | ]
1054 | },
1055 | "notification-url": "https://packagist.org/downloads/",
1056 | "license": [
1057 | "MIT"
1058 | ],
1059 | "authors": [
1060 | {
1061 | "name": "Fabien Potencier",
1062 | "email": "fabien@symfony.com"
1063 | },
1064 | {
1065 | "name": "Symfony Community",
1066 | "homepage": "https://symfony.com/contributors"
1067 | }
1068 | ],
1069 | "description": "Symfony EventDispatcher Component",
1070 | "homepage": "https://symfony.com",
1071 | "time": "2017-12-14T19:48:22+00:00"
1072 | },
1073 | {
1074 | "name": "symfony/filesystem",
1075 | "version": "v4.0.2",
1076 | "source": {
1077 | "type": "git",
1078 | "url": "https://github.com/symfony/filesystem.git",
1079 | "reference": "8c2868641d0c4885eee9c12a89c2b695eb1985cd"
1080 | },
1081 | "dist": {
1082 | "type": "zip",
1083 | "url": "https://api.github.com/repos/symfony/filesystem/zipball/8c2868641d0c4885eee9c12a89c2b695eb1985cd",
1084 | "reference": "8c2868641d0c4885eee9c12a89c2b695eb1985cd",
1085 | "shasum": ""
1086 | },
1087 | "require": {
1088 | "php": "^7.1.3"
1089 | },
1090 | "type": "library",
1091 | "extra": {
1092 | "branch-alias": {
1093 | "dev-master": "4.0-dev"
1094 | }
1095 | },
1096 | "autoload": {
1097 | "psr-4": {
1098 | "Symfony\\Component\\Filesystem\\": ""
1099 | },
1100 | "exclude-from-classmap": [
1101 | "/Tests/"
1102 | ]
1103 | },
1104 | "notification-url": "https://packagist.org/downloads/",
1105 | "license": [
1106 | "MIT"
1107 | ],
1108 | "authors": [
1109 | {
1110 | "name": "Fabien Potencier",
1111 | "email": "fabien@symfony.com"
1112 | },
1113 | {
1114 | "name": "Symfony Community",
1115 | "homepage": "https://symfony.com/contributors"
1116 | }
1117 | ],
1118 | "description": "Symfony Filesystem Component",
1119 | "homepage": "https://symfony.com",
1120 | "time": "2017-12-14T19:48:22+00:00"
1121 | },
1122 | {
1123 | "name": "symfony/finder",
1124 | "version": "v4.0.2",
1125 | "source": {
1126 | "type": "git",
1127 | "url": "https://github.com/symfony/finder.git",
1128 | "reference": "c9cdda4dc4a3182d8d6daeebce4a25fef078ea4c"
1129 | },
1130 | "dist": {
1131 | "type": "zip",
1132 | "url": "https://api.github.com/repos/symfony/finder/zipball/c9cdda4dc4a3182d8d6daeebce4a25fef078ea4c",
1133 | "reference": "c9cdda4dc4a3182d8d6daeebce4a25fef078ea4c",
1134 | "shasum": ""
1135 | },
1136 | "require": {
1137 | "php": "^7.1.3"
1138 | },
1139 | "type": "library",
1140 | "extra": {
1141 | "branch-alias": {
1142 | "dev-master": "4.0-dev"
1143 | }
1144 | },
1145 | "autoload": {
1146 | "psr-4": {
1147 | "Symfony\\Component\\Finder\\": ""
1148 | },
1149 | "exclude-from-classmap": [
1150 | "/Tests/"
1151 | ]
1152 | },
1153 | "notification-url": "https://packagist.org/downloads/",
1154 | "license": [
1155 | "MIT"
1156 | ],
1157 | "authors": [
1158 | {
1159 | "name": "Fabien Potencier",
1160 | "email": "fabien@symfony.com"
1161 | },
1162 | {
1163 | "name": "Symfony Community",
1164 | "homepage": "https://symfony.com/contributors"
1165 | }
1166 | ],
1167 | "description": "Symfony Finder Component",
1168 | "homepage": "https://symfony.com",
1169 | "time": "2017-11-07T14:45:01+00:00"
1170 | },
1171 | {
1172 | "name": "symfony/framework-bundle",
1173 | "version": "v4.0.2",
1174 | "source": {
1175 | "type": "git",
1176 | "url": "https://github.com/symfony/framework-bundle.git",
1177 | "reference": "82e45a486a2cbdab5d43512bea10af1681dcd8e2"
1178 | },
1179 | "dist": {
1180 | "type": "zip",
1181 | "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/82e45a486a2cbdab5d43512bea10af1681dcd8e2",
1182 | "reference": "82e45a486a2cbdab5d43512bea10af1681dcd8e2",
1183 | "shasum": ""
1184 | },
1185 | "require": {
1186 | "ext-xml": "*",
1187 | "php": "^7.1.3",
1188 | "symfony/cache": "~3.4|~4.0",
1189 | "symfony/config": "~3.4|~4.0",
1190 | "symfony/dependency-injection": "~3.4|~4.0",
1191 | "symfony/event-dispatcher": "~3.4|~4.0",
1192 | "symfony/filesystem": "~3.4|~4.0",
1193 | "symfony/finder": "~3.4|~4.0",
1194 | "symfony/http-foundation": "~3.4|~4.0",
1195 | "symfony/http-kernel": "~3.4|~4.0",
1196 | "symfony/polyfill-mbstring": "~1.0",
1197 | "symfony/routing": "~3.4|~4.0"
1198 | },
1199 | "conflict": {
1200 | "phpdocumentor/reflection-docblock": "<3.0",
1201 | "phpdocumentor/type-resolver": "<0.2.1",
1202 | "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0",
1203 | "symfony/asset": "<3.4",
1204 | "symfony/console": "<3.4",
1205 | "symfony/form": "<3.4",
1206 | "symfony/property-info": "<3.4",
1207 | "symfony/serializer": "<3.4",
1208 | "symfony/stopwatch": "<3.4",
1209 | "symfony/translation": "<3.4",
1210 | "symfony/validator": "<3.4",
1211 | "symfony/workflow": "<3.4"
1212 | },
1213 | "require-dev": {
1214 | "doctrine/annotations": "~1.0",
1215 | "doctrine/cache": "~1.0",
1216 | "fig/link-util": "^1.0",
1217 | "phpdocumentor/reflection-docblock": "^3.0|^4.0",
1218 | "symfony/asset": "~3.4|~4.0",
1219 | "symfony/browser-kit": "~3.4|~4.0",
1220 | "symfony/console": "~3.4|~4.0",
1221 | "symfony/css-selector": "~3.4|~4.0",
1222 | "symfony/dom-crawler": "~3.4|~4.0",
1223 | "symfony/expression-language": "~3.4|~4.0",
1224 | "symfony/form": "~3.4|~4.0",
1225 | "symfony/lock": "~3.4|~4.0",
1226 | "symfony/polyfill-intl-icu": "~1.0",
1227 | "symfony/process": "~3.4|~4.0",
1228 | "symfony/property-info": "~3.4|~4.0",
1229 | "symfony/security": "~3.4|~4.0",
1230 | "symfony/security-core": "~3.4|~4.0",
1231 | "symfony/security-csrf": "~3.4|~4.0",
1232 | "symfony/serializer": "~3.4|~4.0",
1233 | "symfony/stopwatch": "~3.4|~4.0",
1234 | "symfony/templating": "~3.4|~4.0",
1235 | "symfony/translation": "~3.4|~4.0",
1236 | "symfony/validator": "~3.4|~4.0",
1237 | "symfony/var-dumper": "~3.4|~4.0",
1238 | "symfony/web-link": "~3.4|~4.0",
1239 | "symfony/workflow": "~3.4|~4.0",
1240 | "symfony/yaml": "~3.4|~4.0",
1241 | "twig/twig": "~1.34|~2.4"
1242 | },
1243 | "suggest": {
1244 | "ext-apcu": "For best performance of the system caches",
1245 | "symfony/console": "For using the console commands",
1246 | "symfony/form": "For using forms",
1247 | "symfony/property-info": "For using the property_info service",
1248 | "symfony/serializer": "For using the serializer service",
1249 | "symfony/validator": "For using validation",
1250 | "symfony/web-link": "For using web links, features such as preloading, prefetching or prerendering",
1251 | "symfony/yaml": "For using the debug:config and lint:yaml commands"
1252 | },
1253 | "type": "symfony-bundle",
1254 | "extra": {
1255 | "branch-alias": {
1256 | "dev-master": "4.0-dev"
1257 | }
1258 | },
1259 | "autoload": {
1260 | "psr-4": {
1261 | "Symfony\\Bundle\\FrameworkBundle\\": ""
1262 | },
1263 | "exclude-from-classmap": [
1264 | "/Tests/"
1265 | ]
1266 | },
1267 | "notification-url": "https://packagist.org/downloads/",
1268 | "license": [
1269 | "MIT"
1270 | ],
1271 | "authors": [
1272 | {
1273 | "name": "Fabien Potencier",
1274 | "email": "fabien@symfony.com"
1275 | },
1276 | {
1277 | "name": "Symfony Community",
1278 | "homepage": "https://symfony.com/contributors"
1279 | }
1280 | ],
1281 | "description": "Symfony FrameworkBundle",
1282 | "homepage": "https://symfony.com",
1283 | "time": "2017-12-15T01:44:28+00:00"
1284 | },
1285 | {
1286 | "name": "symfony/http-foundation",
1287 | "version": "v4.0.2",
1288 | "source": {
1289 | "type": "git",
1290 | "url": "https://github.com/symfony/http-foundation.git",
1291 | "reference": "aba96bd07be7796c81ca0ceafa7d48a6fef036c8"
1292 | },
1293 | "dist": {
1294 | "type": "zip",
1295 | "url": "https://api.github.com/repos/symfony/http-foundation/zipball/aba96bd07be7796c81ca0ceafa7d48a6fef036c8",
1296 | "reference": "aba96bd07be7796c81ca0ceafa7d48a6fef036c8",
1297 | "shasum": ""
1298 | },
1299 | "require": {
1300 | "php": "^7.1.3",
1301 | "symfony/polyfill-mbstring": "~1.1"
1302 | },
1303 | "require-dev": {
1304 | "symfony/expression-language": "~3.4|~4.0"
1305 | },
1306 | "type": "library",
1307 | "extra": {
1308 | "branch-alias": {
1309 | "dev-master": "4.0-dev"
1310 | }
1311 | },
1312 | "autoload": {
1313 | "psr-4": {
1314 | "Symfony\\Component\\HttpFoundation\\": ""
1315 | },
1316 | "exclude-from-classmap": [
1317 | "/Tests/"
1318 | ]
1319 | },
1320 | "notification-url": "https://packagist.org/downloads/",
1321 | "license": [
1322 | "MIT"
1323 | ],
1324 | "authors": [
1325 | {
1326 | "name": "Fabien Potencier",
1327 | "email": "fabien@symfony.com"
1328 | },
1329 | {
1330 | "name": "Symfony Community",
1331 | "homepage": "https://symfony.com/contributors"
1332 | }
1333 | ],
1334 | "description": "Symfony HttpFoundation Component",
1335 | "homepage": "https://symfony.com",
1336 | "time": "2017-12-14T19:48:22+00:00"
1337 | },
1338 | {
1339 | "name": "symfony/http-kernel",
1340 | "version": "v4.0.2",
1341 | "source": {
1342 | "type": "git",
1343 | "url": "https://github.com/symfony/http-kernel.git",
1344 | "reference": "f2ea7461cdcad837b8bc6022b59d5eb8c9618aa5"
1345 | },
1346 | "dist": {
1347 | "type": "zip",
1348 | "url": "https://api.github.com/repos/symfony/http-kernel/zipball/f2ea7461cdcad837b8bc6022b59d5eb8c9618aa5",
1349 | "reference": "f2ea7461cdcad837b8bc6022b59d5eb8c9618aa5",
1350 | "shasum": ""
1351 | },
1352 | "require": {
1353 | "php": "^7.1.3",
1354 | "psr/log": "~1.0",
1355 | "symfony/debug": "~3.4|~4.0",
1356 | "symfony/event-dispatcher": "~3.4|~4.0",
1357 | "symfony/http-foundation": "~3.4|~4.0"
1358 | },
1359 | "conflict": {
1360 | "symfony/config": "<3.4",
1361 | "symfony/dependency-injection": "<3.4",
1362 | "symfony/var-dumper": "<3.4",
1363 | "twig/twig": "<1.34|<2.4,>=2"
1364 | },
1365 | "provide": {
1366 | "psr/log-implementation": "1.0"
1367 | },
1368 | "require-dev": {
1369 | "psr/cache": "~1.0",
1370 | "symfony/browser-kit": "~3.4|~4.0",
1371 | "symfony/config": "~3.4|~4.0",
1372 | "symfony/console": "~3.4|~4.0",
1373 | "symfony/css-selector": "~3.4|~4.0",
1374 | "symfony/dependency-injection": "~3.4|~4.0",
1375 | "symfony/dom-crawler": "~3.4|~4.0",
1376 | "symfony/expression-language": "~3.4|~4.0",
1377 | "symfony/finder": "~3.4|~4.0",
1378 | "symfony/process": "~3.4|~4.0",
1379 | "symfony/routing": "~3.4|~4.0",
1380 | "symfony/stopwatch": "~3.4|~4.0",
1381 | "symfony/templating": "~3.4|~4.0",
1382 | "symfony/translation": "~3.4|~4.0",
1383 | "symfony/var-dumper": "~3.4|~4.0"
1384 | },
1385 | "suggest": {
1386 | "symfony/browser-kit": "",
1387 | "symfony/config": "",
1388 | "symfony/console": "",
1389 | "symfony/dependency-injection": "",
1390 | "symfony/var-dumper": ""
1391 | },
1392 | "type": "library",
1393 | "extra": {
1394 | "branch-alias": {
1395 | "dev-master": "4.0-dev"
1396 | }
1397 | },
1398 | "autoload": {
1399 | "psr-4": {
1400 | "Symfony\\Component\\HttpKernel\\": ""
1401 | },
1402 | "exclude-from-classmap": [
1403 | "/Tests/"
1404 | ]
1405 | },
1406 | "notification-url": "https://packagist.org/downloads/",
1407 | "license": [
1408 | "MIT"
1409 | ],
1410 | "authors": [
1411 | {
1412 | "name": "Fabien Potencier",
1413 | "email": "fabien@symfony.com"
1414 | },
1415 | {
1416 | "name": "Symfony Community",
1417 | "homepage": "https://symfony.com/contributors"
1418 | }
1419 | ],
1420 | "description": "Symfony HttpKernel Component",
1421 | "homepage": "https://symfony.com",
1422 | "time": "2017-12-15T03:06:17+00:00"
1423 | },
1424 | {
1425 | "name": "symfony/polyfill-mbstring",
1426 | "version": "v1.6.0",
1427 | "source": {
1428 | "type": "git",
1429 | "url": "https://github.com/symfony/polyfill-mbstring.git",
1430 | "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296"
1431 | },
1432 | "dist": {
1433 | "type": "zip",
1434 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296",
1435 | "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296",
1436 | "shasum": ""
1437 | },
1438 | "require": {
1439 | "php": ">=5.3.3"
1440 | },
1441 | "suggest": {
1442 | "ext-mbstring": "For best performance"
1443 | },
1444 | "type": "library",
1445 | "extra": {
1446 | "branch-alias": {
1447 | "dev-master": "1.6-dev"
1448 | }
1449 | },
1450 | "autoload": {
1451 | "psr-4": {
1452 | "Symfony\\Polyfill\\Mbstring\\": ""
1453 | },
1454 | "files": [
1455 | "bootstrap.php"
1456 | ]
1457 | },
1458 | "notification-url": "https://packagist.org/downloads/",
1459 | "license": [
1460 | "MIT"
1461 | ],
1462 | "authors": [
1463 | {
1464 | "name": "Nicolas Grekas",
1465 | "email": "p@tchwork.com"
1466 | },
1467 | {
1468 | "name": "Symfony Community",
1469 | "homepage": "https://symfony.com/contributors"
1470 | }
1471 | ],
1472 | "description": "Symfony polyfill for the Mbstring extension",
1473 | "homepage": "https://symfony.com",
1474 | "keywords": [
1475 | "compatibility",
1476 | "mbstring",
1477 | "polyfill",
1478 | "portable",
1479 | "shim"
1480 | ],
1481 | "time": "2017-10-11T12:05:26+00:00"
1482 | },
1483 | {
1484 | "name": "symfony/routing",
1485 | "version": "v4.0.2",
1486 | "source": {
1487 | "type": "git",
1488 | "url": "https://github.com/symfony/routing.git",
1489 | "reference": "972810def5cae044d19195045f7eb418141bf37b"
1490 | },
1491 | "dist": {
1492 | "type": "zip",
1493 | "url": "https://api.github.com/repos/symfony/routing/zipball/972810def5cae044d19195045f7eb418141bf37b",
1494 | "reference": "972810def5cae044d19195045f7eb418141bf37b",
1495 | "shasum": ""
1496 | },
1497 | "require": {
1498 | "php": "^7.1.3"
1499 | },
1500 | "conflict": {
1501 | "symfony/config": "<3.4",
1502 | "symfony/dependency-injection": "<3.4",
1503 | "symfony/yaml": "<3.4"
1504 | },
1505 | "require-dev": {
1506 | "doctrine/annotations": "~1.0",
1507 | "doctrine/common": "~2.2",
1508 | "psr/log": "~1.0",
1509 | "symfony/config": "~3.4|~4.0",
1510 | "symfony/dependency-injection": "~3.4|~4.0",
1511 | "symfony/expression-language": "~3.4|~4.0",
1512 | "symfony/http-foundation": "~3.4|~4.0",
1513 | "symfony/yaml": "~3.4|~4.0"
1514 | },
1515 | "suggest": {
1516 | "doctrine/annotations": "For using the annotation loader",
1517 | "symfony/config": "For using the all-in-one router or any loader",
1518 | "symfony/dependency-injection": "For loading routes from a service",
1519 | "symfony/expression-language": "For using expression matching",
1520 | "symfony/http-foundation": "For using a Symfony Request object",
1521 | "symfony/yaml": "For using the YAML loader"
1522 | },
1523 | "type": "library",
1524 | "extra": {
1525 | "branch-alias": {
1526 | "dev-master": "4.0-dev"
1527 | }
1528 | },
1529 | "autoload": {
1530 | "psr-4": {
1531 | "Symfony\\Component\\Routing\\": ""
1532 | },
1533 | "exclude-from-classmap": [
1534 | "/Tests/"
1535 | ]
1536 | },
1537 | "notification-url": "https://packagist.org/downloads/",
1538 | "license": [
1539 | "MIT"
1540 | ],
1541 | "authors": [
1542 | {
1543 | "name": "Fabien Potencier",
1544 | "email": "fabien@symfony.com"
1545 | },
1546 | {
1547 | "name": "Symfony Community",
1548 | "homepage": "https://symfony.com/contributors"
1549 | }
1550 | ],
1551 | "description": "Symfony Routing Component",
1552 | "homepage": "https://symfony.com",
1553 | "keywords": [
1554 | "router",
1555 | "routing",
1556 | "uri",
1557 | "url"
1558 | ],
1559 | "time": "2017-12-14T22:39:22+00:00"
1560 | }
1561 | ],
1562 | "packages-dev": [
1563 | {
1564 | "name": "doctrine/cache",
1565 | "version": "v1.7.1",
1566 | "source": {
1567 | "type": "git",
1568 | "url": "https://github.com/doctrine/cache.git",
1569 | "reference": "b3217d58609e9c8e661cd41357a54d926c4a2a1a"
1570 | },
1571 | "dist": {
1572 | "type": "zip",
1573 | "url": "https://api.github.com/repos/doctrine/cache/zipball/b3217d58609e9c8e661cd41357a54d926c4a2a1a",
1574 | "reference": "b3217d58609e9c8e661cd41357a54d926c4a2a1a",
1575 | "shasum": ""
1576 | },
1577 | "require": {
1578 | "php": "~7.1"
1579 | },
1580 | "conflict": {
1581 | "doctrine/common": ">2.2,<2.4"
1582 | },
1583 | "require-dev": {
1584 | "alcaeus/mongo-php-adapter": "^1.1",
1585 | "mongodb/mongodb": "^1.1",
1586 | "phpunit/phpunit": "^5.7",
1587 | "predis/predis": "~1.0"
1588 | },
1589 | "suggest": {
1590 | "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver"
1591 | },
1592 | "type": "library",
1593 | "extra": {
1594 | "branch-alias": {
1595 | "dev-master": "1.7.x-dev"
1596 | }
1597 | },
1598 | "autoload": {
1599 | "psr-4": {
1600 | "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache"
1601 | }
1602 | },
1603 | "notification-url": "https://packagist.org/downloads/",
1604 | "license": [
1605 | "MIT"
1606 | ],
1607 | "authors": [
1608 | {
1609 | "name": "Roman Borschel",
1610 | "email": "roman@code-factory.org"
1611 | },
1612 | {
1613 | "name": "Benjamin Eberlei",
1614 | "email": "kontakt@beberlei.de"
1615 | },
1616 | {
1617 | "name": "Guilherme Blanco",
1618 | "email": "guilhermeblanco@gmail.com"
1619 | },
1620 | {
1621 | "name": "Jonathan Wage",
1622 | "email": "jonwage@gmail.com"
1623 | },
1624 | {
1625 | "name": "Johannes Schmitt",
1626 | "email": "schmittjoh@gmail.com"
1627 | }
1628 | ],
1629 | "description": "Caching library offering an object-oriented API for many cache backends",
1630 | "homepage": "http://www.doctrine-project.org",
1631 | "keywords": [
1632 | "cache",
1633 | "caching"
1634 | ],
1635 | "time": "2017-08-25T07:02:50+00:00"
1636 | },
1637 | {
1638 | "name": "doctrine/collections",
1639 | "version": "v1.5.0",
1640 | "source": {
1641 | "type": "git",
1642 | "url": "https://github.com/doctrine/collections.git",
1643 | "reference": "a01ee38fcd999f34d9bfbcee59dbda5105449cbf"
1644 | },
1645 | "dist": {
1646 | "type": "zip",
1647 | "url": "https://api.github.com/repos/doctrine/collections/zipball/a01ee38fcd999f34d9bfbcee59dbda5105449cbf",
1648 | "reference": "a01ee38fcd999f34d9bfbcee59dbda5105449cbf",
1649 | "shasum": ""
1650 | },
1651 | "require": {
1652 | "php": "^7.1"
1653 | },
1654 | "require-dev": {
1655 | "doctrine/coding-standard": "~0.1@dev",
1656 | "phpunit/phpunit": "^5.7"
1657 | },
1658 | "type": "library",
1659 | "extra": {
1660 | "branch-alias": {
1661 | "dev-master": "1.3.x-dev"
1662 | }
1663 | },
1664 | "autoload": {
1665 | "psr-0": {
1666 | "Doctrine\\Common\\Collections\\": "lib/"
1667 | }
1668 | },
1669 | "notification-url": "https://packagist.org/downloads/",
1670 | "license": [
1671 | "MIT"
1672 | ],
1673 | "authors": [
1674 | {
1675 | "name": "Roman Borschel",
1676 | "email": "roman@code-factory.org"
1677 | },
1678 | {
1679 | "name": "Benjamin Eberlei",
1680 | "email": "kontakt@beberlei.de"
1681 | },
1682 | {
1683 | "name": "Guilherme Blanco",
1684 | "email": "guilhermeblanco@gmail.com"
1685 | },
1686 | {
1687 | "name": "Jonathan Wage",
1688 | "email": "jonwage@gmail.com"
1689 | },
1690 | {
1691 | "name": "Johannes Schmitt",
1692 | "email": "schmittjoh@gmail.com"
1693 | }
1694 | ],
1695 | "description": "Collections Abstraction library",
1696 | "homepage": "http://www.doctrine-project.org",
1697 | "keywords": [
1698 | "array",
1699 | "collections",
1700 | "iterator"
1701 | ],
1702 | "time": "2017-07-22T10:37:32+00:00"
1703 | },
1704 | {
1705 | "name": "doctrine/common",
1706 | "version": "v2.8.1",
1707 | "source": {
1708 | "type": "git",
1709 | "url": "https://github.com/doctrine/common.git",
1710 | "reference": "f68c297ce6455e8fd794aa8ffaf9fa458f6ade66"
1711 | },
1712 | "dist": {
1713 | "type": "zip",
1714 | "url": "https://api.github.com/repos/doctrine/common/zipball/f68c297ce6455e8fd794aa8ffaf9fa458f6ade66",
1715 | "reference": "f68c297ce6455e8fd794aa8ffaf9fa458f6ade66",
1716 | "shasum": ""
1717 | },
1718 | "require": {
1719 | "doctrine/annotations": "1.*",
1720 | "doctrine/cache": "1.*",
1721 | "doctrine/collections": "1.*",
1722 | "doctrine/inflector": "1.*",
1723 | "doctrine/lexer": "1.*",
1724 | "php": "~7.1"
1725 | },
1726 | "require-dev": {
1727 | "phpunit/phpunit": "^5.7"
1728 | },
1729 | "type": "library",
1730 | "extra": {
1731 | "branch-alias": {
1732 | "dev-master": "2.8.x-dev"
1733 | }
1734 | },
1735 | "autoload": {
1736 | "psr-4": {
1737 | "Doctrine\\Common\\": "lib/Doctrine/Common"
1738 | }
1739 | },
1740 | "notification-url": "https://packagist.org/downloads/",
1741 | "license": [
1742 | "MIT"
1743 | ],
1744 | "authors": [
1745 | {
1746 | "name": "Roman Borschel",
1747 | "email": "roman@code-factory.org"
1748 | },
1749 | {
1750 | "name": "Benjamin Eberlei",
1751 | "email": "kontakt@beberlei.de"
1752 | },
1753 | {
1754 | "name": "Guilherme Blanco",
1755 | "email": "guilhermeblanco@gmail.com"
1756 | },
1757 | {
1758 | "name": "Jonathan Wage",
1759 | "email": "jonwage@gmail.com"
1760 | },
1761 | {
1762 | "name": "Johannes Schmitt",
1763 | "email": "schmittjoh@gmail.com"
1764 | }
1765 | ],
1766 | "description": "Common Library for Doctrine projects",
1767 | "homepage": "http://www.doctrine-project.org",
1768 | "keywords": [
1769 | "annotations",
1770 | "collections",
1771 | "eventmanager",
1772 | "persistence",
1773 | "spl"
1774 | ],
1775 | "time": "2017-08-31T08:43:38+00:00"
1776 | },
1777 | {
1778 | "name": "doctrine/dbal",
1779 | "version": "v2.6.3",
1780 | "source": {
1781 | "type": "git",
1782 | "url": "https://github.com/doctrine/dbal.git",
1783 | "reference": "e3eed9b1facbb0ced3a0995244843a189e7d1b13"
1784 | },
1785 | "dist": {
1786 | "type": "zip",
1787 | "url": "https://api.github.com/repos/doctrine/dbal/zipball/e3eed9b1facbb0ced3a0995244843a189e7d1b13",
1788 | "reference": "e3eed9b1facbb0ced3a0995244843a189e7d1b13",
1789 | "shasum": ""
1790 | },
1791 | "require": {
1792 | "doctrine/common": "^2.7.1",
1793 | "ext-pdo": "*",
1794 | "php": "^7.1"
1795 | },
1796 | "require-dev": {
1797 | "phpunit/phpunit": "^5.4.6",
1798 | "phpunit/phpunit-mock-objects": "!=3.2.4,!=3.2.5",
1799 | "symfony/console": "2.*||^3.0"
1800 | },
1801 | "suggest": {
1802 | "symfony/console": "For helpful console commands such as SQL execution and import of files."
1803 | },
1804 | "bin": [
1805 | "bin/doctrine-dbal"
1806 | ],
1807 | "type": "library",
1808 | "extra": {
1809 | "branch-alias": {
1810 | "dev-master": "2.6.x-dev"
1811 | }
1812 | },
1813 | "autoload": {
1814 | "psr-0": {
1815 | "Doctrine\\DBAL\\": "lib/"
1816 | }
1817 | },
1818 | "notification-url": "https://packagist.org/downloads/",
1819 | "license": [
1820 | "MIT"
1821 | ],
1822 | "authors": [
1823 | {
1824 | "name": "Roman Borschel",
1825 | "email": "roman@code-factory.org"
1826 | },
1827 | {
1828 | "name": "Benjamin Eberlei",
1829 | "email": "kontakt@beberlei.de"
1830 | },
1831 | {
1832 | "name": "Guilherme Blanco",
1833 | "email": "guilhermeblanco@gmail.com"
1834 | },
1835 | {
1836 | "name": "Jonathan Wage",
1837 | "email": "jonwage@gmail.com"
1838 | }
1839 | ],
1840 | "description": "Database Abstraction Layer",
1841 | "homepage": "http://www.doctrine-project.org",
1842 | "keywords": [
1843 | "database",
1844 | "dbal",
1845 | "persistence",
1846 | "queryobject"
1847 | ],
1848 | "time": "2017-11-19T13:38:54+00:00"
1849 | },
1850 | {
1851 | "name": "doctrine/inflector",
1852 | "version": "v1.2.0",
1853 | "source": {
1854 | "type": "git",
1855 | "url": "https://github.com/doctrine/inflector.git",
1856 | "reference": "e11d84c6e018beedd929cff5220969a3c6d1d462"
1857 | },
1858 | "dist": {
1859 | "type": "zip",
1860 | "url": "https://api.github.com/repos/doctrine/inflector/zipball/e11d84c6e018beedd929cff5220969a3c6d1d462",
1861 | "reference": "e11d84c6e018beedd929cff5220969a3c6d1d462",
1862 | "shasum": ""
1863 | },
1864 | "require": {
1865 | "php": "^7.0"
1866 | },
1867 | "require-dev": {
1868 | "phpunit/phpunit": "^6.2"
1869 | },
1870 | "type": "library",
1871 | "extra": {
1872 | "branch-alias": {
1873 | "dev-master": "1.2.x-dev"
1874 | }
1875 | },
1876 | "autoload": {
1877 | "psr-4": {
1878 | "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector"
1879 | }
1880 | },
1881 | "notification-url": "https://packagist.org/downloads/",
1882 | "license": [
1883 | "MIT"
1884 | ],
1885 | "authors": [
1886 | {
1887 | "name": "Roman Borschel",
1888 | "email": "roman@code-factory.org"
1889 | },
1890 | {
1891 | "name": "Benjamin Eberlei",
1892 | "email": "kontakt@beberlei.de"
1893 | },
1894 | {
1895 | "name": "Guilherme Blanco",
1896 | "email": "guilhermeblanco@gmail.com"
1897 | },
1898 | {
1899 | "name": "Jonathan Wage",
1900 | "email": "jonwage@gmail.com"
1901 | },
1902 | {
1903 | "name": "Johannes Schmitt",
1904 | "email": "schmittjoh@gmail.com"
1905 | }
1906 | ],
1907 | "description": "Common String Manipulations with regard to casing and singular/plural rules.",
1908 | "homepage": "http://www.doctrine-project.org",
1909 | "keywords": [
1910 | "inflection",
1911 | "pluralize",
1912 | "singularize",
1913 | "string"
1914 | ],
1915 | "time": "2017-07-22T12:18:28+00:00"
1916 | },
1917 | {
1918 | "name": "doctrine/instantiator",
1919 | "version": "1.1.0",
1920 | "source": {
1921 | "type": "git",
1922 | "url": "https://github.com/doctrine/instantiator.git",
1923 | "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda"
1924 | },
1925 | "dist": {
1926 | "type": "zip",
1927 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda",
1928 | "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda",
1929 | "shasum": ""
1930 | },
1931 | "require": {
1932 | "php": "^7.1"
1933 | },
1934 | "require-dev": {
1935 | "athletic/athletic": "~0.1.8",
1936 | "ext-pdo": "*",
1937 | "ext-phar": "*",
1938 | "phpunit/phpunit": "^6.2.3",
1939 | "squizlabs/php_codesniffer": "^3.0.2"
1940 | },
1941 | "type": "library",
1942 | "extra": {
1943 | "branch-alias": {
1944 | "dev-master": "1.2.x-dev"
1945 | }
1946 | },
1947 | "autoload": {
1948 | "psr-4": {
1949 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
1950 | }
1951 | },
1952 | "notification-url": "https://packagist.org/downloads/",
1953 | "license": [
1954 | "MIT"
1955 | ],
1956 | "authors": [
1957 | {
1958 | "name": "Marco Pivetta",
1959 | "email": "ocramius@gmail.com",
1960 | "homepage": "http://ocramius.github.com/"
1961 | }
1962 | ],
1963 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
1964 | "homepage": "https://github.com/doctrine/instantiator",
1965 | "keywords": [
1966 | "constructor",
1967 | "instantiate"
1968 | ],
1969 | "time": "2017-07-22T11:58:36+00:00"
1970 | },
1971 | {
1972 | "name": "doctrine/orm",
1973 | "version": "v2.6.0",
1974 | "source": {
1975 | "type": "git",
1976 | "url": "https://github.com/doctrine/doctrine2.git",
1977 | "reference": "374e7ace49d864dad8cddbc55346447c8a6a2083"
1978 | },
1979 | "dist": {
1980 | "type": "zip",
1981 | "url": "https://api.github.com/repos/doctrine/doctrine2/zipball/374e7ace49d864dad8cddbc55346447c8a6a2083",
1982 | "reference": "374e7ace49d864dad8cddbc55346447c8a6a2083",
1983 | "shasum": ""
1984 | },
1985 | "require": {
1986 | "doctrine/annotations": "~1.5",
1987 | "doctrine/cache": "~1.6",
1988 | "doctrine/collections": "^1.4",
1989 | "doctrine/common": "^2.7.1",
1990 | "doctrine/dbal": "^2.6",
1991 | "doctrine/instantiator": "~1.1",
1992 | "ext-pdo": "*",
1993 | "php": "^7.1",
1994 | "symfony/console": "~3.0|~4.0"
1995 | },
1996 | "require-dev": {
1997 | "doctrine/coding-standard": "^1.0",
1998 | "phpunit/phpunit": "^6.5",
1999 | "squizlabs/php_codesniffer": "^3.2",
2000 | "symfony/yaml": "~3.4|~4.0"
2001 | },
2002 | "suggest": {
2003 | "symfony/yaml": "If you want to use YAML Metadata Mapping Driver"
2004 | },
2005 | "bin": [
2006 | "bin/doctrine"
2007 | ],
2008 | "type": "library",
2009 | "extra": {
2010 | "branch-alias": {
2011 | "dev-master": "2.6.x-dev"
2012 | }
2013 | },
2014 | "autoload": {
2015 | "psr-4": {
2016 | "Doctrine\\ORM\\": "lib/Doctrine/ORM"
2017 | }
2018 | },
2019 | "notification-url": "https://packagist.org/downloads/",
2020 | "license": [
2021 | "MIT"
2022 | ],
2023 | "authors": [
2024 | {
2025 | "name": "Roman Borschel",
2026 | "email": "roman@code-factory.org"
2027 | },
2028 | {
2029 | "name": "Benjamin Eberlei",
2030 | "email": "kontakt@beberlei.de"
2031 | },
2032 | {
2033 | "name": "Guilherme Blanco",
2034 | "email": "guilhermeblanco@gmail.com"
2035 | },
2036 | {
2037 | "name": "Jonathan Wage",
2038 | "email": "jonwage@gmail.com"
2039 | },
2040 | {
2041 | "name": "Marco Pivetta",
2042 | "email": "ocramius@gmail.com"
2043 | }
2044 | ],
2045 | "description": "Object-Relational-Mapper for PHP",
2046 | "homepage": "http://www.doctrine-project.org",
2047 | "keywords": [
2048 | "database",
2049 | "orm"
2050 | ],
2051 | "time": "2017-12-20T00:38:15+00:00"
2052 | },
2053 | {
2054 | "name": "matthiasnoback/symfony-config-test",
2055 | "version": "v2.2.0",
2056 | "source": {
2057 | "type": "git",
2058 | "url": "https://github.com/SymfonyTest/SymfonyConfigTest.git",
2059 | "reference": "8d48332ed83ac3bacc99ce487ade25df2613ab1e"
2060 | },
2061 | "dist": {
2062 | "type": "zip",
2063 | "url": "https://api.github.com/repos/SymfonyTest/SymfonyConfigTest/zipball/8d48332ed83ac3bacc99ce487ade25df2613ab1e",
2064 | "reference": "8d48332ed83ac3bacc99ce487ade25df2613ab1e",
2065 | "shasum": ""
2066 | },
2067 | "require": {
2068 | "php": "^5.3|^7.0",
2069 | "sebastian/exporter": "^1.0|^2.0",
2070 | "symfony/config": "^2.3|^3.0|^4.0"
2071 | },
2072 | "require-dev": {
2073 | "phpunit/phpunit": "^4.0|^5.0"
2074 | },
2075 | "type": "library",
2076 | "autoload": {
2077 | "psr-4": {
2078 | "Matthias\\SymfonyConfigTest\\": ""
2079 | }
2080 | },
2081 | "notification-url": "https://packagist.org/downloads/",
2082 | "license": [
2083 | "MIT"
2084 | ],
2085 | "authors": [
2086 | {
2087 | "name": "Matthias Noback",
2088 | "email": "matthiasnoback@gmail.com",
2089 | "homepage": "http://php-and-symfony.matthiasnoback.nl"
2090 | }
2091 | ],
2092 | "description": "Library for testing user classes related to the Symfony Config Component",
2093 | "homepage": "https://github.com/matthiasnoback/SymfonyConfigTest",
2094 | "keywords": [
2095 | "config",
2096 | "phpunit",
2097 | "symfony"
2098 | ],
2099 | "time": "2017-11-21T18:42:45+00:00"
2100 | },
2101 | {
2102 | "name": "matthiasnoback/symfony-dependency-injection-test",
2103 | "version": "v1.2.0",
2104 | "source": {
2105 | "type": "git",
2106 | "url": "https://github.com/SymfonyTest/SymfonyDependencyInjectionTest.git",
2107 | "reference": "3c4c734eb6114a3495278ead5d0239652f73e505"
2108 | },
2109 | "dist": {
2110 | "type": "zip",
2111 | "url": "https://api.github.com/repos/SymfonyTest/SymfonyDependencyInjectionTest/zipball/3c4c734eb6114a3495278ead5d0239652f73e505",
2112 | "reference": "3c4c734eb6114a3495278ead5d0239652f73e505",
2113 | "shasum": ""
2114 | },
2115 | "require": {
2116 | "matthiasnoback/symfony-config-test": "^1.0 || ^2.0",
2117 | "sebastian/exporter": "^1.0 || ^2.0",
2118 | "symfony/config": "^2.7 || ^3.3 || ^4.0",
2119 | "symfony/dependency-injection": "^2.7 || ^3.3 || ^4.0",
2120 | "symfony/yaml": "^2.7 || ^3.3 || ^4.0"
2121 | },
2122 | "require-dev": {
2123 | "phpunit/phpunit": "^4.0 || ^5.0"
2124 | },
2125 | "type": "library",
2126 | "autoload": {
2127 | "psr-4": {
2128 | "Matthias\\SymfonyDependencyInjectionTest\\": ""
2129 | }
2130 | },
2131 | "notification-url": "https://packagist.org/downloads/",
2132 | "license": [
2133 | "MIT"
2134 | ],
2135 | "authors": [
2136 | {
2137 | "name": "Matthias Noback",
2138 | "email": "matthiasnoback@gmail.com",
2139 | "homepage": "http://php-and-symfony.matthiasnoback.nl"
2140 | }
2141 | ],
2142 | "description": "Library for testing user classes related to the Symfony Dependency Injection Component",
2143 | "homepage": "http://github.com/matthiasnoback/SymfonyDependencyInjectionTest",
2144 | "keywords": [
2145 | "Symfony2",
2146 | "dependency injection",
2147 | "phpunit"
2148 | ],
2149 | "time": "2017-11-30T17:05:05+00:00"
2150 | },
2151 | {
2152 | "name": "myclabs/deep-copy",
2153 | "version": "1.7.0",
2154 | "source": {
2155 | "type": "git",
2156 | "url": "https://github.com/myclabs/DeepCopy.git",
2157 | "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e"
2158 | },
2159 | "dist": {
2160 | "type": "zip",
2161 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e",
2162 | "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e",
2163 | "shasum": ""
2164 | },
2165 | "require": {
2166 | "php": "^5.6 || ^7.0"
2167 | },
2168 | "require-dev": {
2169 | "doctrine/collections": "^1.0",
2170 | "doctrine/common": "^2.6",
2171 | "phpunit/phpunit": "^4.1"
2172 | },
2173 | "type": "library",
2174 | "autoload": {
2175 | "psr-4": {
2176 | "DeepCopy\\": "src/DeepCopy/"
2177 | },
2178 | "files": [
2179 | "src/DeepCopy/deep_copy.php"
2180 | ]
2181 | },
2182 | "notification-url": "https://packagist.org/downloads/",
2183 | "license": [
2184 | "MIT"
2185 | ],
2186 | "description": "Create deep copies (clones) of your objects",
2187 | "keywords": [
2188 | "clone",
2189 | "copy",
2190 | "duplicate",
2191 | "object",
2192 | "object graph"
2193 | ],
2194 | "time": "2017-10-19T19:58:43+00:00"
2195 | },
2196 | {
2197 | "name": "phpdocumentor/reflection-common",
2198 | "version": "1.0.1",
2199 | "source": {
2200 | "type": "git",
2201 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
2202 | "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6"
2203 | },
2204 | "dist": {
2205 | "type": "zip",
2206 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
2207 | "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
2208 | "shasum": ""
2209 | },
2210 | "require": {
2211 | "php": ">=5.5"
2212 | },
2213 | "require-dev": {
2214 | "phpunit/phpunit": "^4.6"
2215 | },
2216 | "type": "library",
2217 | "extra": {
2218 | "branch-alias": {
2219 | "dev-master": "1.0.x-dev"
2220 | }
2221 | },
2222 | "autoload": {
2223 | "psr-4": {
2224 | "phpDocumentor\\Reflection\\": [
2225 | "src"
2226 | ]
2227 | }
2228 | },
2229 | "notification-url": "https://packagist.org/downloads/",
2230 | "license": [
2231 | "MIT"
2232 | ],
2233 | "authors": [
2234 | {
2235 | "name": "Jaap van Otterdijk",
2236 | "email": "opensource@ijaap.nl"
2237 | }
2238 | ],
2239 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
2240 | "homepage": "http://www.phpdoc.org",
2241 | "keywords": [
2242 | "FQSEN",
2243 | "phpDocumentor",
2244 | "phpdoc",
2245 | "reflection",
2246 | "static analysis"
2247 | ],
2248 | "time": "2017-09-11T18:02:19+00:00"
2249 | },
2250 | {
2251 | "name": "phpdocumentor/reflection-docblock",
2252 | "version": "4.2.0",
2253 | "source": {
2254 | "type": "git",
2255 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
2256 | "reference": "66465776cfc249844bde6d117abff1d22e06c2da"
2257 | },
2258 | "dist": {
2259 | "type": "zip",
2260 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/66465776cfc249844bde6d117abff1d22e06c2da",
2261 | "reference": "66465776cfc249844bde6d117abff1d22e06c2da",
2262 | "shasum": ""
2263 | },
2264 | "require": {
2265 | "php": "^7.0",
2266 | "phpdocumentor/reflection-common": "^1.0.0",
2267 | "phpdocumentor/type-resolver": "^0.4.0",
2268 | "webmozart/assert": "^1.0"
2269 | },
2270 | "require-dev": {
2271 | "doctrine/instantiator": "~1.0.5",
2272 | "mockery/mockery": "^1.0",
2273 | "phpunit/phpunit": "^6.4"
2274 | },
2275 | "type": "library",
2276 | "extra": {
2277 | "branch-alias": {
2278 | "dev-master": "4.x-dev"
2279 | }
2280 | },
2281 | "autoload": {
2282 | "psr-4": {
2283 | "phpDocumentor\\Reflection\\": [
2284 | "src/"
2285 | ]
2286 | }
2287 | },
2288 | "notification-url": "https://packagist.org/downloads/",
2289 | "license": [
2290 | "MIT"
2291 | ],
2292 | "authors": [
2293 | {
2294 | "name": "Mike van Riel",
2295 | "email": "me@mikevanriel.com"
2296 | }
2297 | ],
2298 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
2299 | "time": "2017-11-27T17:38:31+00:00"
2300 | },
2301 | {
2302 | "name": "phpdocumentor/type-resolver",
2303 | "version": "0.4.0",
2304 | "source": {
2305 | "type": "git",
2306 | "url": "https://github.com/phpDocumentor/TypeResolver.git",
2307 | "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7"
2308 | },
2309 | "dist": {
2310 | "type": "zip",
2311 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7",
2312 | "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7",
2313 | "shasum": ""
2314 | },
2315 | "require": {
2316 | "php": "^5.5 || ^7.0",
2317 | "phpdocumentor/reflection-common": "^1.0"
2318 | },
2319 | "require-dev": {
2320 | "mockery/mockery": "^0.9.4",
2321 | "phpunit/phpunit": "^5.2||^4.8.24"
2322 | },
2323 | "type": "library",
2324 | "extra": {
2325 | "branch-alias": {
2326 | "dev-master": "1.0.x-dev"
2327 | }
2328 | },
2329 | "autoload": {
2330 | "psr-4": {
2331 | "phpDocumentor\\Reflection\\": [
2332 | "src/"
2333 | ]
2334 | }
2335 | },
2336 | "notification-url": "https://packagist.org/downloads/",
2337 | "license": [
2338 | "MIT"
2339 | ],
2340 | "authors": [
2341 | {
2342 | "name": "Mike van Riel",
2343 | "email": "me@mikevanriel.com"
2344 | }
2345 | ],
2346 | "time": "2017-07-14T14:27:02+00:00"
2347 | },
2348 | {
2349 | "name": "phpspec/prophecy",
2350 | "version": "1.7.3",
2351 | "source": {
2352 | "type": "git",
2353 | "url": "https://github.com/phpspec/prophecy.git",
2354 | "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf"
2355 | },
2356 | "dist": {
2357 | "type": "zip",
2358 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf",
2359 | "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf",
2360 | "shasum": ""
2361 | },
2362 | "require": {
2363 | "doctrine/instantiator": "^1.0.2",
2364 | "php": "^5.3|^7.0",
2365 | "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
2366 | "sebastian/comparator": "^1.1|^2.0",
2367 | "sebastian/recursion-context": "^1.0|^2.0|^3.0"
2368 | },
2369 | "require-dev": {
2370 | "phpspec/phpspec": "^2.5|^3.2",
2371 | "phpunit/phpunit": "^4.8.35 || ^5.7"
2372 | },
2373 | "type": "library",
2374 | "extra": {
2375 | "branch-alias": {
2376 | "dev-master": "1.7.x-dev"
2377 | }
2378 | },
2379 | "autoload": {
2380 | "psr-0": {
2381 | "Prophecy\\": "src/"
2382 | }
2383 | },
2384 | "notification-url": "https://packagist.org/downloads/",
2385 | "license": [
2386 | "MIT"
2387 | ],
2388 | "authors": [
2389 | {
2390 | "name": "Konstantin Kudryashov",
2391 | "email": "ever.zet@gmail.com",
2392 | "homepage": "http://everzet.com"
2393 | },
2394 | {
2395 | "name": "Marcello Duarte",
2396 | "email": "marcello.duarte@gmail.com"
2397 | }
2398 | ],
2399 | "description": "Highly opinionated mocking framework for PHP 5.3+",
2400 | "homepage": "https://github.com/phpspec/prophecy",
2401 | "keywords": [
2402 | "Double",
2403 | "Dummy",
2404 | "fake",
2405 | "mock",
2406 | "spy",
2407 | "stub"
2408 | ],
2409 | "time": "2017-11-24T13:59:53+00:00"
2410 | },
2411 | {
2412 | "name": "phpunit/php-code-coverage",
2413 | "version": "4.0.8",
2414 | "source": {
2415 | "type": "git",
2416 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
2417 | "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d"
2418 | },
2419 | "dist": {
2420 | "type": "zip",
2421 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ef7b2f56815df854e66ceaee8ebe9393ae36a40d",
2422 | "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d",
2423 | "shasum": ""
2424 | },
2425 | "require": {
2426 | "ext-dom": "*",
2427 | "ext-xmlwriter": "*",
2428 | "php": "^5.6 || ^7.0",
2429 | "phpunit/php-file-iterator": "^1.3",
2430 | "phpunit/php-text-template": "^1.2",
2431 | "phpunit/php-token-stream": "^1.4.2 || ^2.0",
2432 | "sebastian/code-unit-reverse-lookup": "^1.0",
2433 | "sebastian/environment": "^1.3.2 || ^2.0",
2434 | "sebastian/version": "^1.0 || ^2.0"
2435 | },
2436 | "require-dev": {
2437 | "ext-xdebug": "^2.1.4",
2438 | "phpunit/phpunit": "^5.7"
2439 | },
2440 | "suggest": {
2441 | "ext-xdebug": "^2.5.1"
2442 | },
2443 | "type": "library",
2444 | "extra": {
2445 | "branch-alias": {
2446 | "dev-master": "4.0.x-dev"
2447 | }
2448 | },
2449 | "autoload": {
2450 | "classmap": [
2451 | "src/"
2452 | ]
2453 | },
2454 | "notification-url": "https://packagist.org/downloads/",
2455 | "license": [
2456 | "BSD-3-Clause"
2457 | ],
2458 | "authors": [
2459 | {
2460 | "name": "Sebastian Bergmann",
2461 | "email": "sb@sebastian-bergmann.de",
2462 | "role": "lead"
2463 | }
2464 | ],
2465 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
2466 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
2467 | "keywords": [
2468 | "coverage",
2469 | "testing",
2470 | "xunit"
2471 | ],
2472 | "time": "2017-04-02T07:44:40+00:00"
2473 | },
2474 | {
2475 | "name": "phpunit/php-file-iterator",
2476 | "version": "1.4.5",
2477 | "source": {
2478 | "type": "git",
2479 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
2480 | "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4"
2481 | },
2482 | "dist": {
2483 | "type": "zip",
2484 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4",
2485 | "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4",
2486 | "shasum": ""
2487 | },
2488 | "require": {
2489 | "php": ">=5.3.3"
2490 | },
2491 | "type": "library",
2492 | "extra": {
2493 | "branch-alias": {
2494 | "dev-master": "1.4.x-dev"
2495 | }
2496 | },
2497 | "autoload": {
2498 | "classmap": [
2499 | "src/"
2500 | ]
2501 | },
2502 | "notification-url": "https://packagist.org/downloads/",
2503 | "license": [
2504 | "BSD-3-Clause"
2505 | ],
2506 | "authors": [
2507 | {
2508 | "name": "Sebastian Bergmann",
2509 | "email": "sb@sebastian-bergmann.de",
2510 | "role": "lead"
2511 | }
2512 | ],
2513 | "description": "FilterIterator implementation that filters files based on a list of suffixes.",
2514 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
2515 | "keywords": [
2516 | "filesystem",
2517 | "iterator"
2518 | ],
2519 | "time": "2017-11-27T13:52:08+00:00"
2520 | },
2521 | {
2522 | "name": "phpunit/php-text-template",
2523 | "version": "1.2.1",
2524 | "source": {
2525 | "type": "git",
2526 | "url": "https://github.com/sebastianbergmann/php-text-template.git",
2527 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
2528 | },
2529 | "dist": {
2530 | "type": "zip",
2531 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
2532 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
2533 | "shasum": ""
2534 | },
2535 | "require": {
2536 | "php": ">=5.3.3"
2537 | },
2538 | "type": "library",
2539 | "autoload": {
2540 | "classmap": [
2541 | "src/"
2542 | ]
2543 | },
2544 | "notification-url": "https://packagist.org/downloads/",
2545 | "license": [
2546 | "BSD-3-Clause"
2547 | ],
2548 | "authors": [
2549 | {
2550 | "name": "Sebastian Bergmann",
2551 | "email": "sebastian@phpunit.de",
2552 | "role": "lead"
2553 | }
2554 | ],
2555 | "description": "Simple template engine.",
2556 | "homepage": "https://github.com/sebastianbergmann/php-text-template/",
2557 | "keywords": [
2558 | "template"
2559 | ],
2560 | "time": "2015-06-21T13:50:34+00:00"
2561 | },
2562 | {
2563 | "name": "phpunit/php-timer",
2564 | "version": "1.0.9",
2565 | "source": {
2566 | "type": "git",
2567 | "url": "https://github.com/sebastianbergmann/php-timer.git",
2568 | "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f"
2569 | },
2570 | "dist": {
2571 | "type": "zip",
2572 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
2573 | "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
2574 | "shasum": ""
2575 | },
2576 | "require": {
2577 | "php": "^5.3.3 || ^7.0"
2578 | },
2579 | "require-dev": {
2580 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
2581 | },
2582 | "type": "library",
2583 | "extra": {
2584 | "branch-alias": {
2585 | "dev-master": "1.0-dev"
2586 | }
2587 | },
2588 | "autoload": {
2589 | "classmap": [
2590 | "src/"
2591 | ]
2592 | },
2593 | "notification-url": "https://packagist.org/downloads/",
2594 | "license": [
2595 | "BSD-3-Clause"
2596 | ],
2597 | "authors": [
2598 | {
2599 | "name": "Sebastian Bergmann",
2600 | "email": "sb@sebastian-bergmann.de",
2601 | "role": "lead"
2602 | }
2603 | ],
2604 | "description": "Utility class for timing",
2605 | "homepage": "https://github.com/sebastianbergmann/php-timer/",
2606 | "keywords": [
2607 | "timer"
2608 | ],
2609 | "time": "2017-02-26T11:10:40+00:00"
2610 | },
2611 | {
2612 | "name": "phpunit/php-token-stream",
2613 | "version": "2.0.2",
2614 | "source": {
2615 | "type": "git",
2616 | "url": "https://github.com/sebastianbergmann/php-token-stream.git",
2617 | "reference": "791198a2c6254db10131eecfe8c06670700904db"
2618 | },
2619 | "dist": {
2620 | "type": "zip",
2621 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db",
2622 | "reference": "791198a2c6254db10131eecfe8c06670700904db",
2623 | "shasum": ""
2624 | },
2625 | "require": {
2626 | "ext-tokenizer": "*",
2627 | "php": "^7.0"
2628 | },
2629 | "require-dev": {
2630 | "phpunit/phpunit": "^6.2.4"
2631 | },
2632 | "type": "library",
2633 | "extra": {
2634 | "branch-alias": {
2635 | "dev-master": "2.0-dev"
2636 | }
2637 | },
2638 | "autoload": {
2639 | "classmap": [
2640 | "src/"
2641 | ]
2642 | },
2643 | "notification-url": "https://packagist.org/downloads/",
2644 | "license": [
2645 | "BSD-3-Clause"
2646 | ],
2647 | "authors": [
2648 | {
2649 | "name": "Sebastian Bergmann",
2650 | "email": "sebastian@phpunit.de"
2651 | }
2652 | ],
2653 | "description": "Wrapper around PHP's tokenizer extension.",
2654 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
2655 | "keywords": [
2656 | "tokenizer"
2657 | ],
2658 | "time": "2017-11-27T05:48:46+00:00"
2659 | },
2660 | {
2661 | "name": "phpunit/phpunit",
2662 | "version": "5.7.26",
2663 | "source": {
2664 | "type": "git",
2665 | "url": "https://github.com/sebastianbergmann/phpunit.git",
2666 | "reference": "7fbc25c13309de0c4c9bb48b7361f1eca34c7fbd"
2667 | },
2668 | "dist": {
2669 | "type": "zip",
2670 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/7fbc25c13309de0c4c9bb48b7361f1eca34c7fbd",
2671 | "reference": "7fbc25c13309de0c4c9bb48b7361f1eca34c7fbd",
2672 | "shasum": ""
2673 | },
2674 | "require": {
2675 | "ext-dom": "*",
2676 | "ext-json": "*",
2677 | "ext-libxml": "*",
2678 | "ext-mbstring": "*",
2679 | "ext-xml": "*",
2680 | "myclabs/deep-copy": "~1.3",
2681 | "php": "^5.6 || ^7.0",
2682 | "phpspec/prophecy": "^1.6.2",
2683 | "phpunit/php-code-coverage": "^4.0.4",
2684 | "phpunit/php-file-iterator": "~1.4",
2685 | "phpunit/php-text-template": "~1.2",
2686 | "phpunit/php-timer": "^1.0.6",
2687 | "phpunit/phpunit-mock-objects": "^3.2",
2688 | "sebastian/comparator": "^1.2.4",
2689 | "sebastian/diff": "^1.4.3",
2690 | "sebastian/environment": "^1.3.4 || ^2.0",
2691 | "sebastian/exporter": "~2.0",
2692 | "sebastian/global-state": "^1.1",
2693 | "sebastian/object-enumerator": "~2.0",
2694 | "sebastian/resource-operations": "~1.0",
2695 | "sebastian/version": "~1.0.3|~2.0",
2696 | "symfony/yaml": "~2.1|~3.0|~4.0"
2697 | },
2698 | "conflict": {
2699 | "phpdocumentor/reflection-docblock": "3.0.2"
2700 | },
2701 | "require-dev": {
2702 | "ext-pdo": "*"
2703 | },
2704 | "suggest": {
2705 | "ext-xdebug": "*",
2706 | "phpunit/php-invoker": "~1.1"
2707 | },
2708 | "bin": [
2709 | "phpunit"
2710 | ],
2711 | "type": "library",
2712 | "extra": {
2713 | "branch-alias": {
2714 | "dev-master": "5.7.x-dev"
2715 | }
2716 | },
2717 | "autoload": {
2718 | "classmap": [
2719 | "src/"
2720 | ]
2721 | },
2722 | "notification-url": "https://packagist.org/downloads/",
2723 | "license": [
2724 | "BSD-3-Clause"
2725 | ],
2726 | "authors": [
2727 | {
2728 | "name": "Sebastian Bergmann",
2729 | "email": "sebastian@phpunit.de",
2730 | "role": "lead"
2731 | }
2732 | ],
2733 | "description": "The PHP Unit Testing framework.",
2734 | "homepage": "https://phpunit.de/",
2735 | "keywords": [
2736 | "phpunit",
2737 | "testing",
2738 | "xunit"
2739 | ],
2740 | "time": "2017-12-17T06:14:38+00:00"
2741 | },
2742 | {
2743 | "name": "phpunit/phpunit-mock-objects",
2744 | "version": "3.4.4",
2745 | "source": {
2746 | "type": "git",
2747 | "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
2748 | "reference": "a23b761686d50a560cc56233b9ecf49597cc9118"
2749 | },
2750 | "dist": {
2751 | "type": "zip",
2752 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/a23b761686d50a560cc56233b9ecf49597cc9118",
2753 | "reference": "a23b761686d50a560cc56233b9ecf49597cc9118",
2754 | "shasum": ""
2755 | },
2756 | "require": {
2757 | "doctrine/instantiator": "^1.0.2",
2758 | "php": "^5.6 || ^7.0",
2759 | "phpunit/php-text-template": "^1.2",
2760 | "sebastian/exporter": "^1.2 || ^2.0"
2761 | },
2762 | "conflict": {
2763 | "phpunit/phpunit": "<5.4.0"
2764 | },
2765 | "require-dev": {
2766 | "phpunit/phpunit": "^5.4"
2767 | },
2768 | "suggest": {
2769 | "ext-soap": "*"
2770 | },
2771 | "type": "library",
2772 | "extra": {
2773 | "branch-alias": {
2774 | "dev-master": "3.2.x-dev"
2775 | }
2776 | },
2777 | "autoload": {
2778 | "classmap": [
2779 | "src/"
2780 | ]
2781 | },
2782 | "notification-url": "https://packagist.org/downloads/",
2783 | "license": [
2784 | "BSD-3-Clause"
2785 | ],
2786 | "authors": [
2787 | {
2788 | "name": "Sebastian Bergmann",
2789 | "email": "sb@sebastian-bergmann.de",
2790 | "role": "lead"
2791 | }
2792 | ],
2793 | "description": "Mock Object library for PHPUnit",
2794 | "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
2795 | "keywords": [
2796 | "mock",
2797 | "xunit"
2798 | ],
2799 | "time": "2017-06-30T09:13:00+00:00"
2800 | },
2801 | {
2802 | "name": "sebastian/code-unit-reverse-lookup",
2803 | "version": "1.0.1",
2804 | "source": {
2805 | "type": "git",
2806 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
2807 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18"
2808 | },
2809 | "dist": {
2810 | "type": "zip",
2811 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
2812 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
2813 | "shasum": ""
2814 | },
2815 | "require": {
2816 | "php": "^5.6 || ^7.0"
2817 | },
2818 | "require-dev": {
2819 | "phpunit/phpunit": "^5.7 || ^6.0"
2820 | },
2821 | "type": "library",
2822 | "extra": {
2823 | "branch-alias": {
2824 | "dev-master": "1.0.x-dev"
2825 | }
2826 | },
2827 | "autoload": {
2828 | "classmap": [
2829 | "src/"
2830 | ]
2831 | },
2832 | "notification-url": "https://packagist.org/downloads/",
2833 | "license": [
2834 | "BSD-3-Clause"
2835 | ],
2836 | "authors": [
2837 | {
2838 | "name": "Sebastian Bergmann",
2839 | "email": "sebastian@phpunit.de"
2840 | }
2841 | ],
2842 | "description": "Looks up which function or method a line of code belongs to",
2843 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
2844 | "time": "2017-03-04T06:30:41+00:00"
2845 | },
2846 | {
2847 | "name": "sebastian/comparator",
2848 | "version": "1.2.4",
2849 | "source": {
2850 | "type": "git",
2851 | "url": "https://github.com/sebastianbergmann/comparator.git",
2852 | "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be"
2853 | },
2854 | "dist": {
2855 | "type": "zip",
2856 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
2857 | "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
2858 | "shasum": ""
2859 | },
2860 | "require": {
2861 | "php": ">=5.3.3",
2862 | "sebastian/diff": "~1.2",
2863 | "sebastian/exporter": "~1.2 || ~2.0"
2864 | },
2865 | "require-dev": {
2866 | "phpunit/phpunit": "~4.4"
2867 | },
2868 | "type": "library",
2869 | "extra": {
2870 | "branch-alias": {
2871 | "dev-master": "1.2.x-dev"
2872 | }
2873 | },
2874 | "autoload": {
2875 | "classmap": [
2876 | "src/"
2877 | ]
2878 | },
2879 | "notification-url": "https://packagist.org/downloads/",
2880 | "license": [
2881 | "BSD-3-Clause"
2882 | ],
2883 | "authors": [
2884 | {
2885 | "name": "Jeff Welch",
2886 | "email": "whatthejeff@gmail.com"
2887 | },
2888 | {
2889 | "name": "Volker Dusch",
2890 | "email": "github@wallbash.com"
2891 | },
2892 | {
2893 | "name": "Bernhard Schussek",
2894 | "email": "bschussek@2bepublished.at"
2895 | },
2896 | {
2897 | "name": "Sebastian Bergmann",
2898 | "email": "sebastian@phpunit.de"
2899 | }
2900 | ],
2901 | "description": "Provides the functionality to compare PHP values for equality",
2902 | "homepage": "http://www.github.com/sebastianbergmann/comparator",
2903 | "keywords": [
2904 | "comparator",
2905 | "compare",
2906 | "equality"
2907 | ],
2908 | "time": "2017-01-29T09:50:25+00:00"
2909 | },
2910 | {
2911 | "name": "sebastian/diff",
2912 | "version": "1.4.3",
2913 | "source": {
2914 | "type": "git",
2915 | "url": "https://github.com/sebastianbergmann/diff.git",
2916 | "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4"
2917 | },
2918 | "dist": {
2919 | "type": "zip",
2920 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4",
2921 | "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4",
2922 | "shasum": ""
2923 | },
2924 | "require": {
2925 | "php": "^5.3.3 || ^7.0"
2926 | },
2927 | "require-dev": {
2928 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
2929 | },
2930 | "type": "library",
2931 | "extra": {
2932 | "branch-alias": {
2933 | "dev-master": "1.4-dev"
2934 | }
2935 | },
2936 | "autoload": {
2937 | "classmap": [
2938 | "src/"
2939 | ]
2940 | },
2941 | "notification-url": "https://packagist.org/downloads/",
2942 | "license": [
2943 | "BSD-3-Clause"
2944 | ],
2945 | "authors": [
2946 | {
2947 | "name": "Kore Nordmann",
2948 | "email": "mail@kore-nordmann.de"
2949 | },
2950 | {
2951 | "name": "Sebastian Bergmann",
2952 | "email": "sebastian@phpunit.de"
2953 | }
2954 | ],
2955 | "description": "Diff implementation",
2956 | "homepage": "https://github.com/sebastianbergmann/diff",
2957 | "keywords": [
2958 | "diff"
2959 | ],
2960 | "time": "2017-05-22T07:24:03+00:00"
2961 | },
2962 | {
2963 | "name": "sebastian/environment",
2964 | "version": "2.0.0",
2965 | "source": {
2966 | "type": "git",
2967 | "url": "https://github.com/sebastianbergmann/environment.git",
2968 | "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac"
2969 | },
2970 | "dist": {
2971 | "type": "zip",
2972 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5795ffe5dc5b02460c3e34222fee8cbe245d8fac",
2973 | "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac",
2974 | "shasum": ""
2975 | },
2976 | "require": {
2977 | "php": "^5.6 || ^7.0"
2978 | },
2979 | "require-dev": {
2980 | "phpunit/phpunit": "^5.0"
2981 | },
2982 | "type": "library",
2983 | "extra": {
2984 | "branch-alias": {
2985 | "dev-master": "2.0.x-dev"
2986 | }
2987 | },
2988 | "autoload": {
2989 | "classmap": [
2990 | "src/"
2991 | ]
2992 | },
2993 | "notification-url": "https://packagist.org/downloads/",
2994 | "license": [
2995 | "BSD-3-Clause"
2996 | ],
2997 | "authors": [
2998 | {
2999 | "name": "Sebastian Bergmann",
3000 | "email": "sebastian@phpunit.de"
3001 | }
3002 | ],
3003 | "description": "Provides functionality to handle HHVM/PHP environments",
3004 | "homepage": "http://www.github.com/sebastianbergmann/environment",
3005 | "keywords": [
3006 | "Xdebug",
3007 | "environment",
3008 | "hhvm"
3009 | ],
3010 | "time": "2016-11-26T07:53:53+00:00"
3011 | },
3012 | {
3013 | "name": "sebastian/exporter",
3014 | "version": "2.0.0",
3015 | "source": {
3016 | "type": "git",
3017 | "url": "https://github.com/sebastianbergmann/exporter.git",
3018 | "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4"
3019 | },
3020 | "dist": {
3021 | "type": "zip",
3022 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4",
3023 | "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4",
3024 | "shasum": ""
3025 | },
3026 | "require": {
3027 | "php": ">=5.3.3",
3028 | "sebastian/recursion-context": "~2.0"
3029 | },
3030 | "require-dev": {
3031 | "ext-mbstring": "*",
3032 | "phpunit/phpunit": "~4.4"
3033 | },
3034 | "type": "library",
3035 | "extra": {
3036 | "branch-alias": {
3037 | "dev-master": "2.0.x-dev"
3038 | }
3039 | },
3040 | "autoload": {
3041 | "classmap": [
3042 | "src/"
3043 | ]
3044 | },
3045 | "notification-url": "https://packagist.org/downloads/",
3046 | "license": [
3047 | "BSD-3-Clause"
3048 | ],
3049 | "authors": [
3050 | {
3051 | "name": "Jeff Welch",
3052 | "email": "whatthejeff@gmail.com"
3053 | },
3054 | {
3055 | "name": "Volker Dusch",
3056 | "email": "github@wallbash.com"
3057 | },
3058 | {
3059 | "name": "Bernhard Schussek",
3060 | "email": "bschussek@2bepublished.at"
3061 | },
3062 | {
3063 | "name": "Sebastian Bergmann",
3064 | "email": "sebastian@phpunit.de"
3065 | },
3066 | {
3067 | "name": "Adam Harvey",
3068 | "email": "aharvey@php.net"
3069 | }
3070 | ],
3071 | "description": "Provides the functionality to export PHP variables for visualization",
3072 | "homepage": "http://www.github.com/sebastianbergmann/exporter",
3073 | "keywords": [
3074 | "export",
3075 | "exporter"
3076 | ],
3077 | "time": "2016-11-19T08:54:04+00:00"
3078 | },
3079 | {
3080 | "name": "sebastian/global-state",
3081 | "version": "1.1.1",
3082 | "source": {
3083 | "type": "git",
3084 | "url": "https://github.com/sebastianbergmann/global-state.git",
3085 | "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4"
3086 | },
3087 | "dist": {
3088 | "type": "zip",
3089 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4",
3090 | "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4",
3091 | "shasum": ""
3092 | },
3093 | "require": {
3094 | "php": ">=5.3.3"
3095 | },
3096 | "require-dev": {
3097 | "phpunit/phpunit": "~4.2"
3098 | },
3099 | "suggest": {
3100 | "ext-uopz": "*"
3101 | },
3102 | "type": "library",
3103 | "extra": {
3104 | "branch-alias": {
3105 | "dev-master": "1.0-dev"
3106 | }
3107 | },
3108 | "autoload": {
3109 | "classmap": [
3110 | "src/"
3111 | ]
3112 | },
3113 | "notification-url": "https://packagist.org/downloads/",
3114 | "license": [
3115 | "BSD-3-Clause"
3116 | ],
3117 | "authors": [
3118 | {
3119 | "name": "Sebastian Bergmann",
3120 | "email": "sebastian@phpunit.de"
3121 | }
3122 | ],
3123 | "description": "Snapshotting of global state",
3124 | "homepage": "http://www.github.com/sebastianbergmann/global-state",
3125 | "keywords": [
3126 | "global state"
3127 | ],
3128 | "time": "2015-10-12T03:26:01+00:00"
3129 | },
3130 | {
3131 | "name": "sebastian/object-enumerator",
3132 | "version": "2.0.1",
3133 | "source": {
3134 | "type": "git",
3135 | "url": "https://github.com/sebastianbergmann/object-enumerator.git",
3136 | "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7"
3137 | },
3138 | "dist": {
3139 | "type": "zip",
3140 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1311872ac850040a79c3c058bea3e22d0f09cbb7",
3141 | "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7",
3142 | "shasum": ""
3143 | },
3144 | "require": {
3145 | "php": ">=5.6",
3146 | "sebastian/recursion-context": "~2.0"
3147 | },
3148 | "require-dev": {
3149 | "phpunit/phpunit": "~5"
3150 | },
3151 | "type": "library",
3152 | "extra": {
3153 | "branch-alias": {
3154 | "dev-master": "2.0.x-dev"
3155 | }
3156 | },
3157 | "autoload": {
3158 | "classmap": [
3159 | "src/"
3160 | ]
3161 | },
3162 | "notification-url": "https://packagist.org/downloads/",
3163 | "license": [
3164 | "BSD-3-Clause"
3165 | ],
3166 | "authors": [
3167 | {
3168 | "name": "Sebastian Bergmann",
3169 | "email": "sebastian@phpunit.de"
3170 | }
3171 | ],
3172 | "description": "Traverses array structures and object graphs to enumerate all referenced objects",
3173 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
3174 | "time": "2017-02-18T15:18:39+00:00"
3175 | },
3176 | {
3177 | "name": "sebastian/recursion-context",
3178 | "version": "2.0.0",
3179 | "source": {
3180 | "type": "git",
3181 | "url": "https://github.com/sebastianbergmann/recursion-context.git",
3182 | "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a"
3183 | },
3184 | "dist": {
3185 | "type": "zip",
3186 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a",
3187 | "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a",
3188 | "shasum": ""
3189 | },
3190 | "require": {
3191 | "php": ">=5.3.3"
3192 | },
3193 | "require-dev": {
3194 | "phpunit/phpunit": "~4.4"
3195 | },
3196 | "type": "library",
3197 | "extra": {
3198 | "branch-alias": {
3199 | "dev-master": "2.0.x-dev"
3200 | }
3201 | },
3202 | "autoload": {
3203 | "classmap": [
3204 | "src/"
3205 | ]
3206 | },
3207 | "notification-url": "https://packagist.org/downloads/",
3208 | "license": [
3209 | "BSD-3-Clause"
3210 | ],
3211 | "authors": [
3212 | {
3213 | "name": "Jeff Welch",
3214 | "email": "whatthejeff@gmail.com"
3215 | },
3216 | {
3217 | "name": "Sebastian Bergmann",
3218 | "email": "sebastian@phpunit.de"
3219 | },
3220 | {
3221 | "name": "Adam Harvey",
3222 | "email": "aharvey@php.net"
3223 | }
3224 | ],
3225 | "description": "Provides functionality to recursively process PHP variables",
3226 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
3227 | "time": "2016-11-19T07:33:16+00:00"
3228 | },
3229 | {
3230 | "name": "sebastian/resource-operations",
3231 | "version": "1.0.0",
3232 | "source": {
3233 | "type": "git",
3234 | "url": "https://github.com/sebastianbergmann/resource-operations.git",
3235 | "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52"
3236 | },
3237 | "dist": {
3238 | "type": "zip",
3239 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
3240 | "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
3241 | "shasum": ""
3242 | },
3243 | "require": {
3244 | "php": ">=5.6.0"
3245 | },
3246 | "type": "library",
3247 | "extra": {
3248 | "branch-alias": {
3249 | "dev-master": "1.0.x-dev"
3250 | }
3251 | },
3252 | "autoload": {
3253 | "classmap": [
3254 | "src/"
3255 | ]
3256 | },
3257 | "notification-url": "https://packagist.org/downloads/",
3258 | "license": [
3259 | "BSD-3-Clause"
3260 | ],
3261 | "authors": [
3262 | {
3263 | "name": "Sebastian Bergmann",
3264 | "email": "sebastian@phpunit.de"
3265 | }
3266 | ],
3267 | "description": "Provides a list of PHP built-in functions that operate on resources",
3268 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
3269 | "time": "2015-07-28T20:34:47+00:00"
3270 | },
3271 | {
3272 | "name": "sebastian/version",
3273 | "version": "2.0.1",
3274 | "source": {
3275 | "type": "git",
3276 | "url": "https://github.com/sebastianbergmann/version.git",
3277 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
3278 | },
3279 | "dist": {
3280 | "type": "zip",
3281 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
3282 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
3283 | "shasum": ""
3284 | },
3285 | "require": {
3286 | "php": ">=5.6"
3287 | },
3288 | "type": "library",
3289 | "extra": {
3290 | "branch-alias": {
3291 | "dev-master": "2.0.x-dev"
3292 | }
3293 | },
3294 | "autoload": {
3295 | "classmap": [
3296 | "src/"
3297 | ]
3298 | },
3299 | "notification-url": "https://packagist.org/downloads/",
3300 | "license": [
3301 | "BSD-3-Clause"
3302 | ],
3303 | "authors": [
3304 | {
3305 | "name": "Sebastian Bergmann",
3306 | "email": "sebastian@phpunit.de",
3307 | "role": "lead"
3308 | }
3309 | ],
3310 | "description": "Library that helps with managing the version number of Git-hosted PHP projects",
3311 | "homepage": "https://github.com/sebastianbergmann/version",
3312 | "time": "2016-10-03T07:35:21+00:00"
3313 | },
3314 | {
3315 | "name": "symfony/expression-language",
3316 | "version": "v3.4.2",
3317 | "source": {
3318 | "type": "git",
3319 | "url": "https://github.com/symfony/expression-language.git",
3320 | "reference": "c4b195436a74d9672d8463e4d427ca42449238e5"
3321 | },
3322 | "dist": {
3323 | "type": "zip",
3324 | "url": "https://api.github.com/repos/symfony/expression-language/zipball/c4b195436a74d9672d8463e4d427ca42449238e5",
3325 | "reference": "c4b195436a74d9672d8463e4d427ca42449238e5",
3326 | "shasum": ""
3327 | },
3328 | "require": {
3329 | "php": "^5.5.9|>=7.0.8",
3330 | "symfony/cache": "~3.1|~4.0"
3331 | },
3332 | "type": "library",
3333 | "extra": {
3334 | "branch-alias": {
3335 | "dev-master": "3.4-dev"
3336 | }
3337 | },
3338 | "autoload": {
3339 | "psr-4": {
3340 | "Symfony\\Component\\ExpressionLanguage\\": ""
3341 | },
3342 | "exclude-from-classmap": [
3343 | "/Tests/"
3344 | ]
3345 | },
3346 | "notification-url": "https://packagist.org/downloads/",
3347 | "license": [
3348 | "MIT"
3349 | ],
3350 | "authors": [
3351 | {
3352 | "name": "Fabien Potencier",
3353 | "email": "fabien@symfony.com"
3354 | },
3355 | {
3356 | "name": "Symfony Community",
3357 | "homepage": "https://symfony.com/contributors"
3358 | }
3359 | ],
3360 | "description": "Symfony ExpressionLanguage Component",
3361 | "homepage": "https://symfony.com",
3362 | "time": "2017-12-08T15:24:53+00:00"
3363 | },
3364 | {
3365 | "name": "symfony/phpunit-bridge",
3366 | "version": "v4.0.2",
3367 | "source": {
3368 | "type": "git",
3369 | "url": "https://github.com/symfony/phpunit-bridge.git",
3370 | "reference": "61c84ebdce0d4c289413a222ee545f0114e60120"
3371 | },
3372 | "dist": {
3373 | "type": "zip",
3374 | "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/61c84ebdce0d4c289413a222ee545f0114e60120",
3375 | "reference": "61c84ebdce0d4c289413a222ee545f0114e60120",
3376 | "shasum": ""
3377 | },
3378 | "require": {
3379 | "php": ">=5.3.3"
3380 | },
3381 | "conflict": {
3382 | "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0"
3383 | },
3384 | "suggest": {
3385 | "ext-zip": "Zip support is required when using bin/simple-phpunit",
3386 | "symfony/debug": "For tracking deprecated interfaces usages at runtime with DebugClassLoader"
3387 | },
3388 | "bin": [
3389 | "bin/simple-phpunit"
3390 | ],
3391 | "type": "symfony-bridge",
3392 | "extra": {
3393 | "branch-alias": {
3394 | "dev-master": "4.0-dev"
3395 | }
3396 | },
3397 | "autoload": {
3398 | "files": [
3399 | "bootstrap.php"
3400 | ],
3401 | "psr-4": {
3402 | "Symfony\\Bridge\\PhpUnit\\": ""
3403 | },
3404 | "exclude-from-classmap": [
3405 | "/Tests/"
3406 | ]
3407 | },
3408 | "notification-url": "https://packagist.org/downloads/",
3409 | "license": [
3410 | "MIT"
3411 | ],
3412 | "authors": [
3413 | {
3414 | "name": "Nicolas Grekas",
3415 | "email": "p@tchwork.com"
3416 | },
3417 | {
3418 | "name": "Symfony Community",
3419 | "homepage": "https://symfony.com/contributors"
3420 | }
3421 | ],
3422 | "description": "Symfony PHPUnit Bridge",
3423 | "homepage": "https://symfony.com",
3424 | "time": "2017-12-14T19:48:22+00:00"
3425 | },
3426 | {
3427 | "name": "symfony/process",
3428 | "version": "v3.4.2",
3429 | "source": {
3430 | "type": "git",
3431 | "url": "https://github.com/symfony/process.git",
3432 | "reference": "bb3ef65d493a6d57297cad6c560ee04e2a8f5098"
3433 | },
3434 | "dist": {
3435 | "type": "zip",
3436 | "url": "https://api.github.com/repos/symfony/process/zipball/bb3ef65d493a6d57297cad6c560ee04e2a8f5098",
3437 | "reference": "bb3ef65d493a6d57297cad6c560ee04e2a8f5098",
3438 | "shasum": ""
3439 | },
3440 | "require": {
3441 | "php": "^5.5.9|>=7.0.8"
3442 | },
3443 | "type": "library",
3444 | "extra": {
3445 | "branch-alias": {
3446 | "dev-master": "3.4-dev"
3447 | }
3448 | },
3449 | "autoload": {
3450 | "psr-4": {
3451 | "Symfony\\Component\\Process\\": ""
3452 | },
3453 | "exclude-from-classmap": [
3454 | "/Tests/"
3455 | ]
3456 | },
3457 | "notification-url": "https://packagist.org/downloads/",
3458 | "license": [
3459 | "MIT"
3460 | ],
3461 | "authors": [
3462 | {
3463 | "name": "Fabien Potencier",
3464 | "email": "fabien@symfony.com"
3465 | },
3466 | {
3467 | "name": "Symfony Community",
3468 | "homepage": "https://symfony.com/contributors"
3469 | }
3470 | ],
3471 | "description": "Symfony Process Component",
3472 | "homepage": "https://symfony.com",
3473 | "time": "2017-12-14T19:40:10+00:00"
3474 | },
3475 | {
3476 | "name": "symfony/yaml",
3477 | "version": "v4.0.2",
3478 | "source": {
3479 | "type": "git",
3480 | "url": "https://github.com/symfony/yaml.git",
3481 | "reference": "a5ee52d155f06ad23b19eb63c31228ff56ad1116"
3482 | },
3483 | "dist": {
3484 | "type": "zip",
3485 | "url": "https://api.github.com/repos/symfony/yaml/zipball/a5ee52d155f06ad23b19eb63c31228ff56ad1116",
3486 | "reference": "a5ee52d155f06ad23b19eb63c31228ff56ad1116",
3487 | "shasum": ""
3488 | },
3489 | "require": {
3490 | "php": "^7.1.3"
3491 | },
3492 | "conflict": {
3493 | "symfony/console": "<3.4"
3494 | },
3495 | "require-dev": {
3496 | "symfony/console": "~3.4|~4.0"
3497 | },
3498 | "suggest": {
3499 | "symfony/console": "For validating YAML files using the lint command"
3500 | },
3501 | "type": "library",
3502 | "extra": {
3503 | "branch-alias": {
3504 | "dev-master": "4.0-dev"
3505 | }
3506 | },
3507 | "autoload": {
3508 | "psr-4": {
3509 | "Symfony\\Component\\Yaml\\": ""
3510 | },
3511 | "exclude-from-classmap": [
3512 | "/Tests/"
3513 | ]
3514 | },
3515 | "notification-url": "https://packagist.org/downloads/",
3516 | "license": [
3517 | "MIT"
3518 | ],
3519 | "authors": [
3520 | {
3521 | "name": "Fabien Potencier",
3522 | "email": "fabien@symfony.com"
3523 | },
3524 | {
3525 | "name": "Symfony Community",
3526 | "homepage": "https://symfony.com/contributors"
3527 | }
3528 | ],
3529 | "description": "Symfony Yaml Component",
3530 | "homepage": "https://symfony.com",
3531 | "time": "2017-12-12T08:41:51+00:00"
3532 | },
3533 | {
3534 | "name": "webmozart/assert",
3535 | "version": "1.2.0",
3536 | "source": {
3537 | "type": "git",
3538 | "url": "https://github.com/webmozart/assert.git",
3539 | "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f"
3540 | },
3541 | "dist": {
3542 | "type": "zip",
3543 | "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f",
3544 | "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f",
3545 | "shasum": ""
3546 | },
3547 | "require": {
3548 | "php": "^5.3.3 || ^7.0"
3549 | },
3550 | "require-dev": {
3551 | "phpunit/phpunit": "^4.6",
3552 | "sebastian/version": "^1.0.1"
3553 | },
3554 | "type": "library",
3555 | "extra": {
3556 | "branch-alias": {
3557 | "dev-master": "1.3-dev"
3558 | }
3559 | },
3560 | "autoload": {
3561 | "psr-4": {
3562 | "Webmozart\\Assert\\": "src/"
3563 | }
3564 | },
3565 | "notification-url": "https://packagist.org/downloads/",
3566 | "license": [
3567 | "MIT"
3568 | ],
3569 | "authors": [
3570 | {
3571 | "name": "Bernhard Schussek",
3572 | "email": "bschussek@gmail.com"
3573 | }
3574 | ],
3575 | "description": "Assertions to validate method input/output with nice error messages.",
3576 | "keywords": [
3577 | "assert",
3578 | "check",
3579 | "validate"
3580 | ],
3581 | "time": "2016-11-23T20:04:58+00:00"
3582 | }
3583 | ],
3584 | "aliases": [],
3585 | "minimum-stability": "stable",
3586 | "stability-flags": {
3587 | "roave/security-advisories": 20
3588 | },
3589 | "prefer-stable": false,
3590 | "prefer-lowest": false,
3591 | "platform": [],
3592 | "platform-dev": []
3593 | }
3594 |
--------------------------------------------------------------------------------
/phpunit.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | ./Tests/
14 |
15 |
16 |
17 |
18 |
19 |
20 | ./
21 |
22 | ./Resources
23 | ./Tests
24 | ./vendor
25 | ./build
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------