[System]
You are a helpful assistant that answers strictly in JSON. Here's the JSON schema you must adhere to:
<schema>
{"$schema":"http://json-schema.org/draft-07/schema","$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Configuring-your-actions","definitions":{"commonTypes":{"description":"Some of the reusable base types","definitions":{"charSet":{"description":"Standard character sets.","type":"string","enum":["ISO-8859-1","US-ASCII","UTF-16","UTF-16BE","UTF-16LE","UTF-8"],"additionalItems":false},"chronoUnit":{"description":"The chrono unit we want to use.","type":"string","enum":["NANOS","MICROS","MILLIS","SECONDS","MINUTES","HOURS","HALF_DAYS","DAYS","WEEKS","MONTHS","YEARS","DECADES","CENTURIES","MILLENNIA","ERAS","FOREVER"],"additionalItems":false},"httpHeaders":{"type":"object","description":"HTTP header map.","additionalProperties":{"type":"string"},"uniqueItems":true},"httpMethod":{"description":"Supported HTTP methods.","type":"string","enum":["GET","POST"],"additionalItems":false},"jsonPath":{"$comment":"https://github.com/json-path/JsonPath","description":"A JSON Path selecting one or more nodes of the parsed JSON document.","type":"string","pattern":"^[$@](((\\.|\\.\\.)([$_a-zA-Z]+[$a-zA-Z0-9\\-_]*|\\*))|\\[\\*]|\\[[0-9]+((, [0-9]+)*|:[0-9]+)]|\\['[$_a-zA-Z]+[$a-zA-Z0-9\\-_]*'(, '[$_a-zA-Z]+[$a-zA-Z0-9\\-_]*')*]|\\[\\?\\(.+\\)])*$"},"name":{"description":"A single JSON key name","type":"string","pattern":"^[$_a-zA-Z]+[$a-zA-Z0-9\\-_]*$"}}},"functionTypes":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-functions","description":"Definition of known function types","definitions":{"functionAbsoluteValue":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-functions#absolute-value-function","description":"Absolute value function","type":"object","properties":{"name":{"type":"string","const":"absoluteValue","description":"The name of the component."},"scale":{"type":"integer","description":"The number of digits we want to keep right of the decimal point."}},"required":["name","scale"],"additionalProperties":false},"functionAdd":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-functions#decimal-add-function","description":"Decimal add function","type":"object","properties":{"name":{"type":"string","const":"add","description":"The name of the component."},"operand":{"type":"number","description":"Second operand of the calculation."},"scale":{"type":"integer","description":"The number of digits we want to keep right of the decimal point."}},"required":["name","operand","scale"],"additionalProperties":false},"functionChangeCase":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-functions#change-case","description":"Change case","type":"object","properties":{"name":{"type":"string","const":"changeCase","description":"The name of the component."},"to":{"description":"Defines what is the desired case change operation we want to do.","type":"string","enum":["CAPITALIZED","UNCAPITALIZED","LOWER_CASE","UPPER_CASE"],"additionalItems":false}},"required":["name","to"],"additionalProperties":false},"functionCloneKey":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-functions#clone-key-function","description":"Clone key function","type":"object","properties":{"name":{"type":"string","const":"cloneKey","description":"The name of the component."},"from":{"allOf":[{"$ref":"#/definitions/commonTypes/definitions/name"},{"description":"The name of the key we need to duplicate."}]},"to":{"allOf":[{"$ref":"#/definitions/commonTypes/definitions/name"},{"description":"The name of the destination key."}]}},"required":["from","name","to"],"additionalProperties":false},"functionDivide":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-functions#decimal-divide-function","description":"Decimal divide function","type":"object","properties":{"name":{"type":"string","const":"divide","description":"The name of the component."},"operand":{"type":"number","description":"Second operand of the calculation."},"scale":{"type":"integer","description":"The number of digits we want to keep right of the decimal point."}},"required":["name","operand","scale"],"additionalProperties":false},"functionDividend":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-functions#decimal-dividend-function","description":"Decimal dividend function","type":"object","properties":{"name":{"type":"string","const":"dividend","description":"The name of the component."},"operand":{"type":"number","description":"First operand of the calculation."},"scale":{"type":"integer","description":"The number of digits we want to keep right of the decimal point."}},"required":["name","operand","scale"],"additionalProperties":false},"functionEpochMillisDateAdd":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-functions#epoch-millis-date-add-function","description":"Epoch millis date add function","type":"object","properties":{"name":{"type":"string","const":"epochMillisDateAdd","description":"The name of the component."},"amount":{"type":"integer","description":"The amount of time units we need to add to the date time."},"unit":{"allOf":[{"$ref":"#/definitions/commonTypes/definitions/chronoUnit"},{"description":"The time unit we want to use to interpret the amount."}]}},"required":["amount","name","unit"],"additionalProperties":false},"functionHttpResource":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-functions#http-resource-content-map-function","description":"HTTP resource content map function","type":"object","properties":{"name":{"type":"string","const":"httpResource","description":"The name of the component."},"uriFunction":{"allOf":[{"$ref":"#/definitions/functionTypes/definitions/stringObjectMapToStringFunctionType"},{"description":"The function that is calculating the request URI based on the input map."}]},"methodFunction":{"allOf":[{"$ref":"#/definitions/functionTypes/definitions/stringObjectMapToStringFunctionType"},{"description":"The function that is calculating the request method based on the input map."}]},"headerFunction":{"allOf":[{"$ref":"#/definitions/functionTypes/definitions/anyFunctionType"},{"description":"The function that is calculating the request headers based on the input map."}]},"uri":{"type":"string","description":"The default request URI as a fallback."},"httpMethod":{"allOf":[{"$ref":"#/definitions/commonTypes/definitions/httpMethod"},{"description":"The default request method as a fallback. Defaults to GET."}]},"httpHeaders":{"allOf":[{"$ref":"#/definitions/commonTypes/definitions/httpHeaders"},{"description":"The default request headers as a fallback."}]},"charset":{"allOf":[{"$ref":"#/definitions/commonTypes/definitions/charSet"},{"description":"The charset used to read the response. Defaults to UTF-8."}]}},"required":["name"],"minProperties":2,"additionalProperties":false},"functionHttpResourceByUri":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-functions#http-resource-by-uri-function","description":"HTTP resource by URI function","type":"object","properties":{"name":{"type":"string","const":"httpResourceByUri","description":"The name of the component."},"uriFunction":{"allOf":[{"$ref":"#/definitions/functionTypes/definitions/stringToStringFunctionType"},{"description":"The function that is calculating the request URI based on the input map."}]},"uri":{"type":"string","description":"The default request URI as a fallback."},"httpMethod":{"allOf":[{"$ref":"#/definitions/commonTypes/definitions/httpMethod"},{"description":"The default request method as a fallback. Defaults to GET."}]},"httpHeaders":{"allOf":[{"$ref":"#/definitions/commonTypes/definitions/httpHeaders"},{"description":"The default request headers as a fallback."}]},"charset":{"allOf":[{"$ref":"#/definitions/commonTypes/definitions/charSet"},{"description":"The charset used to read the response. Defaults to UTF-8."}]}},"required":["name"],"minProperties":2,"additionalProperties":false},"functionJsonParse":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-functions#json-parse-function","description":"JSON parse function","type":"object","properties":{"name":{"type":"string","const":"jsonParse","description":"The name of the component."}},"required":["name"],"additionalProperties":false},"functionMultiply":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-functions#decimal-multiply-function","description":"Decimal multiply function","type":"object","properties":{"name":{"type":"string","const":"multiply","description":"The name of the component."},"operand":{"type":"number","description":"Second operand of the calculation."},"scale":{"type":"integer","description":"The number of digits we want to keep right of the decimal point."}},"required":["name","operand","scale"],"additionalProperties":false},"functionRegex":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-functions#regex-replace-function","description":"RegEx replace function","type":"object","properties":{"name":{"type":"string","const":"regex","description":"The name of the component."},"pattern":{"type":"string","description":"A regex pattern that will be matched against the input, capturing certain named groups for later use."},"replacement":{"type":"string","description":"Defines how the captured groups should be used to piece together the output value using EL-like syntax."}},"required":["name","pattern","replacement"],"additionalProperties":false},"functionReplace":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-functions#literal-replace-function","description":"Literal replace function","type":"object","properties":{"name":{"type":"string","const":"replace","description":"The name of the component."},"find":{"type":"string","description":"A literal we need to find in the input String."},"replace":{"type":"string","description":"The replacement we need to use."}},"required":["find","name","replace"],"additionalProperties":false},"functionRoundDecimal":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-functions#round-decimal-function","description":"Round decimal function","type":"object","properties":{"name":{"type":"string","const":"roundDecimal","description":"The name of the component."},"scale":{"type":"integer","description":"The number of digits we want to keep right of the decimal point."}},"required":["name","scale"],"additionalProperties":false},"functionStringDateAdd":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-functions#string-date-add-function","description":"String date add function","type":"object","properties":{"name":{"type":"string","const":"stringDateAdd","description":"The name of the component."},"formatter":{"type":"string","description":"The format String we need to use for date time parsing. [See](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/format/DateTimeFormatter.html)"},"amount":{"type":"integer","description":"The amount of time units we need to add to the date time."},"unit":{"allOf":[{"$ref":"#/definitions/commonTypes/definitions/chronoUnit"},{"description":"The time unit we want to use to interpret the amount."}]}},"required":["amount","formatter","name","unit"],"additionalProperties":false},"functionSubtract":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-functions#decimal-subtract-function","description":"Decimal subtract function","type":"object","properties":{"name":{"type":"string","const":"subtract","description":"The name of the component."},"operand":{"type":"number","description":"Second operand of the calculation."},"scale":{"type":"integer","description":"The number of digits we want to keep right of the decimal point."}},"required":["name","operand","scale"],"additionalProperties":false},"functionSubtractFrom":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-functions#decimal-subtract-from-function","description":"Decimal subtract from function","type":"object","properties":{"name":{"type":"string","const":"subtractFrom","description":"The name of the component."},"operand":{"type":"number","description":"First operand of the calculation."},"scale":{"type":"integer","description":"The number of digits we want to keep right of the decimal point."}},"required":["name","operand","scale"],"additionalProperties":false},"stringToObjectFunctionType":{"allOf":[{"type":"object","properties":{"name":{"type":"string","enum":["changeCase","httpResourceByUri","jsonParse","regex","replace","stringDateAdd"],"additionalItems":false}},"required":["name"]},{"if":{"type":"object","properties":{"name":{"type":"string","const":"changeCase"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionChangeCase"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"httpResourceByUri"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionHttpResourceByUri"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"jsonParse"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionJsonParse"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"regex"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionRegex"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"replace"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionReplace"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"stringDateAdd"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionStringDateAdd"}}]},"stringToStringFunctionType":{"allOf":[{"type":"object","properties":{"name":{"type":"string","enum":["changeCase","httpResourceByUri","regex","replace","stringDateAdd"],"additionalItems":false}},"required":["name"]},{"if":{"type":"object","properties":{"name":{"type":"string","const":"changeCase"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionChangeCase"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"httpResourceByUri"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionHttpResourceByUri"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"regex"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionRegex"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"replace"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionReplace"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"stringDateAdd"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionStringDateAdd"}}]},"bigDecimalToBigDecimalFunctionType":{"allOf":[{"type":"object","properties":{"name":{"type":"string","enum":["absoluteValue","add","divide","dividend","epochMillisDateAdd","multiply","roundDecimal","subtract","subtractFrom"],"additionalItems":false}},"required":["name"]},{"if":{"type":"object","properties":{"name":{"type":"string","const":"absoluteValue"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionAbsoluteValue"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"add"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionAdd"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"divide"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionDivide"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"dividend"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionDividend"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"epochMillisDateAdd"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionEpochMillisDateAdd"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"multiply"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionMultiply"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"roundDecimal"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionRoundDecimal"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"subtract"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionSubtract"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"subtractFrom"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionSubtractFrom"}}]},"stringObjectMapToStringObjectMapFunctionType":{"allOf":[{"type":"object","properties":{"name":{"type":"string","enum":["cloneKey"],"additionalItems":false}},"required":["name"]},{"if":{"type":"object","properties":{"name":{"type":"string","const":"cloneKey"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionCloneKey"}}]},"stringObjectMapToStringFunctionType":{"allOf":[{"type":"object","properties":{"name":{"type":"string","enum":["httpResource"],"additionalItems":false}},"required":["name"]},{"if":{"type":"object","properties":{"name":{"type":"string","const":"httpResource"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionHttpResource"}}]},"anyFunctionType":{"allOf":[{"type":"object","properties":{"name":{"type":"string","enum":["absoluteValue","add","changeCase","cloneKey","divide","dividend","epochMillisDateAdd","httpResource","httpResourceByUri","jsonParse","multiply","regex","replace","roundDecimal","stringDateAdd","subtract","subtractFrom"],"additionalItems":false}},"required":["name"]},{"if":{"type":"object","properties":{"name":{"type":"string","const":"absoluteValue"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionAbsoluteValue"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"add"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionAdd"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"changeCase"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionChangeCase"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"cloneKey"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionCloneKey"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"divide"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionDivide"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"dividend"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionDividend"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"epochMillisDateAdd"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionEpochMillisDateAdd"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"httpResource"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionHttpResource"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"httpResourceByUri"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionHttpResourceByUri"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"jsonParse"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionJsonParse"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"multiply"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionMultiply"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"regex"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionRegex"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"replace"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionReplace"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"roundDecimal"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionRoundDecimal"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"stringDateAdd"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionStringDateAdd"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"subtract"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionSubtract"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"subtractFrom"}}},"then":{"$ref":"#/definitions/functionTypes/definitions/functionSubtractFrom"}}]}}},"predicateTypes":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-predicates","description":"Definition of known predicate types","definitions":{"predicateAllMatch":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-predicates#all-match-predicate","description":"All Match predicate","type":"object","properties":{"name":{"type":"string","const":"allMatch","description":"The name of the component."},"from":{"type":"array","items":{"$ref":"#/definitions/predicateTypes/definitions/anyPredicateType"},"minItems":1,"additionalItems":false}},"required":["from","name"],"additionalProperties":false},"predicateAnyMatch":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-predicates#any-match-predicate","description":"Any Match predicate","type":"object","properties":{"name":{"type":"string","const":"anyMatch","description":"The name of the component."},"from":{"type":"array","items":{"$ref":"#/definitions/predicateTypes/definitions/anyPredicateType"},"minItems":1,"additionalItems":false}},"required":["from","name"],"additionalProperties":false},"predicateAnyString":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-predicates#any-string-predicate","description":"Any String predicate","type":"object","properties":{"name":{"type":"string","const":"anyString","description":"The name of the component."}},"required":["name"],"additionalProperties":false},"predicateContainsKey":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-predicates#contains-key-predicate","description":"Contains key predicate","type":"object","properties":{"name":{"type":"string","const":"containsKey","description":"The name of the component."},"key":{"allOf":[{"$ref":"#/definitions/commonTypes/definitions/name"},{"description":"The name of the key we want to check."}]}},"required":["key","name"],"additionalProperties":false},"predicateEvalOn":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-predicates#eval-on-predicate","description":"Eval on predicate","type":"object","properties":{"name":{"type":"string","const":"evalOn","description":"The name of the component."},"childPath":{"description":"The desired navigation we want to perform relative to the Map/Object we operate on.","type":"string","pattern":"^([$_a-zA-Z]+[$a-zA-Z0-9\\-_]+)(.[$_a-zA-Z]+[$a-zA-Z0-9\\-_]+)*$"},"predicate":{"allOf":[{"$ref":"#/definitions/predicateTypes/definitions/anyPredicateType"},{"description":"The Predicate we need to evaluate after the navigation is done."}]}},"required":["childPath","name","predicate"],"additionalProperties":false},"predicateIsNull":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-predicates#is-null-predicate","description":"Is null predicate","type":"object","properties":{"name":{"type":"string","const":"isNull","description":"The name of the component."}},"required":["name"],"additionalProperties":false},"predicateNoneMatch":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-predicates#none-match-predicate","description":"None Match predicate","type":"object","properties":{"name":{"type":"string","const":"noneMatch","description":"The name of the component."},"from":{"type":"array","items":{"$ref":"#/definitions/predicateTypes/definitions/anyPredicateType"},"minItems":1,"additionalItems":false}},"required":["from","name"],"additionalProperties":false},"predicateNotNull":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-predicates#not-null-predicate","description":"Not null predicate","type":"object","properties":{"name":{"type":"string","const":"notNull","description":"The name of the component."}},"required":["name"],"additionalProperties":false},"predicateRegex":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-predicates#regex-predicate","description":"RegEx predicate","type":"object","properties":{"name":{"type":"string","const":"regex","description":"The name of the component."},"pattern":{"type":"string","description":"The regular expression we want to match."}},"required":["name","pattern"],"additionalProperties":false},"predicateSpEL":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-predicates#spel-predicate","description":"SpEL predicate","type":"object","properties":{"name":{"type":"string","const":"SpEL","description":"The name of the component."},"expression":{"type":"string","description":"The SpEL expression we want to match."}},"required":["expression","name"],"additionalProperties":false},"stringPredicateType":{"allOf":[{"type":"object","properties":{"name":{"type":"string","enum":["SpEL","allMatch","anyMatch","anyString","isNull","noneMatch","notNull","regex"],"additionalItems":false}},"required":["name"]},{"if":{"type":"object","properties":{"name":{"type":"string","const":"anyString"}}},"then":{"$ref":"#/definitions/predicateTypes/definitions/predicateAnyString"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"regex"}}},"then":{"$ref":"#/definitions/predicateTypes/definitions/predicateRegex"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"allMatch"}}},"then":{"$ref":"#/definitions/predicateTypes/definitions/predicateAllMatch"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"anyMatch"}}},"then":{"$ref":"#/definitions/predicateTypes/definitions/predicateAnyMatch"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"isNull"}}},"then":{"$ref":"#/definitions/predicateTypes/definitions/predicateIsNull"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"noneMatch"}}},"then":{"$ref":"#/definitions/predicateTypes/definitions/predicateNoneMatch"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"notNull"}}},"then":{"$ref":"#/definitions/predicateTypes/definitions/predicateNotNull"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"SpEL"}}},"then":{"$ref":"#/definitions/predicateTypes/definitions/predicateSpEL"}}]},"stringObjectMapPredicateType":{"allOf":[{"type":"object","properties":{"name":{"type":"string","enum":["SpEL","allMatch","anyMatch","containsKey","evalOn","isNull","noneMatch","notNull"],"additionalItems":false}},"required":["name"]},{"if":{"type":"object","properties":{"name":{"type":"string","const":"containsKey"}}},"then":{"$ref":"#/definitions/predicateTypes/definitions/predicateContainsKey"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"evalOn"}}},"then":{"$ref":"#/definitions/predicateTypes/definitions/predicateEvalOn"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"allMatch"}}},"then":{"$ref":"#/definitions/predicateTypes/definitions/predicateAllMatch"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"anyMatch"}}},"then":{"$ref":"#/definitions/predicateTypes/definitions/predicateAnyMatch"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"isNull"}}},"then":{"$ref":"#/definitions/predicateTypes/definitions/predicateIsNull"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"noneMatch"}}},"then":{"$ref":"#/definitions/predicateTypes/definitions/predicateNoneMatch"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"notNull"}}},"then":{"$ref":"#/definitions/predicateTypes/definitions/predicateNotNull"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"SpEL"}}},"then":{"$ref":"#/definitions/predicateTypes/definitions/predicateSpEL"}}]},"anyPredicateType":{"allOf":[{"type":"object","properties":{"name":{"type":"string","enum":["SpEL","allMatch","anyMatch","anyString","containsKey","evalOn","isNull","noneMatch","notNull","regex"],"additionalItems":false}},"required":["name"]},{"if":{"type":"object","properties":{"name":{"type":"string","const":"allMatch"}}},"then":{"$ref":"#/definitions/predicateTypes/definitions/predicateAllMatch"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"anyMatch"}}},"then":{"$ref":"#/definitions/predicateTypes/definitions/predicateAnyMatch"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"anyString"}}},"then":{"$ref":"#/definitions/predicateTypes/definitions/predicateAnyString"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"containsKey"}}},"then":{"$ref":"#/definitions/predicateTypes/definitions/predicateContainsKey"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"evalOn"}}},"then":{"$ref":"#/definitions/predicateTypes/definitions/predicateEvalOn"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"isNull"}}},"then":{"$ref":"#/definitions/predicateTypes/definitions/predicateIsNull"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"noneMatch"}}},"then":{"$ref":"#/definitions/predicateTypes/definitions/predicateNoneMatch"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"notNull"}}},"then":{"$ref":"#/definitions/predicateTypes/definitions/predicateNotNull"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"regex"}}},"then":{"$ref":"#/definitions/predicateTypes/definitions/predicateRegex"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"SpEL"}}},"then":{"$ref":"#/definitions/predicateTypes/definitions/predicateSpEL"}}]}}},"supplierTypes":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-suppliers","description":"Definition of known supplier types","definitions":{"supplierConverting":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-suppliers#converting-supplier","description":"Converting supplier","type":"object","properties":{"name":{"type":"string","const":"converting","description":"The name of the component."},"stringSource":{"allOf":[{"$ref":"#/definitions/supplierTypes/definitions/anySupplierType"},{"description":"The supplier of the raw String data we will use as input."}]},"converter":{"allOf":[{"$ref":"#/definitions/functionTypes/definitions/stringToObjectFunctionType"},{"description":"The function that will convert the string data."}]}},"required":["converter","name","stringSource"],"additionalProperties":false},"supplierEpochMillisRelativeDate":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-suppliers#epoch-millis-relative-date-supplier","description":"Epoch Millis Relative Date supplier","type":"object","properties":{"name":{"type":"string","const":"epochMillisRelativeDate","description":"The name of the component."},"amount":{"type":"integer","description":"The amount of time units we need to add to the current date time."},"unit":{"allOf":[{"$ref":"#/definitions/commonTypes/definitions/chronoUnit"},{"description":"The time unit we want to use to interpret the amount."}]},"relativeTo":{"type":"integer","description":"The value we want to be relative to (in case it is not the current time)."}},"required":["amount","name","unit"],"additionalProperties":false},"supplierFile":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-suppliers#file-content-supplier","description":"File content supplier","type":"object","properties":{"name":{"type":"string","const":"file","description":"The name of the component."},"path":{"type":"string","description":"The path of the file we want to use as input."},"charset":{"allOf":[{"$ref":"#/definitions/commonTypes/definitions/charSet"},{"description":"The charset used for reading the contents of the file. Defaults to UTF-8."}]}},"required":["name","path"],"additionalProperties":false},"supplierHttpResource":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-suppliers#http-resource-content-supplier","description":"HTTP resource content supplier","type":"object","properties":{"name":{"type":"string","const":"httpResource","description":"The name of the component."},"uri":{"type":"string","description":"The URI we want to send the request to."},"httpMethod":{"allOf":[{"$ref":"#/definitions/commonTypes/definitions/httpMethod"},{"description":"The HTTP request method we want to use. Defaults to GET."}]},"httpHeaders":{"allOf":[{"$ref":"#/definitions/commonTypes/definitions/httpHeaders"},{"description":"HTTP headers we want to send with our request."}]},"charset":{"allOf":[{"$ref":"#/definitions/commonTypes/definitions/charSet"},{"description":"The charset used for reading the contents of the response. Defaults to UTF-8."}]}},"required":["name","uri"],"additionalProperties":false},"supplierJsonSchema":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-suppliers#json-schema-supplier","description":"JSON schema supplier","type":"object","properties":{"name":{"type":"string","const":"jsonSchema","description":"The name of the component."},"source":{"allOf":[{"$ref":"#/definitions/supplierTypes/definitions/anySupplierType"},{"description":"The supplier of the String of the JSON Schema which we will use as input."}]}},"required":["name","source"],"additionalProperties":false},"supplierRelativeStringDate":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-suppliers#relative-string-date-supplier","description":"Relative String Date supplier","type":"object","properties":{"name":{"type":"string","const":"relativeStringDate","description":"The name of the component."},"formatter":{"type":"string","description":"The format String we need to use for date time parsing. [See](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/format/DateTimeFormatter.html)"},"amount":{"type":"integer","description":"The amount of time units we need to add to the current date time."},"unit":{"allOf":[{"$ref":"#/definitions/commonTypes/definitions/chronoUnit"},{"description":"The time unit we want to use to interpret the amount."}]},"relativeTo":{"type":"string","description":"The value we want to be relative to (in case it is not the current time)."}},"required":["amount","formatter","name","unit"],"additionalProperties":false},"supplierSchemaStore":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-suppliers#schemastore-schema-supplier","description":"SchemaStore schema supplier","type":"object","properties":{"name":{"type":"string","const":"schemaStore","description":"The name of the component."},"schemaName":{"type":"string","description":"The name of the JSON schema as found in the SchemaStore.org catalog."}},"required":["name","schemaName"],"additionalProperties":false},"supplierStaticBoolean":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-suppliers#static-boolean-supplier","description":"Static Boolean supplier","type":"object","properties":{"name":{"type":"string","const":"staticBoolean","description":"The name of the component."},"value":{"type":"boolean","description":"The static value that must be returned each time the supplier is called."}},"required":["name","value"],"additionalProperties":false},"supplierStaticDecimal":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-suppliers#static-bigdecimal-supplier","description":"Static BigDecimal supplier","type":"object","properties":{"name":{"type":"string","const":"staticDecimal","description":"The name of the component."},"value":{"type":"number","description":"The static value that must be returned each time the supplier is called."}},"required":["name","value"],"additionalProperties":false},"supplierStaticInteger":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-suppliers#static-biginteger-supplier","description":"Static BigInteger supplier","type":"object","properties":{"name":{"type":"string","const":"staticInteger","description":"The name of the component."},"value":{"type":"integer","description":"The static value that must be returned each time the supplier is called."}},"required":["name","value"],"additionalProperties":false},"supplierStaticJson":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-suppliers#static-json-supplier","description":"Static JSON supplier","type":"object","properties":{"name":{"type":"string","const":"staticJson","description":"The name of the component."},"value":{"type":"string","description":"The static JSON value we want to supply every time our supplier is called."}},"required":["name","value"],"additionalProperties":false},"supplierStaticString":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-suppliers#static-string-supplier","description":"Static String supplier","type":"object","properties":{"name":{"type":"string","const":"staticString","description":"The name of the component."},"value":{"type":"string","description":"The static value that must be returned each time the supplier is called."}},"required":["name","value"],"additionalProperties":false},"jsonSchemaSupplierType":{"allOf":[{"type":"object","properties":{"name":{"type":"string","enum":["jsonSchema"],"additionalItems":false}},"required":["name"]},{"if":{"type":"object","properties":{"name":{"type":"string","const":"jsonSchema"}}},"then":{"$ref":"#/definitions/supplierTypes/definitions/supplierJsonSchema"}}]},"stringSupplierType":{"allOf":[{"type":"object","properties":{"name":{"type":"string","enum":["file","httpResource","relativeStringDate","schemaStore","staticString"],"additionalItems":false}},"required":["name"]},{"if":{"type":"object","properties":{"name":{"type":"string","const":"file"}}},"then":{"$ref":"#/definitions/supplierTypes/definitions/supplierFile"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"httpResource"}}},"then":{"$ref":"#/definitions/supplierTypes/definitions/supplierHttpResource"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"relativeStringDate"}}},"then":{"$ref":"#/definitions/supplierTypes/definitions/supplierRelativeStringDate"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"schemaStore"}}},"then":{"$ref":"#/definitions/supplierTypes/definitions/supplierSchemaStore"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"staticString"}}},"then":{"$ref":"#/definitions/supplierTypes/definitions/supplierStaticString"}}]},"bigDecimalSupplierType":{"allOf":[{"type":"object","properties":{"name":{"type":"string","enum":["staticDecimal"],"additionalItems":false}},"required":["name"]},{"if":{"type":"object","properties":{"name":{"type":"string","const":"staticDecimal"}}},"then":{"$ref":"#/definitions/supplierTypes/definitions/supplierStaticDecimal"}}]},"anySupplierType":{"allOf":[{"type":"object","properties":{"name":{"type":"string","enum":["converting","epochMillisRelativeDate","file","httpResource","jsonSchema","relativeStringDate","schemaStore","staticBoolean","staticDecimal","staticInteger","staticJson","staticString"],"additionalItems":false}},"required":["name"]},{"if":{"type":"object","properties":{"name":{"type":"string","const":"converting"}}},"then":{"$ref":"#/definitions/supplierTypes/definitions/supplierConverting"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"epochMillisRelativeDate"}}},"then":{"$ref":"#/definitions/supplierTypes/definitions/supplierEpochMillisRelativeDate"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"file"}}},"then":{"$ref":"#/definitions/supplierTypes/definitions/supplierFile"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"httpResource"}}},"then":{"$ref":"#/definitions/supplierTypes/definitions/supplierHttpResource"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"jsonSchema"}}},"then":{"$ref":"#/definitions/supplierTypes/definitions/supplierJsonSchema"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"relativeStringDate"}}},"then":{"$ref":"#/definitions/supplierTypes/definitions/supplierRelativeStringDate"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"schemaStore"}}},"then":{"$ref":"#/definitions/supplierTypes/definitions/supplierSchemaStore"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"staticBoolean"}}},"then":{"$ref":"#/definitions/supplierTypes/definitions/supplierStaticBoolean"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"staticDecimal"}}},"then":{"$ref":"#/definitions/supplierTypes/definitions/supplierStaticDecimal"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"staticInteger"}}},"then":{"$ref":"#/definitions/supplierTypes/definitions/supplierStaticInteger"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"staticJson"}}},"then":{"$ref":"#/definitions/supplierTypes/definitions/supplierStaticJson"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"staticString"}}},"then":{"$ref":"#/definitions/supplierTypes/definitions/supplierStaticString"}}]}}},"ruleTypes":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-rules","description":"Definition of known rule types","definitions":{"ruleAdd":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-rules#add","description":"Add","type":"object","properties":{"name":{"type":"string","const":"add","description":"The name of the component."},"path":{"$ref":"#/definitions/commonTypes/definitions/jsonPath"},"params":{"description":"Additional parameters of the rule.","type":"object","properties":{"key":{"allOf":[{"$ref":"#/definitions/supplierTypes/definitions/anySupplierType"},{"description":"The supplier that will define the key of the new node."}]},"value":{"allOf":[{"$ref":"#/definitions/supplierTypes/definitions/anySupplierType"},{"description":"The supplier that will define the value assigned to the new node identified by the key."}]}},"required":["key","value"],"additionalProperties":false}},"required":["name","params","path"],"additionalProperties":false},"ruleCalculate":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-rules#calculate","description":"Calculate","type":"object","properties":{"name":{"type":"string","const":"calculate","description":"The name of the component."},"path":{"$ref":"#/definitions/commonTypes/definitions/jsonPath"},"params":{"description":"Additional parameters of the rule.","type":"object","properties":{"predicate":{"allOf":[{"$ref":"#/definitions/predicateTypes/definitions/anyPredicateType"},{"description":"The predicate that will determine whether we should apply the function."}]},"numberFunction":{"allOf":[{"$ref":"#/definitions/functionTypes/definitions/bigDecimalToBigDecimalFunctionType"},{"description":"The function that will tell the rule what kind of calculation needs to be done."}]}},"required":["numberFunction"],"additionalProperties":false}},"required":["name","params","path"],"additionalProperties":false},"ruleCopy":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-rules#copy","description":"Copy","type":"object","properties":{"name":{"type":"string","const":"copy","description":"The name of the component."},"path":{"$ref":"#/definitions/commonTypes/definitions/jsonPath"},"params":{"description":"Additional parameters of the rule.","type":"object","properties":{"key":{"allOf":[{"$ref":"#/definitions/supplierTypes/definitions/anySupplierType"},{"description":"The supplier that will define the key we want to copy."}]},"to":{"type":"object","properties":{"value":{"allOf":[{"$ref":"#/definitions/commonTypes/definitions/jsonPath"},{"description":"The destination path where this rule will attempt to create the copied node."}]}},"required":["value"],"additionalProperties":false}},"required":["key","to"],"additionalProperties":false}},"required":["name","params","path"],"additionalProperties":false},"ruleDelete":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-rules#delete","description":"Delete","type":"object","properties":{"name":{"type":"string","const":"delete","description":"The name of the component."},"path":{"$ref":"#/definitions/commonTypes/definitions/jsonPath"}},"required":["name","path"],"additionalProperties":false},"ruleDeleteFrom":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-rules#delete-from","description":"Delete from","type":"object","properties":{"name":{"type":"string","const":"deleteFrom","description":"The name of the component."},"path":{"$ref":"#/definitions/commonTypes/definitions/jsonPath"},"params":{"description":"Additional parameters of the rule.","type":"object","properties":{"predicate":{"allOf":[{"$ref":"#/definitions/predicateTypes/definitions/anyPredicateType"},{"description":"Determines whether any deletion should be performed for the matching node"}]},"keepKey":{"allOf":[{"$ref":"#/definitions/predicateTypes/definitions/anyPredicateType"},{"description":"The predicate that will be used to test whether a key should be kept, keeping only the matching keys."}]},"deleteKey":{"allOf":[{"$ref":"#/definitions/predicateTypes/definitions/anyPredicateType"},{"description":"The predicate that will be used to test whether a key should be deleted, deleting all the matching keys."}]},"keepValue":{"allOf":[{"$ref":"#/definitions/predicateTypes/definitions/anyPredicateType"},{"description":"The predicate that will be used to test whether a key should be kept, keeping only the matching keys."}]},"deleteValue":{"allOf":[{"$ref":"#/definitions/predicateTypes/definitions/anyPredicateType"},{"description":"The predicate that will be used to test whether an entry should be deleted, deleting all of them with matching values."}]}},"minProperties":1,"maxProperties":5,"additionalProperties":false}},"required":["name","params","path"],"additionalProperties":false},"ruleRename":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-rules#rename","description":"Rename","type":"object","properties":{"name":{"type":"string","const":"rename","description":"The name of the component."},"path":{"$ref":"#/definitions/commonTypes/definitions/jsonPath"},"params":{"description":"Additional parameters of the rule.","type":"object","properties":{"oldKey":{"allOf":[{"$ref":"#/definitions/supplierTypes/definitions/anySupplierType"},{"description":"Provides the name of the key we want to rename under the node matching the `path` parameter at the time of evaluation."}]},"newKey":{"allOf":[{"$ref":"#/definitions/supplierTypes/definitions/anySupplierType"},{"description":"Provides the new name we want to use after the child node was renamed."}]}},"required":["newKey","oldKey"],"additionalProperties":false}},"required":["name","params","path"],"additionalProperties":false},"ruleReplace":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-rules#replace","description":"Replace","type":"object","properties":{"name":{"type":"string","const":"replace","description":"The name of the component."},"path":{"$ref":"#/definitions/commonTypes/definitions/jsonPath"},"params":{"description":"Additional parameters of the rule.","type":"object","properties":{"predicate":{"allOf":[{"$ref":"#/definitions/predicateTypes/definitions/anyPredicateType"},{"description":"Adds an opportunity to filter by value before we apply the replace `stringFunction`."}]},"stringFunction":{"allOf":[{"$ref":"#/definitions/functionTypes/definitions/stringToStringFunctionType"},{"description":"Defines how the existing value needs to change during the operation."}]}},"required":["stringFunction"],"additionalProperties":false}},"required":["name","params","path"],"additionalProperties":false},"ruleReplaceMap":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-rules#replace-map","description":"Replace map","type":"object","properties":{"name":{"type":"string","const":"replaceMap","description":"The name of the component."},"path":{"$ref":"#/definitions/commonTypes/definitions/jsonPath"},"params":{"description":"Additional parameters of the rule.","type":"object","properties":{"predicate":{"allOf":[{"$ref":"#/definitions/predicateTypes/definitions/anyPredicateType"},{"description":"The predicate that will determine whether we need to run the rule on the matching path."}]},"mapFunction":{"allOf":[{"$ref":"#/definitions/functionTypes/definitions/stringObjectMapToStringObjectMapFunctionType"},{"description":"The function that defines the transformation which needs to be done on the selected map/object."}]}},"required":["mapFunction"],"additionalProperties":false}},"required":["name","params","path"],"additionalProperties":false},"ruleValidate":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Built-in-rules#json-schema-validate","description":"JSON Schema validate","type":"object","properties":{"name":{"type":"string","const":"validate","description":"The name of the component."},"path":{"type":"string","const":"$","description":"Must be the root JSON Path as the validator cannot work on sub-schema."},"params":{"description":"Additional parameters of the rule.","type":"object","properties":{"schema":{"allOf":[{"$ref":"#/definitions/supplierTypes/definitions/anySupplierType"},{"description":"The supplier providing the schema we will use for validation."}]},"onFailure":{"type":"object","properties":{"transformation":{"description":"Defines how the transformation should handle a validation failure.","type":"string","enum":["ABORT","SKIP_REST","CONTINUE"],"additionalItems":false},"violation":{"description":"Defines how the rule should document/report the violations.","type":"string","enum":["LOG_ONLY","COMMENT_JSON","IGNORE"],"additionalItems":false}},"required":["transformation","violation"],"additionalProperties":false}},"required":["onFailure","schema"],"additionalProperties":false}},"required":["name","params","path"],"additionalProperties":false},"anyRuleType":{"allOf":[{"type":"object","properties":{"name":{"description":"The name of the rule.","type":"string","enum":["add","calculate","copy","delete","deleteFrom","rename","replace","replaceMap","validate"],"additionalItems":false},"path":{"$ref":"#/definitions/commonTypes/definitions/jsonPath"},"params":{"type":"object","description":"The optional parameter map to allow configuration of the selected rule."}},"required":["name","path"],"additionalProperties":false},{"if":{"type":"object","properties":{"name":{"type":"string","const":"add"}}},"then":{"$ref":"#/definitions/ruleTypes/definitions/ruleAdd"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"calculate"}}},"then":{"$ref":"#/definitions/ruleTypes/definitions/ruleCalculate"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"copy"}}},"then":{"$ref":"#/definitions/ruleTypes/definitions/ruleCopy"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"delete"}}},"then":{"$ref":"#/definitions/ruleTypes/definitions/ruleDelete"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"deleteFrom"}}},"then":{"$ref":"#/definitions/ruleTypes/definitions/ruleDeleteFrom"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"rename"}}},"then":{"$ref":"#/definitions/ruleTypes/definitions/ruleRename"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"replace"}}},"then":{"$ref":"#/definitions/ruleTypes/definitions/ruleReplace"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"replaceMap"}}},"then":{"$ref":"#/definitions/ruleTypes/definitions/ruleReplaceMap"}},{"if":{"type":"object","properties":{"name":{"type":"string","const":"validate"}}},"then":{"$ref":"#/definitions/ruleTypes/definitions/ruleValidate"}}]}}},"actionTypes":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Configuring-your-actions","definitions":{"actionName":{"allOf":[{"$ref":"#/definitions/commonTypes/definitions/name"},{"description":"The name of the action (rule list) to allow selecting it when we want to start transformation."}]},"action":{"type":"object","properties":{"name":{"$ref":"#/definitions/actionTypes/definitions/actionName"},"rules":{"description":"The array of rules representing the sequentially triggered steps of the transformation action.","type":"array","items":{"$ref":"#/definitions/ruleTypes/definitions/anyRuleType"},"minItems":1,"additionalItems":false}},"required":["name","rules"],"additionalProperties":false},"actions":{"$comment":"https://github.com/nagyesta/yippee-ki-json/wiki/Configuring-your-actions","description":"The array of transformation action we will be able to select from at startup.","type":"array","items":{"$ref":"#/definitions/actionTypes/definitions/action"},"minItems":1,"additionalItems":false}}}},"properties":{"actions":{"$ref":"#/definitions/actionTypes/definitions/actions"}},"required":["actions"],"additionalProperties":false}
</schema>

[User] Provide a JSON object that satisfies the schema "yippee-ki-json_config_schema". Here are the required top‑level fields: none (all optional). Return only the valid JSON object.

Some of the reusable base types

Standard character sets.

The chrono unit we want to use.

NANOS MICROS MILLIS SECONDS MINUTES HOURS HALF_DAYS DAYS WEEKS MONTHS YEARS DECADES CENTURIES MILLENNIA ERAS FOREVER

HTTP header map.

Supported HTTP methods.

A JSON Path selecting one or more nodes of the parsed JSON document.

A single JSON key name

Definition of known function types

Absolute value function

The name of the component.

The number of digits we want to keep right of the decimal point.

Decimal add function

The name of the component.

Second operand of the calculation.

Change case

The name of the component.

Defines what is the desired case change operation we want to do.

Clone key function

The name of the component.

The name of the key we need to duplicate.

The name of the destination key.

Decimal divide function

The name of the component.

Second operand of the calculation.

Decimal dividend function

The name of the component.

First operand of the calculation.

Epoch millis date add function

The name of the component.

The amount of time units we need to add to the date time.

The time unit we want to use to interpret the amount.

HTTP resource content map function

The name of the component.

The function that is calculating the request URI based on the input map.

The function that is calculating the request method based on the input map.

The function that is calculating the request headers based on the input map.

The default request URI as a fallback.

The default request method as a fallback. Defaults to GET.

The default request headers as a fallback.

The charset used to read the response. Defaults to UTF-8.

HTTP resource by URI function

The name of the component.

The default request URI as a fallback.

JSON parse function

The name of the component.

Decimal multiply function

The name of the component.

Second operand of the calculation.

RegEx replace function

The name of the component.

A regex pattern that will be matched against the input, capturing certain named groups for later use.

Defines how the captured groups should be used to piece together the output value using EL-like syntax.

Literal replace function

The name of the component.

A literal we need to find in the input String.

The replacement we need to use.

Round decimal function

The name of the component.

String date add function

The name of the component.

The format String we need to use for date time parsing. [See](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/format/DateTimeFormatter.html)

Decimal subtract function

The name of the component.

Second operand of the calculation.

Decimal subtract from function

The name of the component.

First operand of the calculation.

changeCase httpResourceByUri jsonParse regex replace stringDateAdd

changeCase httpResourceByUri regex replace stringDateAdd

absoluteValue add divide dividend epochMillisDateAdd multiply roundDecimal subtract subtractFrom

absoluteValue add changeCase cloneKey divide dividend epochMillisDateAdd httpResource httpResourceByUri jsonParse multiply regex replace roundDecimal stringDateAdd subtract subtractFrom

Definition of known predicate types

All Match predicate

The name of the component.

Any Match predicate

The name of the component.

Any String predicate

The name of the component.

Contains key predicate

The name of the component.

The name of the key we want to check.

Eval on predicate

The name of the component.

The desired navigation we want to perform relative to the Map/Object we operate on.

The Predicate we need to evaluate after the navigation is done.

Is null predicate

The name of the component.

None Match predicate

The name of the component.

Not null predicate

The name of the component.

RegEx predicate

The name of the component.

The regular expression we want to match.

SpEL predicate

The name of the component.

The SpEL expression we want to match.

SpEL allMatch anyMatch anyString isNull noneMatch notNull regex

SpEL allMatch anyMatch containsKey evalOn isNull noneMatch notNull

SpEL allMatch anyMatch anyString containsKey evalOn isNull noneMatch notNull regex

Definition of known supplier types

Converting supplier

The name of the component.

The supplier of the raw String data we will use as input.

The function that will convert the string data.

Epoch Millis Relative Date supplier

The name of the component.

The amount of time units we need to add to the current date time.

The value we want to be relative to (in case it is not the current time).

File content supplier

The name of the component.

The path of the file we want to use as input.

The charset used for reading the contents of the file. Defaults to UTF-8.

HTTP resource content supplier

The name of the component.

The URI we want to send the request to.

The HTTP request method we want to use. Defaults to GET.

HTTP headers we want to send with our request.

The charset used for reading the contents of the response. Defaults to UTF-8.

JSON schema supplier

The name of the component.

The supplier of the String of the JSON Schema which we will use as input.

Relative String Date supplier

The name of the component.

SchemaStore schema supplier

The name of the component.

The name of the JSON schema as found in the SchemaStore.org catalog.

Static Boolean supplier

The name of the component.

The static value that must be returned each time the supplier is called.

Static BigDecimal supplier

The name of the component.

Static BigInteger supplier

The name of the component.

Static JSON supplier

The name of the component.

The static JSON value we want to supply every time our supplier is called.

Static String supplier

The name of the component.

file httpResource relativeStringDate schemaStore staticString

converting epochMillisRelativeDate file httpResource jsonSchema relativeStringDate schemaStore staticBoolean staticDecimal staticInteger staticJson staticString

Definition of known rule types

Add

The name of the component.

Additional parameters of the rule.

The supplier that will define the key of the new node.

The supplier that will define the value assigned to the new node identified by the key.

Calculate

The name of the component.

Additional parameters of the rule.

The predicate that will determine whether we should apply the function.

The function that will tell the rule what kind of calculation needs to be done.

Copy

The name of the component.

Additional parameters of the rule.

The supplier that will define the key we want to copy.

The destination path where this rule will attempt to create the copied node.

Delete

The name of the component.

Delete from

The name of the component.

Additional parameters of the rule.

Determines whether any deletion should be performed for the matching node

The predicate that will be used to test whether a key should be kept, keeping only the matching keys.

The predicate that will be used to test whether a key should be deleted, deleting all the matching keys.

The predicate that will be used to test whether an entry should be deleted, deleting all of them with matching values.

Rename

The name of the component.

Additional parameters of the rule.

Provides the name of the key we want to rename under the node matching the `path` parameter at the time of evaluation.

Provides the new name we want to use after the child node was renamed.

Replace

The name of the component.

Additional parameters of the rule.

Adds an opportunity to filter by value before we apply the replace `stringFunction`.

Defines how the existing value needs to change during the operation.

Replace map

The name of the component.

Additional parameters of the rule.

The predicate that will determine whether we need to run the rule on the matching path.

The function that defines the transformation which needs to be done on the selected map/object.

JSON Schema validate

The name of the component.

Must be the root JSON Path as the validator cannot work on sub-schema.

Additional parameters of the rule.

The supplier providing the schema we will use for validation.

Defines how the transformation should handle a validation failure.

Defines how the rule should document/report the violations.

The name of the rule.

add calculate copy delete deleteFrom rename replace replaceMap validate

The optional parameter map to allow configuration of the selected rule.

The name of the action (rule list) to allow selecting it when we want to start transformation.

The array of rules representing the sequentially triggered steps of the transformation action.

The array of transformation action we will be able to select from at startup.

Provide a JSON object that satisfies the schema "yippee-ki-json_config_schema". Here are the required top‑level fields: none (all optional). Return only the valid JSON object.


[System]
You are a helpful assistant that answers strictly in JSON. Here's the JSON schema you must adhere to:
<schema>
{"$schema":"http://json-schema.org/draft-07/schema#","$id":"https://json.schemastore.org/youtrack-app.json","additionalProperties":true,"title":"JetBrains YouTrack App Manifest Schema","description":"Schema for the JetBrains YouTrack app manifest file","definitions":{"semver":{"type":"string","minLength":5,"maxLength":14,"pattern":"^(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)$"},"url":{"type":"string","format":"url","minLength":1,"maxLength":255},"expectedDimensions":{"type":"object","description":"The expected dimensions of the widget in pixels. YouTrack will try to display the widget according to these dimensions if the monitor settings allow.","properties":{"width":{"type":"integer"},"height":{"type":"integer"}}},"defaultDimensions":{"type":"object","description":"The default width and height of the widget."},"settingsSchemaPath":{"type":"string","description":"The path to the JSON file that stores the settings scheme for Markdown and dashboard widgets.","pattern":".*\\.json$"},"icon":{"type":"string","pattern":".*\\.(svg|png|jpg|jpeg|ico)$"},"pixelOrPercentValue":{"type":"string","pattern":"^(\\d+px|\\d+%$)"},"fractionValue":{"type":"string","pattern":"^[1-9]\\d*fr$"},"permissions":{"type":"string","enum":["READ_PROJECT_BASIC","CREATE_PROJECT","READ_PROJECT","UPDATE_PROJECT","DELETE_PROJECT","READ_USERGROUP","CREATE_USERGROUP","UPDATE_USERGROUP","DELETE_USERGROUP","READ_ORGANIZATION","UPDATE_ORGANIZATION","CREATE_ORGANIZATION","DELETE_ORGANIZATION","UPDATE_PROFILE","READ_USER_BASIC","READ_USER","UPDATE_USER","CREATE_USER","DELETE_USER","READ_ROLE","MANAGE_ROLE","ADMIN_READ_APP","ADMIN_UPDATE_APP","READ_ISSUE","PRIVATE_READ_ISSUE","UPDATE_ISSUE","CREATE_ISSUE","DELETE_ISSUE","LINK_ISSUE","PRIVATE_UPDATE_ISSUE","APPLY_COMMANDS_SILENTLY","VIEW_WATCHERS","UPDATE_WATCHERS","VIEW_VOTERS","CREATE_ATTACHMENT_ISSUE","UPDATE_ATTACHMENT_ISSUE","DELETE_ATTACHMENT_ISSUE","CREATE_COMMENT","READ_COMMENT","UPDATE_COMMENT","DELETE_COMMENT","UPDATE_NOT_OWN_COMMENT","DELETE_NOT_OWN_COMMENT","READ_HIDDEN_STUFF","CREATE_WATCH_FOLDER","UPDATE_WATCH_FOLDER","DELETE_WATCH_FOLDER","SHARE_WATCH_FOLDER","READ_WORK_ITEM","UPDATE_WORK_ITEM"]},"extensionPoints":{"type":"string","enum":["ADMINISTRATION_MENU_ITEM","ARTICLE_ABOVE_ACTIVITY_STREAM","ARTICLE_BELOW_SUMMARY","ARTICLE_OPTIONS_MENU_ITEM","DASHBOARD_WIDGET","HELPDESK_CHANNEL","ISSUE_ABOVE_ACTIVITY_STREAM","ISSUE_BELOW_SUMMARY","ISSUE_FIELD_PANEL_FIRST","ISSUE_FIELD_PANEL_LAST","ISSUE_OPTIONS_MENU_ITEM","MAIN_MENU_ITEM","MARKDOWN","PROJECT_SETTINGS","USER_CARD","USER_PROFILE_SETTINGS"]}},"properties":{"$schema":{"type":"string","readOnly":true,"description":"The URL for the JSON schema that defines the structure of the manifest file."},"name":{"type":"string","description":"The name of the app. This is used as a unique identifier in YouTrack.","pattern":"^[a-z0-9-_.~]+$"},"title":{"type":"string","description":"The title of the app. This is a user-friendly name that is shown in the JetBrains Marketplace and the YouTrack UI."},"description":{"type":"string","description":"The description of the app. You can see this description in the app details on the Apps administration page."},"version":{"$ref":"#/definitions/semver","type":"string","description":"The version number assigned to the app package in major.minor.bugfix format. The default value is '0.0.0'."},"vendor":{"type":"object","description":"An object that contains the description of the app vendor.","properties":{"name":{"type":"string"},"url":{"$ref":"#/definitions/url"},"email":{"type":"string","format":"email"}},"required":["name"]},"icon":{"$ref":"#/definitions/icon","description":"The name of the file with the app icon. Store this file at the root level of the app package."},"iconDark":{"$ref":"#/definitions/icon","description":"The name of the file with the app icon for the dark theme. Store this file at the root level of the app package. If you don't include a separate icon for the dark theme, YouTrack will use the icon image for both dark and light themes."},"minYouTrackVersion":{"$ref":"#/definitions/semver","type":"string","description":"The minimum YouTrack version with which the app is compatible. If you attempt to upload or install an app in a YouTrack installation that runs a version lower than the value specified in the manifest, the operation fails."},"maxYouTrackVersion":{"$ref":"#/definitions/semver","type":"string","description":"The maximum YouTrack version with which the app is compatible. If you attempt to upload or install an app in a YouTrack installation that runs a version higher than the value specified in the manifest, the operation fails."},"changeNotes":{"type":"string","description":"A description of changes available in a specific version of the app. This information is only displayed in the JetBrains Marketplace."},"url":{"$ref":"#/definitions/url","description":"The website for the app. For example, a GitHub page or landing page for your company or product."},"visual":{"type":"boolean","readOnly":true,"description":""},"widgets":{"type":"array","minItems":1,"description":"An array of widget objects included in the app. Each widget represents a frontend extension.","items":{"type":"object","properties":{"key":{"pattern":"^[a-z0-9-_.~]+$","type":"string","description":"The unique key identifier of the widget. This is a mandatory field that must be unique within the app."},"name":{"type":"string","description":"The name of the widget shown in the app settings in YouTrack."},"indexPath":{"type":"string","description":"The path to the index.html file that defines the content and structure of the widget. The path is relative to the widgets folder inside the app package.","pattern":".*index\\.html(\\?.*)?$"},"extensionPoint":{"type":"string","description":"The location in the YouTrack UI where the widget will be embedded.","anyOf":[{"$ref":"#/definitions/extensionPoints"}]},"description":{"type":"string","description":"The description of the widget."},"iconPath":{"$ref":"#/definitions/icon","description":"The relative path to the file with the icon for the widget inside the app package."},"permissions:":{"type":"array","minItems":1,"uniqueItems":true,"description":"The set of permissions required to view and use the widget. Depending on the app scope, these permissions can be required at the global or project level.","items":{"$ref":"#/definitions/permissions"}}},"allOf":[{"if":{"properties":{"extensionPoint":{"const":"HELPDESK_CHANNEL"}},"required":["extensionPoint"]},"then":{"required":["description","iconPath"]}},{"if":{"not":{"anyOf":[{"properties":{"extensionPoint":{"const":"MARKDOWN"}},"required":["extensionPoint"]},{"properties":{"extensionPoint":{"const":"DASHBOARD_WIDGET"}},"required":["extensionPoint"]}]}},"then":{"properties":{"expectedDimensions":{"$ref":"#/definitions/expectedDimensions"}}},"else":{"properties":{"settingsSchemaPath":{"$ref":"#/definitions/settingsSchemaPath"}}}},{"if":{"properties":{"extensionPoint":{"const":"MARKDOWN"}},"required":["extensionPoint"]},"then":{"properties":{"defaultDimensions":{"$ref":"#/definitions/defaultDimensions","properties":{"width":{"$ref":"#/definitions/pixelOrPercentValue"},"height":{"$ref":"#/definitions/pixelOrPercentValue"}}}}}},{"if":{"properties":{"extensionPoint":{"const":"DASHBOARD_WIDGET"}},"required":["extensionPoint"]},"then":{"properties":{"defaultDimensions":{"$ref":"#/definitions/defaultDimensions","properties":{"width":{"$ref":"#/definitions/fractionValue"},"height":{"$ref":"#/definitions/fractionValue"}}}}}}],"required":["key","name","indexPath","extensionPoint"]}}},"required":["name"],"type":"object"}
</schema>

[User] Provide a JSON object that satisfies the schema "JetBrains YouTrack App Manifest Schema". Here are the required top‑level fields: name. Return only the valid JSON object.

JetBrains YouTrack App Manifest Schema

Schema for the JetBrains YouTrack app manifest file

The expected dimensions of the widget in pixels. YouTrack will try to display the widget according to these dimensions if the monitor settings allow.

The default width and height of the widget.

The path to the JSON file that stores the settings scheme for Markdown and dashboard widgets.

The URL for the JSON schema that defines the structure of the manifest file.

The name of the app. This is used as a unique identifier in YouTrack.

The title of the app. This is a user-friendly name that is shown in the JetBrains Marketplace and the YouTrack UI.

The description of the app. You can see this description in the app details on the Apps administration page.

The version number assigned to the app package in major.minor.bugfix format. The default value is '0.0.0'.

An object that contains the description of the app vendor.

The name of the file with the app icon. Store this file at the root level of the app package.

The name of the file with the app icon for the dark theme. Store this file at the root level of the app package. If you don't include a separate icon for the dark theme, YouTrack will use the icon image for both dark and light themes.

The minimum YouTrack version with which the app is compatible. If you attempt to upload or install an app in a YouTrack installation that runs a version lower than the value specified in the manifest, the operation fails.

The maximum YouTrack version with which the app is compatible. If you attempt to upload or install an app in a YouTrack installation that runs a version higher than the value specified in the manifest, the operation fails.

A description of changes available in a specific version of the app. This information is only displayed in the JetBrains Marketplace.

The website for the app. For example, a GitHub page or landing page for your company or product.

An array of widget objects included in the app. Each widget represents a frontend extension.

The unique key identifier of the widget. This is a mandatory field that must be unique within the app.

The name of the widget shown in the app settings in YouTrack.

The path to the index.html file that defines the content and structure of the widget. The path is relative to the widgets folder inside the app package.

The location in the YouTrack UI where the widget will be embedded.

The description of the widget.

The relative path to the file with the icon for the widget inside the app package.

The set of permissions required to view and use the widget. Depending on the app scope, these permissions can be required at the global or project level.

Provide a JSON object that satisfies the schema "JetBrains YouTrack App Manifest Schema". Here are the required top‑level fields: name. Return only the valid JSON object.


[System]
You are a helpful assistant that answers strictly in JSON. Here's the JSON schema you must adhere to:
<schema>
{"$schema":"http://json-schema.org/draft-07/schema#","title":"IBM Zapp Document","description":"JSON schema for zapp.json and zapp.yaml files. Version 1.4.0 -- Licensed Materials - Property of IBM - (c) Copyright IBM Corporation 2022, 2025. All Rights Reserved.","type":"object","definitions":{"coreProperties":{"type":"object","required":["name"],"additionalProperties":false,"properties":{"name":{"description":"The name of the Z Project.","type":"string","maxLength":214,"minLength":1},"description":{"description":"This helps people understand your project as it would be used by tools.","type":"string"},"version":{"description":"Version is a string and it must be parsable for managing dependencies.","type":"string","default":"1.0.0"},"groupId":{"description":"Defines a group name that is shared for each application part in case of applications composed of multiple parts. Allows to uniquely identify the parts by concatenating with the artifact id. For example a groupId `com.ibm.wazi` with an artifactId `service` would create the unique application identifier `com.ibm.wazi.service`.","type":"string","examples":["com.ibm.wazi","payments"]},"artifactId":{"description":"Define id of the application artifact. Use it in combination with a groupId for multi-part applications.","type":"string","default":"","examples":["sam"]},"parentId":{"description":"In case of a multi-part application defines the name of the parent application part. This zapp will inherit properties such as propertyGroups defined in the parent.","type":"string","default":"","examples":["com.ibm.wazi.parent"]},"keywords":{"description":"This helps people discover your project.","type":"array","items":{"type":"string"}},"homepage":{"description":"The url to the project homepage.","type":"string","oneOf":[{"format":"uri"},{"enum":["."]}]},"license":{"type":"string","description":"You should specify a license for your package so that people know how they are permitted to use it and any restrictions you're placing on it."},"author":{"$ref":"#/definitions/person"},"contributors":{"description":"A list of people who contributed to this package.","type":"array","items":{"$ref":"#/definitions/person"},"minItems":1},"maintainers":{"description":"A list of people who maintain this package.","type":"array","items":{"$ref":"#/definitions/person"},"minItems":1},"propertyGroups":{"description":"A list of properties defining path names for resolving dependencies.","type":"array","items":{"$ref":"#/definitions/propertyGroupItem"},"minItems":1},"profiles":{"description":"Profiles are additional groups of properties that should only become valid under specific conditions such as running in a build job or as part of a debug session.","type":"array","items":{"$ref":"#/definitions/profile"},"minItems":1}}},"propertyGroupItem":{"type":"object","additionalProperties":false,"required":["name"],"properties":{"name":{"type":"string","description":"The name of the property group, which is used in hovers and error messages.","examples":["sample-local","sample-remote"]},"language":{"type":"string","enum":["cobol","pl1","hlasm","rexx","jcl"],"description":"Limits the property group to one specific language."},"compilerOptions":{"type":"string","description":"Global compiler options separated by a comma that impact the parsing of the programs for the editor. Requires that you specify a language. If there are multiple Property Groups for a language with compiler option then they will be concatenated."},"libraries":{"type":"array","description":"An array of potential library locations defining the search order for include files. Libraries with the name 'syslib' will be handled as default include locations. The list can contain many entries of the type 'local' or 'mvs'. It can contain items of the same type twice in case, for example, you want to search in remote locations first, then some local location, and if still not found more remote locations.","items":{"$ref":"#/definitions/libraryItem"},"minItems":1}}},"libraryItem":{"type":"object","additionalProperties":false,"required":["name","type"],"properties":{"name":{"type":"string","description":"Name of the library. The default name should be `syslib` if using unnamed libraries.","default":"syslib","examples":["syslib","jcllib","proclib","maclib","currencylib"]},"type":{"type":"string","enum":["mvs","local"],"description":"The type of the property group defining where dependencies should be located. Allowed values are 'local' for using a local workspace and 'mvs' for dependencies located in MVS data sets.","default":"local","examples":["local","mvs"]},"locations":{"type":"array","description":"An array of include file locations. For 'local' libraries values can be absolute and relative filename paths using GLOB patterns. For 'mvs' libraries value can be data set names. GLOB patterns for data sets are currently not supported.","items":{"type":"string"},"examples":["**/copybook","USER1.SAMPLE.COBCOPY"]}},"if":{"properties":{"name":{"enum":["jcllib","proclib"],"type":"string"},"type":{"const":"mvs","type":"string"}}},"then":{"required":["name","type"]},"else":{"required":["name","type","locations"]}},"person":{"description":"A person who has been involved in creating or maintaining this package","type":["object","string"],"required":["name"],"properties":{"name":{"type":"string"},"url":{"type":"string","format":"uri"},"email":{"type":"string","format":"email"}}},"profile":{"type":"object","description":"Profiles are additional groups of properties that should only become valid under specific conditions such as running in a build job or as part of a debug session.","additionalProperties":false,"required":["name","type"],"properties":{"name":{"type":"string","description":"The name of the profile.","examples":["dbb-build"]},"language":{"type":"string","enum":["cobol","pl1"],"description":"If the profile type supports it then it defines a scope for the profile to one specific programming language. For example, a profile that defines preprocessor commands for COBOL."},"type":{"type":"string","enum":["dbb","rseapi","debug","preprocessor","test"],"description":"The type of the profile.","default":"dbb"},"location":{"type":"string","enum":["mvs","local"],"description":"If the profile type supports it then it defines a scope for the profile to a specific location for resources. For example, a profile that defines preprocessor commands to be executed on MVS or local files.","default":"local"},"settings":{"description":"Settings objects specific to the type specified for the profile.","type":"object"}},"oneOf":[{"required":["name","type","settings"],"additionalProperties":false,"properties":{"name":{"type":"string"},"type":{"const":"dbb","type":"string"},"settings":{"oneOf":[{"$ref":"#/definitions/dbbBuilderSettings"},{"$ref":"#/definitions/dbbGroovySettings"}]}}},{"required":["name","type","settings"],"additionalProperties":false,"properties":{"name":{"type":"string"},"type":{"const":"rseapi","type":"string"},"settings":{"$ref":"#/definitions/rseapiSettingsItem"}}},{"required":["name","type","settings","location","language"],"additionalProperties":false,"properties":{"name":{"type":"string"},"language":{"type":"string"},"type":{"const":"preprocessor","type":"string"},"location":{"type":"string"},"settings":{"oneOf":[{"$ref":"#/definitions/localPreprocessorSettingsItem"},{"$ref":"#/definitions/mvsPreprocessorSettingsItem"}]}},"if":{"properties":{"location":{"const":"local","type":"string"}}},"then":{"properties":{"settings":{"$ref":"#/definitions/localPreprocessorSettingsItem"}}},"else":{"properties":{"settings":{"$ref":"#/definitions/mvsPreprocessorSettingsItem"}}}},{"required":["name","type","settings"],"additionalProperties":false,"properties":{"name":{"type":"string"},"type":{"const":"test","type":"string"},"settings":{"$ref":"#/definitions/testSettingsItem"}}}]},"dbbGroovySettings":{"type":"object","additionalProperties":false,"required":["application","command"],"description":"Groovyz user build script properties for running user build on remote host.","properties":{"application":{"type":"string","description":"Defines the name of the application to build. Will be used to create a folder on USS to upload all files to."},"command":{"type":"string","description":"Command that the build script is executed with such as the path to groovyz and it's parameters."},"buildScriptPath":{"type":"string","description":"The full path of build script on the remote host that should be used with the command."},"buildScriptArgs":{"type":"array","items":{"type":"string"},"description":"A list of strings that are the parameters for the build script. Check the documentation for built-in variables, such as the name of the program to build, that can be used here."},"additionalDependencies":{"type":"array","items":{"type":"string"},"description":"Lists of GLOB patterns that define the files that should be uploaded to USS for a build. Relative path names are interpreted relative to the location of the ZAPP file that is being used for the build, which is a ZAPP file in the same workspace as the program to be build."},"logFilePatterns":{"type":"array","items":{"type":"string"},"description":"Lists of GLOB patterns that define the files that should be downloaded from USS after the build. Relative path names are interpreted relative to the DBB log directory user setting. If not provided then all files of the user setting location will be downloaded."}}},"dbbBuilderSettings":{"type":"object","additionalProperties":false,"required":["command","lifecycle","lifecycleArgs"],"description":"zBuilder user build properties for running user build on remote host.","properties":{"command":{"type":"string","description":"Command that the build script is executed with such as the path to groovyz and it's parameters."},"lifecycle":{"type":"string","description":"Defines named build lifecycles that represent different build scenarios the customer needs to perform and can be executed from the DBB CLI."},"lifecycleArgs":{"type":"array","description":"Additional arguments and options for the lifecycle.","items":{"type":"string"}},"additionalDependencies":{"type":"array","items":{"type":"string"},"description":"Lists of GLOB patterns that define the files that should be uploaded to USS for a build. Relative path names are interpreted relative to the location of the ZAPP file that is being used for the build, which is a ZAPP file in the same workspace as the program to be build."},"logFilePatterns":{"type":"array","items":{"type":"string"},"description":"Lists of GLOB patterns that define the files that should be downloaded from USS after the build. Relative path names are interpreted relative to the DBB log directory user setting. If not provided then all files of the user setting location will be downloaded."}}},"rseapiSettingsItem":{"type":"object","additionalProperties":false,"description":"RSE API client settings for interactions with a z/OS remote host running an RSE API server.","required":["mappings","default.encoding"],"properties":{"mappings":{"type":"array","description":"A list of mapping objects that map local file extensions to transfer modes and encodings to MVS data sets that can be specified using wildcards.","items":{"$ref":"#/definitions/rseapiSettingsItemMapping"}},"default.encoding":{"type":"string","description":"The encoding to be used when no mapping can be found. If not provided then either the user or server default will be used."}}},"rseapiSettingsItemMapping":{"type":"object","additionalProperties":false,"description":"One mapping that contains at least transfer and resource values.","properties":{"extension":{"type":"string","description":"A local file extension such as cbl or pl1."},"transfer":{"type":"string","enum":["text","binary"],"description":"The transfer mode to be used. Can be 'text' or 'binary'."},"resource":{"type":"string","description":"The data set name to be mapped to. Can use a wildcard such as '**CPY'."},"encoding":{"type":"string","description":"The encoding to be used for text transfer. See the RSE API documentation for the values allowed."},"memberMappings":{"type":"array","items":{"type":"object","additionalProperties":false,"description":"One member mapping that contains at least transfer and resource values.","properties":{"extension":{"type":"string","description":"A local file extension such as cbl or pl1."},"transfer":{"type":"string","enum":["text","binary"],"description":"The transfer mode to be used. Can be 'text' or 'binary'."},"encoding":{"type":"string","description":"The encoding to be used for text transfer. See the RSE API documentation for the values allowed."},"resource":{"type":"string","description":"The data set member name to be mapped to. Can use a wildcard such as '**CPY'."}}},"description":"A nested mappings array with resource mappings to members of the data sets that were mapped by the parent mapping."}}},"localPreprocessorSettingsItem":{"type":"object","additionalProperties":false,"description":"Preprocessor properties for preprocessing COBOL/PL/I files.","required":["command","outputPath","fileExtension"],"properties":{"command":{"type":"string","description":"The command to run to execute the preprocessor executable."},"outputPath":{"type":"string","description":"Path where preprocessor produces its build output."},"fileExtension":{"type":"string","description":"The desired file extension for the post-processed file."},"environmentVariables":{"type":"object","additionalProperties":false,"description":"Specifies any user defined environment variables to be passed to the preprocessor.","patternProperties":{"[a-zA-Z_][a-zA-Z0-9_]*":{"anyOf":[{"type":"string"}]}}}}},"mvsPreprocessorSettingsItem":{"type":"object","additionalProperties":false,"description":"Preprocessor properties for preprocessing COBOL/PL/I files.","required":["commandDataSet","outputDataSet","tempDataHLQ"],"properties":{"commandDataSet":{"type":"string","description":"Specifies an input listing sequential data set."},"commandParameters":{"type":"string","description":"The parameters for the command being run."},"outputDataSet":{"type":"string","description":"Specifies an output listing sequential data set."},"tempDataHLQ":{"type":"string","description":"Specifies the high-level qualifier used for data sets created by plug-in requests to export observation files."},"programDataSet":{"type":"string","description":"Specifies the data set where local programs will be uploaded for preprocessing."}}},"testSettingsItem":{"type":"object","additionalProperties":false,"description":"Test properties for a test case.","required":["unitTest"],"properties":{"unitTest":{"type":"object","additionalProperties":false,"description":"Properties to run a unit test case.","required":["procLib"],"properties":{"procLib":{"type":"array","description":"Specifies the list of Procedure libraries.","items":{"type":"string"}},"allocateWorkingDs":{"type":"boolean","description":" If this option is selected, the data set for the working file is allocated automatically with the allocation options."},"ioDataSetAllocation":{"type":"object","description":"Options to allocate a working file.","properties":{"ioSpaceUnit":{"type":"string","enum":["TRACKS","BLOCKS","CYLINDERS"],"description":"The unit of primary and secondary space to be allocated."},"ioQuant1":{"type":"integer","description":"The amount of DASD space to be used for primary space allocation (PRIMARY)."},"ioQuant2":{"type":"integer","description":"The amount of DASD space to be used for secondary space allocation (SECONDARY)."},"ioHLQ":{"type":"string","description":"The high-level qualifier for the VSAM or QSAM data files for file I/O simulation. These files are allocated when running a Unit test case."}}},"configDS":{"type":"string","description":"Runner configuration destination container."},"resultDS":{"type":"string","description":"Runner result destination container."},"userLibraries":{"type":"array","description":"The datat set of the application under test","items":{"type":"string"}},"defaultTestCaseFolder":{"type":"string","description":"The default local folder to create the test case artifacts."},"jobcard":{"type":"string","description":"The job card to run a unit test"}}}}}},"anyOf":[{"$ref":"#/definitions/coreProperties"}]}
</schema>

[User] Provide a JSON object that satisfies the schema "IBM Zapp Document". Here are the required top‑level fields: none (all optional). Return only the valid JSON object.

IBM Zapp Document

JSON schema for zapp.json and zapp.yaml files. Version 1.4.0 -- Licensed Materials - Property of IBM - (c) Copyright IBM Corporation 2022, 2025. All Rights Reserved.

The name of the Z Project.

This helps people understand your project as it would be used by tools.

Version is a string and it must be parsable for managing dependencies.

Defines a group name that is shared for each application part in case of applications composed of multiple parts. Allows to uniquely identify the parts by concatenating with the artifact id. For example a groupId `com.ibm.wazi` with an artifactId `service` would create the unique application identifier `com.ibm.wazi.service`.

Define id of the application artifact. Use it in combination with a groupId for multi-part applications.

In case of a multi-part application defines the name of the parent application part. This zapp will inherit properties such as propertyGroups defined in the parent.

This helps people discover your project.

The url to the project homepage.

You should specify a license for your package so that people know how they are permitted to use it and any restrictions you're placing on it.

A list of people who contributed to this package.

A list of people who maintain this package.

A list of properties defining path names for resolving dependencies.

Profiles are additional groups of properties that should only become valid under specific conditions such as running in a build job or as part of a debug session.

The name of the property group, which is used in hovers and error messages.

Limits the property group to one specific language.

Global compiler options separated by a comma that impact the parsing of the programs for the editor. Requires that you specify a language. If there are multiple Property Groups for a language with compiler option then they will be concatenated.

An array of potential library locations defining the search order for include files. Libraries with the name 'syslib' will be handled as default include locations. The list can contain many entries of the type 'local' or 'mvs'. It can contain items of the same type twice in case, for example, you want to search in remote locations first, then some local location, and if still not found more remote locations.

Name of the library. The default name should be `syslib` if using unnamed libraries.

syslib jcllib proclib maclib currencylib

The type of the property group defining where dependencies should be located. Allowed values are 'local' for using a local workspace and 'mvs' for dependencies located in MVS data sets.

An array of include file locations. For 'local' libraries values can be absolute and relative filename paths using GLOB patterns. For 'mvs' libraries value can be data set names. GLOB patterns for data sets are currently not supported.

A person who has been involved in creating or maintaining this package

The name of the profile.

If the profile type supports it then it defines a scope for the profile to one specific programming language. For example, a profile that defines preprocessor commands for COBOL.

The type of the profile.

If the profile type supports it then it defines a scope for the profile to a specific location for resources. For example, a profile that defines preprocessor commands to be executed on MVS or local files.

Settings objects specific to the type specified for the profile.

Groovyz user build script properties for running user build on remote host.

Defines the name of the application to build. Will be used to create a folder on USS to upload all files to.

Command that the build script is executed with such as the path to groovyz and it's parameters.

The full path of build script on the remote host that should be used with the command.

A list of strings that are the parameters for the build script. Check the documentation for built-in variables, such as the name of the program to build, that can be used here.

Lists of GLOB patterns that define the files that should be uploaded to USS for a build. Relative path names are interpreted relative to the location of the ZAPP file that is being used for the build, which is a ZAPP file in the same workspace as the program to be build.

Lists of GLOB patterns that define the files that should be downloaded from USS after the build. Relative path names are interpreted relative to the DBB log directory user setting. If not provided then all files of the user setting location will be downloaded.

zBuilder user build properties for running user build on remote host.

Defines named build lifecycles that represent different build scenarios the customer needs to perform and can be executed from the DBB CLI.

Additional arguments and options for the lifecycle.

RSE API client settings for interactions with a z/OS remote host running an RSE API server.

A list of mapping objects that map local file extensions to transfer modes and encodings to MVS data sets that can be specified using wildcards.

The encoding to be used when no mapping can be found. If not provided then either the user or server default will be used.

One mapping that contains at least transfer and resource values.

A local file extension such as cbl or pl1.

The transfer mode to be used. Can be 'text' or 'binary'.

The data set name to be mapped to. Can use a wildcard such as '**CPY'.

The encoding to be used for text transfer. See the RSE API documentation for the values allowed.

One member mapping that contains at least transfer and resource values.

The data set member name to be mapped to. Can use a wildcard such as '**CPY'.

A nested mappings array with resource mappings to members of the data sets that were mapped by the parent mapping.

Preprocessor properties for preprocessing COBOL/PL/I files.

The command to run to execute the preprocessor executable.

Path where preprocessor produces its build output.

The desired file extension for the post-processed file.

Specifies any user defined environment variables to be passed to the preprocessor.

Specifies an input listing sequential data set.

The parameters for the command being run.

Specifies an output listing sequential data set.

Specifies the high-level qualifier used for data sets created by plug-in requests to export observation files.

Specifies the data set where local programs will be uploaded for preprocessing.

Test properties for a test case.

Properties to run a unit test case.

Specifies the list of Procedure libraries.

If this option is selected, the data set for the working file is allocated automatically with the allocation options.

Options to allocate a working file.

The unit of primary and secondary space to be allocated.

The amount of DASD space to be used for primary space allocation (PRIMARY).

The amount of DASD space to be used for secondary space allocation (SECONDARY).

The high-level qualifier for the VSAM or QSAM data files for file I/O simulation. These files are allocated when running a Unit test case.

Runner configuration destination container.

Runner result destination container.

The datat set of the application under test

The default local folder to create the test case artifacts.

The job card to run a unit test

Provide a JSON object that satisfies the schema "IBM Zapp Document". Here are the required top‑level fields: none (all optional). Return only the valid JSON object.