{ "$schema": "http://json-schema.org/draft-04/schema#", "$id": "http://higan.me/schema/kanro.json", "definitions": { "BaseNode": { "properties": { "dependencies": { "additionalProperties": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "type": "object" }, "exceptionHandlers": { "items": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "type": "array" }, "fuses": { "items": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "type": "array" }, "module": { "$ref": "#/definitions/Module" }, "name": { "type": "string" }, "next": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" }, { "items": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "type": "array" } ] } }, "type": "object" }, "FileRenderer": { "properties": { "dependencies": { "additionalProperties": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "type": "object" }, "exceptionHandlers": { "items": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "type": "array" }, "fuses": { "items": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "type": "array" }, "module": { "properties": { "name": { "enum": [ "kanro" ], "type": "string" }, "version": { "enum": [ "*" ], "type": "string" } }, "type": "object" }, "name": { "enum": [ "FileRenderer" ], "type": "string" }, "next": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" }, { "items": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "type": "array" } ] }, "resource": { "type": "string" } }, "type": "object" }, "HttpExceptionRenderer": { "properties": { "dependencies": { "additionalProperties": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "type": "object" }, "exceptionHandlers": { "items": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "type": "array" }, "fuses": { "items": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "type": "array" }, "module": { "properties": { "name": { "enum": [ "kanro" ], "type": "string" }, "version": { "enum": [ "*" ], "type": "string" } }, "type": "object" }, "name": { "enum": [ "HttpExceptionRenderer" ], "type": "string" }, "next": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" }, { "items": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "type": "array" } ] }, "resource": { "type": "string" } }, "type": "object" }, "JsonRenderer": { "properties": { "dependencies": { "additionalProperties": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "type": "object" }, "exceptionHandlers": { "items": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "type": "array" }, "fuses": { "items": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "type": "array" }, "module": { "properties": { "name": { "enum": [ "kanro" ], "type": "string" }, "version": { "enum": [ "*" ], "type": "string" } }, "type": "object" }, "name": { "enum": [ "JsonRenderer" ], "type": "string" }, "next": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" }, { "items": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "type": "array" } ] }, "response": {} }, "type": "object" }, "MethodRouter": { "properties": { "CONNECT": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "DELETE": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "GET": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "HEAD": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "OPTIONS": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "PATCH": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "POST": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "PUT": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "TRACE": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "dependencies": { "additionalProperties": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "type": "object" }, "exceptionHandlers": { "items": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "type": "array" }, "fuses": { "items": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "type": "array" }, "module": { "properties": { "name": { "enum": [ "kanro" ], "type": "string" }, "version": { "enum": [ "*" ], "type": "string" } }, "type": "object" }, "name": { "enum": [ "MethodRouter" ], "type": "string" }, "next": { "items": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "type": "array" } }, "type": "object" }, "Module": { "description": "Information of a Kanro module.", "properties": { "name": { "description": "Name of this Kanro module.", "type": "string" }, "version": { "description": "Version of this Kanro module.", "type": "string" } }, "type": "object" }, "Router": { "properties": { "dependencies": { "additionalProperties": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "type": "object" }, "exceptionHandlers": { "items": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "type": "array" }, "fuses": { "items": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "type": "array" }, "module": { "properties": { "name": { "enum": [ "kanro" ], "type": "string" }, "version": { "enum": [ "*" ], "type": "string" } }, "type": "object" }, "name": { "enum": [ "Router" ], "type": "string" }, "next": { "items": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] }, "type": "array" } }, "patternProperties": { "^(/([\\S]*)?)$": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ] } }, "type": "object" } }, "description": "Config of Kanro APP.", "properties": { "entryPoint": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ], "description": "The http request entry point." }, "exitPoint": { "anyOf": [ { "$ref": "#/definitions/BaseNode" }, { "$ref": "#/definitions/Router" }, { "$ref": "#/definitions/MethodRouter" }, { "$ref": "#/definitions/FileRenderer" }, { "$ref": "#/definitions/HttpExceptionRenderer" }, { "$ref": "#/definitions/JsonRenderer" } ], "description": "The http response exit point." }, "port": { "description": "The port what Kanro HTTP server will listen.", "type": "number" }, "registry": { "description": "The NPM registry what module manager will used.", "type": "string" }, "resource": { "description": "The static resource dir of app.", "type": "string" } }, "type": "object" }