├── docs
├── index.html
└── icon.svg
├── .idea
├── .name
├── misc.xml
├── vcs.xml
├── modules.xml
├── php.xml
└── micro.iml
├── boilerplates
└── blank
│ ├── cache
│ └── .gitkeep
│ ├── store
│ └── .gitkeep
│ ├── .gitignore
│ ├── public
│ ├── favicon.ico
│ ├── manifest.json
│ ├── assets
│ │ ├── css
│ │ │ └── styles.css
│ │ └── images
│ │ │ └── micro.svg
│ ├── index.php
│ └── .htaccess
│ ├── views
│ ├── index.php
│ ├── _layouts
│ │ └── default.php
│ └── 404.php
│ └── configs
│ └── master.yaml
├── media
├── logo.png
├── logo.sketch
└── logo.svg
├── init.php
├── micro.php
├── micro
├── functions
│ ├── config.php
│ ├── router.php
│ ├── validator.php
│ ├── database.php
│ ├── template.php
│ ├── error.php
│ └── cache.php
└── classes
│ ├── Router.php
│ ├── ConfigurationObserver.php
│ ├── Database.php
│ └── Configuration.php
├── composer.json
├── LICENSE
├── bootstrap
├── .gitignore
├── CHANGELOG.md
├── README.md
└── composer.lock
/docs/index.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.idea/.name:
--------------------------------------------------------------------------------
1 | @mzdr/micro
--------------------------------------------------------------------------------
/boilerplates/blank/cache/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/boilerplates/blank/store/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/boilerplates/blank/.gitignore:
--------------------------------------------------------------------------------
1 | /vendor/
2 |
--------------------------------------------------------------------------------
/media/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mzdr/micro/HEAD/media/logo.png
--------------------------------------------------------------------------------
/media/logo.sketch:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mzdr/micro/HEAD/media/logo.sketch
--------------------------------------------------------------------------------
/boilerplates/blank/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mzdr/micro/HEAD/boilerplates/blank/public/favicon.ico
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/boilerplates/blank/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "micro",
3 | "short_name": "micro",
4 | "start_url": ".",
5 | "display": "standalone",
6 | "background_color" : "#fff"
7 | }
8 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/boilerplates/blank/views/index.php:
--------------------------------------------------------------------------------
1 | layout('_layouts/default') ?>
2 |
3 |
A tiny multi-tool for your next big PHP adventure.
4 |
5 | Enjoy and have fun! 👋
6 |
--------------------------------------------------------------------------------
/init.php:
--------------------------------------------------------------------------------
1 | attach(
7 | new ConfigurationObserver()
8 | );
9 |
10 | // Make sure the error handler is registered.
11 | error();
12 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/micro.php:
--------------------------------------------------------------------------------
1 | enableAnnotationMapping()
24 | ->getValidator();
25 |
26 | return $validator;
27 | }
28 |
--------------------------------------------------------------------------------
/boilerplates/blank/views/_layouts/default.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | µ was here.
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | = $this->section('content') ?>
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "mzdr/micro",
3 | "description": "A tiny multi-tool for your next big PHP adventure.",
4 | "version": "3.0.0",
5 | "homepage": "https://mzdr.github.io/micro/",
6 | "license": "MIT",
7 | "authors": [
8 | {
9 | "name": "Sebastian Prein",
10 | "email": "hi@sebastianprein.com"
11 | }
12 | ],
13 | "require": {
14 | "league/plates": "^3.3",
15 | "samrap/gestalt": "^0.3.1",
16 | "symfony/yaml": "^4.0",
17 | "league/booboo": "^2.0",
18 | "nikic/fast-route": "^1.2",
19 | "matthiasmullie/scrapbook": "^1.4",
20 | "league/flysystem": "^1.0",
21 | "php": "^8.2",
22 | "jasny/php-functions": "^3.2",
23 | "webmozart/path-util": "^2.3",
24 | "mzdr/oh-snap": "^1.0",
25 | "doctrine/orm": "^2.6",
26 | "doctrine/dbal": "^2.8",
27 | "symfony/validator": "^4.1"
28 | },
29 | "autoload": {
30 | "files": ["micro.php"],
31 | "psr-4": {
32 | "µ\\": "micro/classes/"
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 Sebastian Prein
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/micro/functions/database.php:
--------------------------------------------------------------------------------
1 | get('µ.db');
24 |
25 | // If no configuration was found but this function was called,
26 | // throw an RuntimeException and let the user know why things went wrong.
27 | if ($config === null) {
28 | throw new RuntimeException(
29 | "No database configuration has been found. Use µ\config()->set('µ.db', []) to provide configuration. See Doctrine/DBAL documentation for additional details."
30 | );
31 | }
32 |
33 | // Use wrapper class to ease access to Doctrine’s DBAL/ORM…
34 | return $db = new Database($config, config()->get('µ.env'));
35 | }
36 |
37 | /**
38 | * Just an alias of µ\db().
39 | *
40 | * @see db
41 | */
42 | function database(): Database
43 | {
44 | return db();
45 | }
46 |
--------------------------------------------------------------------------------
/micro/functions/template.php:
--------------------------------------------------------------------------------
1 | get('µ.paths');
28 |
29 | // Set default path for views directory…
30 | $defaultViewsPath = Path::canonicalize((is_string($cwd) ? $cwd : '') . '/../views');
31 |
32 | // Create Plates instance and prefer the configured views path,
33 | // otherwise take the default path as fallback
34 | $plates = new Engine($paths->views ?? $defaultViewsPath);
35 |
36 | // If an assets path is given, also load the asset extension
37 | // @see http://platesphp.com/v3/extensions/asset/
38 | if (isset($paths->assets)) {
39 | $plates->loadExtension(
40 | new Asset($paths->assets, true)
41 | );
42 | }
43 |
44 | return $plates;
45 | }
46 |
--------------------------------------------------------------------------------
/micro/functions/error.php:
--------------------------------------------------------------------------------
1 | register();
30 |
31 | return $eh;
32 | }
33 |
34 | // Otherwise prepare pretty formatters…
35 | $trivial = new HtmlFormatter;
36 | $fatal = new PrettyFormatter([
37 | 'footer' => sprintf('µ v%s', VERSION)
38 | ]);
39 |
40 | // Use OhSnap formatter only for fatal errors…
41 | $fatal->setErrorLimit(E_ERROR | E_USER_ERROR | E_COMPILE_ERROR | E_CORE_ERROR | E_PARSE);
42 |
43 | // Everything else should be printed just like PHP does it…
44 | $trivial->setErrorLimit(E_ALL);
45 |
46 | $eh = new BooBoo([$trivial, $fatal]);
47 | $eh->register();
48 |
49 | return $eh;
50 | }
51 |
--------------------------------------------------------------------------------
/boilerplates/blank/views/404.php:
--------------------------------------------------------------------------------
1 |
18 |
--------------------------------------------------------------------------------
/docs/icon.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/media/logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/boilerplates/blank/public/assets/images/micro.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/.idea/php.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
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 |
--------------------------------------------------------------------------------
/micro/classes/Router.php:
--------------------------------------------------------------------------------
1 | getData();
46 | $useCache = config()->get('µ.router.cache', false);
47 |
48 | if ($useCache === false) {
49 | return $this->handle(
50 | ...(new Dispatcher($data))->dispatch($httpMethod, $uri)
51 | );
52 | }
53 |
54 | $cacheFile = config()->get('µ.router.cacheFile');
55 |
56 | if (isset($cacheFile) === false) {
57 | throw new LogicException('Must specify “router.cacheFile” option when caching is enabled.');
58 | }
59 |
60 | if (file_exists($cacheFile) === false) {
61 | file_put_contents(
62 | $cacheFile,
63 | sprintf('handle(
74 | ...(new Dispatcher($data))->dispatch($httpMethod, $uri)
75 | );
76 | }
77 | }
78 |
--------------------------------------------------------------------------------
/bootstrap:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env php
2 | version);
62 |
63 |
64 | if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
65 | $go = stream_get_line(STDIN, 1024, PHP_EOL);
66 | } else {
67 | $go = readline();
68 | }
69 |
70 | if ($go && strtolower($go) !== 'y') {
71 | printf("
72 | Okay, cool. 👋
73 | ");
74 |
75 | return;
76 | }
77 |
78 | printf("\e[90m
79 |
80 | %s\e[0m
81 |
82 | Done. 👍
83 | ",
84 | implode(
85 | "\n ",
86 | array_map(
87 | function($item) {
88 | return sprintf(
89 | "%s \e[97m→\e[90m %s",
90 | str_replace(__DIR__, '.', $item[0]),
91 | str_replace(getcwd(), '.', $item[1])
92 | );
93 | },
94 | recursive_copy(
95 | join(DIRECTORY_SEPARATOR, [__DIR__, 'boilerplates', 'blank']),
96 | getcwd()
97 | )
98 | )
99 | )
100 | );
101 |
--------------------------------------------------------------------------------
/boilerplates/blank/configs/master.yaml:
--------------------------------------------------------------------------------
1 | # All settings that are used internally by micro
2 | # go under the µ key.
3 | µ:
4 | # Settings (mostly) used by Plates.
5 | paths:
6 |
7 | # Physical path to your assets. Use this if you want
8 | # to use the asset extension for cache busting files.
9 | #
10 | # @see http://platesphp.com/v3/extensions/asset/
11 | assets: ./
12 |
13 | # Not used by Plates, but useful for handling different environments.
14 | public: ''
15 |
16 | # Path to templates.
17 | views: ../views
18 |
19 |
20 | # Database settings for Doctrine.
21 | #
22 | # @see https://www.doctrine-project.org/projects/doctrine-dbal/en/2.8/reference/configuration.html
23 | # db:
24 | # driver: pdo_sqlite
25 | # path: ../store/example.db
26 | # proxy:
27 | # path: /tmp
28 | # metadata:
29 | # path: ../entities
30 |
31 |
32 | # Settings for FastRoute.
33 | # router:
34 | # cache: true
35 | # cacheFile: ../cache/router.cache
36 |
37 |
38 | # Settings for BooBoo.
39 | # error:
40 | # formatter: json
41 |
42 |
43 | # Settings for Scrapbook.
44 | #
45 | # @see https://www.scrapbook.cash/
46 | # cache:
47 |
48 | # Return PSR-16 compliant cache.
49 | #
50 | # @see https://www.php-fig.org/psr/psr-16/
51 | # psr16: true
52 |
53 | # Return PSR-6 compliant cache.
54 | #
55 | # @see https://www.php-fig.org/psr/psr-6/
56 | # psr6: true
57 |
58 | # @see https://github.com/matthiasmullie/scrapbook#local-buffer
59 | # localBuffer: true
60 |
61 | # @see https://github.com/matthiasmullie/scrapbook#stampede-protection
62 | # stampedeProtection: true
63 |
64 | # @see https://github.com/matthiasmullie/scrapbook#transactions
65 | # transactions: true
66 |
67 | # @see https://github.com/matthiasmullie/scrapbook#adapters
68 | # adapter: files
69 |
70 | # Common settings for database based adapters.
71 | # name: cache
72 | # host: 127.0.0.1
73 | # port: 11211
74 | # user:
75 | # password:
76 |
77 | # If adapter is files/flysystem/sqlite this path
78 | # will be used to write cache files to.
79 | #
80 | # Default: sys_get_temp_dir()
81 | # path: ../cache
82 |
83 | # If sharding is used, global cache configuration is
84 | # ignored except for those keys: localBuffer,
85 | # stampedeProtection, transactions, psr6, psr16.
86 | #
87 | # Provide those settings individually for each sharding entry.
88 | #
89 | # @see https://github.com/matthiasmullie/scrapbook#sharding
90 | # sharding:
91 | # - adapter: files
92 | # path: ../cache/1
93 | # - adapter: files
94 | # path: ../cache/2
95 |
96 | # Set environment for this configuration.
97 | env: development
98 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | # Created by https://www.gitignore.io/api/intellij,composer
3 | # Edit at https://www.gitignore.io/?templates=intellij,composer
4 |
5 | ### Composer ###
6 | composer.phar
7 | /vendor/
8 |
9 | # Commit your application's lock file https://getcomposer.org/doc/01-basic-usage.md#commit-your-composer-lock-file-to-version-control
10 | # You may choose to ignore a library lock file http://getcomposer.org/doc/02-libraries.md#lock-file
11 | # composer.lock
12 |
13 | ### Intellij ###
14 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm
15 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
16 |
17 | # User-specific stuff
18 | .idea/**/workspace.xml
19 | .idea/**/tasks.xml
20 | .idea/**/usage.statistics.xml
21 | .idea/**/dictionaries
22 | .idea/**/shelf
23 |
24 | # Generated files
25 | .idea/**/contentModel.xml
26 |
27 | # Sensitive or high-churn files
28 | .idea/**/dataSources/
29 | .idea/**/dataSources.ids
30 | .idea/**/dataSources.local.xml
31 | .idea/**/sqlDataSources.xml
32 | .idea/**/dynamic.xml
33 | .idea/**/uiDesigner.xml
34 | .idea/**/dbnavigator.xml
35 |
36 | # Gradle
37 | .idea/**/gradle.xml
38 | .idea/**/libraries
39 |
40 | # Gradle and Maven with auto-import
41 | # When using Gradle or Maven with auto-import, you should exclude module files,
42 | # since they will be recreated, and may cause churn. Uncomment if using
43 | # auto-import.
44 | # .idea/modules.xml
45 | # .idea/*.iml
46 | # .idea/modules
47 | # *.iml
48 | # *.ipr
49 |
50 | # CMake
51 | cmake-build-*/
52 |
53 | # Mongo Explorer plugin
54 | .idea/**/mongoSettings.xml
55 |
56 | # File-based project format
57 | *.iws
58 |
59 | # IntelliJ
60 | out/
61 |
62 | # mpeltonen/sbt-idea plugin
63 | .idea_modules/
64 |
65 | # JIRA plugin
66 | atlassian-ide-plugin.xml
67 |
68 | # Cursive Clojure plugin
69 | .idea/replstate.xml
70 |
71 | # Crashlytics plugin (for Android Studio and IntelliJ)
72 | com_crashlytics_export_strings.xml
73 | crashlytics.properties
74 | crashlytics-build.properties
75 | fabric.properties
76 |
77 | # Editor-based Rest Client
78 | .idea/httpRequests
79 |
80 | # Android studio 3.1+ serialized cache file
81 | .idea/caches/build_file_checksums.ser
82 |
83 | ### Intellij Patch ###
84 | # Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721
85 |
86 | # *.iml
87 | # modules.xml
88 | # .idea/misc.xml
89 | # *.ipr
90 |
91 | # Sonarlint plugin
92 | .idea/**/sonarlint/
93 |
94 | # SonarQube Plugin
95 | .idea/**/sonarIssues.xml
96 |
97 | # Markdown Navigator plugin
98 | .idea/**/markdown-navigator.xml
99 | .idea/**/markdown-navigator/
100 |
101 | # End of https://www.gitignore.io/api/intellij,composer
102 |
--------------------------------------------------------------------------------
/micro/classes/ConfigurationObserver.php:
--------------------------------------------------------------------------------
1 | HtmlFormatter::class,
24 | 'html_table' => HtmlTableFormatter::class,
25 | 'json' => JsonFormatter::class,
26 | 'cmd' => CommandLineFormatter::class,
27 | 'null' => NullFormatter::class,
28 | 'ohsnap' => PrettyFormatter::class
29 | ];
30 |
31 | /**
32 | * Currently set formatter.
33 | *
34 | * @var AbstractFormatter|null
35 | */
36 | private $currentFormatter = null;
37 |
38 | /**
39 | * The update function that is getting called once the observer
40 | * receives an update.
41 | *
42 | * @param Observable $config
43 | */
44 | public function update(Observable $config): void
45 | {
46 | $error = $config->get('µ.error');
47 | $formatter = json_encode($error);
48 |
49 | // Do we have error formatting configuration and
50 | // if so, is the formatter supported?
51 | if (isset($error->formatter, $this->formatters[$error->formatter]) === false) {
52 | return;
53 | }
54 |
55 | // Given error settings do not differ from current settings…
56 | if ($formatter === $this->currentFormatter) {
57 | return;
58 | }
59 |
60 | // If micro is being run in command line interface mode,
61 | // it’s already set up for perfect formatting.
62 | //
63 | // If you really need to adjust formatters in CLI mode, do it
64 | // manually and directly on the BooBoo instance via error() calls.
65 | if (php_sapi_name() === 'cli') {
66 | return;
67 | }
68 |
69 | $this->currentFormatter = $error->formatter;
70 |
71 | // Setting up BooBoo via configuration files is currently
72 | // rather “basic”. This means you cannot set up certain
73 | // formatters for particular types of errors. If you need
74 | // advanced possibilities you should configure it customly
75 | // via error() calls.
76 | error()
77 | ->clearFormatters()
78 | ->pushFormatter(
79 | new $this->formatters[$error->formatter]($error)
80 | );
81 | }
82 | }
83 |
--------------------------------------------------------------------------------
/micro/classes/Database.php:
--------------------------------------------------------------------------------
1 | connection = DriverManager::getConnection((array) $config);
39 |
40 | $isDevMode = in_array(strtolower($env), ['prod', 'production', 'live']) === false;
41 | $proxyDir = $config->proxy->path ?? null;
42 | $cache = null;
43 | $useSimpleAnnotationReader = $config->metadata->useSimple ?? true;
44 |
45 | if (isset($config->metadata)) {
46 | $args = [
47 | (array) ($config->metadata->path ?? null),
48 | $isDevMode,
49 | $proxyDir,
50 | $cache,
51 | $useSimpleAnnotationReader
52 | ];
53 |
54 | switch (strtolower($config->metadata->driver ?? null)) {
55 | case 'xml':
56 | $this->config = Setup::createXMLMetadataConfiguration(...$args);
57 | break;
58 |
59 | case 'yaml':
60 | case 'yml':
61 | $this->config = Setup::createYAMLMetadataConfiguration(...$args);
62 | break;
63 |
64 | default:
65 | $this->config = Setup::createAnnotationMetadataConfiguration(...$args);
66 | }
67 | } else {
68 | $this->config = Setup::createConfiguration($isDevMode, $proxyDir);
69 | }
70 |
71 | $this->entityManager = EntityManager::create($this->connection, $this->config);
72 |
73 | // @see https://github.com/schmittjoh/serializer/issues/179
74 | AnnotationRegistry::registerLoader('class_exists');
75 | }
76 |
77 | /**
78 | * Returns the Doctrine Connection object.
79 | *
80 | * @return Connection
81 | */
82 | public function connection(): Connection
83 | {
84 | return $this->connection;
85 | }
86 |
87 | /**
88 | *
89 | * Returns the Doctrine EntityManager object.
90 | *
91 | * @return EntityManager
92 | */
93 | public function entity(): EntityManager
94 | {
95 | return $this->entityManager;
96 | }
97 | }
98 |
--------------------------------------------------------------------------------
/boilerplates/blank/public/index.php:
--------------------------------------------------------------------------------
1 | append(__DIR__ . '/../configs/master.yaml');
53 |
54 |
55 | /**
56 | * Add global data/functions that should be available in all templates.
57 | */
58 | template()->addData([
59 | 'paths' => config()->get('µ.paths'),
60 | 'pageload' => function () use ($start) {
61 | return number_format((microtime(true) - $start) * 1000, 2) . 'ms';
62 | }
63 | ]);
64 |
65 |
66 | /**
67 | * Register routes…
68 | */
69 | router()->get('/', function () {
70 | echo template()->render('index');
71 | });
72 |
73 |
74 | /**
75 | * Dispatch the request and retrieve the response status code.
76 | */
77 | list($statusCode) = router()->dispatch();
78 |
79 |
80 | /**
81 | * A really basic handler function for 404 errors. Can be used anywhere
82 | * in any context. For example if a given route was matched but the
83 | * provided data was malicious.
84 | *
85 | * @param array $data Additional template data.
86 | */
87 | function handle404(array $data = [])
88 | {
89 | http_response_code(404);
90 |
91 | echo template()->render('404', $data);
92 | }
93 |
94 |
95 | if ($statusCode === 404) {
96 | handle404();
97 | }
98 |
--------------------------------------------------------------------------------
/.idea/micro.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
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 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # [3.0.0]
2 | ###### 2019-10-12
3 |
4 | ###### Addded
5 | - `validator()` function to provide access to Symfony’s validation package ([093c3eb])
6 |
7 | ###### Changed
8 | - **BREAKING** Replaced [Medoo] in favor of [Doctrine]’s [DBAL] and [ORM]. ([b9dc841])
9 | - Return result of routing dispatcher even on success ([380d221])
10 |
11 |
12 | # [2.1.1]
13 | ###### 2019-09-16
14 |
15 | ###### Fixed
16 | - Appending `json` or `php` configuration files could result in keys missing. ([#1])
17 |
18 |
19 | # [2.1.0]
20 | ###### 2018-05-01
21 |
22 | ###### Added
23 | - `µ\VERSION` constant representing the version number of micro.
24 | - [Oh Snap!] as default error formatter for BooBoo. ([e526bf0])
25 |
26 | ###### Changed
27 | - Throw RuntimeException if configuration file is not readable. ([b287474])
28 |
29 | ###### Fixed
30 | - `template()` resulting in a misconfigured Plates instance. ([4998a87])
31 | - Unnecessary processing of empty/incompatible configuration files. ([97d1d0a])
32 | - [`./bootstrap`] input always resulting in a bail out. ([56b5315])
33 |
34 |
35 | # [2.0.2]
36 | ###### 2018-03-17
37 |
38 | Replace [`$objectify()`] function with the one from [Jasny’s PHP functions].
39 |
40 |
41 | # [2.0.1]
42 | ###### 2018-03-14
43 |
44 | Fix composer not requiring correct PHP version.
45 |
46 |
47 | # [2.0.0]
48 | ###### 2018-03-11
49 |
50 | ###### Added
51 | - Caching using [Scrapbook]. ⚡️ ([8b9c210])
52 |
53 | ###### Changed
54 | - **BREAKING** Put all µ configuration under single “µ” key. ([33505bf])
55 |
56 |
57 | # [1.0.1]
58 | ###### 2018-03-03
59 |
60 | Changing the error formatter in your configuration (e.g. `config()->set('µ.error.formatter', 'json')`), should *only* trigger an update if the formatter *is different* to the currently set one.
61 |
62 |
63 | # 1.0.0
64 | ###### 2018-02-19
65 |
66 | You gotta start somewhere, right? 🌟
67 |
68 | [3.0.0]: https://github.com/mzdr/micro/compare/2.1.1...3.0.0
69 | [2.1.1]: https://github.com/mzdr/micro/compare/2.1.0...2.1.1
70 | [2.1.0]: https://github.com/mzdr/micro/compare/2.0.2...2.1.0
71 | [2.0.2]: https://github.com/mzdr/micro/compare/2.0.1...2.0.2
72 | [2.0.1]: https://github.com/mzdr/micro/compare/2.0.0...2.0.1
73 | [2.0.0]: https://github.com/mzdr/micro/compare/1.0.1...2.0.0
74 | [1.0.1]: https://github.com/mzdr/micro/compare/1.0.0...1.0.1
75 |
76 | [Jasny’s PHP functions]: https://github.com/jasny/php-functions
77 | [Scrapbook]: https://github.com/matthiasmullie/scrapbook
78 | [Oh Snap!]: https://github.com/mzdr/oh-snap
79 | [Doctrine]: https://www.doctrine-project.org/
80 | [DBAL]: https://www.doctrine-project.org/projects/dbal.html
81 | [ORM]: https://www.doctrine-project.org/projects/orm.html
82 | [Medoo]: https://medoo.in/
83 |
84 | [8b9c210]: https://github.com/mzdr/micro/commit/8b9c210
85 | [33505bf]: https://github.com/mzdr/micro/commit/33505bf
86 | [56b5315]: https://github.com/mzdr/micro/commit/56b5315
87 | [b287474]: https://github.com/mzdr/micro/commit/b287474
88 | [97d1d0a]: https://github.com/mzdr/micro/commit/97d1d0a
89 | [4998a87]: https://github.com/mzdr/micro/commit/4998a87
90 | [e526bf0]: https://github.com/mzdr/micro/commit/e526bf0
91 | [380d221]: https://github.com/mzdr/micro/commit/380d221
92 | [093c3eb]: https://github.com/mzdr/micro/commit/093c3eb
93 | [b9dc841]: https://github.com/mzdr/micro/commit/b9dc841
94 |
95 | [#1]: https://github.com/mzdr/micro/issues/1
96 |
97 |
98 | [`$objectify()`]: https://github.com/mzdr/micro/blob/ac77047844a6fa306b742910e71834503710ac29/lib/config.php#L100
99 | [`./bootstrap`]: https://github.com/mzdr/micro/blob/master/bootstrap
100 |
--------------------------------------------------------------------------------
/micro/functions/cache.php:
--------------------------------------------------------------------------------
1 | get('µ.cache', null);
28 |
29 | if ($config === null) {
30 | return null;
31 | }
32 |
33 | $createCache = function ($config) {
34 | switch (strtolower($config->adapter)) {
35 | case 'memcached':
36 | $client = new Memcached();
37 | $client->addServer($config->host, $config->port);
38 | $scrapbook = new Scrapbook\Adapters\Memcached($client);
39 |
40 | break;
41 |
42 | case 'redis':
43 | $client = new Redis();
44 | $client->connect($config->host);
45 | $scrapbook = new Scrapbook\Adapters\Redis($client);
46 |
47 | break;
48 |
49 | case 'couchbase':
50 | $cluster = new CouchbaseCluster('couchbase://' . $config->host);
51 | $bucket = $cluster->openBucket($config->name);
52 | $scrapbook = new Scrapbook\Adapters\Couchbase($bucket);
53 |
54 | break;
55 |
56 | case 'apc':
57 | case 'apcu':
58 | $scrapbook = new Scrapbook\Adapters\Apc();
59 |
60 | break;
61 |
62 | case 'mysql':
63 | $client = new PDO(
64 | "mysql:dbname={$config->name};host={$config->host}",
65 | $config->user,
66 | $config->password
67 | );
68 | $scrapbook = new Scrapbook\Adapters\MySQL($client);
69 |
70 | break;
71 |
72 | case 'sqlite':
73 | $client = new PDO("sqlite:{$config->path}");
74 | $scrapbook = new Scrapbook\Adapters\SQLite($client);
75 |
76 | break;
77 |
78 | case 'postgresql':
79 | $client = new PDO("pgsql:user={$config->user} dbname={$config->name} password={$config->password}");
80 | $scrapbook = new Scrapbook\Adapters\PostgreSQL($client);
81 |
82 | break;
83 |
84 | case 'memory':
85 | $scrapbook = new Scrapbook\Adapters\MemoryStore();
86 |
87 | break;
88 |
89 | case 'flysystem':
90 | case 'files':
91 | $adapter = new Flysystem\Adapter\Local($config->path ?? sys_get_temp_dir());
92 | $filesystem = new Flysystem\Filesystem($adapter);
93 | $scrapbook = new Scrapbook\Adapters\Flysystem($filesystem);
94 |
95 | break;
96 |
97 | default:
98 | throw new InvalidArgumentException("Given adapter “{$config->adapter}” is not supported.");
99 | }
100 |
101 | return $scrapbook;
102 | };
103 |
104 | if (isset($config->sharding) === true) {
105 | if (is_iterable($config->sharding) === false && is_object($config->sharding) === false) {
106 | throw new InvalidArgumentException('Sharding parameter needs to be iterable.');
107 | }
108 |
109 | $scrapbook = [];
110 |
111 | foreach ($config->sharding as $cacheConfig) {
112 | $scrapbook[] = $createCache($cacheConfig);
113 | }
114 |
115 | $scrapbook = new Scrapbook\Scale\Shard(...$scrapbook);
116 | } else {
117 | $scrapbook = $createCache($config);
118 | }
119 |
120 | if (empty($config->localBuffer) === false) {
121 | $scrapbook = new Scrapbook\Buffered\BufferedStore($scrapbook);
122 | }
123 |
124 | if (empty($config->stampedeProtection) === false) {
125 | $scrapbook = new Scrapbook\Scale\StampedeProtector($scrapbook);
126 | }
127 |
128 | if (empty($config->transactions) === false) {
129 | $scrapbook = new Scrapbook\Buffered\TransactionalStore($scrapbook);
130 | }
131 |
132 | if (empty($config->psr16) === false) {
133 | $cache = new Scrapbook\Psr16\SimpleCache($scrapbook);
134 | } elseif (empty($config->psr6) === false) {
135 | $cache = new Scrapbook\Psr6\Pool($scrapbook);
136 | } else {
137 | $cache = $scrapbook;
138 | }
139 |
140 | return $cache;
141 | }
142 |
--------------------------------------------------------------------------------
/micro/classes/Configuration.php:
--------------------------------------------------------------------------------
1 | 'parseIni',
21 | 'json' => 'parseJson',
22 | 'php' => 'parsePhp',
23 | 'yaml' => 'parseYaml'
24 | ];
25 |
26 | /**
27 | * Parses an INI file and returns the content of it.
28 | *
29 | * @param string $filename Path to INI file.
30 | * @return array|bool
31 | */
32 | protected function parseIni($filename)
33 | {
34 | return parse_ini_file($filename, true);
35 | }
36 |
37 | /**
38 | * Parses a JSON file and returns the content of it.
39 | *
40 | * @param string $filename Path to JSON file.
41 | * @return mixed
42 | */
43 | protected function parseJson($filename)
44 | {
45 | return json_decode(file_get_contents($filename), true);
46 | }
47 |
48 | /**
49 | * Parses a PHP file and returns the content of it.
50 | *
51 | * @param string $filename Path to PHP file.
52 | * @return mixed
53 | */
54 | protected function parsePhp($filename)
55 | {
56 | return Jasny\arrayify(require $filename);
57 | }
58 |
59 | /**
60 | * Parses a YAML file and returns the content of it.
61 | *
62 | * @param string $filename Path to YAML file.
63 | * @return mixed
64 | */
65 | protected function parseYaml($filename)
66 | {
67 | return Yaml::parseFile($filename, Yaml::PARSE_CONSTANT);
68 | }
69 |
70 | /**
71 | * Appends a single configuration file or all files
72 | * from a given directory into the current configuration.
73 | *
74 | * @param string|SplFileInfo $path Path of configuration file or directory.
75 | * @param string $preferredExtension Preferred files to use when scanning directory. Defaults to `php`.
76 | * @return Configuration
77 | */
78 | public function append($path, string $preferredExtension = 'php'): Configuration
79 | {
80 | $resource = $path instanceof SplFileInfo ? $path : new SplFileInfo($path);
81 | $extension = $resource->getExtension();
82 |
83 | // If configuration file/resource is not readable,
84 | // stop right here and let the user know.
85 | if ($resource->isReadable() === false) {
86 | throw new RuntimeException("Unable to read “{$resource->getPathname()}”.");
87 | }
88 |
89 | // Resource is a file, try to parse it.
90 | if ($resource->isFile() && isset($this->parsers[$extension])) {
91 | $parser = $this->parsers[$extension];
92 | $append = new static;
93 | $raw = call_user_func([$this, $parser], $resource->getPathname());
94 |
95 | // Configuration file did not provide any meaningful data…
96 | if (is_object($raw) === false && is_array($raw) === false) {
97 | return $this;
98 | }
99 |
100 | foreach ($raw as $key => $value) {
101 | $append->set($key, $value);
102 | }
103 |
104 | $append = $append->all();
105 | $this->original = array_merge($this->original, $append);
106 | $this->items = array_merge($this->items, $append);
107 |
108 | $this->notify();
109 |
110 | return $this;
111 | }
112 |
113 | // Resource is a directory, so try to find any possible configuration file
114 | // using the set preferred extension.
115 | if ($resource->isDir()) {
116 | $directory = new DirectoryIterator(realpath($path));
117 |
118 | foreach ($directory as $file) {
119 | if ($file->isFile() && $file->getExtension() === $preferredExtension) {
120 | $this->append($file);
121 | }
122 | }
123 | }
124 |
125 | return $this;
126 | }
127 |
128 | /**
129 | * Get a configuration item.
130 | *
131 | * @param string $key Key to look for.
132 | * @param mixed $default Default data to return if key wasn’t found.
133 | * @param bool $noCast Do not cast arrays to objects. Default: false
134 | * @return mixed
135 | */
136 | public function get($key, $default = null, $noCast = false)
137 | {
138 | $result = parent::get($key, $default);
139 |
140 | if ($noCast === true) {
141 | return $result;
142 | }
143 |
144 | return Jasny\objectify($result);
145 | }
146 | }
147 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | A tiny multi-tool for your next big PHP adventure.1
7 |
8 | ## Features
9 |
10 | - Easily manage your application’s **configuration** with [Gestalt].
11 |
12 | > Supports PHP, YAML, INI and JSON files out of the box.
13 |
14 | - Handle **databases** with [Doctrine]’s [DBAL] and optionally use their [ORM].
15 |
16 | > The Doctrine database abstraction & access layer (DBAL) offers a lightweight and thin runtime layer around a PDO-like API and a lot of additional, horizontal features like database schema introspection and manipulation through an OO API.
17 |
18 | - Have **error handling and formatting** to your preference with [BooBoo].
19 |
20 | > BooBoo is an error handler for PHP that allows for the execution of handlers and formatters for viewing and managing errors in development and production. It won’t end up in your stack trace, is built for logging, designed for extension and handles errors non-blocking by default.
21 |
22 | - Set up lightning fast **routing** with [FastRoute].
23 |
24 | > A fast regular expression based request router for PHP. See this [article](http://nikic.github.io/2014/02/18/Fast-request-routing-using-regular-expressions.html) for more details.
25 |
26 | - Use _native_ PHP **templates** with [Plates].
27 |
28 | > Plates is designed for developers who prefer to use native PHP templates over compiled template languages, such as Twig or Blade. It supports layouts, inheritance, namespaces, data sharing and comes with built-in escaping helpers.
29 |
30 | - ⚡️ Speed up your (dynamic) web applications by **caching** with [Scrapbook].
31 |
32 | > PHP cache library, with adapters for e.g. Memcached, Redis, Couchbase, APC(u), SQL and additional capabilities (e.g. transactions, stampede protection) built on top.
33 |
34 |
35 |
36 | ## Requirements
37 |
38 | [PHP] 7.1.3+ and preferably [URL Rewriting] enabled.
39 |
40 |
41 |
42 | ## Installation
43 |
44 | It is recommended that you install this framework using [Composer].
45 |
46 | ```bash
47 | composer require mzdr/micro
48 | ```
49 |
50 |
51 |
52 | ## Usage
53 |
54 | **micro** is basically just a bunch of _wrapper functions_ located under a _single_ namespace called `µ`. Every file you see in [`./micro/functions`] is also available as a function with the same name.
55 |
56 | Let me talk in code to you… 😎
57 |
58 | ```php
59 | get('my.stored.variable');
67 |
68 |
69 | // Need to register routes with the
70 | // FastRoute (@nikic/FastRoute) instance?
71 | µ\router()->get('/home', function () {
72 |
73 | // 🌈 Use your imagination…
74 |
75 | // How about we use the Plates
76 | // (@thephpleague/plates) template engine? 🤩
77 | echo µ\template()->render('home');
78 | });
79 |
80 |
81 | // Tired of typing µ? 😫 Join the club!
82 | namespace µ {
83 | router()->get('/', function () {
84 | $key = 'my-heavy-op';
85 | $ttl = 300;
86 | $value = "cached for $ttl seconds.";
87 |
88 | if (cache()->has($key) === false) {
89 | sleep(2); // So so heavy…
90 |
91 | cache()->set($key, $value, $ttl);
92 |
93 | return $value;
94 | }
95 |
96 | return cache()->get($key);
97 | });
98 | }
99 |
100 | // Out there in strange places? 👽 Import it!
101 | namespace alien {
102 | use function µ\config;
103 |
104 | $done = config()->get('get.it.done');
105 | }
106 | ```
107 |
108 |
109 |
110 | Just follow the official documentation of each library listed below or jump into the [`./micro/functions`] folder to get a look under the hood.
111 |
112 | | Function | Documentation |
113 | | ------------------ | ---------------------------------------- |
114 | | `µ\config()` | https://github.com/samrap/gestalt-docs |
115 | | `µ\database()` | https://www.doctrine-project.org/ |
116 | | `µ\error()` | http://booboo.thephpleague.com/ |
117 | | `µ\router()` | https://github.com/nikic/FastRoute |
118 | | `µ\template()` | http://platesphp.com/ |
119 | | `µ\cache()` | https://www.scrapbook.cash/ |
120 |
121 |
122 |
123 | ## Bootstrapping
124 |
125 | You’re in a hurry? Bootstrap a [blank], ready-to-view **µ** project!
126 |
127 | 1. Make new project directory and jump into it.
128 |
129 | ```bash
130 | mkdir fancy-project && cd $_
131 | ```
132 |
133 | 2. Install **µ**.
134 |
135 | ```bash
136 | composer require mzdr/micro
137 | ```
138 |
139 | 3. Boostrap it.
140 |
141 | ```bash
142 | ./vendor/mzdr/micro/bootstrap
143 | ```
144 |
145 | 4. **That’s it!** Now how do you check out your project?
146 |
147 | - Create a virtual host and point the document root to the `public` folder, _**or…**_
148 |
149 | - Fire up [PHP’s built-in web server], _**or**…_
150 | (Doesn’t support .htaccess, you have to [include assets](https://github.com/mzdr/micro/blob/master/boilerplates/blank/views/_layouts/default.php#L8) _without_ $this->asset(…) cache busting)
151 |
152 | - Just browse to the `public` folder via your local webserver.
153 | (You probably need to adjust `µ.paths.public` in your `configs/master.yaml`)
154 |
155 |
156 |
157 |
158 | ## License
159 |
160 | This project is licensed under [MIT license].
161 |
162 |
163 |
164 |
165 |
166 |
167 | 1 It may be tiny and powerful, but it’s not the right tool for every job.
168 |
169 |
170 | [Gestalt]: https://github.com/samrap/gestalt
171 | [Doctrine]: https://www.doctrine-project.org/
172 | [DBAL]: https://www.doctrine-project.org/projects/dbal.html
173 | [ORM]: https://www.doctrine-project.org/projects/orm.html
174 | [BooBoo]: https://github.com/thephpleague/booboo
175 | [FastRoute]: https://github.com/nikic/FastRoute
176 | [Plates]: https://github.com/thephpleague/plates
177 | [Scrapbook]: https://github.com/matthiasmullie/scrapbook#keyvaluestore
178 | [PHP]: http://php.net
179 | [PHP’s built-in web server]: https://secure.php.net/manual/en/features.commandline.webserver.php
180 | [Composer]: https://getcomposer.org/doc/00-intro.md
181 | [URL Rewriting]: https://github.com/mzdr/micro/wiki/URL-Rewriting
182 | [MIT license]: ./LICENSE
183 | [`./micro/functions`]: ./micro/functions
184 | [blank]: ./boilerplates/blank
185 |
--------------------------------------------------------------------------------
/boilerplates/blank/public/.htaccess:
--------------------------------------------------------------------------------
1 | # @see https://github.com/h5bp/server-configs-apache/blob/master/dist/.htaccess
2 |
3 | # ----------------------------------------------------------------------
4 | # | Media types |
5 | # ----------------------------------------------------------------------
6 |
7 | # Serve resources with the proper media types (f.k.a. MIME types).
8 | #
9 | # https://www.iana.org/assignments/media-types/media-types.xhtml
10 | # https://httpd.apache.org/docs/current/mod/mod_mime.html#addtype
11 |
12 |
13 |
14 | # Data interchange
15 |
16 | AddType application/atom+xml atom
17 | AddType application/json json map topojson
18 | AddType application/ld+json jsonld
19 | AddType application/rss+xml rss
20 | AddType application/vnd.geo+json geojson
21 | AddType application/xml rdf xml
22 |
23 |
24 | # JavaScript
25 |
26 | # Servers should use text/javascript for JavaScript resources.
27 | # https://html.spec.whatwg.org/multipage/scripting.html#scriptingLanguages
28 |
29 | AddType text/javascript js mjs
30 |
31 |
32 | # Manifest files
33 |
34 | AddType application/manifest+json webmanifest
35 | AddType application/x-web-app-manifest+json webapp
36 | AddType text/cache-manifest appcache
37 |
38 |
39 | # Media files
40 |
41 | AddType audio/mp4 f4a f4b m4a
42 | AddType audio/ogg oga ogg opus
43 | AddType image/bmp bmp
44 | AddType image/svg+xml svg svgz
45 | AddType image/webp webp
46 | AddType video/mp4 f4v f4p m4v mp4
47 | AddType video/ogg ogv
48 | AddType video/webm webm
49 | AddType video/x-flv flv
50 |
51 | # Serving `.ico` image files with a different media type
52 | # prevents Internet Explorer from displaying them as images:
53 | # https://github.com/h5bp/html5-boilerplate/commit/37b5fec090d00f38de64b591bcddcb205aadf8ee
54 |
55 | AddType image/x-icon cur ico
56 |
57 |
58 | # Web fonts
59 |
60 | AddType font/woff woff
61 | AddType font/woff2 woff2
62 | AddType application/vnd.ms-fontobject eot
63 | AddType font/ttf ttf
64 | AddType font/collection ttc
65 | AddType font/otf otf
66 |
67 |
68 | # Other
69 |
70 | AddType application/octet-stream safariextz
71 | AddType application/x-bb-appworld bbaw
72 | AddType application/x-chrome-extension crx
73 | AddType application/x-opera-extension oex
74 | AddType application/x-xpinstall xpi
75 | AddType text/calendar ics
76 | AddType text/markdown markdown md
77 | AddType text/vcard vcard vcf
78 | AddType text/vnd.rim.location.xloc xloc
79 | AddType text/vtt vtt
80 | AddType text/x-component htc
81 |
82 |
83 |
84 |
85 | # ----------------------------------------------------------------------
86 | # | Character encodings |
87 | # ----------------------------------------------------------------------
88 |
89 | # Serve all resources labeled as `text/html` or `text/plain`
90 | # with the media type `charset` parameter set to `UTF-8`.
91 | #
92 | # https://httpd.apache.org/docs/current/mod/core.html#adddefaultcharset
93 |
94 | AddDefaultCharset utf-8
95 |
96 | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
97 |
98 | # Serve the following file types with the media type `charset`
99 | # parameter set to `UTF-8`.
100 | #
101 | # https://httpd.apache.org/docs/current/mod/mod_mime.html#addcharset
102 |
103 |
104 | AddCharset utf-8 .atom \
105 | .bbaw \
106 | .css \
107 | .geojson \
108 | .ics \
109 | .js \
110 | .json \
111 | .jsonld \
112 | .manifest \
113 | .markdown \
114 | .md \
115 | .mjs \
116 | .rdf \
117 | .rss \
118 | .topojson \
119 | .vtt \
120 | .webapp \
121 | .webmanifest \
122 | .xloc \
123 | .xml
124 |
125 |
126 |
127 | # ----------------------------------------------------------------------
128 | # | Compression |
129 | # ----------------------------------------------------------------------
130 |
131 |
132 |
133 | # Force compression for mangled `Accept-Encoding` request headers
134 | # https://developer.yahoo.com/blogs/ydn/pushing-beyond-gzipping-25601.html
135 |
136 |
137 |
138 | SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
139 | RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
140 |
141 |
142 |
143 | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
144 |
145 | # Compress all output labeled with one of the following media types.
146 | #
147 | # (!) For Apache versions below version 2.3.7 you don't need to
148 | # enable `mod_filter` and can remove the ``
149 | # and `` lines as `AddOutputFilterByType` is still in
150 | # the core directives.
151 | #
152 | # https://httpd.apache.org/docs/current/mod/mod_filter.html#addoutputfilterbytype
153 |
154 |
155 | AddOutputFilterByType DEFLATE "application/atom+xml" \
156 | "application/javascript" \
157 | "application/json" \
158 | "application/ld+json" \
159 | "application/manifest+json" \
160 | "application/rdf+xml" \
161 | "application/rss+xml" \
162 | "application/schema+json" \
163 | "application/vnd.geo+json" \
164 | "application/vnd.ms-fontobject" \
165 | "application/x-font-ttf" \
166 | "application/x-javascript" \
167 | "application/x-web-app-manifest+json" \
168 | "application/xhtml+xml" \
169 | "application/xml" \
170 | "font/collection" \
171 | "font/eot" \
172 | "font/opentype" \
173 | "font/otf" \
174 | "font/ttf" \
175 | "image/bmp" \
176 | "image/svg+xml" \
177 | "image/vnd.microsoft.icon" \
178 | "image/x-icon" \
179 | "text/cache-manifest" \
180 | "text/calendar" \
181 | "text/css" \
182 | "text/html" \
183 | "text/javascript" \
184 | "text/plain" \
185 | "text/markdown" \
186 | "text/vcard" \
187 | "text/vnd.rim.location.xloc" \
188 | "text/vtt" \
189 | "text/x-component" \
190 | "text/x-cross-domain-policy" \
191 | "text/xml"
192 |
193 |
194 |
195 | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
196 |
197 | # Map the following filename extensions to the specified
198 | # encoding type in order to make Apache serve the file types
199 | # with the appropriate `Content-Encoding` response header
200 | # (do note that this will NOT make Apache compress them!).
201 | #
202 | # If these files types would be served without an appropriate
203 | # `Content-Enable` response header, client applications (e.g.:
204 | # browsers) wouldn't know that they first need to uncompress
205 | # the response, and thus, wouldn't be able to understand the
206 | # content.
207 | #
208 | # https://httpd.apache.org/docs/current/mod/mod_mime.html#addencoding
209 |
210 |
211 | AddEncoding gzip svgz
212 |
213 |
214 |
215 |
216 |
217 | # ----------------------------------------------------------------------
218 | # | Rewrite engine |
219 | # ----------------------------------------------------------------------
220 |
221 | # (1) Turn on the rewrite engine (this is necessary in order for
222 | # the `RewriteRule` directives to work).
223 | #
224 | # https://httpd.apache.org/docs/current/mod/mod_rewrite.html#RewriteEngine
225 | #
226 | # (2) Enable the `FollowSymLinks` option if it isn't already.
227 | #
228 | # https://httpd.apache.org/docs/current/mod/core.html#options
229 | #
230 | # (3) If your web host doesn't allow the `FollowSymlinks` option,
231 | # you need to comment it out or remove it, and then uncomment
232 | # the `Options +SymLinksIfOwnerMatch` line (4), but be aware
233 | # of the performance impact.
234 | #
235 | # https://httpd.apache.org/docs/current/misc/perf-tuning.html#symlinks
236 | #
237 | # (4) Some cloud hosting services will require you set `RewriteBase`.
238 | #
239 | # https://www.rackspace.com/knowledge_center/frequently-asked-question/why-is-modrewrite-not-working-on-my-site
240 | # https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritebase
241 | #
242 | # (5) Depending on how your server is set up, you may also need to
243 | # use the `RewriteOptions` directive to enable some options for
244 | # the rewrite engine.
245 | #
246 | # https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriteoptions
247 | #
248 | # (6) Set %{ENV:PROTO} variable, to allow rewrites to redirect with the
249 | # appropriate schema automatically (http or https).
250 |
251 |
252 |
253 | # (1)
254 | RewriteEngine On
255 |
256 | # (2)
257 | Options +FollowSymlinks
258 |
259 | # (3)
260 | # Options +SymLinksIfOwnerMatch
261 |
262 | # (4)
263 | # RewriteBase /
264 |
265 | # (5)
266 | # RewriteOptions
267 |
268 | # (6)
269 | RewriteCond %{HTTPS} =on
270 | RewriteRule ^ - [env=proto:https]
271 | RewriteCond %{HTTPS} !=on
272 | RewriteRule ^ - [env=proto:http]
273 |
274 | # ----------------------------------------------------------------------
275 | # | Forcing `https://` |
276 | # ----------------------------------------------------------------------
277 |
278 | # Redirect from the `http://` to the `https://` version of the URL.
279 | # https://wiki.apache.org/httpd/RewriteHTTPToHTTPS
280 |
281 | # RewriteCond %{HTTPS} !=on
282 | # RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
283 |
284 | # ----------------------------------------------------------------------
285 | # | Filename-based cache busting |
286 | # ----------------------------------------------------------------------
287 |
288 | # If you're not using a build process to manage your filename version
289 | # revving, you might want to consider enabling the following directives
290 | # to route all requests such as `/style.12345.css` to `/style.css`.
291 | #
292 | # To understand why this is important and even a better solution than
293 | # using something like `*.css?v231`, please see:
294 | # http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/
295 |
296 | RewriteCond %{REQUEST_FILENAME} !-f
297 | RewriteRule ^(.+)\.(\w+)\.(bmp|css|cur|gif|ico|jpe?g|m?js|png|svgz?|webp|webmanifest)$ $1.$3 [L]
298 |
299 |
300 | # ----------------------------------------------------------------------
301 | # | Enforce a trailing slash for all URLs |
302 | # ----------------------------------------------------------------------
303 |
304 | # Recommended to avoid duplicate content. Make sure to be consistent
305 | # and use it in your internal links in order to avoid unnecessary redirects.
306 | #
307 | # https://webmasters.googleblog.com/2010/04/to-slash-or-not-to-slash.html
308 |
309 | # Adjust the second condition if you want to exclude requests for
310 | # specific file type extensions.
311 |
312 | RewriteCond %{REQUEST_FILENAME} !-f
313 | RewriteCond %{REQUEST_URI} !\.(php|html?|jpg|gif|svg|png|bmp|ico|css|js)$
314 |
315 | RewriteRule ^(.*)([^/])$ /$1$2/ [L,R=301]
316 |
317 |
318 | # ----------------------------------------------------------------------
319 | # | Redirect everything that doesn’t exist to the index.php |
320 | # ----------------------------------------------------------------------
321 |
322 | RewriteCond %{REQUEST_FILENAME} !-f
323 | RewriteCond %{REQUEST_FILENAME} !-d
324 |
325 | RewriteRule ^(.*)$ index.php [QSA,L]
326 |
327 |
328 |
329 | # ----------------------------------------------------------------------
330 | # | Server-side technology information |
331 | # ----------------------------------------------------------------------
332 |
333 | # Remove the `X-Powered-By` response header that:
334 | #
335 | # * is set by some frameworks and server-side languages
336 | # (e.g.: ASP.NET, PHP), and its value contains information
337 | # about them (e.g.: their name, version number)
338 | #
339 | # * doesn't provide any value to users, contributes to header
340 | # bloat, and in some cases, the information it provides can
341 | # expose vulnerabilities
342 | #
343 | # (!) If you can, you should disable the `X-Powered-By` header from the
344 | # language / framework level (e.g.: for PHP, you can do that by setting
345 | # `expose_php = off` in `php.ini`)
346 | #
347 | # https://php.net/manual/en/ini.core.php#ini.expose-php
348 |
349 |
350 | Header unset X-Powered-By
351 |
352 |
353 |
354 | # ----------------------------------------------------------------------
355 | # | Server software information |
356 | # ----------------------------------------------------------------------
357 |
358 | # Prevent Apache from adding a trailing footer line containing
359 | # information about the server to the server-generated documents
360 | # (e.g.: error messages, directory listings, etc.)
361 | #
362 | # https://httpd.apache.org/docs/current/mod/core.html#serversignature
363 |
364 | ServerSignature Off
365 |
--------------------------------------------------------------------------------
/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#installing-dependencies",
5 | "This file is @generated automatically"
6 | ],
7 | "content-hash": "a34cac2009d88d3a07485939207ece8c",
8 | "packages": [
9 | {
10 | "name": "doctrine/cache",
11 | "version": "2.2.0",
12 | "source": {
13 | "type": "git",
14 | "url": "https://github.com/doctrine/cache.git",
15 | "reference": "1ca8f21980e770095a31456042471a57bc4c68fb"
16 | },
17 | "dist": {
18 | "type": "zip",
19 | "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb",
20 | "reference": "1ca8f21980e770095a31456042471a57bc4c68fb",
21 | "shasum": ""
22 | },
23 | "require": {
24 | "php": "~7.1 || ^8.0"
25 | },
26 | "conflict": {
27 | "doctrine/common": ">2.2,<2.4"
28 | },
29 | "require-dev": {
30 | "cache/integration-tests": "dev-master",
31 | "doctrine/coding-standard": "^9",
32 | "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
33 | "psr/cache": "^1.0 || ^2.0 || ^3.0",
34 | "symfony/cache": "^4.4 || ^5.4 || ^6",
35 | "symfony/var-exporter": "^4.4 || ^5.4 || ^6"
36 | },
37 | "type": "library",
38 | "autoload": {
39 | "psr-4": {
40 | "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache"
41 | }
42 | },
43 | "notification-url": "https://packagist.org/downloads/",
44 | "license": [
45 | "MIT"
46 | ],
47 | "authors": [
48 | {
49 | "name": "Guilherme Blanco",
50 | "email": "guilhermeblanco@gmail.com"
51 | },
52 | {
53 | "name": "Roman Borschel",
54 | "email": "roman@code-factory.org"
55 | },
56 | {
57 | "name": "Benjamin Eberlei",
58 | "email": "kontakt@beberlei.de"
59 | },
60 | {
61 | "name": "Jonathan Wage",
62 | "email": "jonwage@gmail.com"
63 | },
64 | {
65 | "name": "Johannes Schmitt",
66 | "email": "schmittjoh@gmail.com"
67 | }
68 | ],
69 | "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.",
70 | "homepage": "https://www.doctrine-project.org/projects/cache.html",
71 | "keywords": [
72 | "abstraction",
73 | "apcu",
74 | "cache",
75 | "caching",
76 | "couchdb",
77 | "memcached",
78 | "php",
79 | "redis",
80 | "xcache"
81 | ],
82 | "support": {
83 | "issues": "https://github.com/doctrine/cache/issues",
84 | "source": "https://github.com/doctrine/cache/tree/2.2.0"
85 | },
86 | "funding": [
87 | {
88 | "url": "https://www.doctrine-project.org/sponsorship.html",
89 | "type": "custom"
90 | },
91 | {
92 | "url": "https://www.patreon.com/phpdoctrine",
93 | "type": "patreon"
94 | },
95 | {
96 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache",
97 | "type": "tidelift"
98 | }
99 | ],
100 | "time": "2022-05-20T20:07:39+00:00"
101 | },
102 | {
103 | "name": "doctrine/collections",
104 | "version": "2.1.2",
105 | "source": {
106 | "type": "git",
107 | "url": "https://github.com/doctrine/collections.git",
108 | "reference": "db8cda536a034337f7dd63febecc713d4957f9ee"
109 | },
110 | "dist": {
111 | "type": "zip",
112 | "url": "https://api.github.com/repos/doctrine/collections/zipball/db8cda536a034337f7dd63febecc713d4957f9ee",
113 | "reference": "db8cda536a034337f7dd63febecc713d4957f9ee",
114 | "shasum": ""
115 | },
116 | "require": {
117 | "doctrine/deprecations": "^1",
118 | "php": "^8.1"
119 | },
120 | "require-dev": {
121 | "doctrine/coding-standard": "^10.0",
122 | "ext-json": "*",
123 | "phpstan/phpstan": "^1.8",
124 | "phpstan/phpstan-phpunit": "^1.0",
125 | "phpunit/phpunit": "^9.5",
126 | "vimeo/psalm": "^4.22"
127 | },
128 | "type": "library",
129 | "autoload": {
130 | "psr-4": {
131 | "Doctrine\\Common\\Collections\\": "src"
132 | }
133 | },
134 | "notification-url": "https://packagist.org/downloads/",
135 | "license": [
136 | "MIT"
137 | ],
138 | "authors": [
139 | {
140 | "name": "Guilherme Blanco",
141 | "email": "guilhermeblanco@gmail.com"
142 | },
143 | {
144 | "name": "Roman Borschel",
145 | "email": "roman@code-factory.org"
146 | },
147 | {
148 | "name": "Benjamin Eberlei",
149 | "email": "kontakt@beberlei.de"
150 | },
151 | {
152 | "name": "Jonathan Wage",
153 | "email": "jonwage@gmail.com"
154 | },
155 | {
156 | "name": "Johannes Schmitt",
157 | "email": "schmittjoh@gmail.com"
158 | }
159 | ],
160 | "description": "PHP Doctrine Collections library that adds additional functionality on top of PHP arrays.",
161 | "homepage": "https://www.doctrine-project.org/projects/collections.html",
162 | "keywords": [
163 | "array",
164 | "collections",
165 | "iterators",
166 | "php"
167 | ],
168 | "support": {
169 | "issues": "https://github.com/doctrine/collections/issues",
170 | "source": "https://github.com/doctrine/collections/tree/2.1.2"
171 | },
172 | "funding": [
173 | {
174 | "url": "https://www.doctrine-project.org/sponsorship.html",
175 | "type": "custom"
176 | },
177 | {
178 | "url": "https://www.patreon.com/phpdoctrine",
179 | "type": "patreon"
180 | },
181 | {
182 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcollections",
183 | "type": "tidelift"
184 | }
185 | ],
186 | "time": "2022-12-27T23:41:38+00:00"
187 | },
188 | {
189 | "name": "doctrine/common",
190 | "version": "3.4.3",
191 | "source": {
192 | "type": "git",
193 | "url": "https://github.com/doctrine/common.git",
194 | "reference": "8b5e5650391f851ed58910b3e3d48a71062eeced"
195 | },
196 | "dist": {
197 | "type": "zip",
198 | "url": "https://api.github.com/repos/doctrine/common/zipball/8b5e5650391f851ed58910b3e3d48a71062eeced",
199 | "reference": "8b5e5650391f851ed58910b3e3d48a71062eeced",
200 | "shasum": ""
201 | },
202 | "require": {
203 | "doctrine/persistence": "^2.0 || ^3.0",
204 | "php": "^7.1 || ^8.0"
205 | },
206 | "require-dev": {
207 | "doctrine/coding-standard": "^9.0 || ^10.0",
208 | "doctrine/collections": "^1",
209 | "phpstan/phpstan": "^1.4.1",
210 | "phpstan/phpstan-phpunit": "^1",
211 | "phpunit/phpunit": "^7.5.20 || ^8.5 || ^9.0",
212 | "squizlabs/php_codesniffer": "^3.0",
213 | "symfony/phpunit-bridge": "^6.1",
214 | "vimeo/psalm": "^4.4"
215 | },
216 | "type": "library",
217 | "autoload": {
218 | "psr-4": {
219 | "Doctrine\\Common\\": "src"
220 | }
221 | },
222 | "notification-url": "https://packagist.org/downloads/",
223 | "license": [
224 | "MIT"
225 | ],
226 | "authors": [
227 | {
228 | "name": "Guilherme Blanco",
229 | "email": "guilhermeblanco@gmail.com"
230 | },
231 | {
232 | "name": "Roman Borschel",
233 | "email": "roman@code-factory.org"
234 | },
235 | {
236 | "name": "Benjamin Eberlei",
237 | "email": "kontakt@beberlei.de"
238 | },
239 | {
240 | "name": "Jonathan Wage",
241 | "email": "jonwage@gmail.com"
242 | },
243 | {
244 | "name": "Johannes Schmitt",
245 | "email": "schmittjoh@gmail.com"
246 | },
247 | {
248 | "name": "Marco Pivetta",
249 | "email": "ocramius@gmail.com"
250 | }
251 | ],
252 | "description": "PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects depend on such as better reflection support, proxies and much more.",
253 | "homepage": "https://www.doctrine-project.org/projects/common.html",
254 | "keywords": [
255 | "common",
256 | "doctrine",
257 | "php"
258 | ],
259 | "support": {
260 | "issues": "https://github.com/doctrine/common/issues",
261 | "source": "https://github.com/doctrine/common/tree/3.4.3"
262 | },
263 | "funding": [
264 | {
265 | "url": "https://www.doctrine-project.org/sponsorship.html",
266 | "type": "custom"
267 | },
268 | {
269 | "url": "https://www.patreon.com/phpdoctrine",
270 | "type": "patreon"
271 | },
272 | {
273 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcommon",
274 | "type": "tidelift"
275 | }
276 | ],
277 | "time": "2022-10-09T11:47:59+00:00"
278 | },
279 | {
280 | "name": "doctrine/dbal",
281 | "version": "2.13.9",
282 | "source": {
283 | "type": "git",
284 | "url": "https://github.com/doctrine/dbal.git",
285 | "reference": "c480849ca3ad6706a39c970cdfe6888fa8a058b8"
286 | },
287 | "dist": {
288 | "type": "zip",
289 | "url": "https://api.github.com/repos/doctrine/dbal/zipball/c480849ca3ad6706a39c970cdfe6888fa8a058b8",
290 | "reference": "c480849ca3ad6706a39c970cdfe6888fa8a058b8",
291 | "shasum": ""
292 | },
293 | "require": {
294 | "doctrine/cache": "^1.0|^2.0",
295 | "doctrine/deprecations": "^0.5.3|^1",
296 | "doctrine/event-manager": "^1.0",
297 | "ext-pdo": "*",
298 | "php": "^7.1 || ^8"
299 | },
300 | "require-dev": {
301 | "doctrine/coding-standard": "9.0.0",
302 | "jetbrains/phpstorm-stubs": "2021.1",
303 | "phpstan/phpstan": "1.4.6",
304 | "phpunit/phpunit": "^7.5.20|^8.5|9.5.16",
305 | "psalm/plugin-phpunit": "0.16.1",
306 | "squizlabs/php_codesniffer": "3.6.2",
307 | "symfony/cache": "^4.4",
308 | "symfony/console": "^2.0.5|^3.0|^4.0|^5.0",
309 | "vimeo/psalm": "4.22.0"
310 | },
311 | "suggest": {
312 | "symfony/console": "For helpful console commands such as SQL execution and import of files."
313 | },
314 | "bin": [
315 | "bin/doctrine-dbal"
316 | ],
317 | "type": "library",
318 | "autoload": {
319 | "psr-4": {
320 | "Doctrine\\DBAL\\": "lib/Doctrine/DBAL"
321 | }
322 | },
323 | "notification-url": "https://packagist.org/downloads/",
324 | "license": [
325 | "MIT"
326 | ],
327 | "authors": [
328 | {
329 | "name": "Guilherme Blanco",
330 | "email": "guilhermeblanco@gmail.com"
331 | },
332 | {
333 | "name": "Roman Borschel",
334 | "email": "roman@code-factory.org"
335 | },
336 | {
337 | "name": "Benjamin Eberlei",
338 | "email": "kontakt@beberlei.de"
339 | },
340 | {
341 | "name": "Jonathan Wage",
342 | "email": "jonwage@gmail.com"
343 | }
344 | ],
345 | "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.",
346 | "homepage": "https://www.doctrine-project.org/projects/dbal.html",
347 | "keywords": [
348 | "abstraction",
349 | "database",
350 | "db2",
351 | "dbal",
352 | "mariadb",
353 | "mssql",
354 | "mysql",
355 | "oci8",
356 | "oracle",
357 | "pdo",
358 | "pgsql",
359 | "postgresql",
360 | "queryobject",
361 | "sasql",
362 | "sql",
363 | "sqlanywhere",
364 | "sqlite",
365 | "sqlserver",
366 | "sqlsrv"
367 | ],
368 | "support": {
369 | "issues": "https://github.com/doctrine/dbal/issues",
370 | "source": "https://github.com/doctrine/dbal/tree/2.13.9"
371 | },
372 | "funding": [
373 | {
374 | "url": "https://www.doctrine-project.org/sponsorship.html",
375 | "type": "custom"
376 | },
377 | {
378 | "url": "https://www.patreon.com/phpdoctrine",
379 | "type": "patreon"
380 | },
381 | {
382 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal",
383 | "type": "tidelift"
384 | }
385 | ],
386 | "time": "2022-05-02T20:28:55+00:00"
387 | },
388 | {
389 | "name": "doctrine/deprecations",
390 | "version": "v1.0.0",
391 | "source": {
392 | "type": "git",
393 | "url": "https://github.com/doctrine/deprecations.git",
394 | "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de"
395 | },
396 | "dist": {
397 | "type": "zip",
398 | "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de",
399 | "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de",
400 | "shasum": ""
401 | },
402 | "require": {
403 | "php": "^7.1|^8.0"
404 | },
405 | "require-dev": {
406 | "doctrine/coding-standard": "^9",
407 | "phpunit/phpunit": "^7.5|^8.5|^9.5",
408 | "psr/log": "^1|^2|^3"
409 | },
410 | "suggest": {
411 | "psr/log": "Allows logging deprecations via PSR-3 logger implementation"
412 | },
413 | "type": "library",
414 | "autoload": {
415 | "psr-4": {
416 | "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations"
417 | }
418 | },
419 | "notification-url": "https://packagist.org/downloads/",
420 | "license": [
421 | "MIT"
422 | ],
423 | "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.",
424 | "homepage": "https://www.doctrine-project.org/",
425 | "support": {
426 | "issues": "https://github.com/doctrine/deprecations/issues",
427 | "source": "https://github.com/doctrine/deprecations/tree/v1.0.0"
428 | },
429 | "time": "2022-05-02T15:47:09+00:00"
430 | },
431 | {
432 | "name": "doctrine/event-manager",
433 | "version": "1.2.0",
434 | "source": {
435 | "type": "git",
436 | "url": "https://github.com/doctrine/event-manager.git",
437 | "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520"
438 | },
439 | "dist": {
440 | "type": "zip",
441 | "url": "https://api.github.com/repos/doctrine/event-manager/zipball/95aa4cb529f1e96576f3fda9f5705ada4056a520",
442 | "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520",
443 | "shasum": ""
444 | },
445 | "require": {
446 | "doctrine/deprecations": "^0.5.3 || ^1",
447 | "php": "^7.1 || ^8.0"
448 | },
449 | "conflict": {
450 | "doctrine/common": "<2.9"
451 | },
452 | "require-dev": {
453 | "doctrine/coding-standard": "^9 || ^10",
454 | "phpstan/phpstan": "~1.4.10 || ^1.8.8",
455 | "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
456 | "vimeo/psalm": "^4.24"
457 | },
458 | "type": "library",
459 | "autoload": {
460 | "psr-4": {
461 | "Doctrine\\Common\\": "src"
462 | }
463 | },
464 | "notification-url": "https://packagist.org/downloads/",
465 | "license": [
466 | "MIT"
467 | ],
468 | "authors": [
469 | {
470 | "name": "Guilherme Blanco",
471 | "email": "guilhermeblanco@gmail.com"
472 | },
473 | {
474 | "name": "Roman Borschel",
475 | "email": "roman@code-factory.org"
476 | },
477 | {
478 | "name": "Benjamin Eberlei",
479 | "email": "kontakt@beberlei.de"
480 | },
481 | {
482 | "name": "Jonathan Wage",
483 | "email": "jonwage@gmail.com"
484 | },
485 | {
486 | "name": "Johannes Schmitt",
487 | "email": "schmittjoh@gmail.com"
488 | },
489 | {
490 | "name": "Marco Pivetta",
491 | "email": "ocramius@gmail.com"
492 | }
493 | ],
494 | "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.",
495 | "homepage": "https://www.doctrine-project.org/projects/event-manager.html",
496 | "keywords": [
497 | "event",
498 | "event dispatcher",
499 | "event manager",
500 | "event system",
501 | "events"
502 | ],
503 | "support": {
504 | "issues": "https://github.com/doctrine/event-manager/issues",
505 | "source": "https://github.com/doctrine/event-manager/tree/1.2.0"
506 | },
507 | "funding": [
508 | {
509 | "url": "https://www.doctrine-project.org/sponsorship.html",
510 | "type": "custom"
511 | },
512 | {
513 | "url": "https://www.patreon.com/phpdoctrine",
514 | "type": "patreon"
515 | },
516 | {
517 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager",
518 | "type": "tidelift"
519 | }
520 | ],
521 | "time": "2022-10-12T20:51:15+00:00"
522 | },
523 | {
524 | "name": "doctrine/inflector",
525 | "version": "2.0.6",
526 | "source": {
527 | "type": "git",
528 | "url": "https://github.com/doctrine/inflector.git",
529 | "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024"
530 | },
531 | "dist": {
532 | "type": "zip",
533 | "url": "https://api.github.com/repos/doctrine/inflector/zipball/d9d313a36c872fd6ee06d9a6cbcf713eaa40f024",
534 | "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024",
535 | "shasum": ""
536 | },
537 | "require": {
538 | "php": "^7.2 || ^8.0"
539 | },
540 | "require-dev": {
541 | "doctrine/coding-standard": "^10",
542 | "phpstan/phpstan": "^1.8",
543 | "phpstan/phpstan-phpunit": "^1.1",
544 | "phpstan/phpstan-strict-rules": "^1.3",
545 | "phpunit/phpunit": "^8.5 || ^9.5",
546 | "vimeo/psalm": "^4.25"
547 | },
548 | "type": "library",
549 | "autoload": {
550 | "psr-4": {
551 | "Doctrine\\Inflector\\": "lib/Doctrine/Inflector"
552 | }
553 | },
554 | "notification-url": "https://packagist.org/downloads/",
555 | "license": [
556 | "MIT"
557 | ],
558 | "authors": [
559 | {
560 | "name": "Guilherme Blanco",
561 | "email": "guilhermeblanco@gmail.com"
562 | },
563 | {
564 | "name": "Roman Borschel",
565 | "email": "roman@code-factory.org"
566 | },
567 | {
568 | "name": "Benjamin Eberlei",
569 | "email": "kontakt@beberlei.de"
570 | },
571 | {
572 | "name": "Jonathan Wage",
573 | "email": "jonwage@gmail.com"
574 | },
575 | {
576 | "name": "Johannes Schmitt",
577 | "email": "schmittjoh@gmail.com"
578 | }
579 | ],
580 | "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.",
581 | "homepage": "https://www.doctrine-project.org/projects/inflector.html",
582 | "keywords": [
583 | "inflection",
584 | "inflector",
585 | "lowercase",
586 | "manipulation",
587 | "php",
588 | "plural",
589 | "singular",
590 | "strings",
591 | "uppercase",
592 | "words"
593 | ],
594 | "support": {
595 | "issues": "https://github.com/doctrine/inflector/issues",
596 | "source": "https://github.com/doctrine/inflector/tree/2.0.6"
597 | },
598 | "funding": [
599 | {
600 | "url": "https://www.doctrine-project.org/sponsorship.html",
601 | "type": "custom"
602 | },
603 | {
604 | "url": "https://www.patreon.com/phpdoctrine",
605 | "type": "patreon"
606 | },
607 | {
608 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector",
609 | "type": "tidelift"
610 | }
611 | ],
612 | "time": "2022-10-20T09:10:12+00:00"
613 | },
614 | {
615 | "name": "doctrine/instantiator",
616 | "version": "1.5.0",
617 | "source": {
618 | "type": "git",
619 | "url": "https://github.com/doctrine/instantiator.git",
620 | "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b"
621 | },
622 | "dist": {
623 | "type": "zip",
624 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b",
625 | "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b",
626 | "shasum": ""
627 | },
628 | "require": {
629 | "php": "^7.1 || ^8.0"
630 | },
631 | "require-dev": {
632 | "doctrine/coding-standard": "^9 || ^11",
633 | "ext-pdo": "*",
634 | "ext-phar": "*",
635 | "phpbench/phpbench": "^0.16 || ^1",
636 | "phpstan/phpstan": "^1.4",
637 | "phpstan/phpstan-phpunit": "^1",
638 | "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
639 | "vimeo/psalm": "^4.30 || ^5.4"
640 | },
641 | "type": "library",
642 | "autoload": {
643 | "psr-4": {
644 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
645 | }
646 | },
647 | "notification-url": "https://packagist.org/downloads/",
648 | "license": [
649 | "MIT"
650 | ],
651 | "authors": [
652 | {
653 | "name": "Marco Pivetta",
654 | "email": "ocramius@gmail.com",
655 | "homepage": "https://ocramius.github.io/"
656 | }
657 | ],
658 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
659 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
660 | "keywords": [
661 | "constructor",
662 | "instantiate"
663 | ],
664 | "support": {
665 | "issues": "https://github.com/doctrine/instantiator/issues",
666 | "source": "https://github.com/doctrine/instantiator/tree/1.5.0"
667 | },
668 | "funding": [
669 | {
670 | "url": "https://www.doctrine-project.org/sponsorship.html",
671 | "type": "custom"
672 | },
673 | {
674 | "url": "https://www.patreon.com/phpdoctrine",
675 | "type": "patreon"
676 | },
677 | {
678 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
679 | "type": "tidelift"
680 | }
681 | ],
682 | "time": "2022-12-30T00:15:36+00:00"
683 | },
684 | {
685 | "name": "doctrine/lexer",
686 | "version": "2.1.0",
687 | "source": {
688 | "type": "git",
689 | "url": "https://github.com/doctrine/lexer.git",
690 | "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124"
691 | },
692 | "dist": {
693 | "type": "zip",
694 | "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124",
695 | "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124",
696 | "shasum": ""
697 | },
698 | "require": {
699 | "doctrine/deprecations": "^1.0",
700 | "php": "^7.1 || ^8.0"
701 | },
702 | "require-dev": {
703 | "doctrine/coding-standard": "^9 || ^10",
704 | "phpstan/phpstan": "^1.3",
705 | "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
706 | "psalm/plugin-phpunit": "^0.18.3",
707 | "vimeo/psalm": "^4.11 || ^5.0"
708 | },
709 | "type": "library",
710 | "autoload": {
711 | "psr-4": {
712 | "Doctrine\\Common\\Lexer\\": "src"
713 | }
714 | },
715 | "notification-url": "https://packagist.org/downloads/",
716 | "license": [
717 | "MIT"
718 | ],
719 | "authors": [
720 | {
721 | "name": "Guilherme Blanco",
722 | "email": "guilhermeblanco@gmail.com"
723 | },
724 | {
725 | "name": "Roman Borschel",
726 | "email": "roman@code-factory.org"
727 | },
728 | {
729 | "name": "Johannes Schmitt",
730 | "email": "schmittjoh@gmail.com"
731 | }
732 | ],
733 | "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
734 | "homepage": "https://www.doctrine-project.org/projects/lexer.html",
735 | "keywords": [
736 | "annotations",
737 | "docblock",
738 | "lexer",
739 | "parser",
740 | "php"
741 | ],
742 | "support": {
743 | "issues": "https://github.com/doctrine/lexer/issues",
744 | "source": "https://github.com/doctrine/lexer/tree/2.1.0"
745 | },
746 | "funding": [
747 | {
748 | "url": "https://www.doctrine-project.org/sponsorship.html",
749 | "type": "custom"
750 | },
751 | {
752 | "url": "https://www.patreon.com/phpdoctrine",
753 | "type": "patreon"
754 | },
755 | {
756 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
757 | "type": "tidelift"
758 | }
759 | ],
760 | "time": "2022-12-14T08:49:07+00:00"
761 | },
762 | {
763 | "name": "doctrine/orm",
764 | "version": "2.14.1",
765 | "source": {
766 | "type": "git",
767 | "url": "https://github.com/doctrine/orm.git",
768 | "reference": "de7eee5ed7b1b35c99b118f26f210a8281e6db8e"
769 | },
770 | "dist": {
771 | "type": "zip",
772 | "url": "https://api.github.com/repos/doctrine/orm/zipball/de7eee5ed7b1b35c99b118f26f210a8281e6db8e",
773 | "reference": "de7eee5ed7b1b35c99b118f26f210a8281e6db8e",
774 | "shasum": ""
775 | },
776 | "require": {
777 | "composer-runtime-api": "^2",
778 | "doctrine/cache": "^1.12.1 || ^2.1.1",
779 | "doctrine/collections": "^1.5 || ^2.0",
780 | "doctrine/common": "^3.0.3",
781 | "doctrine/dbal": "^2.13.1 || ^3.2",
782 | "doctrine/deprecations": "^0.5.3 || ^1",
783 | "doctrine/event-manager": "^1.2 || ^2",
784 | "doctrine/inflector": "^1.4 || ^2.0",
785 | "doctrine/instantiator": "^1.3",
786 | "doctrine/lexer": "^1.2.3 || ^2",
787 | "doctrine/persistence": "^2.4 || ^3",
788 | "ext-ctype": "*",
789 | "php": "^7.1 || ^8.0",
790 | "psr/cache": "^1 || ^2 || ^3",
791 | "symfony/console": "^4.2 || ^5.0 || ^6.0",
792 | "symfony/polyfill-php72": "^1.23",
793 | "symfony/polyfill-php80": "^1.16"
794 | },
795 | "conflict": {
796 | "doctrine/annotations": "<1.13 || >= 3.0"
797 | },
798 | "require-dev": {
799 | "doctrine/annotations": "^1.13 || ^2",
800 | "doctrine/coding-standard": "^9.0.2 || ^11.0",
801 | "phpbench/phpbench": "^0.16.10 || ^1.0",
802 | "phpstan/phpstan": "~1.4.10 || 1.9.8",
803 | "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
804 | "psr/log": "^1 || ^2 || ^3",
805 | "squizlabs/php_codesniffer": "3.7.1",
806 | "symfony/cache": "^4.4 || ^5.4 || ^6.0",
807 | "symfony/var-exporter": "^4.4 || ^5.4 || ^6.2",
808 | "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0",
809 | "vimeo/psalm": "4.30.0 || 5.4.0"
810 | },
811 | "suggest": {
812 | "ext-dom": "Provides support for XSD validation for XML mapping files",
813 | "symfony/cache": "Provides cache support for Setup Tool with doctrine/cache 2.0",
814 | "symfony/yaml": "If you want to use YAML Metadata Mapping Driver"
815 | },
816 | "bin": [
817 | "bin/doctrine"
818 | ],
819 | "type": "library",
820 | "autoload": {
821 | "psr-4": {
822 | "Doctrine\\ORM\\": "lib/Doctrine/ORM"
823 | }
824 | },
825 | "notification-url": "https://packagist.org/downloads/",
826 | "license": [
827 | "MIT"
828 | ],
829 | "authors": [
830 | {
831 | "name": "Guilherme Blanco",
832 | "email": "guilhermeblanco@gmail.com"
833 | },
834 | {
835 | "name": "Roman Borschel",
836 | "email": "roman@code-factory.org"
837 | },
838 | {
839 | "name": "Benjamin Eberlei",
840 | "email": "kontakt@beberlei.de"
841 | },
842 | {
843 | "name": "Jonathan Wage",
844 | "email": "jonwage@gmail.com"
845 | },
846 | {
847 | "name": "Marco Pivetta",
848 | "email": "ocramius@gmail.com"
849 | }
850 | ],
851 | "description": "Object-Relational-Mapper for PHP",
852 | "homepage": "https://www.doctrine-project.org/projects/orm.html",
853 | "keywords": [
854 | "database",
855 | "orm"
856 | ],
857 | "support": {
858 | "issues": "https://github.com/doctrine/orm/issues",
859 | "source": "https://github.com/doctrine/orm/tree/2.14.1"
860 | },
861 | "time": "2023-01-16T18:36:59+00:00"
862 | },
863 | {
864 | "name": "doctrine/persistence",
865 | "version": "3.1.3",
866 | "source": {
867 | "type": "git",
868 | "url": "https://github.com/doctrine/persistence.git",
869 | "reference": "920da294b4bb0bb527f2a91ed60c18213435880f"
870 | },
871 | "dist": {
872 | "type": "zip",
873 | "url": "https://api.github.com/repos/doctrine/persistence/zipball/920da294b4bb0bb527f2a91ed60c18213435880f",
874 | "reference": "920da294b4bb0bb527f2a91ed60c18213435880f",
875 | "shasum": ""
876 | },
877 | "require": {
878 | "doctrine/event-manager": "^1 || ^2",
879 | "php": "^7.2 || ^8.0",
880 | "psr/cache": "^1.0 || ^2.0 || ^3.0"
881 | },
882 | "conflict": {
883 | "doctrine/common": "<2.10"
884 | },
885 | "require-dev": {
886 | "composer/package-versions-deprecated": "^1.11",
887 | "doctrine/coding-standard": "^11",
888 | "doctrine/common": "^3.0",
889 | "phpstan/phpstan": "1.9.4",
890 | "phpstan/phpstan-phpunit": "^1",
891 | "phpstan/phpstan-strict-rules": "^1.1",
892 | "phpunit/phpunit": "^8.5 || ^9.5",
893 | "symfony/cache": "^4.4 || ^5.4 || ^6.0",
894 | "vimeo/psalm": "4.30.0 || 5.3.0"
895 | },
896 | "type": "library",
897 | "autoload": {
898 | "psr-4": {
899 | "Doctrine\\Persistence\\": "src/Persistence"
900 | }
901 | },
902 | "notification-url": "https://packagist.org/downloads/",
903 | "license": [
904 | "MIT"
905 | ],
906 | "authors": [
907 | {
908 | "name": "Guilherme Blanco",
909 | "email": "guilhermeblanco@gmail.com"
910 | },
911 | {
912 | "name": "Roman Borschel",
913 | "email": "roman@code-factory.org"
914 | },
915 | {
916 | "name": "Benjamin Eberlei",
917 | "email": "kontakt@beberlei.de"
918 | },
919 | {
920 | "name": "Jonathan Wage",
921 | "email": "jonwage@gmail.com"
922 | },
923 | {
924 | "name": "Johannes Schmitt",
925 | "email": "schmittjoh@gmail.com"
926 | },
927 | {
928 | "name": "Marco Pivetta",
929 | "email": "ocramius@gmail.com"
930 | }
931 | ],
932 | "description": "The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine object mappers share.",
933 | "homepage": "https://www.doctrine-project.org/projects/persistence.html",
934 | "keywords": [
935 | "mapper",
936 | "object",
937 | "odm",
938 | "orm",
939 | "persistence"
940 | ],
941 | "support": {
942 | "issues": "https://github.com/doctrine/persistence/issues",
943 | "source": "https://github.com/doctrine/persistence/tree/3.1.3"
944 | },
945 | "funding": [
946 | {
947 | "url": "https://www.doctrine-project.org/sponsorship.html",
948 | "type": "custom"
949 | },
950 | {
951 | "url": "https://www.patreon.com/phpdoctrine",
952 | "type": "patreon"
953 | },
954 | {
955 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fpersistence",
956 | "type": "tidelift"
957 | }
958 | ],
959 | "time": "2023-01-19T13:39:42+00:00"
960 | },
961 | {
962 | "name": "jasny/php-functions",
963 | "version": "v3.3.1",
964 | "source": {
965 | "type": "git",
966 | "url": "https://github.com/jasny/php-functions.git",
967 | "reference": "2dac4273d80f7aadff8e027c8574d61c85a607ac"
968 | },
969 | "dist": {
970 | "type": "zip",
971 | "url": "https://api.github.com/repos/jasny/php-functions/zipball/2dac4273d80f7aadff8e027c8574d61c85a607ac",
972 | "reference": "2dac4273d80f7aadff8e027c8574d61c85a607ac",
973 | "shasum": ""
974 | },
975 | "require": {
976 | "php": ">=5.6"
977 | },
978 | "require-dev": {
979 | "jasny/php-code-quality": "^2.0",
980 | "phpunit/phpunit": "^5.7.0"
981 | },
982 | "type": "library",
983 | "autoload": {
984 | "files": [
985 | "src/array_functions.php",
986 | "src/case_functions.php",
987 | "src/string_functions.php",
988 | "src/server_functions.php",
989 | "src/type_functions.php",
990 | "src/file_functions.php",
991 | "src/func_functions.php",
992 | "src/object_functions.php"
993 | ]
994 | },
995 | "notification-url": "https://packagist.org/downloads/",
996 | "license": [
997 | "MIT"
998 | ],
999 | "authors": [
1000 | {
1001 | "name": "Arnold Daniels",
1002 | "email": "arnold@jasny.net",
1003 | "homepage": "http://www.jasny.net"
1004 | }
1005 | ],
1006 | "description": "A set of useful PHP functions",
1007 | "support": {
1008 | "issues": "https://github.com/jasny/php-functions/issues",
1009 | "source": "https://github.com/jasny/php-functions"
1010 | },
1011 | "time": "2018-11-26T11:24:27+00:00"
1012 | },
1013 | {
1014 | "name": "league/booboo",
1015 | "version": "2.1",
1016 | "source": {
1017 | "type": "git",
1018 | "url": "https://github.com/thephpleague/booboo.git",
1019 | "reference": "5f2d93a329df9ccb9edf77dac83c483829893d2e"
1020 | },
1021 | "dist": {
1022 | "type": "zip",
1023 | "url": "https://api.github.com/repos/thephpleague/booboo/zipball/5f2d93a329df9ccb9edf77dac83c483829893d2e",
1024 | "reference": "5f2d93a329df9ccb9edf77dac83c483829893d2e",
1025 | "shasum": ""
1026 | },
1027 | "require": {
1028 | "php": ">=5.6.0",
1029 | "psr/log": "~1.0"
1030 | },
1031 | "require-dev": {
1032 | "mockery/mockery": "~0.9",
1033 | "phpunit/phpunit": "~5.7",
1034 | "sentry/sentry": "~1.7"
1035 | },
1036 | "suggest": {
1037 | "sentry/sentry": "Use Sentry for passing errors to Sentry."
1038 | },
1039 | "type": "library",
1040 | "autoload": {
1041 | "psr-4": {
1042 | "League\\BooBoo\\": "src/"
1043 | }
1044 | },
1045 | "notification-url": "https://packagist.org/downloads/",
1046 | "license": [
1047 | "MIT"
1048 | ],
1049 | "authors": [
1050 | {
1051 | "name": "Brandon Savage",
1052 | "homepage": "https://www.brandonsavage.net/"
1053 | }
1054 | ],
1055 | "description": "Provides an error handler for PHP that can execute a stack of handlers for various purposes.",
1056 | "support": {
1057 | "issues": "https://github.com/thephpleague/booboo/issues",
1058 | "source": "https://github.com/thephpleague/booboo/tree/2.1"
1059 | },
1060 | "time": "2017-12-13T15:55:44+00:00"
1061 | },
1062 | {
1063 | "name": "league/flysystem",
1064 | "version": "1.1.10",
1065 | "source": {
1066 | "type": "git",
1067 | "url": "https://github.com/thephpleague/flysystem.git",
1068 | "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1"
1069 | },
1070 | "dist": {
1071 | "type": "zip",
1072 | "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/3239285c825c152bcc315fe0e87d6b55f5972ed1",
1073 | "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1",
1074 | "shasum": ""
1075 | },
1076 | "require": {
1077 | "ext-fileinfo": "*",
1078 | "league/mime-type-detection": "^1.3",
1079 | "php": "^7.2.5 || ^8.0"
1080 | },
1081 | "conflict": {
1082 | "league/flysystem-sftp": "<1.0.6"
1083 | },
1084 | "require-dev": {
1085 | "phpspec/prophecy": "^1.11.1",
1086 | "phpunit/phpunit": "^8.5.8"
1087 | },
1088 | "suggest": {
1089 | "ext-ftp": "Allows you to use FTP server storage",
1090 | "ext-openssl": "Allows you to use FTPS server storage",
1091 | "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2",
1092 | "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3",
1093 | "league/flysystem-azure": "Allows you to use Windows Azure Blob storage",
1094 | "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching",
1095 | "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem",
1096 | "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files",
1097 | "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib",
1098 | "league/flysystem-webdav": "Allows you to use WebDAV storage",
1099 | "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter",
1100 | "spatie/flysystem-dropbox": "Allows you to use Dropbox storage",
1101 | "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications"
1102 | },
1103 | "type": "library",
1104 | "extra": {
1105 | "branch-alias": {
1106 | "dev-master": "1.1-dev"
1107 | }
1108 | },
1109 | "autoload": {
1110 | "psr-4": {
1111 | "League\\Flysystem\\": "src/"
1112 | }
1113 | },
1114 | "notification-url": "https://packagist.org/downloads/",
1115 | "license": [
1116 | "MIT"
1117 | ],
1118 | "authors": [
1119 | {
1120 | "name": "Frank de Jonge",
1121 | "email": "info@frenky.net"
1122 | }
1123 | ],
1124 | "description": "Filesystem abstraction: Many filesystems, one API.",
1125 | "keywords": [
1126 | "Cloud Files",
1127 | "WebDAV",
1128 | "abstraction",
1129 | "aws",
1130 | "cloud",
1131 | "copy.com",
1132 | "dropbox",
1133 | "file systems",
1134 | "files",
1135 | "filesystem",
1136 | "filesystems",
1137 | "ftp",
1138 | "rackspace",
1139 | "remote",
1140 | "s3",
1141 | "sftp",
1142 | "storage"
1143 | ],
1144 | "support": {
1145 | "issues": "https://github.com/thephpleague/flysystem/issues",
1146 | "source": "https://github.com/thephpleague/flysystem/tree/1.1.10"
1147 | },
1148 | "funding": [
1149 | {
1150 | "url": "https://offset.earth/frankdejonge",
1151 | "type": "other"
1152 | }
1153 | ],
1154 | "time": "2022-10-04T09:16:37+00:00"
1155 | },
1156 | {
1157 | "name": "league/mime-type-detection",
1158 | "version": "1.11.0",
1159 | "source": {
1160 | "type": "git",
1161 | "url": "https://github.com/thephpleague/mime-type-detection.git",
1162 | "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd"
1163 | },
1164 | "dist": {
1165 | "type": "zip",
1166 | "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ff6248ea87a9f116e78edd6002e39e5128a0d4dd",
1167 | "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd",
1168 | "shasum": ""
1169 | },
1170 | "require": {
1171 | "ext-fileinfo": "*",
1172 | "php": "^7.2 || ^8.0"
1173 | },
1174 | "require-dev": {
1175 | "friendsofphp/php-cs-fixer": "^3.2",
1176 | "phpstan/phpstan": "^0.12.68",
1177 | "phpunit/phpunit": "^8.5.8 || ^9.3"
1178 | },
1179 | "type": "library",
1180 | "autoload": {
1181 | "psr-4": {
1182 | "League\\MimeTypeDetection\\": "src"
1183 | }
1184 | },
1185 | "notification-url": "https://packagist.org/downloads/",
1186 | "license": [
1187 | "MIT"
1188 | ],
1189 | "authors": [
1190 | {
1191 | "name": "Frank de Jonge",
1192 | "email": "info@frankdejonge.nl"
1193 | }
1194 | ],
1195 | "description": "Mime-type detection for Flysystem",
1196 | "support": {
1197 | "issues": "https://github.com/thephpleague/mime-type-detection/issues",
1198 | "source": "https://github.com/thephpleague/mime-type-detection/tree/1.11.0"
1199 | },
1200 | "funding": [
1201 | {
1202 | "url": "https://github.com/frankdejonge",
1203 | "type": "github"
1204 | },
1205 | {
1206 | "url": "https://tidelift.com/funding/github/packagist/league/flysystem",
1207 | "type": "tidelift"
1208 | }
1209 | ],
1210 | "time": "2022-04-17T13:12:02+00:00"
1211 | },
1212 | {
1213 | "name": "league/plates",
1214 | "version": "v3.5.0",
1215 | "source": {
1216 | "type": "git",
1217 | "url": "https://github.com/thephpleague/plates.git",
1218 | "reference": "a6a3238e46c6e19af7318fdc36bfbe49b0620231"
1219 | },
1220 | "dist": {
1221 | "type": "zip",
1222 | "url": "https://api.github.com/repos/thephpleague/plates/zipball/a6a3238e46c6e19af7318fdc36bfbe49b0620231",
1223 | "reference": "a6a3238e46c6e19af7318fdc36bfbe49b0620231",
1224 | "shasum": ""
1225 | },
1226 | "require": {
1227 | "php": "^7.0|^8.0"
1228 | },
1229 | "require-dev": {
1230 | "mikey179/vfsstream": "^1.6",
1231 | "phpunit/phpunit": "^9.5",
1232 | "squizlabs/php_codesniffer": "^3.5"
1233 | },
1234 | "type": "library",
1235 | "extra": {
1236 | "branch-alias": {
1237 | "dev-master": "3.0-dev"
1238 | }
1239 | },
1240 | "autoload": {
1241 | "psr-4": {
1242 | "League\\Plates\\": "src"
1243 | }
1244 | },
1245 | "notification-url": "https://packagist.org/downloads/",
1246 | "license": [
1247 | "MIT"
1248 | ],
1249 | "authors": [
1250 | {
1251 | "name": "Jonathan Reinink",
1252 | "email": "jonathan@reinink.ca",
1253 | "role": "Developer"
1254 | },
1255 | {
1256 | "name": "RJ Garcia",
1257 | "email": "ragboyjr@icloud.com",
1258 | "role": "Developer"
1259 | }
1260 | ],
1261 | "description": "Plates, the native PHP template system that's fast, easy to use and easy to extend.",
1262 | "homepage": "https://platesphp.com",
1263 | "keywords": [
1264 | "league",
1265 | "package",
1266 | "templates",
1267 | "templating",
1268 | "views"
1269 | ],
1270 | "support": {
1271 | "issues": "https://github.com/thephpleague/plates/issues",
1272 | "source": "https://github.com/thephpleague/plates/tree/v3.5.0"
1273 | },
1274 | "time": "2023-01-16T20:25:45+00:00"
1275 | },
1276 | {
1277 | "name": "matthiasmullie/scrapbook",
1278 | "version": "1.5.1",
1279 | "source": {
1280 | "type": "git",
1281 | "url": "https://github.com/matthiasmullie/scrapbook.git",
1282 | "reference": "d49068fab714b0056c0a82ff055882e0de4e3620"
1283 | },
1284 | "dist": {
1285 | "type": "zip",
1286 | "url": "https://api.github.com/repos/matthiasmullie/scrapbook/zipball/d49068fab714b0056c0a82ff055882e0de4e3620",
1287 | "reference": "d49068fab714b0056c0a82ff055882e0de4e3620",
1288 | "shasum": ""
1289 | },
1290 | "require": {
1291 | "php": ">=8.0.0",
1292 | "psr/cache": "^2.0||^3.0",
1293 | "psr/simple-cache": "^2.0||^3.0"
1294 | },
1295 | "provide": {
1296 | "psr/cache-implementation": "^1.0||^2.0||^3.0",
1297 | "psr/simple-cache-implementation": "^1.0||^2.0||^3.0"
1298 | },
1299 | "require-dev": {
1300 | "ext-pcntl": "*",
1301 | "friendsofphp/php-cs-fixer": ">=2.0",
1302 | "phpunit/phpunit": ">=9.0",
1303 | "squizlabs/php_codesniffer": ">=3.0"
1304 | },
1305 | "suggest": {
1306 | "couchbase/couchbase": ">=3.0",
1307 | "ext-apcu": ">=4.0.0",
1308 | "ext-couchbase": ">=3.0.0",
1309 | "ext-memcached": ">=2.0.0",
1310 | "ext-pdo": ">=0.1.0",
1311 | "ext-redis": ">=2.2.0||0.0.0.0",
1312 | "league/flysystem": ">=1.0"
1313 | },
1314 | "type": "library",
1315 | "autoload": {
1316 | "psr-4": {
1317 | "MatthiasMullie\\Scrapbook\\": "src/"
1318 | }
1319 | },
1320 | "notification-url": "https://packagist.org/downloads/",
1321 | "license": [
1322 | "MIT"
1323 | ],
1324 | "authors": [
1325 | {
1326 | "name": "Matthias Mullie",
1327 | "email": "scrapbook@mullie.eu",
1328 | "homepage": "https://www.mullie.eu",
1329 | "role": "Developer"
1330 | }
1331 | ],
1332 | "description": "Scrapbook is a PHP cache library, with adapters for e.g. Memcached, Redis, Couchbase, APCu, SQL and additional capabilities (e.g. transactions, stampede protection) built on top.",
1333 | "homepage": "https://scrapbook.cash",
1334 | "keywords": [
1335 | "Buffer",
1336 | "Flysystem",
1337 | "apc",
1338 | "buffered",
1339 | "cache",
1340 | "caching",
1341 | "commit",
1342 | "couchbase",
1343 | "filesystem",
1344 | "key",
1345 | "memcached",
1346 | "mitigation",
1347 | "mysql",
1348 | "postgresql",
1349 | "protection",
1350 | "psr-16",
1351 | "psr-6",
1352 | "psr-cache",
1353 | "psr-simple-cache",
1354 | "redis",
1355 | "rollback",
1356 | "sql",
1357 | "sqlite",
1358 | "stampede",
1359 | "store",
1360 | "transaction",
1361 | "transactional",
1362 | "value"
1363 | ],
1364 | "support": {
1365 | "issues": "https://github.com/matthiasmullie/scrapbook/issues",
1366 | "source": "https://github.com/matthiasmullie/scrapbook/tree/1.5.1"
1367 | },
1368 | "funding": [
1369 | {
1370 | "url": "https://github.com/matthiasmullie",
1371 | "type": "github"
1372 | }
1373 | ],
1374 | "time": "2023-01-26T11:04:25+00:00"
1375 | },
1376 | {
1377 | "name": "mzdr/oh-snap",
1378 | "version": "1.0.0",
1379 | "source": {
1380 | "type": "git",
1381 | "url": "https://github.com/mzdr/oh-snap.git",
1382 | "reference": "b9da897bbf0e95fe85486b70db33e330ca5d750b"
1383 | },
1384 | "dist": {
1385 | "type": "zip",
1386 | "url": "https://api.github.com/repos/mzdr/oh-snap/zipball/b9da897bbf0e95fe85486b70db33e330ca5d750b",
1387 | "reference": "b9da897bbf0e95fe85486b70db33e330ca5d750b",
1388 | "shasum": ""
1389 | },
1390 | "require": {
1391 | "jasny/php-functions": "^3.2",
1392 | "league/booboo": "^2.0",
1393 | "php": ">=5.6.0"
1394 | },
1395 | "type": "library",
1396 | "autoload": {
1397 | "psr-4": {
1398 | "mzdr\\OhSnap\\": "src/"
1399 | }
1400 | },
1401 | "notification-url": "https://packagist.org/downloads/",
1402 | "license": [
1403 | "MIT"
1404 | ],
1405 | "authors": [
1406 | {
1407 | "name": "Sebastian Prein",
1408 | "email": "hi@sebastianprein.com"
1409 | }
1410 | ],
1411 | "description": "A pretty formatter for BooBoo.",
1412 | "homepage": "https://github.com/mzdr/oh-snap",
1413 | "support": {
1414 | "issues": "https://github.com/mzdr/oh-snap/issues",
1415 | "source": "https://github.com/mzdr/oh-snap/tree/master"
1416 | },
1417 | "abandoned": true,
1418 | "time": "2018-05-01T12:24:29+00:00"
1419 | },
1420 | {
1421 | "name": "nikic/fast-route",
1422 | "version": "v1.3.0",
1423 | "source": {
1424 | "type": "git",
1425 | "url": "https://github.com/nikic/FastRoute.git",
1426 | "reference": "181d480e08d9476e61381e04a71b34dc0432e812"
1427 | },
1428 | "dist": {
1429 | "type": "zip",
1430 | "url": "https://api.github.com/repos/nikic/FastRoute/zipball/181d480e08d9476e61381e04a71b34dc0432e812",
1431 | "reference": "181d480e08d9476e61381e04a71b34dc0432e812",
1432 | "shasum": ""
1433 | },
1434 | "require": {
1435 | "php": ">=5.4.0"
1436 | },
1437 | "require-dev": {
1438 | "phpunit/phpunit": "^4.8.35|~5.7"
1439 | },
1440 | "type": "library",
1441 | "autoload": {
1442 | "files": [
1443 | "src/functions.php"
1444 | ],
1445 | "psr-4": {
1446 | "FastRoute\\": "src/"
1447 | }
1448 | },
1449 | "notification-url": "https://packagist.org/downloads/",
1450 | "license": [
1451 | "BSD-3-Clause"
1452 | ],
1453 | "authors": [
1454 | {
1455 | "name": "Nikita Popov",
1456 | "email": "nikic@php.net"
1457 | }
1458 | ],
1459 | "description": "Fast request router for PHP",
1460 | "keywords": [
1461 | "router",
1462 | "routing"
1463 | ],
1464 | "support": {
1465 | "issues": "https://github.com/nikic/FastRoute/issues",
1466 | "source": "https://github.com/nikic/FastRoute/tree/master"
1467 | },
1468 | "time": "2018-02-13T20:26:39+00:00"
1469 | },
1470 | {
1471 | "name": "psr/cache",
1472 | "version": "3.0.0",
1473 | "source": {
1474 | "type": "git",
1475 | "url": "https://github.com/php-fig/cache.git",
1476 | "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf"
1477 | },
1478 | "dist": {
1479 | "type": "zip",
1480 | "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf",
1481 | "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf",
1482 | "shasum": ""
1483 | },
1484 | "require": {
1485 | "php": ">=8.0.0"
1486 | },
1487 | "type": "library",
1488 | "extra": {
1489 | "branch-alias": {
1490 | "dev-master": "1.0.x-dev"
1491 | }
1492 | },
1493 | "autoload": {
1494 | "psr-4": {
1495 | "Psr\\Cache\\": "src/"
1496 | }
1497 | },
1498 | "notification-url": "https://packagist.org/downloads/",
1499 | "license": [
1500 | "MIT"
1501 | ],
1502 | "authors": [
1503 | {
1504 | "name": "PHP-FIG",
1505 | "homepage": "https://www.php-fig.org/"
1506 | }
1507 | ],
1508 | "description": "Common interface for caching libraries",
1509 | "keywords": [
1510 | "cache",
1511 | "psr",
1512 | "psr-6"
1513 | ],
1514 | "support": {
1515 | "source": "https://github.com/php-fig/cache/tree/3.0.0"
1516 | },
1517 | "time": "2021-02-03T23:26:27+00:00"
1518 | },
1519 | {
1520 | "name": "psr/container",
1521 | "version": "2.0.2",
1522 | "source": {
1523 | "type": "git",
1524 | "url": "https://github.com/php-fig/container.git",
1525 | "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963"
1526 | },
1527 | "dist": {
1528 | "type": "zip",
1529 | "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963",
1530 | "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963",
1531 | "shasum": ""
1532 | },
1533 | "require": {
1534 | "php": ">=7.4.0"
1535 | },
1536 | "type": "library",
1537 | "extra": {
1538 | "branch-alias": {
1539 | "dev-master": "2.0.x-dev"
1540 | }
1541 | },
1542 | "autoload": {
1543 | "psr-4": {
1544 | "Psr\\Container\\": "src/"
1545 | }
1546 | },
1547 | "notification-url": "https://packagist.org/downloads/",
1548 | "license": [
1549 | "MIT"
1550 | ],
1551 | "authors": [
1552 | {
1553 | "name": "PHP-FIG",
1554 | "homepage": "https://www.php-fig.org/"
1555 | }
1556 | ],
1557 | "description": "Common Container Interface (PHP FIG PSR-11)",
1558 | "homepage": "https://github.com/php-fig/container",
1559 | "keywords": [
1560 | "PSR-11",
1561 | "container",
1562 | "container-interface",
1563 | "container-interop",
1564 | "psr"
1565 | ],
1566 | "support": {
1567 | "issues": "https://github.com/php-fig/container/issues",
1568 | "source": "https://github.com/php-fig/container/tree/2.0.2"
1569 | },
1570 | "time": "2021-11-05T16:47:00+00:00"
1571 | },
1572 | {
1573 | "name": "psr/log",
1574 | "version": "1.1.4",
1575 | "source": {
1576 | "type": "git",
1577 | "url": "https://github.com/php-fig/log.git",
1578 | "reference": "d49695b909c3b7628b6289db5479a1c204601f11"
1579 | },
1580 | "dist": {
1581 | "type": "zip",
1582 | "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
1583 | "reference": "d49695b909c3b7628b6289db5479a1c204601f11",
1584 | "shasum": ""
1585 | },
1586 | "require": {
1587 | "php": ">=5.3.0"
1588 | },
1589 | "type": "library",
1590 | "extra": {
1591 | "branch-alias": {
1592 | "dev-master": "1.1.x-dev"
1593 | }
1594 | },
1595 | "autoload": {
1596 | "psr-4": {
1597 | "Psr\\Log\\": "Psr/Log/"
1598 | }
1599 | },
1600 | "notification-url": "https://packagist.org/downloads/",
1601 | "license": [
1602 | "MIT"
1603 | ],
1604 | "authors": [
1605 | {
1606 | "name": "PHP-FIG",
1607 | "homepage": "https://www.php-fig.org/"
1608 | }
1609 | ],
1610 | "description": "Common interface for logging libraries",
1611 | "homepage": "https://github.com/php-fig/log",
1612 | "keywords": [
1613 | "log",
1614 | "psr",
1615 | "psr-3"
1616 | ],
1617 | "support": {
1618 | "source": "https://github.com/php-fig/log/tree/1.1.4"
1619 | },
1620 | "time": "2021-05-03T11:20:27+00:00"
1621 | },
1622 | {
1623 | "name": "psr/simple-cache",
1624 | "version": "3.0.0",
1625 | "source": {
1626 | "type": "git",
1627 | "url": "https://github.com/php-fig/simple-cache.git",
1628 | "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865"
1629 | },
1630 | "dist": {
1631 | "type": "zip",
1632 | "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865",
1633 | "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865",
1634 | "shasum": ""
1635 | },
1636 | "require": {
1637 | "php": ">=8.0.0"
1638 | },
1639 | "type": "library",
1640 | "extra": {
1641 | "branch-alias": {
1642 | "dev-master": "3.0.x-dev"
1643 | }
1644 | },
1645 | "autoload": {
1646 | "psr-4": {
1647 | "Psr\\SimpleCache\\": "src/"
1648 | }
1649 | },
1650 | "notification-url": "https://packagist.org/downloads/",
1651 | "license": [
1652 | "MIT"
1653 | ],
1654 | "authors": [
1655 | {
1656 | "name": "PHP-FIG",
1657 | "homepage": "https://www.php-fig.org/"
1658 | }
1659 | ],
1660 | "description": "Common interfaces for simple caching",
1661 | "keywords": [
1662 | "cache",
1663 | "caching",
1664 | "psr",
1665 | "psr-16",
1666 | "simple-cache"
1667 | ],
1668 | "support": {
1669 | "source": "https://github.com/php-fig/simple-cache/tree/3.0.0"
1670 | },
1671 | "time": "2021-10-29T13:26:27+00:00"
1672 | },
1673 | {
1674 | "name": "samrap/gestalt",
1675 | "version": "v0.3.1",
1676 | "source": {
1677 | "type": "git",
1678 | "url": "https://github.com/samrap/gestalt.git",
1679 | "reference": "aaf3e2351b0a436d525fb773a89f271f255ec503"
1680 | },
1681 | "dist": {
1682 | "type": "zip",
1683 | "url": "https://api.github.com/repos/samrap/gestalt/zipball/aaf3e2351b0a436d525fb773a89f271f255ec503",
1684 | "reference": "aaf3e2351b0a436d525fb773a89f271f255ec503",
1685 | "shasum": ""
1686 | },
1687 | "require": {
1688 | "php": ">=5.6"
1689 | },
1690 | "require-dev": {
1691 | "mockery/mockery": "^0.9.5",
1692 | "phpunit/phpunit": "^5.5"
1693 | },
1694 | "type": "library",
1695 | "autoload": {
1696 | "psr-4": {
1697 | "Gestalt\\": "src/Gestalt"
1698 | }
1699 | },
1700 | "notification-url": "https://packagist.org/downloads/",
1701 | "license": [
1702 | "MIT"
1703 | ],
1704 | "authors": [
1705 | {
1706 | "name": "Sam Rapaport",
1707 | "email": "rapaport.sam7@gmail.com"
1708 | }
1709 | ],
1710 | "description": "Gestalt is a simple, elegant PHP package for managing your framework's configuration values.",
1711 | "keywords": [
1712 | "boilerplate",
1713 | "configuration",
1714 | "php",
1715 | "wrapper"
1716 | ],
1717 | "support": {
1718 | "issues": "https://github.com/samrap/gestalt/issues",
1719 | "source": "https://github.com/samrap/gestalt/tree/master"
1720 | },
1721 | "time": "2016-10-06T18:15:52+00:00"
1722 | },
1723 | {
1724 | "name": "symfony/console",
1725 | "version": "v6.2.5",
1726 | "source": {
1727 | "type": "git",
1728 | "url": "https://github.com/symfony/console.git",
1729 | "reference": "3e294254f2191762c1d137aed4b94e966965e985"
1730 | },
1731 | "dist": {
1732 | "type": "zip",
1733 | "url": "https://api.github.com/repos/symfony/console/zipball/3e294254f2191762c1d137aed4b94e966965e985",
1734 | "reference": "3e294254f2191762c1d137aed4b94e966965e985",
1735 | "shasum": ""
1736 | },
1737 | "require": {
1738 | "php": ">=8.1",
1739 | "symfony/deprecation-contracts": "^2.1|^3",
1740 | "symfony/polyfill-mbstring": "~1.0",
1741 | "symfony/service-contracts": "^1.1|^2|^3",
1742 | "symfony/string": "^5.4|^6.0"
1743 | },
1744 | "conflict": {
1745 | "symfony/dependency-injection": "<5.4",
1746 | "symfony/dotenv": "<5.4",
1747 | "symfony/event-dispatcher": "<5.4",
1748 | "symfony/lock": "<5.4",
1749 | "symfony/process": "<5.4"
1750 | },
1751 | "provide": {
1752 | "psr/log-implementation": "1.0|2.0|3.0"
1753 | },
1754 | "require-dev": {
1755 | "psr/log": "^1|^2|^3",
1756 | "symfony/config": "^5.4|^6.0",
1757 | "symfony/dependency-injection": "^5.4|^6.0",
1758 | "symfony/event-dispatcher": "^5.4|^6.0",
1759 | "symfony/lock": "^5.4|^6.0",
1760 | "symfony/process": "^5.4|^6.0",
1761 | "symfony/var-dumper": "^5.4|^6.0"
1762 | },
1763 | "suggest": {
1764 | "psr/log": "For using the console logger",
1765 | "symfony/event-dispatcher": "",
1766 | "symfony/lock": "",
1767 | "symfony/process": ""
1768 | },
1769 | "type": "library",
1770 | "autoload": {
1771 | "psr-4": {
1772 | "Symfony\\Component\\Console\\": ""
1773 | },
1774 | "exclude-from-classmap": [
1775 | "/Tests/"
1776 | ]
1777 | },
1778 | "notification-url": "https://packagist.org/downloads/",
1779 | "license": [
1780 | "MIT"
1781 | ],
1782 | "authors": [
1783 | {
1784 | "name": "Fabien Potencier",
1785 | "email": "fabien@symfony.com"
1786 | },
1787 | {
1788 | "name": "Symfony Community",
1789 | "homepage": "https://symfony.com/contributors"
1790 | }
1791 | ],
1792 | "description": "Eases the creation of beautiful and testable command line interfaces",
1793 | "homepage": "https://symfony.com",
1794 | "keywords": [
1795 | "cli",
1796 | "command line",
1797 | "console",
1798 | "terminal"
1799 | ],
1800 | "support": {
1801 | "source": "https://github.com/symfony/console/tree/v6.2.5"
1802 | },
1803 | "funding": [
1804 | {
1805 | "url": "https://symfony.com/sponsor",
1806 | "type": "custom"
1807 | },
1808 | {
1809 | "url": "https://github.com/fabpot",
1810 | "type": "github"
1811 | },
1812 | {
1813 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
1814 | "type": "tidelift"
1815 | }
1816 | ],
1817 | "time": "2023-01-01T08:38:09+00:00"
1818 | },
1819 | {
1820 | "name": "symfony/deprecation-contracts",
1821 | "version": "v3.2.0",
1822 | "source": {
1823 | "type": "git",
1824 | "url": "https://github.com/symfony/deprecation-contracts.git",
1825 | "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3"
1826 | },
1827 | "dist": {
1828 | "type": "zip",
1829 | "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/1ee04c65529dea5d8744774d474e7cbd2f1206d3",
1830 | "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3",
1831 | "shasum": ""
1832 | },
1833 | "require": {
1834 | "php": ">=8.1"
1835 | },
1836 | "type": "library",
1837 | "extra": {
1838 | "branch-alias": {
1839 | "dev-main": "3.3-dev"
1840 | },
1841 | "thanks": {
1842 | "name": "symfony/contracts",
1843 | "url": "https://github.com/symfony/contracts"
1844 | }
1845 | },
1846 | "autoload": {
1847 | "files": [
1848 | "function.php"
1849 | ]
1850 | },
1851 | "notification-url": "https://packagist.org/downloads/",
1852 | "license": [
1853 | "MIT"
1854 | ],
1855 | "authors": [
1856 | {
1857 | "name": "Nicolas Grekas",
1858 | "email": "p@tchwork.com"
1859 | },
1860 | {
1861 | "name": "Symfony Community",
1862 | "homepage": "https://symfony.com/contributors"
1863 | }
1864 | ],
1865 | "description": "A generic function and convention to trigger deprecation notices",
1866 | "homepage": "https://symfony.com",
1867 | "support": {
1868 | "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.0"
1869 | },
1870 | "funding": [
1871 | {
1872 | "url": "https://symfony.com/sponsor",
1873 | "type": "custom"
1874 | },
1875 | {
1876 | "url": "https://github.com/fabpot",
1877 | "type": "github"
1878 | },
1879 | {
1880 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
1881 | "type": "tidelift"
1882 | }
1883 | ],
1884 | "time": "2022-11-25T10:21:52+00:00"
1885 | },
1886 | {
1887 | "name": "symfony/polyfill-ctype",
1888 | "version": "v1.27.0",
1889 | "source": {
1890 | "type": "git",
1891 | "url": "https://github.com/symfony/polyfill-ctype.git",
1892 | "reference": "5bbc823adecdae860bb64756d639ecfec17b050a"
1893 | },
1894 | "dist": {
1895 | "type": "zip",
1896 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a",
1897 | "reference": "5bbc823adecdae860bb64756d639ecfec17b050a",
1898 | "shasum": ""
1899 | },
1900 | "require": {
1901 | "php": ">=7.1"
1902 | },
1903 | "provide": {
1904 | "ext-ctype": "*"
1905 | },
1906 | "suggest": {
1907 | "ext-ctype": "For best performance"
1908 | },
1909 | "type": "library",
1910 | "extra": {
1911 | "branch-alias": {
1912 | "dev-main": "1.27-dev"
1913 | },
1914 | "thanks": {
1915 | "name": "symfony/polyfill",
1916 | "url": "https://github.com/symfony/polyfill"
1917 | }
1918 | },
1919 | "autoload": {
1920 | "files": [
1921 | "bootstrap.php"
1922 | ],
1923 | "psr-4": {
1924 | "Symfony\\Polyfill\\Ctype\\": ""
1925 | }
1926 | },
1927 | "notification-url": "https://packagist.org/downloads/",
1928 | "license": [
1929 | "MIT"
1930 | ],
1931 | "authors": [
1932 | {
1933 | "name": "Gert de Pagter",
1934 | "email": "BackEndTea@gmail.com"
1935 | },
1936 | {
1937 | "name": "Symfony Community",
1938 | "homepage": "https://symfony.com/contributors"
1939 | }
1940 | ],
1941 | "description": "Symfony polyfill for ctype functions",
1942 | "homepage": "https://symfony.com",
1943 | "keywords": [
1944 | "compatibility",
1945 | "ctype",
1946 | "polyfill",
1947 | "portable"
1948 | ],
1949 | "support": {
1950 | "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0"
1951 | },
1952 | "funding": [
1953 | {
1954 | "url": "https://symfony.com/sponsor",
1955 | "type": "custom"
1956 | },
1957 | {
1958 | "url": "https://github.com/fabpot",
1959 | "type": "github"
1960 | },
1961 | {
1962 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
1963 | "type": "tidelift"
1964 | }
1965 | ],
1966 | "time": "2022-11-03T14:55:06+00:00"
1967 | },
1968 | {
1969 | "name": "symfony/polyfill-intl-grapheme",
1970 | "version": "v1.27.0",
1971 | "source": {
1972 | "type": "git",
1973 | "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
1974 | "reference": "511a08c03c1960e08a883f4cffcacd219b758354"
1975 | },
1976 | "dist": {
1977 | "type": "zip",
1978 | "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354",
1979 | "reference": "511a08c03c1960e08a883f4cffcacd219b758354",
1980 | "shasum": ""
1981 | },
1982 | "require": {
1983 | "php": ">=7.1"
1984 | },
1985 | "suggest": {
1986 | "ext-intl": "For best performance"
1987 | },
1988 | "type": "library",
1989 | "extra": {
1990 | "branch-alias": {
1991 | "dev-main": "1.27-dev"
1992 | },
1993 | "thanks": {
1994 | "name": "symfony/polyfill",
1995 | "url": "https://github.com/symfony/polyfill"
1996 | }
1997 | },
1998 | "autoload": {
1999 | "files": [
2000 | "bootstrap.php"
2001 | ],
2002 | "psr-4": {
2003 | "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
2004 | }
2005 | },
2006 | "notification-url": "https://packagist.org/downloads/",
2007 | "license": [
2008 | "MIT"
2009 | ],
2010 | "authors": [
2011 | {
2012 | "name": "Nicolas Grekas",
2013 | "email": "p@tchwork.com"
2014 | },
2015 | {
2016 | "name": "Symfony Community",
2017 | "homepage": "https://symfony.com/contributors"
2018 | }
2019 | ],
2020 | "description": "Symfony polyfill for intl's grapheme_* functions",
2021 | "homepage": "https://symfony.com",
2022 | "keywords": [
2023 | "compatibility",
2024 | "grapheme",
2025 | "intl",
2026 | "polyfill",
2027 | "portable",
2028 | "shim"
2029 | ],
2030 | "support": {
2031 | "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0"
2032 | },
2033 | "funding": [
2034 | {
2035 | "url": "https://symfony.com/sponsor",
2036 | "type": "custom"
2037 | },
2038 | {
2039 | "url": "https://github.com/fabpot",
2040 | "type": "github"
2041 | },
2042 | {
2043 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
2044 | "type": "tidelift"
2045 | }
2046 | ],
2047 | "time": "2022-11-03T14:55:06+00:00"
2048 | },
2049 | {
2050 | "name": "symfony/polyfill-intl-normalizer",
2051 | "version": "v1.27.0",
2052 | "source": {
2053 | "type": "git",
2054 | "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
2055 | "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6"
2056 | },
2057 | "dist": {
2058 | "type": "zip",
2059 | "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6",
2060 | "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6",
2061 | "shasum": ""
2062 | },
2063 | "require": {
2064 | "php": ">=7.1"
2065 | },
2066 | "suggest": {
2067 | "ext-intl": "For best performance"
2068 | },
2069 | "type": "library",
2070 | "extra": {
2071 | "branch-alias": {
2072 | "dev-main": "1.27-dev"
2073 | },
2074 | "thanks": {
2075 | "name": "symfony/polyfill",
2076 | "url": "https://github.com/symfony/polyfill"
2077 | }
2078 | },
2079 | "autoload": {
2080 | "files": [
2081 | "bootstrap.php"
2082 | ],
2083 | "psr-4": {
2084 | "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
2085 | },
2086 | "classmap": [
2087 | "Resources/stubs"
2088 | ]
2089 | },
2090 | "notification-url": "https://packagist.org/downloads/",
2091 | "license": [
2092 | "MIT"
2093 | ],
2094 | "authors": [
2095 | {
2096 | "name": "Nicolas Grekas",
2097 | "email": "p@tchwork.com"
2098 | },
2099 | {
2100 | "name": "Symfony Community",
2101 | "homepage": "https://symfony.com/contributors"
2102 | }
2103 | ],
2104 | "description": "Symfony polyfill for intl's Normalizer class and related functions",
2105 | "homepage": "https://symfony.com",
2106 | "keywords": [
2107 | "compatibility",
2108 | "intl",
2109 | "normalizer",
2110 | "polyfill",
2111 | "portable",
2112 | "shim"
2113 | ],
2114 | "support": {
2115 | "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0"
2116 | },
2117 | "funding": [
2118 | {
2119 | "url": "https://symfony.com/sponsor",
2120 | "type": "custom"
2121 | },
2122 | {
2123 | "url": "https://github.com/fabpot",
2124 | "type": "github"
2125 | },
2126 | {
2127 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
2128 | "type": "tidelift"
2129 | }
2130 | ],
2131 | "time": "2022-11-03T14:55:06+00:00"
2132 | },
2133 | {
2134 | "name": "symfony/polyfill-mbstring",
2135 | "version": "v1.27.0",
2136 | "source": {
2137 | "type": "git",
2138 | "url": "https://github.com/symfony/polyfill-mbstring.git",
2139 | "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534"
2140 | },
2141 | "dist": {
2142 | "type": "zip",
2143 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
2144 | "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
2145 | "shasum": ""
2146 | },
2147 | "require": {
2148 | "php": ">=7.1"
2149 | },
2150 | "provide": {
2151 | "ext-mbstring": "*"
2152 | },
2153 | "suggest": {
2154 | "ext-mbstring": "For best performance"
2155 | },
2156 | "type": "library",
2157 | "extra": {
2158 | "branch-alias": {
2159 | "dev-main": "1.27-dev"
2160 | },
2161 | "thanks": {
2162 | "name": "symfony/polyfill",
2163 | "url": "https://github.com/symfony/polyfill"
2164 | }
2165 | },
2166 | "autoload": {
2167 | "files": [
2168 | "bootstrap.php"
2169 | ],
2170 | "psr-4": {
2171 | "Symfony\\Polyfill\\Mbstring\\": ""
2172 | }
2173 | },
2174 | "notification-url": "https://packagist.org/downloads/",
2175 | "license": [
2176 | "MIT"
2177 | ],
2178 | "authors": [
2179 | {
2180 | "name": "Nicolas Grekas",
2181 | "email": "p@tchwork.com"
2182 | },
2183 | {
2184 | "name": "Symfony Community",
2185 | "homepage": "https://symfony.com/contributors"
2186 | }
2187 | ],
2188 | "description": "Symfony polyfill for the Mbstring extension",
2189 | "homepage": "https://symfony.com",
2190 | "keywords": [
2191 | "compatibility",
2192 | "mbstring",
2193 | "polyfill",
2194 | "portable",
2195 | "shim"
2196 | ],
2197 | "support": {
2198 | "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0"
2199 | },
2200 | "funding": [
2201 | {
2202 | "url": "https://symfony.com/sponsor",
2203 | "type": "custom"
2204 | },
2205 | {
2206 | "url": "https://github.com/fabpot",
2207 | "type": "github"
2208 | },
2209 | {
2210 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
2211 | "type": "tidelift"
2212 | }
2213 | ],
2214 | "time": "2022-11-03T14:55:06+00:00"
2215 | },
2216 | {
2217 | "name": "symfony/polyfill-php72",
2218 | "version": "v1.27.0",
2219 | "source": {
2220 | "type": "git",
2221 | "url": "https://github.com/symfony/polyfill-php72.git",
2222 | "reference": "869329b1e9894268a8a61dabb69153029b7a8c97"
2223 | },
2224 | "dist": {
2225 | "type": "zip",
2226 | "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97",
2227 | "reference": "869329b1e9894268a8a61dabb69153029b7a8c97",
2228 | "shasum": ""
2229 | },
2230 | "require": {
2231 | "php": ">=7.1"
2232 | },
2233 | "type": "library",
2234 | "extra": {
2235 | "branch-alias": {
2236 | "dev-main": "1.27-dev"
2237 | },
2238 | "thanks": {
2239 | "name": "symfony/polyfill",
2240 | "url": "https://github.com/symfony/polyfill"
2241 | }
2242 | },
2243 | "autoload": {
2244 | "files": [
2245 | "bootstrap.php"
2246 | ],
2247 | "psr-4": {
2248 | "Symfony\\Polyfill\\Php72\\": ""
2249 | }
2250 | },
2251 | "notification-url": "https://packagist.org/downloads/",
2252 | "license": [
2253 | "MIT"
2254 | ],
2255 | "authors": [
2256 | {
2257 | "name": "Nicolas Grekas",
2258 | "email": "p@tchwork.com"
2259 | },
2260 | {
2261 | "name": "Symfony Community",
2262 | "homepage": "https://symfony.com/contributors"
2263 | }
2264 | ],
2265 | "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
2266 | "homepage": "https://symfony.com",
2267 | "keywords": [
2268 | "compatibility",
2269 | "polyfill",
2270 | "portable",
2271 | "shim"
2272 | ],
2273 | "support": {
2274 | "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0"
2275 | },
2276 | "funding": [
2277 | {
2278 | "url": "https://symfony.com/sponsor",
2279 | "type": "custom"
2280 | },
2281 | {
2282 | "url": "https://github.com/fabpot",
2283 | "type": "github"
2284 | },
2285 | {
2286 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
2287 | "type": "tidelift"
2288 | }
2289 | ],
2290 | "time": "2022-11-03T14:55:06+00:00"
2291 | },
2292 | {
2293 | "name": "symfony/polyfill-php80",
2294 | "version": "v1.27.0",
2295 | "source": {
2296 | "type": "git",
2297 | "url": "https://github.com/symfony/polyfill-php80.git",
2298 | "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936"
2299 | },
2300 | "dist": {
2301 | "type": "zip",
2302 | "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936",
2303 | "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936",
2304 | "shasum": ""
2305 | },
2306 | "require": {
2307 | "php": ">=7.1"
2308 | },
2309 | "type": "library",
2310 | "extra": {
2311 | "branch-alias": {
2312 | "dev-main": "1.27-dev"
2313 | },
2314 | "thanks": {
2315 | "name": "symfony/polyfill",
2316 | "url": "https://github.com/symfony/polyfill"
2317 | }
2318 | },
2319 | "autoload": {
2320 | "files": [
2321 | "bootstrap.php"
2322 | ],
2323 | "psr-4": {
2324 | "Symfony\\Polyfill\\Php80\\": ""
2325 | },
2326 | "classmap": [
2327 | "Resources/stubs"
2328 | ]
2329 | },
2330 | "notification-url": "https://packagist.org/downloads/",
2331 | "license": [
2332 | "MIT"
2333 | ],
2334 | "authors": [
2335 | {
2336 | "name": "Ion Bazan",
2337 | "email": "ion.bazan@gmail.com"
2338 | },
2339 | {
2340 | "name": "Nicolas Grekas",
2341 | "email": "p@tchwork.com"
2342 | },
2343 | {
2344 | "name": "Symfony Community",
2345 | "homepage": "https://symfony.com/contributors"
2346 | }
2347 | ],
2348 | "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
2349 | "homepage": "https://symfony.com",
2350 | "keywords": [
2351 | "compatibility",
2352 | "polyfill",
2353 | "portable",
2354 | "shim"
2355 | ],
2356 | "support": {
2357 | "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0"
2358 | },
2359 | "funding": [
2360 | {
2361 | "url": "https://symfony.com/sponsor",
2362 | "type": "custom"
2363 | },
2364 | {
2365 | "url": "https://github.com/fabpot",
2366 | "type": "github"
2367 | },
2368 | {
2369 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
2370 | "type": "tidelift"
2371 | }
2372 | ],
2373 | "time": "2022-11-03T14:55:06+00:00"
2374 | },
2375 | {
2376 | "name": "symfony/service-contracts",
2377 | "version": "v3.2.0",
2378 | "source": {
2379 | "type": "git",
2380 | "url": "https://github.com/symfony/service-contracts.git",
2381 | "reference": "aac98028c69df04ee77eb69b96b86ee51fbf4b75"
2382 | },
2383 | "dist": {
2384 | "type": "zip",
2385 | "url": "https://api.github.com/repos/symfony/service-contracts/zipball/aac98028c69df04ee77eb69b96b86ee51fbf4b75",
2386 | "reference": "aac98028c69df04ee77eb69b96b86ee51fbf4b75",
2387 | "shasum": ""
2388 | },
2389 | "require": {
2390 | "php": ">=8.1",
2391 | "psr/container": "^2.0"
2392 | },
2393 | "conflict": {
2394 | "ext-psr": "<1.1|>=2"
2395 | },
2396 | "suggest": {
2397 | "symfony/service-implementation": ""
2398 | },
2399 | "type": "library",
2400 | "extra": {
2401 | "branch-alias": {
2402 | "dev-main": "3.3-dev"
2403 | },
2404 | "thanks": {
2405 | "name": "symfony/contracts",
2406 | "url": "https://github.com/symfony/contracts"
2407 | }
2408 | },
2409 | "autoload": {
2410 | "psr-4": {
2411 | "Symfony\\Contracts\\Service\\": ""
2412 | },
2413 | "exclude-from-classmap": [
2414 | "/Test/"
2415 | ]
2416 | },
2417 | "notification-url": "https://packagist.org/downloads/",
2418 | "license": [
2419 | "MIT"
2420 | ],
2421 | "authors": [
2422 | {
2423 | "name": "Nicolas Grekas",
2424 | "email": "p@tchwork.com"
2425 | },
2426 | {
2427 | "name": "Symfony Community",
2428 | "homepage": "https://symfony.com/contributors"
2429 | }
2430 | ],
2431 | "description": "Generic abstractions related to writing services",
2432 | "homepage": "https://symfony.com",
2433 | "keywords": [
2434 | "abstractions",
2435 | "contracts",
2436 | "decoupling",
2437 | "interfaces",
2438 | "interoperability",
2439 | "standards"
2440 | ],
2441 | "support": {
2442 | "source": "https://github.com/symfony/service-contracts/tree/v3.2.0"
2443 | },
2444 | "funding": [
2445 | {
2446 | "url": "https://symfony.com/sponsor",
2447 | "type": "custom"
2448 | },
2449 | {
2450 | "url": "https://github.com/fabpot",
2451 | "type": "github"
2452 | },
2453 | {
2454 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
2455 | "type": "tidelift"
2456 | }
2457 | ],
2458 | "time": "2022-11-25T10:21:52+00:00"
2459 | },
2460 | {
2461 | "name": "symfony/string",
2462 | "version": "v6.2.5",
2463 | "source": {
2464 | "type": "git",
2465 | "url": "https://github.com/symfony/string.git",
2466 | "reference": "b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0"
2467 | },
2468 | "dist": {
2469 | "type": "zip",
2470 | "url": "https://api.github.com/repos/symfony/string/zipball/b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0",
2471 | "reference": "b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0",
2472 | "shasum": ""
2473 | },
2474 | "require": {
2475 | "php": ">=8.1",
2476 | "symfony/polyfill-ctype": "~1.8",
2477 | "symfony/polyfill-intl-grapheme": "~1.0",
2478 | "symfony/polyfill-intl-normalizer": "~1.0",
2479 | "symfony/polyfill-mbstring": "~1.0"
2480 | },
2481 | "conflict": {
2482 | "symfony/translation-contracts": "<2.0"
2483 | },
2484 | "require-dev": {
2485 | "symfony/error-handler": "^5.4|^6.0",
2486 | "symfony/http-client": "^5.4|^6.0",
2487 | "symfony/intl": "^6.2",
2488 | "symfony/translation-contracts": "^2.0|^3.0",
2489 | "symfony/var-exporter": "^5.4|^6.0"
2490 | },
2491 | "type": "library",
2492 | "autoload": {
2493 | "files": [
2494 | "Resources/functions.php"
2495 | ],
2496 | "psr-4": {
2497 | "Symfony\\Component\\String\\": ""
2498 | },
2499 | "exclude-from-classmap": [
2500 | "/Tests/"
2501 | ]
2502 | },
2503 | "notification-url": "https://packagist.org/downloads/",
2504 | "license": [
2505 | "MIT"
2506 | ],
2507 | "authors": [
2508 | {
2509 | "name": "Nicolas Grekas",
2510 | "email": "p@tchwork.com"
2511 | },
2512 | {
2513 | "name": "Symfony Community",
2514 | "homepage": "https://symfony.com/contributors"
2515 | }
2516 | ],
2517 | "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
2518 | "homepage": "https://symfony.com",
2519 | "keywords": [
2520 | "grapheme",
2521 | "i18n",
2522 | "string",
2523 | "unicode",
2524 | "utf-8",
2525 | "utf8"
2526 | ],
2527 | "support": {
2528 | "source": "https://github.com/symfony/string/tree/v6.2.5"
2529 | },
2530 | "funding": [
2531 | {
2532 | "url": "https://symfony.com/sponsor",
2533 | "type": "custom"
2534 | },
2535 | {
2536 | "url": "https://github.com/fabpot",
2537 | "type": "github"
2538 | },
2539 | {
2540 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
2541 | "type": "tidelift"
2542 | }
2543 | ],
2544 | "time": "2023-01-01T08:38:09+00:00"
2545 | },
2546 | {
2547 | "name": "symfony/translation-contracts",
2548 | "version": "v2.5.2",
2549 | "source": {
2550 | "type": "git",
2551 | "url": "https://github.com/symfony/translation-contracts.git",
2552 | "reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe"
2553 | },
2554 | "dist": {
2555 | "type": "zip",
2556 | "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/136b19dd05cdf0709db6537d058bcab6dd6e2dbe",
2557 | "reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe",
2558 | "shasum": ""
2559 | },
2560 | "require": {
2561 | "php": ">=7.2.5"
2562 | },
2563 | "suggest": {
2564 | "symfony/translation-implementation": ""
2565 | },
2566 | "type": "library",
2567 | "extra": {
2568 | "branch-alias": {
2569 | "dev-main": "2.5-dev"
2570 | },
2571 | "thanks": {
2572 | "name": "symfony/contracts",
2573 | "url": "https://github.com/symfony/contracts"
2574 | }
2575 | },
2576 | "autoload": {
2577 | "psr-4": {
2578 | "Symfony\\Contracts\\Translation\\": ""
2579 | }
2580 | },
2581 | "notification-url": "https://packagist.org/downloads/",
2582 | "license": [
2583 | "MIT"
2584 | ],
2585 | "authors": [
2586 | {
2587 | "name": "Nicolas Grekas",
2588 | "email": "p@tchwork.com"
2589 | },
2590 | {
2591 | "name": "Symfony Community",
2592 | "homepage": "https://symfony.com/contributors"
2593 | }
2594 | ],
2595 | "description": "Generic abstractions related to translation",
2596 | "homepage": "https://symfony.com",
2597 | "keywords": [
2598 | "abstractions",
2599 | "contracts",
2600 | "decoupling",
2601 | "interfaces",
2602 | "interoperability",
2603 | "standards"
2604 | ],
2605 | "support": {
2606 | "source": "https://github.com/symfony/translation-contracts/tree/v2.5.2"
2607 | },
2608 | "funding": [
2609 | {
2610 | "url": "https://symfony.com/sponsor",
2611 | "type": "custom"
2612 | },
2613 | {
2614 | "url": "https://github.com/fabpot",
2615 | "type": "github"
2616 | },
2617 | {
2618 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
2619 | "type": "tidelift"
2620 | }
2621 | ],
2622 | "time": "2022-06-27T16:58:25+00:00"
2623 | },
2624 | {
2625 | "name": "symfony/validator",
2626 | "version": "v4.4.48",
2627 | "source": {
2628 | "type": "git",
2629 | "url": "https://github.com/symfony/validator.git",
2630 | "reference": "54781a4c41efbd283b779110bf8ae7f263737775"
2631 | },
2632 | "dist": {
2633 | "type": "zip",
2634 | "url": "https://api.github.com/repos/symfony/validator/zipball/54781a4c41efbd283b779110bf8ae7f263737775",
2635 | "reference": "54781a4c41efbd283b779110bf8ae7f263737775",
2636 | "shasum": ""
2637 | },
2638 | "require": {
2639 | "php": ">=7.1.3",
2640 | "symfony/polyfill-ctype": "~1.8",
2641 | "symfony/polyfill-mbstring": "~1.0",
2642 | "symfony/polyfill-php80": "^1.16",
2643 | "symfony/translation-contracts": "^1.1|^2"
2644 | },
2645 | "conflict": {
2646 | "doctrine/lexer": "<1.1",
2647 | "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0",
2648 | "symfony/dependency-injection": "<3.4",
2649 | "symfony/http-kernel": "<4.4",
2650 | "symfony/intl": "<4.3",
2651 | "symfony/translation": ">=5.0",
2652 | "symfony/yaml": "<3.4"
2653 | },
2654 | "require-dev": {
2655 | "doctrine/annotations": "^1.10.4",
2656 | "doctrine/cache": "^1.0|^2.0",
2657 | "egulias/email-validator": "^2.1.10|^3",
2658 | "symfony/cache": "^3.4|^4.0|^5.0",
2659 | "symfony/config": "^3.4|^4.0|^5.0",
2660 | "symfony/dependency-injection": "^3.4|^4.0|^5.0",
2661 | "symfony/expression-language": "^3.4|^4.0|^5.0",
2662 | "symfony/http-client": "^4.3|^5.0",
2663 | "symfony/http-foundation": "^4.1|^5.0",
2664 | "symfony/http-kernel": "^4.4",
2665 | "symfony/intl": "^4.3|^5.0",
2666 | "symfony/mime": "^4.4|^5.0",
2667 | "symfony/property-access": "^3.4|^4.0|^5.0",
2668 | "symfony/property-info": "^3.4|^4.0|^5.0",
2669 | "symfony/translation": "^4.2",
2670 | "symfony/yaml": "^3.4|^4.0|^5.0"
2671 | },
2672 | "suggest": {
2673 | "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.",
2674 | "doctrine/cache": "For using the default cached annotation reader.",
2675 | "egulias/email-validator": "Strict (RFC compliant) email validation",
2676 | "psr/cache-implementation": "For using the mapping cache.",
2677 | "symfony/config": "",
2678 | "symfony/expression-language": "For using the Expression validator",
2679 | "symfony/http-foundation": "",
2680 | "symfony/intl": "",
2681 | "symfony/property-access": "For accessing properties within comparison constraints",
2682 | "symfony/property-info": "To automatically add NotNull and Type constraints",
2683 | "symfony/translation": "For translating validation errors.",
2684 | "symfony/yaml": ""
2685 | },
2686 | "type": "library",
2687 | "autoload": {
2688 | "psr-4": {
2689 | "Symfony\\Component\\Validator\\": ""
2690 | },
2691 | "exclude-from-classmap": [
2692 | "/Tests/"
2693 | ]
2694 | },
2695 | "notification-url": "https://packagist.org/downloads/",
2696 | "license": [
2697 | "MIT"
2698 | ],
2699 | "authors": [
2700 | {
2701 | "name": "Fabien Potencier",
2702 | "email": "fabien@symfony.com"
2703 | },
2704 | {
2705 | "name": "Symfony Community",
2706 | "homepage": "https://symfony.com/contributors"
2707 | }
2708 | ],
2709 | "description": "Provides tools to validate values",
2710 | "homepage": "https://symfony.com",
2711 | "support": {
2712 | "source": "https://github.com/symfony/validator/tree/v4.4.48"
2713 | },
2714 | "funding": [
2715 | {
2716 | "url": "https://symfony.com/sponsor",
2717 | "type": "custom"
2718 | },
2719 | {
2720 | "url": "https://github.com/fabpot",
2721 | "type": "github"
2722 | },
2723 | {
2724 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
2725 | "type": "tidelift"
2726 | }
2727 | ],
2728 | "time": "2022-10-25T13:54:11+00:00"
2729 | },
2730 | {
2731 | "name": "symfony/yaml",
2732 | "version": "v4.4.45",
2733 | "source": {
2734 | "type": "git",
2735 | "url": "https://github.com/symfony/yaml.git",
2736 | "reference": "aeccc4dc52a9e634f1d1eebeb21eacfdcff1053d"
2737 | },
2738 | "dist": {
2739 | "type": "zip",
2740 | "url": "https://api.github.com/repos/symfony/yaml/zipball/aeccc4dc52a9e634f1d1eebeb21eacfdcff1053d",
2741 | "reference": "aeccc4dc52a9e634f1d1eebeb21eacfdcff1053d",
2742 | "shasum": ""
2743 | },
2744 | "require": {
2745 | "php": ">=7.1.3",
2746 | "symfony/polyfill-ctype": "~1.8"
2747 | },
2748 | "conflict": {
2749 | "symfony/console": "<3.4"
2750 | },
2751 | "require-dev": {
2752 | "symfony/console": "^3.4|^4.0|^5.0"
2753 | },
2754 | "suggest": {
2755 | "symfony/console": "For validating YAML files using the lint command"
2756 | },
2757 | "type": "library",
2758 | "autoload": {
2759 | "psr-4": {
2760 | "Symfony\\Component\\Yaml\\": ""
2761 | },
2762 | "exclude-from-classmap": [
2763 | "/Tests/"
2764 | ]
2765 | },
2766 | "notification-url": "https://packagist.org/downloads/",
2767 | "license": [
2768 | "MIT"
2769 | ],
2770 | "authors": [
2771 | {
2772 | "name": "Fabien Potencier",
2773 | "email": "fabien@symfony.com"
2774 | },
2775 | {
2776 | "name": "Symfony Community",
2777 | "homepage": "https://symfony.com/contributors"
2778 | }
2779 | ],
2780 | "description": "Loads and dumps YAML files",
2781 | "homepage": "https://symfony.com",
2782 | "support": {
2783 | "source": "https://github.com/symfony/yaml/tree/v4.4.45"
2784 | },
2785 | "funding": [
2786 | {
2787 | "url": "https://symfony.com/sponsor",
2788 | "type": "custom"
2789 | },
2790 | {
2791 | "url": "https://github.com/fabpot",
2792 | "type": "github"
2793 | },
2794 | {
2795 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
2796 | "type": "tidelift"
2797 | }
2798 | ],
2799 | "time": "2022-08-02T15:47:23+00:00"
2800 | },
2801 | {
2802 | "name": "webmozart/assert",
2803 | "version": "1.11.0",
2804 | "source": {
2805 | "type": "git",
2806 | "url": "https://github.com/webmozarts/assert.git",
2807 | "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991"
2808 | },
2809 | "dist": {
2810 | "type": "zip",
2811 | "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991",
2812 | "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991",
2813 | "shasum": ""
2814 | },
2815 | "require": {
2816 | "ext-ctype": "*",
2817 | "php": "^7.2 || ^8.0"
2818 | },
2819 | "conflict": {
2820 | "phpstan/phpstan": "<0.12.20",
2821 | "vimeo/psalm": "<4.6.1 || 4.6.2"
2822 | },
2823 | "require-dev": {
2824 | "phpunit/phpunit": "^8.5.13"
2825 | },
2826 | "type": "library",
2827 | "extra": {
2828 | "branch-alias": {
2829 | "dev-master": "1.10-dev"
2830 | }
2831 | },
2832 | "autoload": {
2833 | "psr-4": {
2834 | "Webmozart\\Assert\\": "src/"
2835 | }
2836 | },
2837 | "notification-url": "https://packagist.org/downloads/",
2838 | "license": [
2839 | "MIT"
2840 | ],
2841 | "authors": [
2842 | {
2843 | "name": "Bernhard Schussek",
2844 | "email": "bschussek@gmail.com"
2845 | }
2846 | ],
2847 | "description": "Assertions to validate method input/output with nice error messages.",
2848 | "keywords": [
2849 | "assert",
2850 | "check",
2851 | "validate"
2852 | ],
2853 | "support": {
2854 | "issues": "https://github.com/webmozarts/assert/issues",
2855 | "source": "https://github.com/webmozarts/assert/tree/1.11.0"
2856 | },
2857 | "time": "2022-06-03T18:03:27+00:00"
2858 | },
2859 | {
2860 | "name": "webmozart/path-util",
2861 | "version": "2.3.0",
2862 | "source": {
2863 | "type": "git",
2864 | "url": "https://github.com/webmozart/path-util.git",
2865 | "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725"
2866 | },
2867 | "dist": {
2868 | "type": "zip",
2869 | "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725",
2870 | "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725",
2871 | "shasum": ""
2872 | },
2873 | "require": {
2874 | "php": ">=5.3.3",
2875 | "webmozart/assert": "~1.0"
2876 | },
2877 | "require-dev": {
2878 | "phpunit/phpunit": "^4.6",
2879 | "sebastian/version": "^1.0.1"
2880 | },
2881 | "type": "library",
2882 | "extra": {
2883 | "branch-alias": {
2884 | "dev-master": "2.3-dev"
2885 | }
2886 | },
2887 | "autoload": {
2888 | "psr-4": {
2889 | "Webmozart\\PathUtil\\": "src/"
2890 | }
2891 | },
2892 | "notification-url": "https://packagist.org/downloads/",
2893 | "license": [
2894 | "MIT"
2895 | ],
2896 | "authors": [
2897 | {
2898 | "name": "Bernhard Schussek",
2899 | "email": "bschussek@gmail.com"
2900 | }
2901 | ],
2902 | "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.",
2903 | "support": {
2904 | "issues": "https://github.com/webmozart/path-util/issues",
2905 | "source": "https://github.com/webmozart/path-util/tree/2.3.0"
2906 | },
2907 | "abandoned": "symfony/filesystem",
2908 | "time": "2015-12-17T08:42:14+00:00"
2909 | }
2910 | ],
2911 | "packages-dev": [],
2912 | "aliases": [],
2913 | "minimum-stability": "stable",
2914 | "stability-flags": [],
2915 | "prefer-stable": false,
2916 | "prefer-lowest": false,
2917 | "platform": {
2918 | "php": "^8.2"
2919 | },
2920 | "platform-dev": [],
2921 | "plugin-api-version": "2.3.0"
2922 | }
2923 |
--------------------------------------------------------------------------------