{
  "classes": [
    {
      "constants": [],
      "types": [
        {
          "lua_type": "type LogRecord = LoggingTypes.LogRecord",
          "name": "LogRecord",
          "tags": [],
          "source": {
            "path": "",
            "line": 13
          },
          "fields": [],
          "desc": ""
        },
        {
          "lua_type": "type LevelInput = LoggingTypes.LevelInput",
          "name": "LevelInput",
          "tags": [],
          "source": {
            "path": "",
            "line": 14
          },
          "fields": [],
          "desc": ""
        },
        {
          "lua_type": "type Handler = LoggingTypes.Handler",
          "name": "Handler",
          "tags": [],
          "source": {
            "path": "",
            "line": 15
          },
          "fields": [],
          "desc": ""
        },
        {
          "lua_type": "type StreamLike = { write: (((self: StreamLike, data: string) → ()))?, writeSync: (((self: StreamLike, data: string) → ()))? }",
          "name": "StreamLike",
          "tags": [],
          "source": {
            "path": "",
            "line": 17
          },
          "fields": [
            {
              "lua_type": "write: (((self: StreamLike, data: string) → ()))?",
              "name": "write",
              "desc": ""
            },
            {
              "lua_type": "writeSync: (((self: StreamLike, data: string) → ()))?",
              "name": "writeSync",
              "desc": ""
            }
          ],
          "desc": ""
        },
        {
          "lua_type": "type Options = { level: LevelInput?, filter: (((record: LogRecord) → boolean))?, write: (((line: string, record: LogRecord) → ()))?, stream: StreamLike? }",
          "name": "Options",
          "tags": [],
          "source": {
            "path": "",
            "line": 22
          },
          "fields": [
            {
              "lua_type": "level: LevelInput?",
              "name": "level",
              "desc": ""
            },
            {
              "lua_type": "filter: (((record: LogRecord) → boolean))?",
              "name": "filter",
              "desc": ""
            },
            {
              "lua_type": "write: (((line: string, record: LogRecord) → ()))?",
              "name": "write",
              "desc": ""
            },
            {
              "lua_type": "stream: StreamLike?",
              "name": "stream",
              "desc": ""
            }
          ],
          "desc": ""
        }
      ],
      "name": "@eryx/logging/JsonHandler",
      "tags": [],
      "functions": [
        {
          "source": {
            "path": "",
            "line": 91
          },
          "is_method": false,
          "signature": "JsonHandler.new(\n    options: Options?  -- Optional sink and filtering options.\n) → (\n    Handler  -- A logging handler suitable for structured log pipelines. \n)",
          "owner": "JsonHandler",
          "desc": "Creates an NDJSON logging handler.\n\nOutput sink precedence:\n1. `options.write(line, record)` when provided\n2. `options.stream` (`writeSync` preferred, otherwise `write`)\n3. stdout\n",
          "tags": [],
          "name": "new",
          "return_str": "Handler",
          "function_type": "Function",
          "returns": [
            {
              "lua_type": "Handler",
              "desc": "A logging handler suitable for structured log pipelines. "
            }
          ],
          "params": [
            {
              "lua_type": "Options?",
              "name": "options",
              "desc": "Optional sink and filtering options."
            }
          ]
        }
      ],
      "properties": [],
      "source": {
        "path": "",
        "line": 0
      },
      "desc": "JSON log handler.\n\nEncodes each log record as JSON and writes newline-delimited JSON (NDJSON)\nto a provided callback, stream-like object, or stdout.\n"
    }
  ]
}