UNPKG

@xwordly/xword-parser

Version:

Fast, type-safe TypeScript library for parsing crossword puzzles (PUZ, iPUZ, JPZ, XD)

74 lines (72 loc) 2.95 kB
import { getOrderedFormatsToTry } from './chunk-Q5B2K4C6.mjs'; import { parseIpuz, convertIpuzToUnified } from './chunk-VJXS4EY5.mjs'; export { CellType, convertIpuzToUnified, parseIpuz } from './chunk-VJXS4EY5.mjs'; import { parseXd, convertXdToUnified } from './chunk-TVGBJSWO.mjs'; export { convertXdToUnified, parseXd } from './chunk-TVGBJSWO.mjs'; import { parsePuz, convertPuzToUnified } from './chunk-YDXBFJGM.mjs'; export { convertPuzToUnified, parsePuz } from './chunk-YDXBFJGM.mjs'; import { parseJpz, convertJpzToUnified } from './chunk-KP7U2ZYG.mjs'; export { convertJpzToUnified, parseJpz } from './chunk-KP7U2ZYG.mjs'; import './chunk-GKUILQIP.mjs'; import { ParseError, FormatDetectionError } from './chunk-O732NFC7.mjs'; export { BinaryParseError, ErrorCode, FormatDetectionError, InvalidFileError, IpuzParseError, JpzParseError, ParseError, PuzParseError, UnsupportedPuzzleTypeError, XdParseError, asClueNumber, asGridCoordinate, asRebusId } from './chunk-O732NFC7.mjs'; // src/index.ts function parse(data, options) { let content; if (data instanceof ArrayBuffer) { content = Buffer.from(data); } else { content = data; } const formatsToTry = getOrderedFormatsToTry(content, options?.filename); let lastError; for (const format of formatsToTry) { try { switch (format) { case "ipuz": { const textContent = typeof content === "string" ? content : content.toString(options?.encoding || "utf-8"); const puzzle = parseIpuz(textContent, options); return convertIpuzToUnified(puzzle); } case "puz": { if (typeof content !== "string") { const puzzle = parsePuz(content, options); return convertPuzToUnified(puzzle); } break; } case "jpz": { const textContent = typeof content === "string" ? content : content.toString(options?.encoding || "utf-8"); const puzzle = parseJpz(textContent, options); return convertJpzToUnified(puzzle); } case "xd": { const textContent = typeof content === "string" ? content : content.toString(options?.encoding || "utf-8"); const puzzle = parseXd(textContent, options); return convertXdToUnified(puzzle); } } } catch (e) { lastError = e; if (e instanceof ParseError && !e.isFormatMismatch()) { throw e; } } } if (lastError && !(lastError instanceof ParseError && lastError.isFormatMismatch())) { if (lastError instanceof Error) { throw lastError; } throw new FormatDetectionError( "Unable to detect puzzle format. Supported formats: iPUZ, PUZ, JPZ, XD", void 0, lastError ); } throw new FormatDetectionError( "Unable to detect puzzle format. Supported formats: iPUZ, PUZ, JPZ, XD" ); } export { parse }; //# sourceMappingURL=index.mjs.map //# sourceMappingURL=index.mjs.map