UNPKG

@uploadcare/file-uploader

Version:

Building blocks for Uploadcare products integration

51 lines (45 loc) 1.83 kB
/** @typedef {{ [key: String]: String | Number | Boolean | InputData }} InputData */ const DEFAULT_TRANSFORMER = (value) => value; const OPEN_TOKEN = '{{'; const CLOSE_TOKEN = '}}'; const PLURAL_PREFIX = 'plural:'; /** * @typedef {Object} Options * @property {String} [openToken='{{'] Default is `'{{'` * @property {String} [closeToken='}}'] Default is `'}}'` * @property {(value: String) => String} [transform=DEFAULT_TRANSFORMER] Default is `DEFAULT_TRANSFORMER` */ /** * @param {String} template * @param {InputData} [data={}] Default is `{}` * @param {Options} [options={}] Default is `{}` * @returns {String} */ export function applyTemplateData(template, data, options = {}) { let { openToken = OPEN_TOKEN, closeToken = CLOSE_TOKEN, transform = DEFAULT_TRANSFORMER } = options; for (let key in data) { let value = data[key]?.toString(); template = template.replaceAll(openToken + key + closeToken, typeof value === 'string' ? transform(value) : value); } return template; } /** * @param {String} template * @returns {{ variable: string; pluralKey: string; countVariable: string }[]} */ export function getPluralObjects(template) { const pluralObjects = []; let open = template.indexOf(OPEN_TOKEN); while (open !== -1) { const close = template.indexOf(CLOSE_TOKEN, open); const variable = template.substring(open + 2, close); if (variable.startsWith(PLURAL_PREFIX)) { const keyValue = template.substring(open + 2, close).replace(PLURAL_PREFIX, ''); const key = keyValue.substring(0, keyValue.indexOf('(')); const count = keyValue.substring(keyValue.indexOf('(') + 1, keyValue.indexOf(')')); pluralObjects.push({ variable, pluralKey: key, countVariable: count }); } open = template.indexOf(OPEN_TOKEN, close); } return pluralObjects; }