feat(registry): validate unique addresses and routes

This commit is contained in:
2026-08-25 22:10:09 -04:00
parent f45aa44ead
commit 959a9f98ae
4 changed files with 109 additions and 57 deletions

View File

@@ -16,6 +16,7 @@ let
nameValuePair
removeSuffix
types
unique
;
assertionType = types.submodule {
@@ -36,6 +37,30 @@ let
};
};
validators = {
uniqueValue =
{
value,
message,
}:
entries:
let
values = map value entries;
in
[
{
assertion = builtins.length (unique values) == builtins.length values;
inherit message;
}
];
};
registryLib = lib // {
registry = (lib.registry or { }) // {
inherit validators;
};
};
registryDefinitionModule = {
options = {
type = mkOption {
@@ -76,7 +101,7 @@ let
mkRegistry = path:
let
evaluated = lib.evalModules {
specialArgs = { inherit lib; };
specialArgs.lib = registryLib;
modules = [
registryDefinitionModule
path
@@ -189,7 +214,7 @@ let
};
in
{
inherit definitions;
inherit definitions validators;
module = {
options.registry = mapAttrs (_name: registry: registryOption registry) definitions;