modifs.mineures sans commentaires

This commit is contained in:
Jephté Clain 2025-04-17 17:28:23 +04:00
parent c71cc032fb
commit 4353f482a4
7 changed files with 82 additions and 25 deletions

7
bin/json2yml.php Executable file
View File

@ -0,0 +1,7 @@
#!/usr/bin/php
<?php
require $_composer_autoload_path?? __DIR__.'/../vendor/autoload.php';
use nulib\tools\Json2yamlApp;
Json2yamlApp::run();

7
bin/yml2json.php Executable file
View File

@ -0,0 +1,7 @@
#!/usr/bin/php
<?php
require $_composer_autoload_path?? __DIR__.'/../vendor/autoload.php';
use nulib\tools\Yaml2jsonApp;
Yaml2jsonApp::run();

View File

@ -80,6 +80,8 @@
"bin": [ "bin": [
"bin/dumpser.php", "bin/dumpser.php",
"bin/csv2xlsx.php", "bin/csv2xlsx.php",
"bin/json2yml.php",
"bin/yml2json.php",
"nur_bin/compctl.php", "nur_bin/compctl.php",
"nur_bin/compdep.php", "nur_bin/compdep.php",
"nur_bin/datectl.php", "nur_bin/datectl.php",

View File

@ -1,8 +1,5 @@
# nulib\schema # nulib\schema
* l'ordre est `ensureAssoc [--> ensureKeys] [--> orderKeys]`
* si false, supprimer la clé du tableau sauf si ensureKeys
* pour AssocResult, les clés suivantes sont supportées: * pour AssocResult, les clés suivantes sont supportées:
* false pour la clé courante * false pour la clé courante
* null pour un résultat aggrégé * null pour un résultat aggrégé

View File

@ -102,19 +102,6 @@ class AssocWrapper extends Wrapper {
$result = $context->result; $result = $context->result;
if (!$result->valid) return $what; 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) { foreach ($context->keyWrappers as $keyWrapper) {
$keyWrapper->analyze($params); $keyWrapper->analyze($params);
if ($keyWrapper->isValid()) continue; if ($keyWrapper->isValid()) continue;
@ -129,11 +116,6 @@ class AssocWrapper extends Wrapper {
$result->addInvalidMessage($keyWrapper); $result->addInvalidMessage($keyWrapper);
} }
} }
if ($params["ensure_keys"] ?? $context->ensureKeys) {
$context->input->ensureKeys($defaults, $missings, $params);
} else {
$context->input->deleteMissings($missings, $params);
}
return $what; return $what;
} }
@ -143,10 +125,26 @@ class AssocWrapper extends Wrapper {
* @param AssocWrapper $wrapper * @param AssocWrapper $wrapper
*/ */
static function _normalize(WrapperContext $context, Wrapper $wrapper, ?array $params): bool { static function _normalize(WrapperContext $context, Wrapper $wrapper, ?array $params): bool {
$ensureOrder = $params["ensure_order"] ?? $context->ensureOrder; $schema = $context->schema;
if ($ensureOrder) { $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); $context->input->ensureOrder($keys, $params);
} }

View File

@ -0,0 +1,23 @@
<?php
namespace nulib\tools;
use nulib\app\cli\Application;
use nulib\ext\json;
use nulib\ext\yaml;
use nulib\os\path;
class Json2yamlApp extends Application {
private $args;
function main() {
$input = $this->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);
}
}

View File

@ -0,0 +1,23 @@
<?php
namespace nulib\tools;
use nulib\app\cli\Application;
use nulib\ext\json;
use nulib\ext\yaml;
use nulib\os\path;
class Yaml2jsonApp extends Application {
private $args;
function main() {
$input = $this->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);
}
}