@5stones/onix
Version:
A strongly typed library for parsing ONIX feeds.
74 lines • 2.55 kB
JavaScript
;
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