{
  "cli": {
    "commandDefinition": {
      "docString": "",
      "isOptional": false,
      "validator": {
        "allowNull": false,
        "strict": true
      },
      "sql": {},
      "type": "object",
      "group": "cli",
      "name": "commandDefinition",
      "relations": [],
      "keys": {
        "name": {
          "docString": "",
          "isOptional": false,
          "validator": {
            "allowNull": false,
            "trim": false,
            "lowerCase": false,
            "upperCase": false,
            "min": 1,
            "pattern": "/^[a-z-]+$/g"
          },
          "sql": {},
          "type": "string"
        },
        "shortDescription": {
          "docString": "",
          "isOptional": false,
          "validator": {
            "allowNull": false,
            "trim": false,
            "lowerCase": false,
            "upperCase": false,
            "min": 1,
            "pattern": "/^[^\\n]+$/g"
          },
          "sql": {},
          "type": "string"
        },
        "longDescription": {
          "docString": "",
          "isOptional": true,
          "validator": {
            "allowNull": false,
            "trim": false,
            "lowerCase": false,
            "upperCase": false,
            "min": 1
          },
          "sql": {},
          "type": "string"
        },
        "modifiers": {
          "docString": "",
          "isOptional": true,
          "validator": {
            "allowNull": false,
            "strict": true
          },
          "sql": {},
          "type": "object",
          "relations": [],
          "defaultValue": "{\"isDynamic\":false,\"isCosmetic\":false,\"isWatchable\":false}",
          "keys": {
            "isDynamic": {
              "docString": "",
              "isOptional": true,
              "validator": {
                "allowNull": false
              },
              "sql": {},
              "type": "boolean",
              "defaultValue": "false"
            },
            "isCosmetic": {
              "docString": "",
              "isOptional": true,
              "validator": {
                "allowNull": false
              },
              "sql": {},
              "type": "boolean",
              "defaultValue": "false"
            },
            "isWatchable": {
              "docString": "",
              "isOptional": true,
              "validator": {
                "allowNull": false
              },
              "sql": {},
              "type": "boolean",
              "defaultValue": "false"
            }
          }
        },
        "dynamicValue": {
          "docString": "",
          "isOptional": true,
          "validator": {
            "allowNull": false,
            "strict": true
          },
          "sql": {},
          "type": "object",
          "relations": [],
          "defaultValue": "{}",
          "keys": {
            "validator": {
              "docString": "",
              "isOptional": true,
              "validator": {
                "allowNull": false
              },
              "sql": {},
              "type": "any",
              "targets": {
                "js": {
                  "validatorExpression": "typeof $value$ === \"function\"",
                  "validatorInputType": "((value: string) => { isValid: boolean, error?: { message: string }}|Promise<{ isValid: boolean, error?: { message: string }}>)",
                  "validatorOutputType": "((value: string) => { isValid: boolean, error?: { message: string }}|Promise<{ isValid: boolean, error?: { message: string }}>)"
                }
              }
            },
            "completions": {
              "docString": "",
              "isOptional": true,
              "validator": {
                "allowNull": false
              },
              "sql": {},
              "type": "any",
              "targets": {
                "js": {
                  "validatorExpression": "typeof $value$ === \"function\"",
                  "validatorInputType": "(() => Promise<{ completions: CliCompletion[] }>|{ completions: CliCompletion[] })",
                  "validatorOutputType": "(() => Promise<{ completions: CliCompletion[] }>|{ completions: CliCompletion[] })"
                }
              }
            }
          }
        },
        "watchSettings": {
          "docString": "",
          "isOptional": true,
          "validator": {
            "allowNull": false,
            "strict": true
          },
          "sql": {},
          "type": "object",
          "relations": [],
          "defaultValue": "{\"extensions\":[\"js\",\"json\"],\"ignorePatterns\":[\".cache\",\"coverage\",\"node_modules\"]}",
          "keys": {
            "extensions": {
              "docString": "",
              "isOptional": true,
              "validator": {
                "convert": false
              },
              "sql": {},
              "type": "array",
              "defaultValue": "[\"js\", \"json\"]",
              "values": {
                "docString": "",
                "isOptional": false,
                "validator": {
                  "allowNull": false,
                  "trim": false,
                  "lowerCase": false,
                  "upperCase": false,
                  "min": 1
                },
                "sql": {},
                "type": "string"
              }
            },
            "ignorePatterns": {
              "docString": "",
              "isOptional": true,
              "validator": {
                "convert": false
              },
              "sql": {},
              "type": "array",
              "defaultValue": "[\".cache\", \"coverage\", \"node_modules\"]",
              "values": {
                "docString": "",
                "isOptional": false,
                "validator": {
                  "allowNull": false,
                  "trim": false,
                  "lowerCase": false,
                  "upperCase": false,
                  "min": 1
                },
                "sql": {},
                "type": "string"
              }
            }
          }
        },
        "subCommands": {
          "docString": "",
          "isOptional": true,
          "validator": {
            "convert": false
          },
          "sql": {},
          "type": "array",
          "defaultValue": "[]",
          "values": {
            "docString": "",
            "isOptional": false,
            "validator": {},
            "sql": {},
            "type": "reference",
            "reference": {
              "group": "cli",
              "name": "commandDefinition",
              "uniqueName": "CliCommandDefinition"
            }
          }
        },
        "flags": {
          "docString": "",
          "isOptional": true,
          "validator": {
            "convert": false
          },
          "sql": {},
          "type": "array",
          "defaultValue": "[]",
          "values": {
            "docString": "",
            "isOptional": false,
            "validator": {},
            "sql": {},
            "type": "reference",
            "reference": {
              "group": "cli",
              "name": "flagDefinition",
              "uniqueName": "CliFlagDefinition"
            }
          }
        },
        "executor": {
          "docString": "",
          "isOptional": true,
          "validator": {
            "allowNull": false
          },
          "sql": {},
          "type": "any",
          "targets": {
            "js": {
              "validatorExpression": "typeof $value$ === \"function\"",
              "validatorInputType": "((logger: import(\"@compas/stdlib\").Logger, state: import(\"../../cli/types\").CliExecutorState) => (Promise<import(\"../../cli/types\").CliResult>|CliResult))",
              "validatorOutputType": "((logger: import(\"@compas/stdlib\").Logger, state: import(\"../../cli/types\").CliExecutorState) => (Promise<import(\"../../cli/types\").CliResult>|CliResult))"
            }
          }
        }
      }
    },
    "completion": {
      "docString": "",
      "isOptional": false,
      "validator": {},
      "sql": {},
      "type": "anyOf",
      "group": "cli",
      "name": "completion",
      "values": [
        {
          "docString": "",
          "isOptional": false,
          "validator": {
            "allowNull": false,
            "strict": true
          },
          "sql": {},
          "type": "object",
          "relations": [],
          "keys": {
            "type": {
              "docString": "",
              "isOptional": false,
              "validator": {
                "allowNull": false,
                "trim": false,
                "lowerCase": false,
                "upperCase": false,
                "min": 1
              },
              "sql": {},
              "type": "string",
              "oneOf": ["directory"]
            }
          }
        },
        {
          "docString": "",
          "isOptional": false,
          "validator": {
            "allowNull": false,
            "strict": true
          },
          "sql": {},
          "type": "object",
          "relations": [],
          "keys": {
            "type": {
              "docString": "",
              "isOptional": false,
              "validator": {
                "allowNull": false,
                "trim": false,
                "lowerCase": false,
                "upperCase": false,
                "min": 1
              },
              "sql": {},
              "type": "string",
              "oneOf": ["file"]
            }
          }
        },
        {
          "docString": "",
          "isOptional": false,
          "validator": {
            "allowNull": false,
            "strict": true
          },
          "sql": {},
          "type": "object",
          "relations": [],
          "keys": {
            "type": {
              "docString": "",
              "isOptional": false,
              "validator": {
                "allowNull": false,
                "trim": false,
                "lowerCase": false,
                "upperCase": false,
                "min": 1
              },
              "sql": {},
              "type": "string",
              "oneOf": ["completion"]
            },
            "name": {
              "docString": "",
              "isOptional": false,
              "validator": {
                "allowNull": false,
                "trim": false,
                "lowerCase": false,
                "upperCase": false,
                "min": 1
              },
              "sql": {},
              "type": "string"
            },
            "description": {
              "docString": "",
              "isOptional": true,
              "validator": {
                "allowNull": false,
                "trim": false,
                "lowerCase": false,
                "upperCase": false,
                "min": 1
              },
              "sql": {},
              "type": "string"
            }
          }
        },
        {
          "docString": "",
          "isOptional": false,
          "validator": {
            "allowNull": false,
            "strict": true
          },
          "sql": {},
          "type": "object",
          "relations": [],
          "keys": {
            "type": {
              "docString": "",
              "isOptional": false,
              "validator": {
                "allowNull": false,
                "trim": false,
                "lowerCase": false,
                "upperCase": false,
                "min": 1
              },
              "sql": {},
              "type": "string",
              "oneOf": ["value"]
            },
            "specification": {
              "docString": "",
              "isOptional": false,
              "validator": {
                "allowNull": false,
                "trim": false,
                "lowerCase": false,
                "upperCase": false,
                "min": 1
              },
              "sql": {},
              "type": "string",
              "oneOf": ["boolean", "number", "string", "booleanOrString"]
            },
            "description": {
              "docString": "",
              "isOptional": true,
              "validator": {
                "allowNull": false,
                "trim": false,
                "lowerCase": false,
                "upperCase": false,
                "min": 1
              },
              "sql": {},
              "type": "string"
            }
          }
        }
      ]
    },
    "flagDefinition": {
      "docString": "",
      "isOptional": false,
      "validator": {
        "allowNull": false,
        "strict": true
      },
      "sql": {},
      "type": "object",
      "group": "cli",
      "name": "flagDefinition",
      "relations": [],
      "keys": {
        "name": {
          "docString": "",
          "isOptional": false,
          "validator": {
            "allowNull": false,
            "trim": false,
            "lowerCase": false,
            "upperCase": false,
            "min": 1
          },
          "sql": {},
          "type": "string"
        },
        "rawName": {
          "docString": "",
          "isOptional": false,
          "validator": {
            "allowNull": false,
            "trim": false,
            "lowerCase": true,
            "upperCase": false,
            "min": 1,
            "pattern": "/^--\\w/g"
          },
          "sql": {},
          "type": "string"
        },
        "description": {
          "docString": "",
          "isOptional": true,
          "validator": {
            "allowNull": false,
            "trim": false,
            "lowerCase": false,
            "upperCase": false,
            "min": 1,
            "pattern": "/^[^\\n]+$/g"
          },
          "sql": {},
          "type": "string"
        },
        "modifiers": {
          "docString": "",
          "isOptional": true,
          "validator": {
            "allowNull": false,
            "strict": true
          },
          "sql": {},
          "type": "object",
          "relations": [],
          "defaultValue": "{\"isRepeatable\":false,\"isRequired\":false,\"isInternal\":false}",
          "keys": {
            "isRepeatable": {
              "docString": "",
              "isOptional": true,
              "validator": {
                "allowNull": false
              },
              "sql": {},
              "type": "boolean",
              "defaultValue": "false"
            },
            "isRequired": {
              "docString": "",
              "isOptional": true,
              "validator": {
                "allowNull": false
              },
              "sql": {},
              "type": "boolean",
              "defaultValue": "false"
            },
            "isInternal": {
              "docString": "",
              "isOptional": true,
              "validator": {
                "allowNull": false
              },
              "sql": {},
              "type": "boolean",
              "defaultValue": "false"
            }
          }
        },
        "value": {
          "docString": "",
          "isOptional": true,
          "validator": {
            "allowNull": false,
            "strict": true
          },
          "sql": {},
          "type": "object",
          "relations": [],
          "defaultValue": "{\"specification\":\"boolean\"}",
          "keys": {
            "specification": {
              "docString": "",
              "isOptional": true,
              "validator": {
                "allowNull": false,
                "trim": false,
                "lowerCase": false,
                "upperCase": false,
                "min": 1
              },
              "sql": {},
              "type": "string",
              "oneOf": ["boolean", "number", "string", "booleanOrString"],
              "defaultValue": "\"boolean\""
            },
            "validator": {
              "docString": "",
              "isOptional": true,
              "validator": {
                "allowNull": false
              },
              "sql": {},
              "type": "any",
              "targets": {
                "js": {
                  "validatorExpression": "typeof $value$ === \"function\"",
                  "validatorInputType": "((value: any) => { isValid: boolean, error?: { message: string }}|Promise<{ isValid: boolean, error?: { message: string }}>)",
                  "validatorOutputType": "((value: any) => { isValid: boolean, error?: { message: string }}|Promise<{ isValid: boolean, error?: { message: string }}>)"
                }
              }
            },
            "completions": {
              "docString": "",
              "isOptional": true,
              "validator": {
                "allowNull": false
              },
              "sql": {},
              "type": "any",
              "targets": {
                "js": {
                  "validatorExpression": "typeof $value$ === \"function\"",
                  "validatorInputType": "(() => Promise<{ completions: CliCompletion[] }>|{ completions: CliCompletion[] })",
                  "validatorOutputType": "(() => Promise<{ completions: CliCompletion[] }>|{ completions: CliCompletion[] })"
                }
              }
            }
          }
        }
      }
    }
  }
}
