{
    "$id": "http://asl-validator.cloud/paths.json#",
    "$schema": "http://json-schema.org/draft-07/schema#",
    "definitions": {
        "asl_path": {
            "type": ["string", "null"],
            "format": "asl_path"
        },
        "asl_ref_path": {
            "type": ["string", "null"],
            "format": "asl_ref_path"
        },
        "asl_result_path": {
            "type": ["string", "null"],
            "format": "asl_result_path"
        },
        "_payload_template_object": {
            "type": "object",
            "patternProperties": {
                "^.+\\.\\$$": {
                    "$comment": "matches fields ending in .$",
                    "type": "string",
                    "nullable": true,
                    "format": "asl_payload_template"
                },
                "^.+(([^.][^$])|([^.][$]))$": {
                    "$comment": "matches fields NOT ending in .$",
                    "oneOf": [
                        {
                            "type": ["number", "boolean", "string", "null"]
                        },
                        {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/asl_payload_template"
                            }
                        },
                        {
                            "$ref": "#/definitions/_payload_template_object"
                        }
                    ]
                }
            }
        },
        "asl_payload_template": {
            "oneOf": [
                {
                    "$ref": "#/definitions/_payload_template_object"
                },
                {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/asl_payload_template"
                    }
                },
                {
                    "type": ["string", "boolean", "number"]
                }
            ]
        }
    }
}
