diff --git a/bin/json2yml.php b/bin/json2yml.php new file mode 100755 index 0000000..d417e90 --- /dev/null +++ b/bin/json2yml.php @@ -0,0 +1,7 @@ +#!/usr/bin/php + ensureKeys] [--> orderKeys]` -* si false, supprimer la clé du tableau sauf si ensureKeys - * pour AssocResult, les clés suivantes sont supportées: * false pour la clé courante * null pour un résultat aggrégé diff --git a/src/schema/_assoc/AssocWrapper.php b/src/schema/_assoc/AssocWrapper.php index 2b77804..0b8ff08 100644 --- a/src/schema/_assoc/AssocWrapper.php +++ b/src/schema/_assoc/AssocWrapper.php @@ -102,19 +102,6 @@ class AssocWrapper extends Wrapper { $result = $context->result; if (!$result->valid) return $what; - $schema = $context->schema; - $keys = $schema->getKeys(); - $defaults = []; - $missings = null; - foreach ($keys as $key) { - $type = $wrapper->getType($key); - $default = $schema->getSchema($key)->default; - if ($default === null) $default = $type->getNullValue(); - $defaults[$key] = $default; - $missing = $type->getMissingValue($valid); - if ($valid) $missings[$key] = $missing; - } - foreach ($context->keyWrappers as $keyWrapper) { $keyWrapper->analyze($params); if ($keyWrapper->isValid()) continue; @@ -129,11 +116,6 @@ class AssocWrapper extends Wrapper { $result->addInvalidMessage($keyWrapper); } } - if ($params["ensure_keys"] ?? $context->ensureKeys) { - $context->input->ensureKeys($defaults, $missings, $params); - } else { - $context->input->deleteMissings($missings, $params); - } return $what; } @@ -143,10 +125,26 @@ class AssocWrapper extends Wrapper { * @param AssocWrapper $wrapper */ static function _normalize(WrapperContext $context, Wrapper $wrapper, ?array $params): bool { - $ensureOrder = $params["ensure_order"] ?? $context->ensureOrder; - if ($ensureOrder) { - $schema = $context->schema; - $keys = $schema->getKeys(); + $schema = $context->schema; + $keys = $schema->getKeys(); + + $defaults = []; + $missings = null; + foreach ($keys as $key) { + $type = $wrapper->getType($key); + $default = $schema->getSchema($key)->default; + if ($default === null) $default = $type->getNullValue(); + $defaults[$key] = $default; + $missing = $type->getMissingValue($valid); + if ($valid) $missings[$key] = $missing; + } + if ($params["ensure_keys"] ?? $context->ensureKeys) { + $context->input->ensureKeys($defaults, $missings, $params); + } else { + $context->input->deleteMissings($missings, $params); + } + + if ($params["ensure_order"] ?? $context->ensureOrder) { $context->input->ensureOrder($keys, $params); } diff --git a/src/tools/Json2yamlApp.php b/src/tools/Json2yamlApp.php new file mode 100644 index 0000000..ba729c1 --- /dev/null +++ b/src/tools/Json2yamlApp.php @@ -0,0 +1,23 @@ +args[0] ?? null; + if ($input === null || $input === "-") { + $output = null; + } else { + $output = path::ensure_ext($input, ".yml", ".json"); + } + + $data = json::load($input); + yaml::dump($data, $output); + } +} \ No newline at end of file diff --git a/src/tools/Yaml2jsonApp.php b/src/tools/Yaml2jsonApp.php new file mode 100644 index 0000000..9eba6ea --- /dev/null +++ b/src/tools/Yaml2jsonApp.php @@ -0,0 +1,23 @@ +args[0] ?? null; + if ($input === null || $input === "-") { + $output = null; + } else { + $output = path::ensure_ext($input, ".json", [".yml", ".yaml"]); + } + + $data = yaml::load($input); + json::dump($data, $output); + } +} \ No newline at end of file