name); } if (is_string($value)) { if (Reflection::classOrInterfaceExists($value)) { return new ClassStringType([new NativeClassType($value)]); } if (str_contains($value, "'") && str_contains($value, '"')) { $value = "'" . str_replace("'", "\'", $value) . "'"; } elseif (str_contains($value, "'")) { $value = '"' . $value . '"'; } else { $value = "'" . $value . "'"; } return StringValueType::from($value); } if (is_array($value)) { $elements = []; foreach ($value as $key => $child) { $keyType = is_string($key) ? new StringValueType($key) : new IntegerValueType($key); $elements[$key] = new ShapedArrayElement($keyType, self::from($child)); } return new ShapedArrayType($elements); } throw new CannotBuildTypeFromValue($value); } }