{"version":3,"sources":["../src/parse.ts","../src/format.ts","../src/types-extract.ts"],"names":[],"mappings":"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","file":"chunk-5EL6F5H5.cjs","sourcesContent":["import type { MDXLDDocument, MDXLDData, ParseOptions } from './types.js'\n\n// Matches YAML frontmatter: ---\\n<content>\\n--- or ---\\n--- (empty)\nconst YAML_FRONTMATTER_REGEX = /^---(?:\\r?\\n([\\s\\S]*?))?\\r?\\n---(?:\\r?\\n|$)/\n\n/**\n * Simple YAML parser for frontmatter\n * Handles basic key-value pairs, arrays, and nested objects\n */\nfunction parseYaml(yaml: string): MDXLDData {\n  const result: MDXLDData = {}\n  const lines = yaml.split('\\n')\n  const stack: { indent: number; obj: Record<string, unknown>; key?: string }[] = [{ indent: -1, obj: result }]\n\n  for (let i = 0; i < lines.length; i++) {\n    const line = lines[i]\n    if (!line || line.trim() === '' || line.trim().startsWith('#')) continue\n\n    const indent = line.search(/\\S/)\n    const trimmed = line.trim()\n\n    // Pop stack until we find the right parent\n    while (stack.length > 1 && indent <= stack[stack.length - 1]!.indent) {\n      stack.pop()\n    }\n\n    const current = stack[stack.length - 1]!\n\n    // Array item\n    if (trimmed.startsWith('- ')) {\n      const value = trimmed.slice(2).trim()\n      const parent = current.obj\n      const key = current.key\n\n      if (key && Array.isArray(parent[key])) {\n        if (value.includes(':')) {\n          // Nested object in array\n          const obj: Record<string, unknown> = {}\n          const [k, v] = value.split(':').map((s) => s.trim())\n          if (k) obj[k] = parseValue(v || '')\n          ;(parent[key] as unknown[]).push(obj)\n          stack.push({ indent, obj, key })\n        } else {\n          ;(parent[key] as unknown[]).push(parseValue(value))\n        }\n      }\n      continue\n    }\n\n    // Key-value pair\n    const colonIndex = trimmed.indexOf(':')\n    if (colonIndex > 0) {\n      const key = trimmed.slice(0, colonIndex).trim()\n      const value = trimmed.slice(colonIndex + 1).trim()\n\n      if (value === '') {\n        // Check if next line is array or object\n        const nextLine = lines[i + 1]\n        if (nextLine && nextLine.trim().startsWith('- ')) {\n          current.obj[key] = []\n          stack.push({ indent, obj: current.obj, key })\n        } else {\n          current.obj[key] = {}\n          stack.push({ indent, obj: current.obj[key] as Record<string, unknown> })\n        }\n      } else {\n        current.obj[key] = parseValue(value)\n      }\n    }\n  }\n\n  return result\n}\n\n/**\n * Parse a YAML value string into its JavaScript type\n */\nfunction parseValue(value: string): unknown {\n  if (value === '' || value === '~' || value === 'null') return null\n  if (value === 'true') return true\n  if (value === 'false') return false\n\n  // Quoted string\n  if ((value.startsWith('\"') && value.endsWith('\"')) || (value.startsWith(\"'\") && value.endsWith(\"'\"))) {\n    return value.slice(1, -1)\n  }\n\n  // Number\n  const num = Number(value)\n  if (!isNaN(num) && value !== '') return num\n\n  // Inline array\n  if (value.startsWith('[') && value.endsWith(']')) {\n    const inner = value.slice(1, -1).trim()\n    if (inner === '') return []\n    return inner.split(',').map((s) => parseValue(s.trim()))\n  }\n\n  return value\n}\n\n/**\n * Extract LD properties from data object\n */\nfunction extractLDProperties(data: MDXLDData): {\n  id?: string\n  type?: string | string[]\n  context?: string | string[] | Record<string, unknown>\n  rest: MDXLDData\n} {\n  const { $id, $type, $context, ...rest } = data\n  return {\n    id: $id,\n    type: $type,\n    context: $context,\n    rest: rest as MDXLDData,\n  }\n}\n\n/**\n * Parse MDXLD content into a document\n *\n * @param content - Raw MDXLD string content\n * @param options - Parse options\n * @returns Parsed MDXLD document\n *\n * @example\n * ```ts\n * const doc = parse(`---\n * $id: https://example.com/doc\n * $type: Article\n * title: Hello World\n * ---\n *\n * # Hello World\n * `)\n *\n * // Expanded mode (default):\n * // { id: 'https://example.com/doc', type: 'Article', data: { title: 'Hello World' }, content: '# Hello World\\n' }\n *\n * // Flat mode:\n * // { data: { $id: 'https://example.com/doc', $type: 'Article', title: 'Hello World' }, content: '# Hello World\\n' }\n * ```\n */\nexport function parse(content: string, options: ParseOptions = {}): MDXLDDocument {\n  const { mode = 'expanded' } = options\n\n  const match = content.match(YAML_FRONTMATTER_REGEX)\n  let data: MDXLDData = {}\n  let mdxContent = content\n\n  if (match) {\n    const yamlContent = match[1] || ''\n    data = parseYaml(yamlContent)\n    mdxContent = content.slice(match[0].length)\n  }\n\n  if (mode === 'flat') {\n    return {\n      data,\n      content: mdxContent,\n    }\n  }\n\n  // Expanded mode - extract $id, $type, $context to root level\n  const { id, type, context, rest } = extractLDProperties(data)\n\n  return {\n    ...(id !== undefined && { id }),\n    ...(type !== undefined && { type }),\n    ...(context !== undefined && { context }),\n    data: rest,\n    content: mdxContent,\n  }\n}\n","/**\n * MDXLD Format Module\n *\n * Formats MDX files using Prettier with custom formatting for TypeScript type blocks.\n * Aligns trailing comments in type definitions to the widest property line.\n *\n * @packageDocumentation\n */\n\nexport interface FormatOptions {\n  /** Use Prettier for base formatting (default: true) */\n  prettier?: boolean\n  /** Prettier config file path */\n  prettierConfig?: string\n  /** Tab width for alignment (default: 2) */\n  tabWidth?: number\n  /** Minimum gap between code and comment (default: 2) */\n  minCommentGap?: number\n  /** Target column for comment alignment (default: auto-calculated) */\n  commentColumn?: number\n}\n\ninterface CodeBlock {\n  start: number\n  end: number\n  lang: string\n  meta: string\n  content: string\n  raw: string\n}\n\ninterface TypeBlock {\n  startLine: number\n  endLine: number\n  lines: string[]\n}\n\n/**\n * Format MDXLD content\n *\n * @param content - Raw MDXLD string content\n * @param options - Format options\n * @returns Formatted content\n */\nexport async function format(content: string, options: FormatOptions = {}): Promise<string> {\n  const { prettier: usePrettier = true } = options\n\n  let result = content\n\n  // First, run Prettier if enabled\n  if (usePrettier) {\n    result = await formatWithPrettier(result, options)\n  }\n\n  // Then apply custom TypeScript type comment alignment\n  result = formatTypeComments(result, options)\n\n  return result\n}\n\n/**\n * Format content using Prettier\n */\nasync function formatWithPrettier(content: string, options: FormatOptions): Promise<string> {\n  try {\n    // Dynamic import to handle optional dependency\n    const prettier = await import('prettier')\n\n    // Try to resolve config from the project\n    const config = options.prettierConfig\n      ? await prettier.resolveConfig(options.prettierConfig)\n      : await prettier.resolveConfig(process.cwd())\n\n    return await prettier.format(content, {\n      ...config,\n      parser: 'mdx',\n    })\n  } catch (error) {\n    // If Prettier is not available or fails, return content as-is\n    if ((error as NodeJS.ErrnoException).code === 'ERR_MODULE_NOT_FOUND') {\n      console.warn('Prettier not found, skipping base formatting. Install prettier for full formatting support.')\n    } else {\n      console.warn('Prettier formatting failed:', (error as Error).message)\n    }\n    return content\n  }\n}\n\n/**\n * Format TypeScript type blocks with aligned comments\n *\n * Looks for code blocks with ```ts type or ```ts types and aligns trailing comments\n */\nexport function formatTypeComments(content: string, options: FormatOptions = {}): string {\n  const { minCommentGap = 2, commentColumn } = options\n\n  // Find all TypeScript type code blocks\n  const codeBlocks = findCodeBlocks(content)\n  const typeBlocks = codeBlocks.filter((block) => {\n    const langParts = block.lang.split(/\\s+/)\n    return (\n      (langParts[0] === 'ts' || langParts[0] === 'typescript') &&\n      (langParts.includes('type') || langParts.includes('types'))\n    )\n  })\n\n  if (typeBlocks.length === 0) {\n    return content\n  }\n\n  // Process blocks in reverse order to maintain correct positions\n  let result = content\n  for (let i = typeBlocks.length - 1; i >= 0; i--) {\n    const block = typeBlocks[i]!\n    const formattedContent = alignTypeBlockComments(block.content, minCommentGap, commentColumn)\n    const newBlock = '```' + block.lang + '\\n' + formattedContent + '\\n```'\n    result = result.slice(0, block.start) + newBlock + result.slice(block.end)\n  }\n\n  return result\n}\n\n/**\n * Find all code blocks in content\n */\nfunction findCodeBlocks(content: string): CodeBlock[] {\n  const blocks: CodeBlock[] = []\n  // Match code blocks: ```lang meta\\ncontent\\n```\n  // lang can include spaces like \"ts type\" or \"ts types\"\n  const regex = /```([^\\n]*)\\n([\\s\\S]*?)\\n```/g\n  let match\n\n  while ((match = regex.exec(content)) !== null) {\n    const fullLang = match[1]?.trim() || ''\n    blocks.push({\n      start: match.index,\n      end: match.index + match[0].length,\n      lang: fullLang,\n      meta: '',\n      content: match[2] || '',\n      raw: match[0],\n    })\n  }\n\n  return blocks\n}\n\n/**\n * Align comments in a TypeScript type block\n *\n * Finds each type definition (type X = { ... }) and aligns comments within that block\n */\nfunction alignTypeBlockComments(content: string, minGap: number, targetColumn?: number): string {\n  const lines = content.split('\\n')\n\n  // Find type blocks (type X = { ... })\n  const typeBlocks = findTypeDefinitions(lines)\n\n  // Process each type block independently\n  for (const block of typeBlocks) {\n    alignBlockComments(lines, block, minGap, targetColumn)\n  }\n\n  return lines.join('\\n')\n}\n\n/**\n * Find type definition blocks in the lines\n */\nfunction findTypeDefinitions(lines: string[]): TypeBlock[] {\n  const blocks: TypeBlock[] = []\n  let i = 0\n\n  while (i < lines.length) {\n    const line = lines[i]!\n\n    // Look for type or interface definitions\n    if (/^\\s*(export\\s+)?(type|interface)\\s+\\w+/.test(line)) {\n      const startLine = i\n      let braceCount = 0\n      let foundBrace = false\n\n      // Count braces to find the end of the type\n      for (let j = i; j < lines.length; j++) {\n        const currentLine = lines[j]!\n        for (const char of currentLine) {\n          if (char === '{') {\n            braceCount++\n            foundBrace = true\n          } else if (char === '}') {\n            braceCount--\n          }\n        }\n\n        if (foundBrace && braceCount === 0) {\n          blocks.push({\n            startLine,\n            endLine: j,\n            lines: lines.slice(startLine, j + 1),\n          })\n          i = j + 1\n          break\n        }\n      }\n\n      if (!foundBrace || braceCount !== 0) {\n        i++\n      }\n    } else {\n      i++\n    }\n  }\n\n  return blocks\n}\n\n/**\n * Align comments within a specific type block\n */\nfunction alignBlockComments(lines: string[], block: TypeBlock, minGap: number, targetColumn?: number): void {\n  // Find all lines with trailing comments and calculate max code width\n  const linesWithComments: { index: number; code: string; comment: string }[] = []\n  let maxCodeWidth = 0\n\n  for (let i = block.startLine; i <= block.endLine; i++) {\n    const line = lines[i]!\n    const parsed = parseLineComment(line)\n\n    if (parsed.comment) {\n      linesWithComments.push({\n        index: i,\n        code: parsed.code,\n        comment: parsed.comment,\n      })\n      maxCodeWidth = Math.max(maxCodeWidth, parsed.code.trimEnd().length)\n    }\n  }\n\n  if (linesWithComments.length === 0) {\n    return\n  }\n\n  // Calculate target column: either specified, or max code width + min gap\n  const column = targetColumn ?? maxCodeWidth + minGap\n\n  // Align comments\n  for (const { index, code, comment } of linesWithComments) {\n    const codeWidth = code.trimEnd().length\n    const spaces = Math.max(minGap, column - codeWidth)\n    lines[index] = code.trimEnd() + ' '.repeat(spaces) + comment\n  }\n}\n\n/**\n * Parse a line to extract code and trailing comment\n */\nfunction parseLineComment(line: string): { code: string; comment: string } {\n  // Handle string literals and avoid false positives\n  let inString: string | null = null\n  let i = 0\n\n  while (i < line.length) {\n    const char = line[i]!\n\n    // Handle string literals\n    if ((char === '\"' || char === \"'\" || char === '`') && (i === 0 || line[i - 1] !== '\\\\')) {\n      if (inString === char) {\n        inString = null\n      } else if (!inString) {\n        inString = char\n      }\n    }\n\n    // Check for // comment outside strings\n    if (!inString && char === '/' && line[i + 1] === '/') {\n      return {\n        code: line.slice(0, i),\n        comment: line.slice(i),\n      }\n    }\n\n    i++\n  }\n\n  return { code: line, comment: '' }\n}\n\n/**\n * Format a single TypeScript type definition string\n *\n * Useful for formatting type definitions outside of MDX context\n *\n * @param typeCode - TypeScript type definition code\n * @param options - Format options\n * @returns Formatted type code with aligned comments\n */\nexport function formatTypeDefinition(typeCode: string, options: FormatOptions = {}): string {\n  return alignTypeBlockComments(typeCode, options.minCommentGap ?? 2, options.commentColumn)\n}\n","/**\n * MDXLD Types Extraction\n *\n * Extract TypeScript type definitions from MDX code blocks marked with `ts type` or `ts types`.\n * Generates proper .d.ts files with exports.\n *\n * @packageDocumentation\n */\n\nexport interface ExtractedType {\n  name: string\n  kind: 'type' | 'interface'\n  exported: boolean\n  code: string\n  source?: string\n}\n\nexport interface TypesExtractOptions {\n  /** Add export to non-exported types (default: true) */\n  exportAll?: boolean\n  /** Include source file comments (default: true) */\n  includeSourceComments?: boolean\n  /** Header comment for generated file */\n  header?: string\n}\n\ninterface CodeBlock {\n  lang: string\n  content: string\n  source?: string\n}\n\n/**\n * Extract TypeScript types from MDX content\n */\nexport function extractTypesFromContent(content: string, source?: string): ExtractedType[] {\n  const codeBlocks = findTypeCodeBlocks(content)\n  const types: ExtractedType[] = []\n\n  for (const block of codeBlocks) {\n    const extracted = parseTypeDefinitions(block.content)\n    for (const type of extracted) {\n      type.source = source\n      types.push(type)\n    }\n  }\n\n  return types\n}\n\n/**\n * Find all code blocks marked as TypeScript types\n */\nfunction findTypeCodeBlocks(content: string): CodeBlock[] {\n  const blocks: CodeBlock[] = []\n  const regex = /```([^\\n]*)\\n([\\s\\S]*?)\\n```/g\n  let match\n\n  while ((match = regex.exec(content)) !== null) {\n    const lang = match[1]?.trim() || ''\n    const langParts = lang.split(/\\s+/)\n\n    // Check for ts type, ts types, typescript type, typescript types\n    if (\n      (langParts[0] === 'ts' || langParts[0] === 'typescript') &&\n      (langParts.includes('type') || langParts.includes('types'))\n    ) {\n      blocks.push({\n        lang,\n        content: match[2] || '',\n      })\n    }\n  }\n\n  return blocks\n}\n\n/**\n * Parse type and interface definitions from TypeScript code\n */\nfunction parseTypeDefinitions(code: string): ExtractedType[] {\n  const types: ExtractedType[] = []\n  const lines = code.split('\\n')\n\n  let i = 0\n  while (i < lines.length) {\n    const line = lines[i]!\n\n    // Skip empty lines and comments\n    if (line.trim() === '' || line.trim().startsWith('//')) {\n      i++\n      continue\n    }\n\n    // Match type definition: [export] type Name = ...\n    const typeMatch = line.match(/^(\\s*)(export\\s+)?type\\s+(\\w+)/)\n    if (typeMatch) {\n      const exported = !!typeMatch[2]\n      const name = typeMatch[3]!\n      const startLine = i\n\n      // Find the end of the type definition\n      let braceCount = 0\n      let foundBrace = false\n      let endLine = i\n\n      for (let j = i; j < lines.length; j++) {\n        const currentLine = lines[j]!\n\n        for (const char of currentLine) {\n          if (char === '{' || char === '(') {\n            braceCount++\n            foundBrace = true\n          } else if (char === '}' || char === ')') {\n            braceCount--\n          }\n        }\n\n        // Type ends at closing brace or at a line without continuation\n        if (foundBrace && braceCount === 0) {\n          endLine = j\n          break\n        }\n\n        // Simple type alias (no braces)\n        if (!foundBrace && !currentLine.trim().endsWith('=') && !currentLine.trim().endsWith('|') && !currentLine.trim().endsWith('&')) {\n          endLine = j\n          break\n        }\n\n        endLine = j\n      }\n\n      const typeCode = lines.slice(startLine, endLine + 1).join('\\n')\n      types.push({\n        name,\n        kind: 'type',\n        exported,\n        code: typeCode,\n      })\n\n      i = endLine + 1\n      continue\n    }\n\n    // Match interface definition: [export] interface Name ...\n    const interfaceMatch = line.match(/^(\\s*)(export\\s+)?interface\\s+(\\w+)/)\n    if (interfaceMatch) {\n      const exported = !!interfaceMatch[2]\n      const name = interfaceMatch[3]!\n      const startLine = i\n\n      // Find the end of the interface definition\n      let braceCount = 0\n      let foundBrace = false\n      let endLine = i\n\n      for (let j = i; j < lines.length; j++) {\n        const currentLine = lines[j]!\n\n        for (const char of currentLine) {\n          if (char === '{') {\n            braceCount++\n            foundBrace = true\n          } else if (char === '}') {\n            braceCount--\n          }\n        }\n\n        if (foundBrace && braceCount === 0) {\n          endLine = j\n          break\n        }\n\n        endLine = j\n      }\n\n      const interfaceCode = lines.slice(startLine, endLine + 1).join('\\n')\n      types.push({\n        name,\n        kind: 'interface',\n        exported,\n        code: interfaceCode,\n      })\n\n      i = endLine + 1\n      continue\n    }\n\n    i++\n  }\n\n  return types\n}\n\n/**\n * Generate .d.ts content from extracted types\n */\nexport function generateDtsFromTypes(types: ExtractedType[], options: TypesExtractOptions = {}): string {\n  const { exportAll = true, includeSourceComments = true, header } = options\n\n  const lines: string[] = []\n\n  // Header\n  if (header) {\n    lines.push(header)\n  } else {\n    lines.push('/**')\n    lines.push(' * Auto-generated TypeScript types from MDXLD documents')\n    lines.push(' * Generated by: mdxld types')\n    lines.push(' *')\n    lines.push(' * DO NOT EDIT MANUALLY')\n    lines.push(' */')\n  }\n  lines.push('')\n\n  // Group types by source file\n  const bySource = new Map<string, ExtractedType[]>()\n  for (const type of types) {\n    const source = type.source || '_default'\n    const existing = bySource.get(source) || []\n    existing.push(type)\n    bySource.set(source, existing)\n  }\n\n  // Generate types\n  for (const [source, sourceTypes] of bySource) {\n    if (includeSourceComments && source !== '_default') {\n      lines.push(`// From: ${source}`)\n      lines.push('')\n    }\n\n    for (const type of sourceTypes) {\n      let code = type.code\n\n      // Add export if needed\n      if (exportAll && !type.exported) {\n        if (type.kind === 'type') {\n          code = code.replace(/^(\\s*)type\\s+/, '$1export type ')\n        } else {\n          code = code.replace(/^(\\s*)interface\\s+/, '$1export interface ')\n        }\n      }\n\n      lines.push(code)\n      lines.push('')\n    }\n  }\n\n  return lines.join('\\n')\n}\n\n/**\n * Deduplicate types by name, keeping the last definition\n */\nexport function deduplicateTypes(types: ExtractedType[]): ExtractedType[] {\n  const byName = new Map<string, ExtractedType>()\n\n  for (const type of types) {\n    byName.set(type.name, type)\n  }\n\n  return Array.from(byName.values())\n}\n\n/**\n * Sort types to ensure dependencies come first (basic topological sort)\n */\nexport function sortTypes(types: ExtractedType[]): ExtractedType[] {\n  const typeNames = new Set(types.map((t) => t.name))\n  const result: ExtractedType[] = []\n  const added = new Set<string>()\n\n  // Helper to find dependencies in type code\n  function findDependencies(code: string): string[] {\n    const deps: string[] = []\n    for (const name of typeNames) {\n      // Look for type references (not in the definition itself)\n      const regex = new RegExp(`\\\\b${name}\\\\b`, 'g')\n      const matches = code.match(regex) || []\n      // If found more than once (definition + usage) or in extends/implements\n      if (matches.length > 1 || code.includes(`extends ${name}`) || code.includes(`: ${name}`)) {\n        deps.push(name)\n      }\n    }\n    return deps\n  }\n\n  // Add types with no dependencies first, then their dependents\n  function addType(type: ExtractedType, visited: Set<string> = new Set()): void {\n    if (added.has(type.name) || visited.has(type.name)) return\n    visited.add(type.name)\n\n    const deps = findDependencies(type.code).filter((d) => d !== type.name)\n    for (const dep of deps) {\n      const depType = types.find((t) => t.name === dep)\n      if (depType) {\n        addType(depType, visited)\n      }\n    }\n\n    if (!added.has(type.name)) {\n      result.push(type)\n      added.add(type.name)\n    }\n  }\n\n  for (const type of types) {\n    addType(type)\n  }\n\n  return result\n}\n"]}