UNPKG

@5stones/onix

Version:

A strongly typed library for parsing ONIX feeds.

74 lines 2.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getBISACAncestorForCode = exports.getBISACNodeForCode = exports.getBISACCodeForLabel = exports.getBISACLabelsForCode = void 0; const bisac_1 = require("./data/bisac"); let reverseMapping = undefined; function getBISACLabelsForCode(code, shortLabel = false) { var _a; const labels = ((_a = bisac_1.BISAC[code]) === null || _a === void 0 ? void 0 : _a.labels) || []; if (shortLabel) { return labels.map((l) => l.split(' / ').at(-1)); } else { return labels; } } exports.getBISACLabelsForCode = getBISACLabelsForCode; function getBISACCodeForLabel(label) { if (!reverseMapping) { reverseMapping = Object.keys(bisac_1.BISAC) .reduce((acc, code) => { const labels = bisac_1.BISAC[code].labels; for (const label of labels) { acc[label] = code; } return acc; }, {}); } return reverseMapping[label]; } exports.getBISACCodeForLabel = getBISACCodeForLabel; function getBISACNodeForCode(code) { if (!code) return undefined; const labels = getBISACLabelsForCode(code); if (!labels || !labels.length) return undefined; const primaryFullLabel = labels[0]; const primaryShortLabel = labels[0].split(' / ').at(-1); return { code, labels, primaryFullLabel, primaryShortLabel, primaryFullLabelNonGeneric: primaryFullLabel.replace(' / General', ''), primaryShortLabelNonGeneric: primaryShortLabel === 'General' ? labels[0].split(' / ').at(-2) : primaryShortLabel, }; } exports.getBISACNodeForCode = getBISACNodeForCode; function getBISACAncestorForCode(code) { var _a; if (!code) return undefined; const labels = (_a = bisac_1.BISAC[code]) === null || _a === void 0 ? void 0 : _a.labels; if (!labels) { throw new Error(`Unrecognized code '${code}'`); } const label = labels[0]; let numLeavesToTruncate = label.endsWith(' / General') ? 2 : 1; let searchLabel = label .split(' / ') .slice(0, numLeavesToTruncate * -1) .join(' / '); if (!searchLabel) return undefined; let result = getBISACCodeForLabel(searchLabel); if (!result) { result = getBISACCodeForLabel(searchLabel + ' / General'); } return getBISACNodeForCode(result); } exports.getBISACAncestorForCode = getBISACAncestorForCode; //# sourceMappingURL=bisac.js.map