{
  "classes": [
    {
      "constants": [],
      "types": [
        {
          "lua_type": "type PageMeta = {\n    description: string?,\n    image: string?,\n    imageAlt: string?,\n    canonicalUrl: string?,\n    type: string?,\n}",
          "name": "PageMeta",
          "tags": [],
          "source": {
            "path": "",
            "line": 31
          },
          "fields": [
            {
              "lua_type": "description: string?",
              "name": "description",
              "desc": ""
            },
            {
              "lua_type": "image: string?",
              "name": "image",
              "desc": ""
            },
            {
              "lua_type": "imageAlt: string?",
              "name": "imageAlt",
              "desc": ""
            },
            {
              "lua_type": "canonicalUrl: string?",
              "name": "canonicalUrl",
              "desc": ""
            },
            {
              "lua_type": "type: string?",
              "name": "type",
              "desc": ""
            }
          ],
          "desc": "Metadata for a single page, used for <meta> tags and OpenGraph.\nReturned by metaGenerator or built from defaults."
        },
        {
          "lua_type": "type PageContext = {\n    kind: \"module\" | \"article\" | \"index\",\n    name: string?,\n    title: string?,\n    path: string?,\n    summary: string?,\n}",
          "name": "PageContext",
          "tags": [],
          "source": {
            "path": "",
            "line": 41
          },
          "fields": [
            {
              "lua_type": "kind: \"module\" | \"article\" | \"index\"",
              "name": "kind",
              "desc": ""
            },
            {
              "lua_type": "name: string?",
              "name": "name",
              "desc": ""
            },
            {
              "lua_type": "title: string?",
              "name": "title",
              "desc": ""
            },
            {
              "lua_type": "path: string?",
              "name": "path",
              "desc": ""
            },
            {
              "lua_type": "summary: string?",
              "name": "summary",
              "desc": ""
            }
          ],
          "desc": "Context passed to the metaGenerator callback so it can decide per-page meta."
        },
        {
          "lua_type": "type OpenGraphConfig = {\n    siteName: string?,\n    image: string?,\n    imageAlt: string?,\n    description: string?,\n    type: string?,\n    locale: string?,\n}",
          "name": "OpenGraphConfig",
          "tags": [],
          "source": {
            "path": "",
            "line": 49
          },
          "fields": [
            {
              "lua_type": "siteName: string?",
              "name": "siteName",
              "desc": ""
            },
            {
              "lua_type": "image: string?",
              "name": "image",
              "desc": ""
            },
            {
              "lua_type": "imageAlt: string?",
              "name": "imageAlt",
              "desc": ""
            },
            {
              "lua_type": "description: string?",
              "name": "description",
              "desc": ""
            },
            {
              "lua_type": "type: string?",
              "name": "type",
              "desc": ""
            },
            {
              "lua_type": "locale: string?",
              "name": "locale",
              "desc": ""
            }
          ],
          "desc": ""
        },
        {
          "lua_type": "type Config = {\n    output: string,\n    modules: string?,\n    articles: string?,\n    prefix: string?,\n    noModules: boolean?,\n    title: string?,\n    siteRoot: string?,\n    baseUrl: string?,\n    exportMode: (\"flat\" | \"directory\")?,\n    theme: string?,\n    static: string?,\n    favicon: string?,\n    extraHead: string?,\n    extraScripts: string?,\n    announcement: string?,\n    openGraph: OpenGraphConfig?,\n    articleMetaGenerator: (((context: PageContext) → PageMeta))?,\n    apiMetaGenerator: (((context: PageContext) → PageMeta))?,\n    customFilters: { [string]: ((any, { [string]: any }) → any) }?,\n    customGlobals: { [string]: any }?,\n    version: { name: string, label: string?, isDefault: boolean? }?,\n    redirects: { { from: string, to: string } }?,\n    hooks: { onBuildStart: (((cfg: Config) → ()))?, onPageRender: (((html: string, page: { kind: \"article\" | \"module\" | \"index\" | \"404\", name: string?, path: string }) → string))?, onBuildComplete: (((result: { moduleCount: number, articleCount: number, outputDir: string }) → ()))? }?,\n    clean: boolean?,\n    showLastUpdated: boolean?,\n}",
          "name": "Config",
          "tags": [],
          "source": {
            "path": "",
            "line": 58
          },
          "fields": [
            {
              "lua_type": "output: string",
              "name": "output",
              "desc": "Required"
            },
            {
              "lua_type": "modules: string?",
              "name": "modules",
              "desc": "Content sources"
            },
            {
              "lua_type": "articles: string?",
              "name": "articles",
              "desc": ""
            },
            {
              "lua_type": "prefix: string?",
              "name": "prefix",
              "desc": ""
            },
            {
              "lua_type": "noModules: boolean?",
              "name": "noModules",
              "desc": ""
            },
            {
              "lua_type": "title: string?",
              "name": "title",
              "desc": "Site settings"
            },
            {
              "lua_type": "siteRoot: string?",
              "name": "siteRoot",
              "desc": ""
            },
            {
              "lua_type": "baseUrl: string?",
              "name": "baseUrl",
              "desc": ""
            },
            {
              "lua_type": "exportMode: (\"flat\" | \"directory\")?",
              "name": "exportMode",
              "desc": ""
            },
            {
              "lua_type": "theme: string?",
              "name": "theme",
              "desc": "Theming"
            },
            {
              "lua_type": "static: string?",
              "name": "static",
              "desc": ""
            },
            {
              "lua_type": "favicon: string?",
              "name": "favicon",
              "desc": "HTML injections"
            },
            {
              "lua_type": "extraHead: string?",
              "name": "extraHead",
              "desc": ""
            },
            {
              "lua_type": "extraScripts: string?",
              "name": "extraScripts",
              "desc": ""
            },
            {
              "lua_type": "announcement: string?",
              "name": "announcement",
              "desc": ""
            },
            {
              "lua_type": "openGraph: OpenGraphConfig?",
              "name": "openGraph",
              "desc": "OpenGraph / SEO"
            },
            {
              "lua_type": "articleMetaGenerator: (((context: PageContext) → PageMeta))?",
              "name": "articleMetaGenerator",
              "desc": "Optional callbacks that return per-page meta for each page type.\nOverrides global openGraph defaults for that page.\nReturn nil fields to fall back to the global defaults."
            },
            {
              "lua_type": "apiMetaGenerator: (((context: PageContext) → PageMeta))?",
              "name": "apiMetaGenerator",
              "desc": ""
            },
            {
              "lua_type": "customFilters: { [string]: ((any, { [string]: any }) → any) }?",
              "name": "customFilters",
              "desc": "Template customisation"
            },
            {
              "lua_type": "customGlobals: { [string]: any }?",
              "name": "customGlobals",
              "desc": ""
            },
            {
              "lua_type": "version: { name: string, label: string?, isDefault: boolean? }?",
              "name": "version",
              "desc": "Versioning\nWhen set, the build output goes into output/{version.name}/ and a\nversions.json manifest is written/updated at the output root.\nThe version picker in the header reads this manifest."
            },
            {
              "lua_type": "redirects: { { from: string, to: string } }?",
              "name": "redirects",
              "desc": "Redirects\nEach entry generates an HTML redirect stub at the \"from\" path.\nUseful when pages are moved to keep old URLs working."
            },
            {
              "lua_type": "hooks: { onBuildStart: (((cfg: Config) → ()))?, onPageRender: (((html: string, page: { kind: \"article\" | \"module\" | \"index\" | \"404\", name: string?, path: string }) → string))?, onBuildComplete: (((result: { moduleCount: number, articleCount: number, outputDir: string }) → ()))? }?",
              "name": "hooks",
              "desc": "Build hooks\nCallbacks invoked at key points during the build. All are optional."
            },
            {
              "lua_type": "clean: boolean?",
              "name": "clean",
              "desc": "Build options"
            },
            {
              "lua_type": "showLastUpdated: boolean?",
              "name": "showLastUpdated",
              "desc": ""
            }
          ],
          "desc": ""
        }
      ],
      "name": "@eryx/eryxdoc",
      "tags": [],
      "functions": [
        {
          "source": {
            "path": "",
            "line": 353
          },
          "is_method": false,
          "signature": "eryxdoc.build(\n    cfg: Config  -- The build configuration.\n) → (\n      -- { warnings: { string }, moduleCount: number, articleCount: number } \n)",
          "owner": "eryxdoc",
          "desc": "Runs a full documentation build.\n",
          "tags": [],
          "name": "build",
          "return_str": "{ warnings: { string }, moduleCount: number, articleCount: number }",
          "function_type": "Function",
          "returns": [
            {
              "lua_type": "{ warnings: { string }, moduleCount: number, articleCount: number }",
              "desc": "{ warnings: { string }, moduleCount: number, articleCount: number } "
            }
          ],
          "params": [
            {
              "lua_type": "Config",
              "name": "cfg",
              "desc": "The build configuration."
            }
          ]
        },
        {
          "source": {
            "path": "",
            "line": 625
          },
          "is_method": false,
          "signature": "eryxdoc.getDefaultTheme() → string",
          "owner": "eryxdoc",
          "desc": "",
          "tags": [],
          "name": "getDefaultTheme",
          "return_str": "string",
          "function_type": "Function",
          "returns": [
            {
              "lua_type": "string",
              "desc": ""
            }
          ],
          "params": []
        }
      ],
      "properties": [],
      "source": {
        "path": "",
        "line": 0
      },
      "desc": "Docgen build engine — the programmatic API.\n\nUse this module when you want to drive eryxdoc from your own script\ninstead of going through main.luau's CLI.\n\n```luau\nlocal eryxdoc = require(\"./eryxdoc\")\n\neryxdoc.build({\n\ttitle = \"My Docs\",\n\tmodules = \"./src/modules\",\n\tarticles = \"./docs\",\n\toutput = \"./site\",\n\tprefix = \"@mylib\",\n})\n```\n"
    }
  ]
}