templural
Version:
Template function for plural-sensitive formatting
39 lines • 1.53 kB
JavaScript
import { ParsedTemplate } from "./parse";
export var Template;
(function (Template) {
function isChunk(value) {
return typeof value === 'string';
}
Template.isChunk = isChunk;
function isArg(value) {
return typeof value === 'number';
}
Template.isArg = isArg;
function fromParsedTemplate(template, { categories, categoryOrders, categoryFallback }) {
return template.map(item => {
if (!ParsedTemplate.isGroup(item))
return item;
let categoryToResult = ParsedTemplate.isOrdredGroup(item)
? Object.fromEntries(categoryOrders[item.orderedResults.length - 1].map((c, i) => [c, item.orderedResults[i]]))
: item.associativeResults;
for (const category of categories) {
if (category in categoryToResult)
continue;
let fallback = category;
while (fallback in categoryFallback) {
fallback = categoryFallback[fallback];
if (fallback in categoryToResult) {
categoryToResult = { ...categoryToResult, [category]: categoryToResult[fallback] };
break;
}
}
}
return {
argIndex: item.argIndex,
categoryToResult,
};
});
}
Template.fromParsedTemplate = fromParsedTemplate;
})(Template || (Template = {}));
//# sourceMappingURL=template.js.map