{"version":3,"file":"types.cjs","sources":["../src/types.ts"],"sourcesContent":["// Simple validation functions\nfunction validateDocItem(item: any): item is DocItem {\n  return (\n    typeof item === 'object' &&\n    item !== null &&\n    typeof item.name === 'string' &&\n    item.name.length > 0 &&\n    (item.type === 'section' || item.type === 'page') &&\n    typeof item.label === 'string' &&\n    item.label.length > 0 &&\n    (item.collapsed === undefined || typeof item.collapsed === 'boolean') &&\n    (item.url === undefined || typeof item.url === 'string')\n  );\n}\n\nfunction validateIndexFile(data: any): data is IndexFile {\n  return (\n    typeof data === 'object' &&\n    data !== null &&\n    Array.isArray(data.items) &&\n    data.items.every(validateDocItem)\n  );\n}\n\n// Export validation functions\nexport { validateDocItem, validateIndexFile };\n\n// Core types\nexport type DocItemType = \"section\" | \"page\";\n\nexport interface DocItem {\n  name: string;\n  type: DocItemType;\n  label: string;\n  collapsed?: boolean;\n  url?: string;\n}\n\nexport interface IndexFile {\n  items: DocItem[];\n}\n\n// Navigation tree types\nexport interface NavigationItem extends DocItem {\n  path?: string;\n  items?: NavigationItem[];\n  parent?: NavigationItem | undefined;\n}\n\nexport type ContentMode = 'all' | 'index-only';\n\n// Build output types\nexport interface BuildOptions {\n  appOutput?: string;\n  websiteOutput?: string;\n  staticOutput?: string;\n  includeContent?: boolean;\n  autoDiscover?: boolean; // Enable auto-discovery when .index.json is missing\n  /**\n   * Choose which markdown files to bundle:\n   * - `'all'` (default): include every markdown file under the content directory.\n   * - `'index-only'`: bundle only the files referenced in the generated navigation tree (aka `.index.json` entries).\n   */\n  contentMode?: ContentMode;\n  /**\n   * Optional link checking during build (off by default).\n   *\n   * - `true` enables checks with defaults (warnings only)\n   * - object form lets you tune behavior\n   */\n  linkCheck?: boolean | LinkCheckBuildOptions;\n}\n\nexport interface BuildResult {\n  navigation: NavigationItem[];\n  content?: Record<string, string> | undefined;\n  pages?: Array<{\n    path: string;\n    content: string;\n    html: string;\n  }> | undefined;\n  linkCheck?: LinkCheckResult | undefined;\n}\n\n// Content processing types\nexport interface ContentProcessor {\n  process(content: string): string;\n}\n\n// Link checking (builder-only feature, but result data is browser-safe)\nexport type LinkIssueReason = 'missing file' | 'unsupported protocol';\nexport type LinkWarningReason = 'not in navigation';\n\nexport interface LinkIssue {\n  file: string; // absolute path to source markdown file\n  target: string;\n  reason: LinkIssueReason;\n}\n\nexport interface LinkWarning {\n  file: string; // absolute path to source markdown file\n  target: string;\n  resolvedFile: string; // absolute resolved markdown file path\n  reason: LinkWarningReason;\n}\n\nexport interface LinkCheckResult {\n  filesChecked: number;\n  issues: LinkIssue[];\n  warnings: LinkWarning[];\n}\n\nexport interface LinkCheckBuildOptions {\n  /**\n   * Warn if a link resolves to a markdown file inside the docs root,\n   * but that file is not present in the generated navigation tree.\n   */\n  warnOnUnindexed?: boolean;\n  /**\n   * When true, `buildPages()` throws if any issues are found.\n   * When false/undefined, issues are reported in `BuildResult.linkCheck` only.\n   */\n  failOnBroken?: boolean;\n}\n"],"names":[],"mappings":";;AACA,SAAS,gBAAgB,MAA4B;AACnD,SACE,OAAO,SAAS,YAChB,SAAS,QACT,OAAO,KAAK,SAAS,YACrB,KAAK,KAAK,SAAS,MAClB,KAAK,SAAS,aAAa,KAAK,SAAS,WAC1C,OAAO,KAAK,UAAU,YACtB,KAAK,MAAM,SAAS,MACnB,KAAK,cAAc,UAAa,OAAO,KAAK,cAAc,eAC1D,KAAK,QAAQ,UAAa,OAAO,KAAK,QAAQ;AAEnD;AAEA,SAAS,kBAAkB,MAA8B;AACvD,SACE,OAAO,SAAS,YAChB,SAAS,QACT,MAAM,QAAQ,KAAK,KAAK,KACxB,KAAK,MAAM,MAAM,eAAe;AAEpC;;;"}