@xwordly/xword-parser
Version:
Fast, type-safe TypeScript library for parsing crossword puzzles (PUZ, iPUZ, JPZ, XD)
74 lines (72 loc) • 2.95 kB
JavaScript
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