prevent self-referential types in generated modules

This commit is contained in:
Bryton Hall 2022-08-28 01:52:29 -04:00
parent 8fec3d8f9e
commit 6dfa8e81c7
7 changed files with 44 additions and 38 deletions

View file

@ -138,7 +138,10 @@ with lib; let
type = requiredOrNot (mapType swagger.definitions.${refDefinition property}); type = requiredOrNot (mapType swagger.definitions.${refDefinition property});
} }
else { else {
type = requiredOrNot (submoduleOf definitions (refDefinition property)); type =
if (refDefinition property) == _name
then types.unspecified # do not allow self-referential values
else requiredOrNot (submoduleOf definitions (refDefinition property));
} }
# if property has an array type # if property has an array type
else if property.type == "array" else if property.type == "array"
@ -165,7 +168,10 @@ with lib; let
} }
# in other case it's a simple list # in other case it's a simple list
else { else {
type = requiredOrNot (types.listOf (submoduleOf definitions (refDefinition property.items))); type =
if (refDefinition property.items) == _name
then types.unspecified # do not allow self-referential values
else requiredOrNot (types.listOf (submoduleOf definitions (refDefinition property.items)));
} }
# in other case it only references a simple type # in other case it only references a simple type
else { else {

View file

@ -16603,11 +16603,11 @@ let
}; };
"allOf" = mkOption { "allOf" = mkOption {
description = ""; description = "";
type = (types.nullOr (types.listOf (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaProps"))); type = types.unspecified;
}; };
"anyOf" = mkOption { "anyOf" = mkOption {
description = ""; description = "";
type = (types.nullOr (types.listOf (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaProps"))); type = types.unspecified;
}; };
"default" = mkOption { "default" = mkOption {
description = "default is a default value for undefined object fields. Defaulting is a beta feature under the CustomResourceDefaulting feature gate. Defaulting requires spec.preserveUnknownFields to be false."; description = "default is a default value for undefined object fields. Defaulting is a beta feature under the CustomResourceDefaulting feature gate. Defaulting requires spec.preserveUnknownFields to be false.";
@ -16695,7 +16695,7 @@ let
}; };
"not" = mkOption { "not" = mkOption {
description = ""; description = "";
type = (types.nullOr (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaProps")); type = types.unspecified;
}; };
"nullable" = mkOption { "nullable" = mkOption {
description = ""; description = "";
@ -16703,7 +16703,7 @@ let
}; };
"oneOf" = mkOption { "oneOf" = mkOption {
description = ""; description = "";
type = (types.nullOr (types.listOf (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaProps"))); type = types.unspecified;
}; };
"pattern" = mkOption { "pattern" = mkOption {
description = ""; description = "";
@ -17307,11 +17307,11 @@ let
}; };
"allOf" = mkOption { "allOf" = mkOption {
description = ""; description = "";
type = (types.nullOr (types.listOf (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps"))); type = types.unspecified;
}; };
"anyOf" = mkOption { "anyOf" = mkOption {
description = ""; description = "";
type = (types.nullOr (types.listOf (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps"))); type = types.unspecified;
}; };
"default" = mkOption { "default" = mkOption {
description = "default is a default value for undefined object fields. Defaulting is a beta feature under the CustomResourceDefaulting feature gate. CustomResourceDefinitions with defaults must be created using the v1 (or newer) CustomResourceDefinition API."; description = "default is a default value for undefined object fields. Defaulting is a beta feature under the CustomResourceDefaulting feature gate. CustomResourceDefinitions with defaults must be created using the v1 (or newer) CustomResourceDefinition API.";
@ -17399,7 +17399,7 @@ let
}; };
"not" = mkOption { "not" = mkOption {
description = ""; description = "";
type = (types.nullOr (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps")); type = types.unspecified;
}; };
"nullable" = mkOption { "nullable" = mkOption {
description = ""; description = "";
@ -17407,7 +17407,7 @@ let
}; };
"oneOf" = mkOption { "oneOf" = mkOption {
description = ""; description = "";
type = (types.nullOr (types.listOf (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps"))); type = types.unspecified;
}; };
"pattern" = mkOption { "pattern" = mkOption {
description = ""; description = "";

View file

@ -17511,11 +17511,11 @@ let
}; };
"allOf" = mkOption { "allOf" = mkOption {
description = ""; description = "";
type = (types.nullOr (types.listOf (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaProps"))); type = types.unspecified;
}; };
"anyOf" = mkOption { "anyOf" = mkOption {
description = ""; description = "";
type = (types.nullOr (types.listOf (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaProps"))); type = types.unspecified;
}; };
"default" = mkOption { "default" = mkOption {
description = "default is a default value for undefined object fields. Defaulting is a beta feature under the CustomResourceDefaulting feature gate. Defaulting requires spec.preserveUnknownFields to be false."; description = "default is a default value for undefined object fields. Defaulting is a beta feature under the CustomResourceDefaulting feature gate. Defaulting requires spec.preserveUnknownFields to be false.";
@ -17603,7 +17603,7 @@ let
}; };
"not" = mkOption { "not" = mkOption {
description = ""; description = "";
type = (types.nullOr (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaProps")); type = types.unspecified;
}; };
"nullable" = mkOption { "nullable" = mkOption {
description = ""; description = "";
@ -17611,7 +17611,7 @@ let
}; };
"oneOf" = mkOption { "oneOf" = mkOption {
description = ""; description = "";
type = (types.nullOr (types.listOf (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaProps"))); type = types.unspecified;
}; };
"pattern" = mkOption { "pattern" = mkOption {
description = ""; description = "";
@ -18215,11 +18215,11 @@ let
}; };
"allOf" = mkOption { "allOf" = mkOption {
description = ""; description = "";
type = (types.nullOr (types.listOf (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps"))); type = types.unspecified;
}; };
"anyOf" = mkOption { "anyOf" = mkOption {
description = ""; description = "";
type = (types.nullOr (types.listOf (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps"))); type = types.unspecified;
}; };
"default" = mkOption { "default" = mkOption {
description = "default is a default value for undefined object fields. Defaulting is a beta feature under the CustomResourceDefaulting feature gate. CustomResourceDefinitions with defaults must be created using the v1 (or newer) CustomResourceDefinition API."; description = "default is a default value for undefined object fields. Defaulting is a beta feature under the CustomResourceDefaulting feature gate. CustomResourceDefinitions with defaults must be created using the v1 (or newer) CustomResourceDefinition API.";
@ -18307,7 +18307,7 @@ let
}; };
"not" = mkOption { "not" = mkOption {
description = ""; description = "";
type = (types.nullOr (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps")); type = types.unspecified;
}; };
"nullable" = mkOption { "nullable" = mkOption {
description = ""; description = "";
@ -18315,7 +18315,7 @@ let
}; };
"oneOf" = mkOption { "oneOf" = mkOption {
description = ""; description = "";
type = (types.nullOr (types.listOf (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps"))); type = types.unspecified;
}; };
"pattern" = mkOption { "pattern" = mkOption {
description = ""; description = "";

View file

@ -17663,11 +17663,11 @@ let
}; };
"allOf" = mkOption { "allOf" = mkOption {
description = ""; description = "";
type = (types.nullOr (types.listOf (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaProps"))); type = types.unspecified;
}; };
"anyOf" = mkOption { "anyOf" = mkOption {
description = ""; description = "";
type = (types.nullOr (types.listOf (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaProps"))); type = types.unspecified;
}; };
"default" = mkOption { "default" = mkOption {
description = "default is a default value for undefined object fields. Defaulting is a beta feature under the CustomResourceDefaulting feature gate. Defaulting requires spec.preserveUnknownFields to be false."; description = "default is a default value for undefined object fields. Defaulting is a beta feature under the CustomResourceDefaulting feature gate. Defaulting requires spec.preserveUnknownFields to be false.";
@ -17755,7 +17755,7 @@ let
}; };
"not" = mkOption { "not" = mkOption {
description = ""; description = "";
type = (types.nullOr (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaProps")); type = types.unspecified;
}; };
"nullable" = mkOption { "nullable" = mkOption {
description = ""; description = "";
@ -17763,7 +17763,7 @@ let
}; };
"oneOf" = mkOption { "oneOf" = mkOption {
description = ""; description = "";
type = (types.nullOr (types.listOf (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaProps"))); type = types.unspecified;
}; };
"pattern" = mkOption { "pattern" = mkOption {
description = ""; description = "";
@ -18367,11 +18367,11 @@ let
}; };
"allOf" = mkOption { "allOf" = mkOption {
description = ""; description = "";
type = (types.nullOr (types.listOf (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps"))); type = types.unspecified;
}; };
"anyOf" = mkOption { "anyOf" = mkOption {
description = ""; description = "";
type = (types.nullOr (types.listOf (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps"))); type = types.unspecified;
}; };
"default" = mkOption { "default" = mkOption {
description = "default is a default value for undefined object fields. Defaulting is a beta feature under the CustomResourceDefaulting feature gate. CustomResourceDefinitions with defaults must be created using the v1 (or newer) CustomResourceDefinition API."; description = "default is a default value for undefined object fields. Defaulting is a beta feature under the CustomResourceDefaulting feature gate. CustomResourceDefinitions with defaults must be created using the v1 (or newer) CustomResourceDefinition API.";
@ -18459,7 +18459,7 @@ let
}; };
"not" = mkOption { "not" = mkOption {
description = ""; description = "";
type = (types.nullOr (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps")); type = types.unspecified;
}; };
"nullable" = mkOption { "nullable" = mkOption {
description = ""; description = "";
@ -18467,7 +18467,7 @@ let
}; };
"oneOf" = mkOption { "oneOf" = mkOption {
description = ""; description = "";
type = (types.nullOr (types.listOf (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps"))); type = types.unspecified;
}; };
"pattern" = mkOption { "pattern" = mkOption {
description = ""; description = "";

View file

@ -15162,11 +15162,11 @@ let
}; };
"allOf" = mkOption { "allOf" = mkOption {
description = ""; description = "";
type = (types.nullOr (types.listOf (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaProps"))); type = types.unspecified;
}; };
"anyOf" = mkOption { "anyOf" = mkOption {
description = ""; description = "";
type = (types.nullOr (types.listOf (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaProps"))); type = types.unspecified;
}; };
"default" = mkOption { "default" = mkOption {
description = "default is a default value for undefined object fields. Defaulting is a beta feature under the CustomResourceDefaulting feature gate. Defaulting requires spec.preserveUnknownFields to be false."; description = "default is a default value for undefined object fields. Defaulting is a beta feature under the CustomResourceDefaulting feature gate. Defaulting requires spec.preserveUnknownFields to be false.";
@ -15254,7 +15254,7 @@ let
}; };
"not" = mkOption { "not" = mkOption {
description = ""; description = "";
type = (types.nullOr (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaProps")); type = types.unspecified;
}; };
"nullable" = mkOption { "nullable" = mkOption {
description = ""; description = "";
@ -15262,7 +15262,7 @@ let
}; };
"oneOf" = mkOption { "oneOf" = mkOption {
description = ""; description = "";
type = (types.nullOr (types.listOf (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaProps"))); type = types.unspecified;
}; };
"pattern" = mkOption { "pattern" = mkOption {
description = ""; description = "";

View file

@ -15780,11 +15780,11 @@ let
}; };
"allOf" = mkOption { "allOf" = mkOption {
description = ""; description = "";
type = (types.nullOr (types.listOf (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaProps"))); type = types.unspecified;
}; };
"anyOf" = mkOption { "anyOf" = mkOption {
description = ""; description = "";
type = (types.nullOr (types.listOf (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaProps"))); type = types.unspecified;
}; };
"default" = mkOption { "default" = mkOption {
description = "default is a default value for undefined object fields. Defaulting is a beta feature under the CustomResourceDefaulting feature gate. Defaulting requires spec.preserveUnknownFields to be false."; description = "default is a default value for undefined object fields. Defaulting is a beta feature under the CustomResourceDefaulting feature gate. Defaulting requires spec.preserveUnknownFields to be false.";
@ -15872,7 +15872,7 @@ let
}; };
"not" = mkOption { "not" = mkOption {
description = ""; description = "";
type = (types.nullOr (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaProps")); type = types.unspecified;
}; };
"nullable" = mkOption { "nullable" = mkOption {
description = ""; description = "";
@ -15880,7 +15880,7 @@ let
}; };
"oneOf" = mkOption { "oneOf" = mkOption {
description = ""; description = "";
type = (types.nullOr (types.listOf (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaProps"))); type = types.unspecified;
}; };
"pattern" = mkOption { "pattern" = mkOption {
description = ""; description = "";

View file

@ -15705,11 +15705,11 @@ let
}; };
"allOf" = mkOption { "allOf" = mkOption {
description = ""; description = "";
type = (types.nullOr (types.listOf (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaProps"))); type = types.unspecified;
}; };
"anyOf" = mkOption { "anyOf" = mkOption {
description = ""; description = "";
type = (types.nullOr (types.listOf (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaProps"))); type = types.unspecified;
}; };
"default" = mkOption { "default" = mkOption {
description = "default is a default value for undefined object fields. Defaulting is a beta feature under the CustomResourceDefaulting feature gate. Defaulting requires spec.preserveUnknownFields to be false."; description = "default is a default value for undefined object fields. Defaulting is a beta feature under the CustomResourceDefaulting feature gate. Defaulting requires spec.preserveUnknownFields to be false.";
@ -15797,7 +15797,7 @@ let
}; };
"not" = mkOption { "not" = mkOption {
description = ""; description = "";
type = (types.nullOr (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaProps")); type = types.unspecified;
}; };
"nullable" = mkOption { "nullable" = mkOption {
description = ""; description = "";
@ -15805,7 +15805,7 @@ let
}; };
"oneOf" = mkOption { "oneOf" = mkOption {
description = ""; description = "";
type = (types.nullOr (types.listOf (submoduleOf "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaProps"))); type = types.unspecified;
}; };
"pattern" = mkOption { "pattern" = mkOption {
description = ""; description = "";