{
  "classes": [
    {
      "constants": [],
      "types": [
        {
          "lua_type": "type MultipartField = {\n    name: string,\n    value: string,\n    filename: string?,\n    contentType: string?,\n}",
          "name": "MultipartField",
          "tags": [],
          "source": {
            "path": "",
            "line": 7
          },
          "fields": [
            {
              "lua_type": "name: string",
              "name": "name",
              "desc": "The form field name."
            },
            {
              "lua_type": "value: string",
              "name": "value",
              "desc": "The field value (text or file content)."
            },
            {
              "lua_type": "filename: string?",
              "name": "filename",
              "desc": "Optional filename for file upload fields."
            },
            {
              "lua_type": "contentType: string?",
              "name": "contentType",
              "desc": "Optional MIME type. Defaults to `application/octet-stream` for files."
            }
          ],
          "desc": "A single field in a multipart form.\n\nFor file uploads, provide `filename` and optionally `contentType`.\nThe `value` is the raw file content as a string.\n"
        },
        {
          "lua_type": "type ParsedMultipartField = {\n    name: string,\n    value: string,\n    filename: string?,\n    contentType: string?,\n    headers: { [string]: string },\n}",
          "name": "ParsedMultipartField",
          "tags": [],
          "source": {
            "path": "",
            "line": 18
          },
          "fields": [
            {
              "lua_type": "name: string",
              "name": "name",
              "desc": ""
            },
            {
              "lua_type": "value: string",
              "name": "value",
              "desc": ""
            },
            {
              "lua_type": "filename: string?",
              "name": "filename",
              "desc": ""
            },
            {
              "lua_type": "contentType: string?",
              "name": "contentType",
              "desc": ""
            },
            {
              "lua_type": "headers: { [string]: string }",
              "name": "headers",
              "desc": ""
            }
          ],
          "desc": ""
        }
      ],
      "name": "@eryx/http/multipart",
      "tags": [],
      "functions": [
        {
          "source": {
            "path": "",
            "line": 51
          },
          "is_method": false,
          "signature": "multipart.encodeFields(\n    fields: { MultipartField }  -- A list of [[MultipartField]] entries.\n) → (\n    string,  -- The encoded multipart body.\n    string  -- The `Content-Type` header value including boundary. \n)",
          "owner": "multipart",
          "desc": "Encodes a list of form fields as a `multipart/form-data` body.\n\nReturns the encoded body string and the `Content-Type` header\n(which includes the boundary). Pass both to a request function:\n\n```luau\nlocal body, contentType = http.multipart({\n    { name = \"username\", value = \"alice\" },\n    { name = \"avatar\", value = fileContents, filename = \"photo.png\", contentType = \"image/png\" },\n})\n\nlocal resp = http.post(\"http://example.com/upload\", body, {\n    headers = { [\"Content-Type\"] = contentType },\n})\n```\n",
          "tags": [],
          "name": "encodeFields",
          "return_str": "(string, string)",
          "function_type": "Function",
          "returns": [
            {
              "lua_type": "string",
              "desc": "The encoded multipart body."
            },
            {
              "lua_type": "string",
              "desc": "The `Content-Type` header value including boundary. "
            }
          ],
          "params": [
            {
              "lua_type": "{ MultipartField }",
              "name": "fields",
              "desc": "A list of [[MultipartField]] entries."
            }
          ]
        },
        {
          "source": {
            "path": "",
            "line": 114
          },
          "is_method": false,
          "signature": "multipart.parse(body: string, contentTypeOrBoundary: string) → { ParsedMultipartField }",
          "owner": "multipart",
          "desc": "Parses a `multipart/form-data` body into individual fields.\n\nPass the raw body and either the full `Content-Type` header value or\njust the boundary string.\n",
          "tags": [],
          "name": "parse",
          "return_str": "{ ParsedMultipartField }",
          "function_type": "Function",
          "returns": [
            {
              "lua_type": "{ ParsedMultipartField }",
              "desc": ""
            }
          ],
          "params": [
            {
              "lua_type": "string",
              "name": "body",
              "desc": ""
            },
            {
              "lua_type": "string",
              "name": "contentTypeOrBoundary",
              "desc": ""
            }
          ]
        }
      ],
      "properties": [],
      "source": {
        "path": "",
        "line": 0
      },
      "desc": ""
    }
  ]
}