{"version":3,"sources":["../src/jpz.ts"],"names":[],"mappings":"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","file":"chunk-KP7U2ZYG.mjs","sourcesContent":["/**\n * Parser for JPZ crossword format (Crossword Compiler)\n * JPZ is an XML-based format\n */\n\nimport { XMLParser } from 'fast-xml-parser';\nimport { UnsupportedPuzzleTypeError, JpzParseError } from './errors';\nimport type { Puzzle, Grid, Cell as UnifiedCell, Clues, ParseOptions } from './types';\nimport { ErrorCode } from './types';\nimport { MAX_GRID_WIDTH, MAX_GRID_HEIGHT } from './constants';\n\n// Type definitions for XML parser output\ninterface JpzXmlNode {\n  [key: string]: unknown;\n  '@_width'?: string;\n  '@_height'?: string;\n  '@_x'?: string;\n  '@_y'?: string;\n  '@_type'?: string;\n  '@_solution'?: string;\n  '@_letter'?: string;\n  '@_number'?: string;\n  '@_background-shape'?: string;\n  '@_background-color'?: string;\n  '@_top-bar'?: string;\n  '@_bottom-bar'?: string;\n  '@_left-bar'?: string;\n  '@_right-bar'?: string;\n  '@_title'?: string;\n  '@_format'?: string;\n  '@_text'?: string;\n  '@_word'?: string;\n  '@_id'?: string;\n  '#text'?: string;\n  cell?: JpzXmlNode | JpzXmlNode[];\n  cells?: { cell?: JpzXmlNode | JpzXmlNode[] };\n  title?: string | { b?: string; '#text'?: string };\n  creator?: string;\n  author?: string;\n  copyright?: string;\n  description?: string;\n  publisher?: string;\n  identifier?: string;\n  clue?: JpzXmlNode | JpzXmlNode[];\n  text?: string;\n  number?: string;\n  word?: JpzXmlNode | JpzXmlNode[];\n  // Additional properties found in parsing\n  'rectangular-puzzle'?: JpzXmlNode;\n  puzzle?: JpzXmlNode;\n  crossword?: JpzXmlNode;\n  coded?: unknown;\n  sudoku?: unknown;\n  kakuro?: unknown;\n  'word-search'?: unknown;\n  wordsearch?: unknown;\n  metadata?: JpzXmlNode;\n  grid?: JpzXmlNode;\n  Grid?: JpzXmlNode;\n  clues?: JpzXmlNode | JpzXmlNode[];\n  Clues?: JpzXmlNode | JpzXmlNode[];\n  words?: JpzXmlNode;\n  Words?: JpzXmlNode;\n}\n\ninterface JpzXmlRoot {\n  'crossword-compiler-applet'?: JpzXmlNode;\n  'crossword-compiler'?: JpzXmlNode;\n  puzzle?: JpzXmlNode;\n  crossword?: JpzXmlNode;\n}\n\n// Type guards\nfunction isJpzXmlNode(value: unknown): value is JpzXmlNode {\n  return typeof value === 'object' && value !== null;\n}\n\nfunction isString(value: unknown): value is string {\n  return typeof value === 'string';\n}\n\nfunction parseStringAttribute(value: unknown): string | undefined {\n  return isString(value) ? value : undefined;\n}\n\nfunction parseIntAttribute(value: unknown): number | undefined {\n  if (isString(value)) {\n    const parsed = Number.parseInt(value, 10);\n    return Number.isNaN(parsed) ? undefined : parsed;\n  }\n  return undefined;\n}\n\nexport interface JpzMetadata {\n  title?: string;\n  creator?: string;\n  copyright?: string;\n  description?: string;\n  publisher?: string;\n  identifier?: string;\n}\n\nexport interface JpzCell {\n  x: number;\n  y: number;\n  solution?: string;\n  number?: number;\n  type?: 'block' | 'cell';\n  isCircled?: boolean;\n  backgroundColor?: string;\n  barTop?: boolean;\n  barBottom?: boolean;\n  barLeft?: boolean;\n  barRight?: boolean;\n}\n\nexport interface JpzClue {\n  number: string | number;\n  text: string;\n  format?: string;\n}\n\nexport interface JpzWord {\n  id: string;\n  cells: Array<{ x: number; y: number }>;\n}\n\nexport interface JpzPuzzle {\n  width: number;\n  height: number;\n  metadata: JpzMetadata;\n  grid: JpzCell[][];\n  across: JpzClue[];\n  down: JpzClue[];\n  words?: JpzWord[];\n}\n\nfunction parseMetadata(metadataNode: unknown): JpzMetadata {\n  if (!isJpzXmlNode(metadataNode)) return {};\n\n  return {\n    title: parseStringAttribute(metadataNode.title),\n    creator:\n      parseStringAttribute(metadataNode.creator) || parseStringAttribute(metadataNode.author),\n    copyright: parseStringAttribute(metadataNode.copyright),\n    description: parseStringAttribute(metadataNode.description),\n    publisher: parseStringAttribute(metadataNode.publisher),\n    identifier: parseStringAttribute(metadataNode.identifier),\n  };\n}\n\nfunction parseCells(\n  gridNode: unknown,\n  options?: ParseOptions,\n): {\n  cells: Map<string, JpzCell>;\n  width: number;\n  height: number;\n} {\n  const cells = new Map<string, JpzCell>();\n\n  if (!isJpzXmlNode(gridNode)) {\n    throw new JpzParseError('Missing or invalid grid element', ErrorCode.JPZ_MISSING_GRID);\n  }\n\n  const width = parseIntAttribute(gridNode['@_width']);\n  const height = parseIntAttribute(gridNode['@_height']);\n\n  if (width === undefined || height === undefined) {\n    throw new JpzParseError(\n      'Grid dimensions (width and height) are required',\n      ErrorCode.JPZ_INVALID_GRID,\n    );\n  }\n\n  // Validate grid dimensions to prevent excessive memory usage\n  const maxWidth = options?.maxGridSize?.width ?? MAX_GRID_WIDTH;\n  const maxHeight = options?.maxGridSize?.height ?? MAX_GRID_HEIGHT;\n\n  if (width <= 0 || width > maxWidth || height <= 0 || height > maxHeight) {\n    throw new JpzParseError(\n      `Invalid grid dimensions: ${width}x${height}. Maximum supported size is ${maxWidth}x${maxHeight}`,\n      ErrorCode.JPZ_INVALID_GRID,\n      { details: { width, height } },\n    );\n  }\n\n  // Handle cells - can be a single cell or array\n  const cellNodes = gridNode.cell;\n  if (cellNodes) {\n    const cellArray = Array.isArray(cellNodes) ? cellNodes : [cellNodes];\n\n    for (const cellNode of cellArray) {\n      if (!isJpzXmlNode(cellNode)) continue;\n\n      const x = parseIntAttribute(cellNode['@_x']);\n      const y = parseIntAttribute(cellNode['@_y']);\n\n      if (x === undefined || y === undefined) continue;\n\n      const key = `${x},${y}`;\n\n      const jpzCell: JpzCell = {\n        x,\n        y,\n        type: parseStringAttribute(cellNode['@_type']) === 'block' ? 'block' : 'cell',\n        solution:\n          parseStringAttribute(cellNode['@_solution']) ||\n          parseStringAttribute(cellNode['@_letter']),\n        number: parseIntAttribute(cellNode['@_number']),\n        isCircled: parseStringAttribute(cellNode['@_background-shape']) === 'circle',\n        backgroundColor: parseStringAttribute(cellNode['@_background-color']),\n        barTop: parseStringAttribute(cellNode['@_top-bar']) === 'true',\n        barBottom: parseStringAttribute(cellNode['@_bottom-bar']) === 'true',\n        barLeft: parseStringAttribute(cellNode['@_left-bar']) === 'true',\n        barRight: parseStringAttribute(cellNode['@_right-bar']) === 'true',\n      };\n\n      cells.set(key, jpzCell);\n    }\n  }\n\n  return { cells, width, height };\n}\n\nfunction buildGrid(cells: Map<string, JpzCell>, width: number, height: number): JpzCell[][] {\n  const grid: JpzCell[][] = [];\n\n  // JPZ uses 1-based indexing\n  for (let y = 1; y <= height; y++) {\n    const row: JpzCell[] = [];\n    for (let x = 1; x <= width; x++) {\n      const key = `${x},${y}`;\n      const cell = cells.get(key);\n\n      if (cell) {\n        row.push(cell);\n      } else {\n        // Default empty cell\n        row.push({\n          x,\n          y,\n          type: 'cell',\n        });\n      }\n    }\n    grid.push(row);\n  }\n\n  return grid;\n}\n\nfunction parseClues(cluesNode: unknown): { across: JpzClue[]; down: JpzClue[] } {\n  const across: JpzClue[] = [];\n  const down: JpzClue[] = [];\n\n  if (!isJpzXmlNode(cluesNode)) {\n    return { across, down };\n  }\n\n  // Handle different clue structures\n  const clueArrays = Array.isArray(cluesNode) ? cluesNode : [cluesNode];\n\n  for (const clueSet of clueArrays) {\n    if (!isJpzXmlNode(clueSet)) continue;\n\n    // Get title/direction - might be nested object with text content\n    let titleStr = '';\n    if (isString(clueSet.title)) {\n      titleStr = clueSet.title;\n    } else if (isJpzXmlNode(clueSet.title)) {\n      // Handle nested elements like <title><b>Across</b></title>\n      const titleNode = clueSet.title;\n      titleStr =\n        parseStringAttribute(titleNode.b) ||\n        parseStringAttribute(titleNode['#text']) ||\n        JSON.stringify(titleNode);\n    } else if (parseStringAttribute(clueSet['@_title'])) {\n      titleStr = parseStringAttribute(clueSet['@_title']) || '';\n    }\n\n    const isAcross = titleStr.toLowerCase().includes('across');\n    const targetArray = isAcross ? across : down;\n\n    // Get clues\n    const clueNodes = clueSet.clue;\n    if (clueNodes) {\n      const clues = Array.isArray(clueNodes) ? clueNodes : [clueNodes];\n\n      for (const clue of clues) {\n        if (isString(clue)) {\n          // Simple string clue with number prefix\n          const match = clue.match(/^(\\d+)\\.\\s*(.+)$/);\n          if (match) {\n            targetArray.push({\n              number: match[1] || '',\n              text: match[2] || '',\n            });\n          }\n        } else if (isJpzXmlNode(clue)) {\n          // Structured clue\n          const clueObj: JpzClue = {\n            number:\n              parseStringAttribute(clue['@_number']) || parseStringAttribute(clue.number) || '',\n            text:\n              parseStringAttribute(clue['#text']) ||\n              parseStringAttribute(clue.text) ||\n              parseStringAttribute(clue['@_text']) ||\n              '',\n            format: parseStringAttribute(clue['@_format']),\n          };\n\n          // Handle word reference\n          const wordRef = parseStringAttribute(clue['@_word']);\n          if (wordRef) {\n            clueObj.number = wordRef;\n          }\n\n          targetArray.push(clueObj);\n        }\n      }\n    }\n  }\n\n  return { across, down };\n}\n\nfunction parseWords(wordsNode: unknown): JpzWord[] {\n  const words: JpzWord[] = [];\n\n  if (!isJpzXmlNode(wordsNode) || !wordsNode.word) {\n    return words;\n  }\n\n  const wordNodes = Array.isArray(wordsNode.word) ? wordsNode.word : [wordsNode.word];\n\n  for (const word of wordNodes) {\n    if (!isJpzXmlNode(word)) continue;\n\n    const jpzWord: JpzWord = {\n      id: parseStringAttribute(word['@_id']) || '',\n      cells: [],\n    };\n\n    // Parse cells\n    if (isJpzXmlNode(word.cells)) {\n      const cellList = word.cells.cell;\n      if (cellList) {\n        const cells = Array.isArray(cellList) ? cellList : [cellList];\n        for (const cell of cells) {\n          if (!isJpzXmlNode(cell)) continue;\n\n          const x = parseIntAttribute(cell['@_x']);\n          const y = parseIntAttribute(cell['@_y']);\n\n          if (x !== undefined && y !== undefined) {\n            jpzWord.cells.push({ x, y });\n          }\n        }\n      }\n    }\n\n    words.push(jpzWord);\n  }\n\n  return words;\n}\n\n/**\n * Parse a JPZ format crossword puzzle.\n *\n * @param content - The JPZ XML data as string\n * @param options - Optional parsing options\n * @param options.maxGridSize - Maximum allowed grid dimensions\n * @returns A JpzPuzzle object containing all puzzle data\n * @throws {JpzParseError} When the content is not valid JPZ format\n * @throws {UnsupportedPuzzleTypeError} When the puzzle is not a crossword\n *\n * @example\n * ```typescript\n * import { parseJpz } from 'xword-parser';\n * const jpzData = '<?xml version=\"1.0\"?><crossword-compiler-applet>...';\n * const puzzle = parseJpz(jpzData);\n * ```\n */\nexport function parseJpz(content: string, options?: ParseOptions): JpzPuzzle {\n  const parser = new XMLParser({\n    ignoreAttributes: false,\n    attributeNamePrefix: '@_',\n    textNodeName: '#text',\n    parseAttributeValue: false,\n  });\n\n  let doc: JpzXmlRoot;\n  try {\n    doc = parser.parse(content) as JpzXmlRoot;\n  } catch (e) {\n    throw new JpzParseError(\n      `Invalid XML: ${e instanceof Error ? e.message : 'Unknown error'}`,\n      ErrorCode.JPZ_INVALID_XML,\n      undefined,\n      e,\n    );\n  }\n\n  // Handle different JPZ root elements\n  const puzzleRoot =\n    doc['crossword-compiler-applet'] || doc['crossword-compiler'] || doc.puzzle || doc.crossword;\n\n  if (!isJpzXmlNode(puzzleRoot)) {\n    throw new JpzParseError('no recognized root element', ErrorCode.JPZ_INVALID_XML);\n  }\n\n  // Find the puzzle data - might be nested\n  let rectangularPuzzle = puzzleRoot['rectangular-puzzle'];\n  if (!isJpzXmlNode(rectangularPuzzle) && isJpzXmlNode(puzzleRoot.puzzle)) {\n    const puzzleChild = puzzleRoot.puzzle;\n    if (isJpzXmlNode(puzzleChild)) {\n      rectangularPuzzle = puzzleChild['rectangular-puzzle'];\n    }\n  }\n  if (!isJpzXmlNode(rectangularPuzzle)) {\n    rectangularPuzzle = puzzleRoot;\n  }\n\n  // Check if this is a non-crossword puzzle type we don't support\n  if (rectangularPuzzle.coded) {\n    throw new UnsupportedPuzzleTypeError('Coded/cipher crosswords (Kaidoku)');\n  }\n  if (rectangularPuzzle.sudoku || rectangularPuzzle.kakuro) {\n    throw new UnsupportedPuzzleTypeError('Number puzzles');\n  }\n  if (rectangularPuzzle['word-search'] || rectangularPuzzle.wordsearch) {\n    throw new UnsupportedPuzzleTypeError('Word search');\n  }\n\n  // Extract components\n  const metadata = parseMetadata(rectangularPuzzle.metadata);\n\n  // Find grid and clues - should be in crossword section for standard crosswords\n  const crosswordNode =\n    rectangularPuzzle.crossword || rectangularPuzzle.puzzle || rectangularPuzzle;\n\n  let gridNode: unknown = undefined;\n  if (isJpzXmlNode(crosswordNode)) {\n    gridNode = crosswordNode.grid || crosswordNode.Grid;\n  }\n  if (!gridNode && isJpzXmlNode(rectangularPuzzle)) {\n    gridNode = rectangularPuzzle.grid;\n  }\n\n  if (!gridNode) {\n    throw new JpzParseError('no grid found', ErrorCode.JPZ_INVALID_XML);\n  }\n\n  // Parse cells and build grid\n  const { cells, width, height } = parseCells(gridNode, options);\n  const grid = buildGrid(cells, width, height);\n\n  // Parse clues - might be in different locations\n  let cluesNode: unknown = undefined;\n  if (isJpzXmlNode(crosswordNode)) {\n    cluesNode = crosswordNode.clues || crosswordNode.Clues;\n  }\n  if (!cluesNode && isJpzXmlNode(rectangularPuzzle)) {\n    cluesNode = rectangularPuzzle.clues || rectangularPuzzle.Clues;\n  }\n\n  const { across, down } = parseClues(cluesNode);\n\n  // Parse words if present\n  let wordsNode: unknown = undefined;\n  if (isJpzXmlNode(crosswordNode)) {\n    wordsNode = crosswordNode.words || crosswordNode.Words;\n  }\n  const words = wordsNode ? parseWords(wordsNode) : undefined;\n\n  return {\n    width,\n    height,\n    metadata,\n    grid,\n    across,\n    down,\n    words,\n  };\n}\n\n/**\n * Convert a JPZ puzzle to the unified Puzzle format.\n *\n * @param puzzle - The JpzPuzzle object to convert\n * @returns A unified Puzzle object\n *\n * @example\n * ```typescript\n * import { parseJpz, convertJpzToUnified } from 'xword-parser';\n * const jpzPuzzle = parseJpz(jpzData);\n * const unifiedPuzzle = convertJpzToUnified(jpzPuzzle);\n * ```\n */\nexport function convertJpzToUnified(puzzle: JpzPuzzle): Puzzle {\n  const grid: Grid = {\n    width: puzzle.width,\n    height: puzzle.height,\n    cells: [],\n  };\n\n  // Convert grid\n  for (const row of puzzle.grid) {\n    const cellRow: UnifiedCell[] = [];\n    for (const cell of row) {\n      const unifiedCell: UnifiedCell = {\n        solution: cell.solution,\n        number: cell.number,\n        isBlack: cell.type === 'block',\n        isCircled: cell.isCircled,\n      };\n\n      // Add cell-specific metadata if present\n      if (cell.backgroundColor || cell.barTop || cell.barBottom || cell.barLeft || cell.barRight) {\n        unifiedCell.additionalProperties = {};\n        if (cell.backgroundColor) {\n          unifiedCell.additionalProperties.backgroundColor = cell.backgroundColor;\n        }\n        if (cell.barTop) unifiedCell.additionalProperties.barTop = cell.barTop;\n        if (cell.barBottom) unifiedCell.additionalProperties.barBottom = cell.barBottom;\n        if (cell.barLeft) unifiedCell.additionalProperties.barLeft = cell.barLeft;\n        if (cell.barRight) unifiedCell.additionalProperties.barRight = cell.barRight;\n      }\n\n      cellRow.push(unifiedCell);\n    }\n    grid.cells.push(cellRow);\n  }\n\n  // Convert clues\n  const clues: Clues = {\n    across: puzzle.across.map((c) => ({\n      number: typeof c.number === 'string' ? parseInt(c.number) : c.number,\n      text: c.text,\n    })),\n    down: puzzle.down.map((c) => ({\n      number: typeof c.number === 'string' ? parseInt(c.number) : c.number,\n      text: c.text,\n    })),\n  };\n\n  const result: Puzzle = {\n    title: puzzle.metadata.title,\n    author: puzzle.metadata.creator,\n    copyright: puzzle.metadata.copyright,\n    grid,\n    clues,\n  };\n\n  // Add puzzle-level metadata if present\n  const additionalProps: Record<string, unknown> = {};\n\n  if (puzzle.metadata.description) additionalProps.description = puzzle.metadata.description;\n  if (puzzle.metadata.publisher) additionalProps.publisher = puzzle.metadata.publisher;\n  if (puzzle.metadata.identifier) additionalProps.identifier = puzzle.metadata.identifier;\n\n  // Add words information if present\n  if (puzzle.words && puzzle.words.length > 0) {\n    additionalProps.words = puzzle.words;\n  }\n\n  if (Object.keys(additionalProps).length > 0) {\n    result.additionalProperties = additionalProps;\n  }\n\n  return result;\n}\n"]}