{
  "version": "1.2.3",
  "name": "example",
  "allowedPackageNames": ["foo", "bar"],
  "pluginDownloadURL": "example.com/download",
  "types": {
    "example::Object": {
      "properties": {
        "foo": {
          "$ref": "#/resources/example::Resource"
        },
        "bar": {
          "type": "string"
        },
        "others": {
          "type": "array",
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/types/example::SomeOtherObject"
            }
          },
          "description": "List of lists of other objects"
        },
        "configs": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/types/example::ConfigMap"
          }
        },
        "stillOthers": {
          "type": "object",
          "additionalProperties": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/types/example::SomeOtherObject"
            }
          },
          "description": "Mapping from string to list of some other object"
        }
      },
      "type": "object"
    },
    "example::OtherResourceOutput": {
      "properties": {
        "foo": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "example::SomeOtherObject": {
      "properties": {
        "baz": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "example::ConfigMap": {
      "properties": {
        "config": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "example::EnumOverlay": {
      "type": "string",
      "enum": [
        {
          "name": "SomeEnumValue",
          "value": "SOME_ENUM_VALUE"
        }
      ],
      "isOverlay": true
    },
    "example::ConfigMapOverlay": {
      "isOverlay": true,
      "properties": {
        "config": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "example::ObjectWithNodeOptionalInputs": {
      "properties": {
        "foo": {
          "type": "string"
        },
        "bar": {
          "type": "integer"
        }
      },
      "required": ["foo"],
      "language": {
        "nodejs": {
          "requiredInputs": []
        }
      },
      "type": "object"
    }
  },
  "resources": {
    "example::Resource": {
      "properties": {
        "bar": {
          "type": "string",
          "secret": true
        },
        "baz": {
          "type": "string",
          "secret": true
        }
      },
      "inputProperties": {
        "bar": {
          "type": "string",
          "secret": true,
          "willReplaceOnChanges": true
        }
      },
      "type": "object"
    },
    "example::OtherResource": {
      "isComponent": true,
      "properties": {
        "foo": {
          "$ref": "#/resources/example::Resource"
        }
      },
      "inputProperties": {
        "foo": {
          "$ref": "#/resources/example::Resource"
        }
      },
      "type": "object"
    },
    "bar::BarResource": {
      "isComponent": true,
      "properties": {
        "foo": {
          "$ref": "#/resources/example::Resource"
        }
      },
      "inputProperties": {
        "foo": {
          "$ref": "#/resources/example::Resource"
        }
      },
      "type": "object"
    },
    "foo::FooResource": {
      "isComponent": true,
      "properties": {
        "foo": {
          "$ref": "#/resources/example::Resource"
        }
      },
      "inputProperties": {
        "foo": {
          "$ref": "#/resources/example::Resource"
        }
      },
      "type": "object"
    },

    "example::OverlayResource": {
      "isOverlay": true,
      "properties": {
        "foo": {
          "$ref": "#/types/example::ConfigMapOverlay"
        },
        "bar": {
          "$ref": "#/types/example::EnumOverlay"
        }
      },
      "inputProperties": {
        "foo": {
          "$ref": "#/types/example::ConfigMapOverlay"
        },
        "bar": {
          "$ref": "#/types/example::EnumOverlay"
        }
      },
      "type": "object"
    },
    "example::TypeUses": {
      "properties": {
        "foo": {
          "$ref": "#/types/example::Object"
        },
        "bar": {
          "$ref": "#/types/example::SomeOtherObject"
        },
        "baz": {
          "$ref": "#/types/example::ObjectWithNodeOptionalInputs"
        }
      },
      "inputProperties": {
        "foo": {
          "$ref": "#/types/example::Object"
        },
        "bar": {
          "$ref": "#/types/example::SomeOtherObject"
        },
        "baz": {
          "$ref": "#/types/example::ObjectWithNodeOptionalInputs"
        }
      },
      "type": "object"
    }
  },
  "functions": {
    "example::argFunction": {
      "inputs": {
        "properties": {
          "arg1": {
            "$ref": "#/resources/example::Resource"
          }
        }
      },
      "outputs": {
        "properties": {
          "result": {
            "$ref": "#/resources/example::Resource"
          }
        }
      }
    },
    "example::overlayFunction": {
      "isOverlay": true,
      "inputs": {
        "properties": {
          "arg1": {
            "$ref": "#/resources/example::Resource"
          }
        }
      },
      "outputs": {
        "properties": {
          "result": {
            "$ref": "#/resources/example::Resource"
          }
        }
      }
    }
  },
  "language": {
    "csharp": {
      "respectSchemaVersion": true
    },
    "go": {
      "importBasePath": "go-overridden-internal-module-name/example",
      "generateExtraInputTypes": true,
      "respectSchemaVersion": true,
      "internalModuleName": "utilities"
    },
    "nodejs": {
      "respectSchemaVersion": true
    },
    "python": {
      "respectSchemaVersion": true
    }
  }
}