From eec921543134c9f630a9a3cd20785255ff14c97b Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Fri, 14 Mar 2025 15:44:52 +0400 Subject: [PATCH 1/9] deps de dev --- composer.json | 18 ++++++++++++++--- composer.lock | 54 ++++++++++++++++++++++++++++++--------------------- 2 files changed, 47 insertions(+), 25 deletions(-) diff --git a/composer.json b/composer.json index 7ac8fb8..dcc65a0 100644 --- a/composer.json +++ b/composer.json @@ -3,6 +3,18 @@ "type": "library", "description": "espace de maturation pour les librairies", "repositories": [ + { + "type": "path", + "url": "../nulib" + }, + { + "type": "path", + "url": "../nulib-spout" + }, + { + "type": "path", + "url": "../nulib-phpss" + }, { "type": "composer", "url": "https://repos.univ-reunion.fr/composer" @@ -18,9 +30,9 @@ "php": "^7.4" }, "require-dev": { - "nulib/php": "^0.4.0p74", - "nulib/spout": "^0.4.0p74", - "nulib/phpss": "^0.4.0p74", + "nulib/php": "^7.4-dev", + "nulib/spout": "^7.4-dev", + "nulib/phpss": "^7.4-dev", "nulib/tests": "^7.4", "ext-posix": "*", "ext-pcntl": "*", diff --git a/composer.lock b/composer.lock index dd1223e..ee57541 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "85c16d446d9a6899358782f7520bf3f6", + "content-hash": "0b1e015d12aecf1cdfbdc6a702d83d25", "packages": [], "packages-dev": [ { @@ -585,11 +585,11 @@ }, { "name": "nulib/php", - "version": "0.4.0p74", - "source": { - "type": "git", - "url": "https://git.univ-reunion.fr/sda-php/nulib.git", - "reference": "559feda663fc99f8baee2ba32f164b19bdd01927" + "version": "dev-dev74", + "dist": { + "type": "path", + "url": "../nulib", + "reference": "927915093af5196099ae26645c07e90ddf1b2330" }, "require": { "ext-json": "*", @@ -627,18 +627,20 @@ } ], "description": "fonctions et classes essentielles", - "time": "2025-03-14T11:23:41+00:00" + "transport-options": { + "relative": true + } }, { "name": "nulib/phpss", - "version": "0.4.0p74", - "source": { - "type": "git", - "url": "https://git.univ-reunion.fr/sda-php/nulib-phpss.git", - "reference": "1d8a88039f17242c72ff20cd01538b3fce8f8692" + "version": "dev-dev74", + "dist": { + "type": "path", + "url": "../nulib-phpss", + "reference": "9e4f41e38deef10993d859202988567db9d4fada" }, "require": { - "nulib/php": "^0.4.0p74", + "nulib/php": "^7.4-dev", "php": "^7.4", "phpoffice/phpspreadsheet": "^1.0" }, @@ -669,15 +671,17 @@ } ], "description": "wrapper pour phpoffice/phpspreadsheet", - "time": "2025-03-14T11:28:01+00:00" + "transport-options": { + "relative": true + } }, { "name": "nulib/spout", - "version": "0.4.0p74", - "source": { - "type": "git", - "url": "https://git.univ-reunion.fr/sda-php/nulib-spout.git", - "reference": "b5836e61961838c7f6d6735cdb671d47e05315e0" + "version": "dev-dev74", + "dist": { + "type": "path", + "url": "../nulib-spout", + "reference": "65c74a1db6dda718aa20970ede3dfa4b4d32c791" }, "require": { "ext-dom": "*", @@ -685,7 +689,7 @@ "ext-libxml": "*", "ext-xmlreader": "*", "ext-zip": "*", - "nulib/php": "^0.4.0p74", + "nulib/php": "^7.4-dev", "php": "^7.4" }, "replace": { @@ -723,7 +727,9 @@ } ], "description": "wrapper pour openspout/openspout", - "time": "2025-03-14T11:36:53+00:00" + "transport-options": { + "relative": true + } }, { "name": "nulib/tests", @@ -2937,7 +2943,11 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": { + "nulib/php": 20, + "nulib/spout": 20, + "nulib/phpss": 20 + }, "prefer-stable": false, "prefer-lowest": false, "platform": { From 66397a3bd0796f868038e522812c4aadefcee257 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Fri, 14 Mar 2025 15:46:42 +0400 Subject: [PATCH 2/9] Init changelog & version 0.4.0p82 --- CHANGES.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index eca9977..1eef20e 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,5 @@ +## Release 0.4.0p82 du 14/03/2025-15:46 + ## Release 0.4.0p74 du 14/03/2025-15:44 * `4b84f11` début assocSchema From 6e93c7da625960f6c684d5ce1b8e7c67f5d9c723 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Sun, 16 Mar 2025 18:02:08 +0400 Subject: [PATCH 3/9] modifs.mineures sans commentaires --- src/schema/TODO.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/schema/TODO.md b/src/schema/TODO.md index a7a5233..1aea69f 100644 --- a/src/schema/TODO.md +++ b/src/schema/TODO.md @@ -1,5 +1,16 @@ # nulib\schema +* renommer AnalyzerContext en WrapperContext +* plus de {key} ni {orig} dans messages + * les messages standard ne sont utilisés que s'il n'y a pas de message dans + l'exception + * si instance de UserException, prendre le message "non technique" pour + résultat +* valeurs composite/computed + * analyse / vérification de la valeur complète après calcul du résultat, si + tous les résultats sont bons + * calcul des valeurs composites/computed par une fonction avant/après l'analyse + globale si résultat ok * tdate et tdatetime. qu'en est-il des autres classes (delay, etc.) * possibilité de spécifier le format de la date à analyser * ScalarSchema::from_property() @@ -8,6 +19,17 @@ Schema::ns($schema, [ MyType::class, null, "une valeur de type MyType" ]); + # ou + Schema::ns($schema, [ + [MyType::class => $params], null, "une valeur de type MyType" + ]); + ~~~ + MyType doit implémenter IType +* possibilité de spécifier une instance de type, e.g + ~~~php + Schema::ns($schema, [ + new MyType(), null, "une valeur de type MyType" + ]); ~~~ MyType doit implémenter IType * type générique construit à partir d'un nom de classe, e.g From 26b483a29fd6ab65fa3e3202bb8775578e23311d Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 17 Mar 2025 10:49:25 +0400 Subject: [PATCH 4/9] modifs.mineures sans commentaires --- src/schema/TODO.md | 27 ---------- ...AnalyzerContext.php => WrapperContext.php} | 2 +- src/schema/_scalar/ScalarWrapper.php | 8 +-- src/schema/types.php | 7 ++- src/schema/types/IType.php | 2 + src/schema/types/Registry.php | 13 ++++- src/schema/types/tgeneric.php | 52 +++++++++++++++++++ src/schema/types/tmixed.php | 2 +- 8 files changed, 77 insertions(+), 36 deletions(-) rename src/schema/{AnalyzerContext.php => WrapperContext.php} (96%) create mode 100644 src/schema/types/tgeneric.php diff --git a/src/schema/TODO.md b/src/schema/TODO.md index 1aea69f..46e80ce 100644 --- a/src/schema/TODO.md +++ b/src/schema/TODO.md @@ -1,6 +1,5 @@ # nulib\schema -* renommer AnalyzerContext en WrapperContext * plus de {key} ni {orig} dans messages * les messages standard ne sont utilisés que s'il n'y a pas de message dans l'exception @@ -14,32 +13,6 @@ * tdate et tdatetime. qu'en est-il des autres classes (delay, etc.) * possibilité de spécifier le format de la date à analyser * ScalarSchema::from_property() -* possibilité de spécifier un type via sa classe, e.g - ~~~php - Schema::ns($schema, [ - MyType::class, null, "une valeur de type MyType" - ]); - # ou - Schema::ns($schema, [ - [MyType::class => $params], null, "une valeur de type MyType" - ]); - ~~~ - MyType doit implémenter IType -* possibilité de spécifier une instance de type, e.g - ~~~php - Schema::ns($schema, [ - new MyType(), null, "une valeur de type MyType" - ]); - ~~~ - MyType doit implémenter IType -* type générique construit à partir d'un nom de classe, e.g - ~~~php - Schema::ns($schema, [ - MyClass::class, null, "une valeur de type MyClass" - ]); - ~~~ - MyClass ne doit pas implémenter IType, et le type correspondant est créé avec - `new tgeneric(MyClass::class)` * dans AssocSchema, support `[key_prefix]` qui permet de spécifier un préfixe commun aux champs dans le tableau destination, e.g diff --git a/src/schema/AnalyzerContext.php b/src/schema/WrapperContext.php similarity index 96% rename from src/schema/AnalyzerContext.php rename to src/schema/WrapperContext.php index 3136c04..5ee0d37 100644 --- a/src/schema/AnalyzerContext.php +++ b/src/schema/WrapperContext.php @@ -4,7 +4,7 @@ namespace nur\sery\wip\schema; use nur\sery\wip\schema\input\Input; use nur\sery\wip\schema\types\IType; -class AnalyzerContext { +class WrapperContext { function __construct(Schema $schema, Wrapper $wrapper, Input $input, $valueKey, Result $result) { $this->schema = $schema; $this->wrapper = $wrapper; diff --git a/src/schema/_scalar/ScalarWrapper.php b/src/schema/_scalar/ScalarWrapper.php index bfd0a81..0ea9596 100644 --- a/src/schema/_scalar/ScalarWrapper.php +++ b/src/schema/_scalar/ScalarWrapper.php @@ -4,7 +4,7 @@ namespace nur\sery\wip\schema\_scalar; use nulib\php\func; use nulib\ref\schema\ref_analyze; use nulib\ValueException; -use nur\sery\wip\schema\AnalyzerContext; +use nur\sery\wip\schema\WrapperContext; use nur\sery\wip\schema\input\Input; use nur\sery\wip\schema\types; use nur\sery\wip\schema\types\IType; @@ -74,7 +74,7 @@ class ScalarWrapper extends Wrapper { } /** analyser la valeur et résoudre son type */ - protected function analyze0(AnalyzerContext $context): int { + protected function analyze0(WrapperContext $context): int { /** @var ScalarSchema $schema */ $schema = $context->schema; $input = $context->input; @@ -171,7 +171,7 @@ class ScalarWrapper extends Wrapper { $valueKey = $this->valueKey; $result = $this->result; $result->reset(); - $context = new AnalyzerContext($schema, $this, $input, $valueKey, $result); + $context = new WrapperContext($schema, $this, $input, $valueKey, $result); /** @var func $analyzerFunc */ $analyzerFunc = $schema->analyzerFunc; @@ -243,7 +243,7 @@ class ScalarWrapper extends Wrapper { /** @var func $normalizerFunc */ $normalizerFunc = $schema->normalizerFunc; if ($normalizerFunc !== null) { - $context = new AnalyzerContext($schema, $this, $this->input, $valueKey, $result); + $context = new WrapperContext($schema, $this, $this->input, $valueKey, $result); $orig = $value; $value = $normalizerFunc->invoke([$orig, $context]); $modified = $value !== $orig; diff --git a/src/schema/types.php b/src/schema/types.php index 7e3442a..c1b618b 100644 --- a/src/schema/types.php +++ b/src/schema/types.php @@ -1,6 +1,7 @@ get($nullable, $name, $args, $definition); } diff --git a/src/schema/types/IType.php b/src/schema/types/IType.php index a245fd7..36f5fd4 100644 --- a/src/schema/types/IType.php +++ b/src/schema/types/IType.php @@ -10,6 +10,8 @@ use nur\sery\wip\schema\Schema; * Interface IType: un type de données */ interface IType { + static function get_params_from_definition(?array $definition): ?array; + /** * obtenir, pour information, le nom officiel de ce type, utilisable dans une * définition de schéma diff --git a/src/schema/types/Registry.php b/src/schema/types/Registry.php index eb16596..e7bdecd 100644 --- a/src/schema/types/Registry.php +++ b/src/schema/types/Registry.php @@ -3,6 +3,7 @@ namespace nur\sery\wip\schema\types; use nulib\cl; use nulib\php\func; +use nulib\ValueException; class Registry { const TYPES = [ @@ -31,8 +32,6 @@ class Registry { protected $types; function get(bool $nullable, ?string $name, ?array $args=null, ?array $definition=null): IType { - $name ??= "raw"; - $class = self::TYPES[$name]; if (cl::is_list($args)) { $key = array_key_last($args); $params = $args[$key]; @@ -41,6 +40,16 @@ class Registry { $params = $args; $args = null; } + $name ??= "raw"; + $class = cl::get(self::TYPES, $name); + if ($class === null) { + $class = $name; + if (!class_exists($class)) { + throw ValueException::invalid_type($class, IType::class); + } elseif (!is_subclass_of($class, IType::class)) { + return new tgeneric($class, $nullable, $params); + } + } $params = cl::merge($class::get_params_from_definition($definition), $params); if ($args || $params !== null) { $args ??= []; diff --git a/src/schema/types/tgeneric.php b/src/schema/types/tgeneric.php new file mode 100644 index 0000000..16f86a8 --- /dev/null +++ b/src/schema/types/tgeneric.php @@ -0,0 +1,52 @@ +class = $class; + parent::__construct($nullable, $params); + } + + protected string $class; + + function getClass(): string { + return $this->class; + } + + function isAvailable(Input $input, $valueKey): bool { + return $input->isAvailable($valueKey); + } + + public function isNull($value): bool { + return $value === null; + } + + function isValid($value, ?bool &$normalized=null): bool { + $normalized = true; + return $value instanceof $this->class; + } + + function parse(string $value) { + throw ValueException::invalid_type($value, $this->class); + } + + /** + * @var ScalarResult $result + * @var ScalarSchema $schema + */ + function verifix(&$value, Result $result, Schema $schema): bool { + $result->setNormalized(); + return false; + } + + function format($value, $format=null): string { + return strval($value); + } +} diff --git a/src/schema/types/tmixed.php b/src/schema/types/tmixed.php index 5f387c6..fa525eb 100644 --- a/src/schema/types/tmixed.php +++ b/src/schema/types/tmixed.php @@ -41,6 +41,6 @@ class tmixed extends _tsimple { } function format($value, $format=null): string { - return var_export($value, true); + return strval($value); } } From 69203352d81b8a35c4bd36a35d619f9feee10ce3 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 17 Mar 2025 11:43:05 +0400 Subject: [PATCH 5/9] modifs.mineures sans commentaires --- src/schema/Schema.php | 2 +- src/schema/TODO.md | 1 + src/schema/_scalar/ScalarResult.php | 1 - src/schema/_scalar/ScalarSchema.php | 5 +++++ src/schema/types/Registry.php | 2 +- tests/wip/schema/_assoc/AssocSchemaTest.php | 2 +- tests/wip/schema/_scalar/ScalarSchemaTest.php | 2 +- 7 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/schema/Schema.php b/src/schema/Schema.php index 0bbd86e..02365cb 100644 --- a/src/schema/Schema.php +++ b/src/schema/Schema.php @@ -164,7 +164,7 @@ abstract class Schema implements ArrayAccess { tcallable::ensure_ncallable($definition["normalizer_func"]); tarray::ensure_narray($definition["messages"]); tcallable::ensure_ncallable($definition["formatter_func"]); - tbool::ensure_nbool($definition["composite"]); + tbool::ensure_nbool($definition["computed"]); switch ($nature[0] ?? null) { case "assoc": diff --git a/src/schema/TODO.md b/src/schema/TODO.md index 46e80ce..5f50801 100644 --- a/src/schema/TODO.md +++ b/src/schema/TODO.md @@ -1,5 +1,6 @@ # nulib\schema +* instance de WrapperContext directement dans le schéma * plus de {key} ni {orig} dans messages * les messages standard ne sont utilisés que s'il n'y a pas de message dans l'exception diff --git a/src/schema/_scalar/ScalarResult.php b/src/schema/_scalar/ScalarResult.php index ee28c05..cb568d5 100644 --- a/src/schema/_scalar/ScalarResult.php +++ b/src/schema/_scalar/ScalarResult.php @@ -1,7 +1,6 @@ newWrapper(); + return $wrapper->reset($value, $valueKey, false); + } if (!($wrapper instanceof ScalarWrapper)) $wrapper = $this->newWrapper(); return $wrapper->reset($value, $valueKey); } diff --git a/src/schema/types/Registry.php b/src/schema/types/Registry.php index e7bdecd..fdaabde 100644 --- a/src/schema/types/Registry.php +++ b/src/schema/types/Registry.php @@ -17,7 +17,7 @@ class Registry { "array" => tarray::class, "callable" => tcallable::class, # types spéciaux - "raw" => tmixed::class, + "raw" => traw::class, "mixed" => tmixed::class, "key" => tkey::class, "pkey" => tpkey::class, diff --git a/tests/wip/schema/_assoc/AssocSchemaTest.php b/tests/wip/schema/_assoc/AssocSchemaTest.php index 25ebc31..4ac9fca 100644 --- a/tests/wip/schema/_assoc/AssocSchemaTest.php +++ b/tests/wip/schema/_assoc/AssocSchemaTest.php @@ -25,7 +25,7 @@ class AssocSchemaTest extends TestCase { "name" => null, "pkey" => null, "header" => null, - "composite" => null, + "computed" => null, ]; static function schema(array $definition, array $keyDefinitions): array { diff --git a/tests/wip/schema/_scalar/ScalarSchemaTest.php b/tests/wip/schema/_scalar/ScalarSchemaTest.php index 84fdd35..c862fa5 100644 --- a/tests/wip/schema/_scalar/ScalarSchemaTest.php +++ b/tests/wip/schema/_scalar/ScalarSchemaTest.php @@ -24,7 +24,7 @@ class ScalarSchemaTest extends TestCase { "name" => null, "pkey" => null, "header" => null, - "composite" => null, + "computed" => null, ]; static function schema(array $schema): array { From d6078e8b5241f8a695c7952c8f984169a9290cba Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 17 Mar 2025 13:56:32 +0400 Subject: [PATCH 6/9] modifs.mineures sans commentaires --- src/schema/_scalar/ScalarSchema.php | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/schema/_scalar/ScalarSchema.php b/src/schema/_scalar/ScalarSchema.php index 1a01418..a4c11bf 100644 --- a/src/schema/_scalar/ScalarSchema.php +++ b/src/schema/_scalar/ScalarSchema.php @@ -91,13 +91,11 @@ class ScalarSchema extends Schema { } function getWrapper(&$value=null, $valueKey=null, ?Wrapper &$wrapper=null): ScalarWrapper { - if ($value === null && $wrapper === null) { - # si pas de wrapper ni de valeur, pas de vérification et donc pas d'exception - $wrapper = $this->newWrapper(); - return $wrapper->reset($value, $valueKey, false); - } + # si pas de valeur ni de wrapper, pas de vérification et donc pas d'exception + # cf le code similaire dans ScalarWrapper::__construct() + $verifix = $value !== null || $wrapper !== null; if (!($wrapper instanceof ScalarWrapper)) $wrapper = $this->newWrapper(); - return $wrapper->reset($value, $valueKey); + return $wrapper->reset($value, $valueKey, $verifix); } ############################################################################# From 56fda96c782925d64ab4b9ef6dcc4c58ce65ab6c Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 17 Mar 2025 16:34:29 +0400 Subject: [PATCH 7/9] =?UTF-8?q?changer=20le=20type=20de=20variables=20g?= =?UTF-8?q?=C3=A9r=C3=A9es=20par=20EnvConfig?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nur_src/config/EnvConfig.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/nur_src/config/EnvConfig.php b/nur_src/config/EnvConfig.php index 12e95cb..80de154 100644 --- a/nur_src/config/EnvConfig.php +++ b/nur_src/config/EnvConfig.php @@ -15,10 +15,9 @@ use Throwable; * profil par défaut est dépendant de l'implémentation de IConfigManager * utilisée. Dans l'implémentation actuelle, 'ALL' est le profil par défaut. * - PKEY est le chemin de clé dans lequel les caractères '.' sont remplacés - * par '__' et '-' par '_' (celà signifie qu'il n'est pas possible de définir - * un chemin de clé qui contient le caractère '_') + * par '__' * - * par exemple, la valeur dbs.my-auth.type du profil par défaut est pris dans + * par exemple, la valeur dbs.my_auth.type du profil par défaut est pris dans * la variable 'CONFIG_ALL_dbs__my_auth__type'. pour le profil prod c'est la * variable 'CONFIG_prod_dbs__my_auth__type' * @@ -51,7 +50,9 @@ class EnvConfig extends DynConfig { $profile = substr($name, 0, $i); $name = substr($name, $i + 1); $pkey = str_replace("__", ".", $name); - $pkey = str_replace("_", "-", $pkey); + #XXX désactiver parce que les configurations sont plus généralement avec + # le caractères '_', par le caractères '-' + //$pkey = str_replace("_", "-", $pkey); return [$pkey, $profile]; } From 6ba0a16e84007a513985541d07f5ae5078d63515 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 17 Mar 2025 17:20:02 +0400 Subject: [PATCH 8/9] Init changelog & version 0.4.1p74 --- CHANGES.md | 4 ++++ VERSION.txt | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 1eef20e..6055589 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,7 @@ +## Release 0.4.1p74 du 17/03/2025-17:19 + +* `56fda96` changer le type de variables gérées par EnvConfig + ## Release 0.4.0p82 du 14/03/2025-15:46 ## Release 0.4.0p74 du 14/03/2025-15:44 diff --git a/VERSION.txt b/VERSION.txt index 1d0ba9e..267577d 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -1 +1 @@ -0.4.0 +0.4.1 From 3994855c7e398e9deea4dcbb37dc5c6d5ea96228 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 17 Mar 2025 17:20:07 +0400 Subject: [PATCH 9/9] deps de dist --- composer.json | 18 +++-------------- composer.lock | 54 +++++++++++++++++++++------------------------------ 2 files changed, 25 insertions(+), 47 deletions(-) diff --git a/composer.json b/composer.json index dcc65a0..7ac8fb8 100644 --- a/composer.json +++ b/composer.json @@ -3,18 +3,6 @@ "type": "library", "description": "espace de maturation pour les librairies", "repositories": [ - { - "type": "path", - "url": "../nulib" - }, - { - "type": "path", - "url": "../nulib-spout" - }, - { - "type": "path", - "url": "../nulib-phpss" - }, { "type": "composer", "url": "https://repos.univ-reunion.fr/composer" @@ -30,9 +18,9 @@ "php": "^7.4" }, "require-dev": { - "nulib/php": "^7.4-dev", - "nulib/spout": "^7.4-dev", - "nulib/phpss": "^7.4-dev", + "nulib/php": "^0.4.0p74", + "nulib/spout": "^0.4.0p74", + "nulib/phpss": "^0.4.0p74", "nulib/tests": "^7.4", "ext-posix": "*", "ext-pcntl": "*", diff --git a/composer.lock b/composer.lock index ee57541..dd1223e 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "0b1e015d12aecf1cdfbdc6a702d83d25", + "content-hash": "85c16d446d9a6899358782f7520bf3f6", "packages": [], "packages-dev": [ { @@ -585,11 +585,11 @@ }, { "name": "nulib/php", - "version": "dev-dev74", - "dist": { - "type": "path", - "url": "../nulib", - "reference": "927915093af5196099ae26645c07e90ddf1b2330" + "version": "0.4.0p74", + "source": { + "type": "git", + "url": "https://git.univ-reunion.fr/sda-php/nulib.git", + "reference": "559feda663fc99f8baee2ba32f164b19bdd01927" }, "require": { "ext-json": "*", @@ -627,20 +627,18 @@ } ], "description": "fonctions et classes essentielles", - "transport-options": { - "relative": true - } + "time": "2025-03-14T11:23:41+00:00" }, { "name": "nulib/phpss", - "version": "dev-dev74", - "dist": { - "type": "path", - "url": "../nulib-phpss", - "reference": "9e4f41e38deef10993d859202988567db9d4fada" + "version": "0.4.0p74", + "source": { + "type": "git", + "url": "https://git.univ-reunion.fr/sda-php/nulib-phpss.git", + "reference": "1d8a88039f17242c72ff20cd01538b3fce8f8692" }, "require": { - "nulib/php": "^7.4-dev", + "nulib/php": "^0.4.0p74", "php": "^7.4", "phpoffice/phpspreadsheet": "^1.0" }, @@ -671,17 +669,15 @@ } ], "description": "wrapper pour phpoffice/phpspreadsheet", - "transport-options": { - "relative": true - } + "time": "2025-03-14T11:28:01+00:00" }, { "name": "nulib/spout", - "version": "dev-dev74", - "dist": { - "type": "path", - "url": "../nulib-spout", - "reference": "65c74a1db6dda718aa20970ede3dfa4b4d32c791" + "version": "0.4.0p74", + "source": { + "type": "git", + "url": "https://git.univ-reunion.fr/sda-php/nulib-spout.git", + "reference": "b5836e61961838c7f6d6735cdb671d47e05315e0" }, "require": { "ext-dom": "*", @@ -689,7 +685,7 @@ "ext-libxml": "*", "ext-xmlreader": "*", "ext-zip": "*", - "nulib/php": "^7.4-dev", + "nulib/php": "^0.4.0p74", "php": "^7.4" }, "replace": { @@ -727,9 +723,7 @@ } ], "description": "wrapper pour openspout/openspout", - "transport-options": { - "relative": true - } + "time": "2025-03-14T11:36:53+00:00" }, { "name": "nulib/tests", @@ -2943,11 +2937,7 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": { - "nulib/php": 20, - "nulib/spout": 20, - "nulib/phpss": 20 - }, + "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": {