{
  "factory": {
    "id": "base-object",
    "type": "entaxy.runtime.object",
    "displayName": "Base abstract object",
    "description": "Abstract object",
    "isAbstract": true,
    "label": "object",
    "@LOCALS": {
      "displayName": {
        "defaultValue": "",
        "required": true
      }
    }
  },
  "entaxy.runtime.object": {
    "isEntaxyObject": true
  },
  "fields": {
    "objectId": {
      "displayName": "Object Id",
      "type": "String",
      "description": "ID for Entaxy entity",
      "required": true,
      "immutable": true,
      "@TYPEINFO": {
        "validation": {
          "rules": {
            "length": {
              "min": 3
            },
            "content": {
              "regex": "^[a-zA-Z][a-zA-Z0-9-]*$",
              "errorMessage": "Value can contain only latin letters, numbers and hyphen and should start with a letter"
            }
          }
        }
      },
      "addToOutput": "*"
    },
    "displayName": {
      "type": "String",
      "description": "Name of the Entaxy entity that will be used as an alias for displaying at UI",
      "displayName": "Display name",
      "@UI": {
        "ignoreChildChanges": true
      }
    },
    "description": {
      "type": "String",
      "displayName": "Description",
      "required": false,
      "isHidden": false,
      "@TYPEINFO": {
        "useTextarea": true
      },
      "@UI": {
        "ignoreChildChanges": true
      }
    },
    "##publish": {
      "type": "Map",
      "required": true,
      "isHidden": true,
      "configurable": false,
      "@INTERNAL": true,
      "defaultValue": {
        "name": {
          "@CALCULATED": {
            "expression": "${objectId}",
            "lazy": true
          }
        },
        "displayName": {
          "@CALCULATED": {
            "expression": "${properties.displayName}",
            "lazy": true,
            "allowNulls": true,
            "allowObjects": false,
            "resultType": "string",
            "fallbackObject": ""
          }
        },
        "factory": {
          "@CALCULATED": {
            "expression": "${factoryId}",
            "lazy": false
          }
        },
        "label": {
          "@CALCULATED": {
            "expression": "${#FACTORY#.factory.label}",
            "lazy": false
          }
        },
        "scope": {
          "@CALCULATED": {
            "expression": "${scope}",
            "allowObjects": false,
            "lazy": false
          }
        }
      }
    }
  },
  "outputs": {
    "init": {
      "isDefault": true,
      "fields": {
        "displayName": {},
        "##publish": {}
      }
    }
  }
}
