123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- export default function stringifyValidator(validator, nodePrefix) {
- if (validator === undefined) {
- return "any";
- }
-
- if (validator.each) {
- return `Array<${stringifyValidator(validator.each, nodePrefix)}>`;
- }
-
- if (validator.chainOf) {
- return stringifyValidator(validator.chainOf[1], nodePrefix);
- }
-
- if (validator.oneOf) {
- return validator.oneOf.map(JSON.stringify).join(" | ");
- }
-
- if (validator.oneOfNodeTypes) {
- return validator.oneOfNodeTypes.map(_ => nodePrefix + _).join(" | ");
- }
-
- if (validator.oneOfNodeOrValueTypes) {
- return validator.oneOfNodeOrValueTypes
- .map(_ => {
- return isValueType(_) ? _ : nodePrefix + _;
- })
- .join(" | ");
- }
-
- if (validator.type) {
- return validator.type;
- }
-
- if (validator.shapeOf) {
- return (
- "{ " +
- Object.keys(validator.shapeOf)
- .map(shapeKey => {
- const propertyDefinition = validator.shapeOf[shapeKey];
- if (propertyDefinition.validate) {
- const isOptional =
- propertyDefinition.optional || propertyDefinition.default != null;
- return (
- shapeKey +
- (isOptional ? "?: " : ": ") +
- stringifyValidator(propertyDefinition.validate)
- );
- }
- return null;
- })
- .filter(Boolean)
- .join(", ") +
- " }"
- );
- }
-
- return ["any"];
- }
-
- /**
- * Heuristic to decide whether or not the given type is a value type (eg. "null")
- * or a Node type (eg. "Expression").
- */
- function isValueType(type) {
- return type.charAt(0).toLowerCase() === type.charAt(0);
- }
|