summaryrefslogtreecommitdiff
path: root/vendor/symfony/cache-contracts
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2024-08-13 23:45:21 +0200
committerpolo <ordipolo@gmx.fr>2024-08-13 23:45:21 +0200
commitbf6655a534a6775d30cafa67bd801276bda1d98d (patch)
treec6381e3f6c81c33eab72508f410b165ba05f7e9c /vendor/symfony/cache-contracts
parent94d67a4b51f8e62e7d518cce26a526ae1ec48278 (diff)
downloadAppliGestionPHP-bf6655a534a6775d30cafa67bd801276bda1d98d.zip
VERSION 0.2 doctrine ORM et entités
Diffstat (limited to 'vendor/symfony/cache-contracts')
-rw-r--r--vendor/symfony/cache-contracts/CHANGELOG.md5
-rw-r--r--vendor/symfony/cache-contracts/CacheInterface.php59
-rw-r--r--vendor/symfony/cache-contracts/CacheTrait.php72
-rw-r--r--vendor/symfony/cache-contracts/CallbackInterface.php32
-rw-r--r--vendor/symfony/cache-contracts/ItemInterface.php65
-rw-r--r--vendor/symfony/cache-contracts/LICENSE19
-rw-r--r--vendor/symfony/cache-contracts/README.md9
-rw-r--r--vendor/symfony/cache-contracts/TagAwareCacheInterface.php38
-rw-r--r--vendor/symfony/cache-contracts/composer.json35
9 files changed, 334 insertions, 0 deletions
diff --git a/vendor/symfony/cache-contracts/CHANGELOG.md b/vendor/symfony/cache-contracts/CHANGELOG.md
new file mode 100644
index 0000000..7932e26
--- /dev/null
+++ b/vendor/symfony/cache-contracts/CHANGELOG.md
@@ -0,0 +1,5 @@
1CHANGELOG
2=========
3
4The changelog is maintained for all Symfony contracts at the following URL:
5https://github.com/symfony/contracts/blob/main/CHANGELOG.md
diff --git a/vendor/symfony/cache-contracts/CacheInterface.php b/vendor/symfony/cache-contracts/CacheInterface.php
new file mode 100644
index 0000000..3e4aaf6
--- /dev/null
+++ b/vendor/symfony/cache-contracts/CacheInterface.php
@@ -0,0 +1,59 @@
1<?php
2
3/*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12namespace Symfony\Contracts\Cache;
13
14use Psr\Cache\CacheItemInterface;
15use Psr\Cache\InvalidArgumentException;
16
17/**
18 * Covers most simple to advanced caching needs.
19 *
20 * @author Nicolas Grekas <p@tchwork.com>
21 */
22interface CacheInterface
23{
24 /**
25 * Fetches a value from the pool or computes it if not found.
26 *
27 * On cache misses, a callback is called that should return the missing value.
28 * This callback is given a PSR-6 CacheItemInterface instance corresponding to the
29 * requested key, that could be used e.g. for expiration control. It could also
30 * be an ItemInterface instance when its additional features are needed.
31 *
32 * @template T
33 *
34 * @param string $key The key of the item to retrieve from the cache
35 * @param (callable(CacheItemInterface,bool):T)|(callable(ItemInterface,bool):T)|CallbackInterface<T> $callback
36 * @param float|null $beta A float that, as it grows, controls the likeliness of triggering
37 * early expiration. 0 disables it, INF forces immediate expiration.
38 * The default (or providing null) is implementation dependent but should
39 * typically be 1.0, which should provide optimal stampede protection.
40 * See https://en.wikipedia.org/wiki/Cache_stampede#Probabilistic_early_expiration
41 * @param array &$metadata The metadata of the cached item {@see ItemInterface::getMetadata()}
42 *
43 * @return T
44 *
45 * @throws InvalidArgumentException When $key is not valid or when $beta is negative
46 */
47 public function get(string $key, callable $callback, ?float $beta = null, ?array &$metadata = null): mixed;
48
49 /**
50 * Removes an item from the pool.
51 *
52 * @param string $key The key to delete
53 *
54 * @return bool True if the item was successfully removed, false if there was any error
55 *
56 * @throws InvalidArgumentException When $key is not valid
57 */
58 public function delete(string $key): bool;
59}
diff --git a/vendor/symfony/cache-contracts/CacheTrait.php b/vendor/symfony/cache-contracts/CacheTrait.php
new file mode 100644
index 0000000..c2f6580
--- /dev/null
+++ b/vendor/symfony/cache-contracts/CacheTrait.php
@@ -0,0 +1,72 @@
1<?php
2
3/*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12namespace Symfony\Contracts\Cache;
13
14use Psr\Cache\CacheItemPoolInterface;
15use Psr\Cache\InvalidArgumentException;
16use Psr\Log\LoggerInterface;
17
18// Help opcache.preload discover always-needed symbols
19class_exists(InvalidArgumentException::class);
20
21/**
22 * An implementation of CacheInterface for PSR-6 CacheItemPoolInterface classes.
23 *
24 * @author Nicolas Grekas <p@tchwork.com>
25 */
26trait CacheTrait
27{
28 public function get(string $key, callable $callback, ?float $beta = null, ?array &$metadata = null): mixed
29 {
30 return $this->doGet($this, $key, $callback, $beta, $metadata);
31 }
32
33 public function delete(string $key): bool
34 {
35 return $this->deleteItem($key);
36 }
37
38 private function doGet(CacheItemPoolInterface $pool, string $key, callable $callback, ?float $beta, ?array &$metadata = null, ?LoggerInterface $logger = null): mixed
39 {
40 if (0 > $beta ??= 1.0) {
41 throw new class(sprintf('Argument "$beta" provided to "%s::get()" must be a positive number, %f given.', static::class, $beta)) extends \InvalidArgumentException implements InvalidArgumentException {};
42 }
43
44 $item = $pool->getItem($key);
45 $recompute = !$item->isHit() || \INF === $beta;
46 $metadata = $item instanceof ItemInterface ? $item->getMetadata() : [];
47
48 if (!$recompute && $metadata) {
49 $expiry = $metadata[ItemInterface::METADATA_EXPIRY] ?? false;
50 $ctime = $metadata[ItemInterface::METADATA_CTIME] ?? false;
51
52 if ($recompute = $ctime && $expiry && $expiry <= ($now = microtime(true)) - $ctime / 1000 * $beta * log(random_int(1, \PHP_INT_MAX) / \PHP_INT_MAX)) {
53 // force applying defaultLifetime to expiry
54 $item->expiresAt(null);
55 $logger?->info('Item "{key}" elected for early recomputation {delta}s before its expiration', [
56 'key' => $key,
57 'delta' => sprintf('%.1f', $expiry - $now),
58 ]);
59 }
60 }
61
62 if ($recompute) {
63 $save = true;
64 $item->set($callback($item, $save));
65 if ($save) {
66 $pool->save($item);
67 }
68 }
69
70 return $item->get();
71 }
72}
diff --git a/vendor/symfony/cache-contracts/CallbackInterface.php b/vendor/symfony/cache-contracts/CallbackInterface.php
new file mode 100644
index 0000000..15941e9
--- /dev/null
+++ b/vendor/symfony/cache-contracts/CallbackInterface.php
@@ -0,0 +1,32 @@
1<?php
2
3/*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12namespace Symfony\Contracts\Cache;
13
14use Psr\Cache\CacheItemInterface;
15
16/**
17 * Computes and returns the cached value of an item.
18 *
19 * @author Nicolas Grekas <p@tchwork.com>
20 *
21 * @template T
22 */
23interface CallbackInterface
24{
25 /**
26 * @param CacheItemInterface|ItemInterface $item The item to compute the value for
27 * @param bool &$save Should be set to false when the value should not be saved in the pool
28 *
29 * @return T The computed value for the passed item
30 */
31 public function __invoke(CacheItemInterface $item, bool &$save): mixed;
32}
diff --git a/vendor/symfony/cache-contracts/ItemInterface.php b/vendor/symfony/cache-contracts/ItemInterface.php
new file mode 100644
index 0000000..8c4c512
--- /dev/null
+++ b/vendor/symfony/cache-contracts/ItemInterface.php
@@ -0,0 +1,65 @@
1<?php
2
3/*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12namespace Symfony\Contracts\Cache;
13
14use Psr\Cache\CacheException;
15use Psr\Cache\CacheItemInterface;
16use Psr\Cache\InvalidArgumentException;
17
18/**
19 * Augments PSR-6's CacheItemInterface with support for tags and metadata.
20 *
21 * @author Nicolas Grekas <p@tchwork.com>
22 */
23interface ItemInterface extends CacheItemInterface
24{
25 /**
26 * References the Unix timestamp stating when the item will expire.
27 */
28 public const METADATA_EXPIRY = 'expiry';
29
30 /**
31 * References the time the item took to be created, in milliseconds.
32 */
33 public const METADATA_CTIME = 'ctime';
34
35 /**
36 * References the list of tags that were assigned to the item, as string[].
37 */
38 public const METADATA_TAGS = 'tags';
39
40 /**
41 * Reserved characters that cannot be used in a key or tag.
42 */
43 public const RESERVED_CHARACTERS = '{}()/\@:';
44
45 /**
46 * Adds a tag to a cache item.
47 *
48 * Tags are strings that follow the same validation rules as keys.
49 *
50 * @param string|string[] $tags A tag or array of tags
51 *
52 * @return $this
53 *
54 * @throws InvalidArgumentException When $tag is not valid
55 * @throws CacheException When the item comes from a pool that is not tag-aware
56 */
57 public function tag(string|iterable $tags): static;
58
59 /**
60 * Returns a list of metadata info that were saved alongside with the cached value.
61 *
62 * See ItemInterface::METADATA_* consts for keys potentially found in the returned array.
63 */
64 public function getMetadata(): array;
65}
diff --git a/vendor/symfony/cache-contracts/LICENSE b/vendor/symfony/cache-contracts/LICENSE
new file mode 100644
index 0000000..7536cae
--- /dev/null
+++ b/vendor/symfony/cache-contracts/LICENSE
@@ -0,0 +1,19 @@
1Copyright (c) 2018-present Fabien Potencier
2
3Permission is hereby granted, free of charge, to any person obtaining a copy
4of this software and associated documentation files (the "Software"), to deal
5in the Software without restriction, including without limitation the rights
6to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7copies of the Software, and to permit persons to whom the Software is furnished
8to do so, subject to the following conditions:
9
10The above copyright notice and this permission notice shall be included in all
11copies or substantial portions of the Software.
12
13THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19THE SOFTWARE.
diff --git a/vendor/symfony/cache-contracts/README.md b/vendor/symfony/cache-contracts/README.md
new file mode 100644
index 0000000..ffe0833
--- /dev/null
+++ b/vendor/symfony/cache-contracts/README.md
@@ -0,0 +1,9 @@
1Symfony Cache Contracts
2=======================
3
4A set of abstractions extracted out of the Symfony components.
5
6Can be used to build on semantics that the Symfony components proved useful and
7that already have battle tested implementations.
8
9See https://github.com/symfony/contracts/blob/main/README.md for more information.
diff --git a/vendor/symfony/cache-contracts/TagAwareCacheInterface.php b/vendor/symfony/cache-contracts/TagAwareCacheInterface.php
new file mode 100644
index 0000000..8e0b6be
--- /dev/null
+++ b/vendor/symfony/cache-contracts/TagAwareCacheInterface.php
@@ -0,0 +1,38 @@
1<?php
2
3/*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12namespace Symfony\Contracts\Cache;
13
14use Psr\Cache\InvalidArgumentException;
15
16/**
17 * Allows invalidating cached items using tags.
18 *
19 * @author Nicolas Grekas <p@tchwork.com>
20 */
21interface TagAwareCacheInterface extends CacheInterface
22{
23 /**
24 * Invalidates cached items using tags.
25 *
26 * When implemented on a PSR-6 pool, invalidation should not apply
27 * to deferred items. Instead, they should be committed as usual.
28 * This allows replacing old tagged values by new ones without
29 * race conditions.
30 *
31 * @param string[] $tags An array of tags to invalidate
32 *
33 * @return bool True on success
34 *
35 * @throws InvalidArgumentException When $tags is not valid
36 */
37 public function invalidateTags(array $tags): bool;
38}
diff --git a/vendor/symfony/cache-contracts/composer.json b/vendor/symfony/cache-contracts/composer.json
new file mode 100644
index 0000000..fe261d1
--- /dev/null
+++ b/vendor/symfony/cache-contracts/composer.json
@@ -0,0 +1,35 @@
1{
2 "name": "symfony/cache-contracts",
3 "type": "library",
4 "description": "Generic abstractions related to caching",
5 "keywords": ["abstractions", "contracts", "decoupling", "interfaces", "interoperability", "standards"],
6 "homepage": "https://symfony.com",
7 "license": "MIT",
8 "authors": [
9 {
10 "name": "Nicolas Grekas",
11 "email": "p@tchwork.com"
12 },
13 {
14 "name": "Symfony Community",
15 "homepage": "https://symfony.com/contributors"
16 }
17 ],
18 "require": {
19 "php": ">=8.1",
20 "psr/cache": "^3.0"
21 },
22 "autoload": {
23 "psr-4": { "Symfony\\Contracts\\Cache\\": "" }
24 },
25 "minimum-stability": "dev",
26 "extra": {
27 "branch-alias": {
28 "dev-main": "3.5-dev"
29 },
30 "thanks": {
31 "name": "symfony/contracts",
32 "url": "https://github.com/symfony/contracts"
33 }
34 }
35}