@opengis/fastify-table
Version:
core-plugins
137 lines (121 loc) • 5.52 kB
JavaScript
import handlebarsSync from 'handlebars';
import promisedHandlebars from 'promised-handlebars';
import logger from '../plugins/logger/getLogger.js';
const handlebars = promisedHandlebars(handlebarsSync);
// funcs
import _math from './funcs/_math.js';
import ifCond from './funcs/ifCond.js';
import ifCondAnd from './funcs/ifCondAnd.js';
import ifCondOr from './funcs/ifCondOr.js';
import qrcode from './funcs/qrcode.js';
import select from './funcs/select.js';
import json from './funcs/json.js';
import empty from './funcs/empty.js';
import round from './funcs/round.js';
import contentList from './funcs/contentList.js';
import inc from './funcs/inc.js';
// format
import formatAuto from './format/formatAuto.js';
import formatDate from './format/formatDate.js';
import formatDigit from './format/formatDigit.js';
import formatNum from './format/formatNum.js';
import formatNumber from './format/formatNumber.js';
import formatRelative from './format/formatRelative.js';
import formatUnit from './format/formatUnit.js';
import numFormat from './format/num_format.js';
import set from './format/set.js';
// string
import strReplace from './string/str_replace.js';
import coalesce from './string/coalesce.js';
import concat from './string/concat.js';
import split from './string/split.js';
import translit from './string/translit.js';
import substr from './string/substr.js';
// from npm/admin
import token from './core/token.js';
import descriptionList from './list/descriptionList.js';
import tableList from './list/tableList.js';
import buttonHelper from './core/buttonHelper.js';
import buttonFilePreview from './core/buttonFilePreview.js';
import badge from './core/badge.js';
import mdToHTML from './utils/mdToHTML.js';
import paddingNumber from './utils/paddingNumber.js';
function getKeysRecursive(obj, prefix = '') {
if (!obj || typeof obj !== 'object' || obj?.constructor?.name !== 'Object') return [];
const obj1 = Array.isArray(obj) ? obj[0] : obj;
return Object.keys(obj1 || {}).reduce((acc, curr) => {
const fullKey = prefix ? `${prefix}.${curr}` : curr;
acc.push(curr);
if (obj1[curr] && typeof obj1[curr] === 'object' && curr !== 'coordinates') {
acc = acc.concat(getKeysRecursive(obj1[curr], fullKey));
}
return acc;
}, []);
}
// avoid unhandled exception if helper not registered
handlebars.registerHelper('helperMissing', function () {
const options = arguments[arguments.length - 1];
const args = Array.prototype.slice.call(arguments, 0, arguments.length - 1);
const keys = getKeysRecursive(options.data?.root);
if (args.length || !keys.includes(options.name)) {
logger.file('handlebars/error', { message: `Missing helper "${options.name}" at "${JSON.stringify(args).substring(0, 10)}"` });
return args;
}
return args;
});
// format
handlebars.registerHelper('formatAuto', formatAuto);
handlebars.registerHelper('formatDate', formatDate);
handlebars.registerHelper('formatDigit', formatDigit);
handlebars.registerHelper('formatNum', formatNum);
handlebars.registerHelper('formatNumber', formatNumber);
handlebars.registerHelper('formatRelative', formatRelative);
handlebars.registerHelper('formatUnit', formatUnit);
handlebars.registerHelper('num_format', numFormat);
handlebars.registerHelper('set', set);
// string
handlebars.registerHelper('str_replace', strReplace);
handlebars.registerHelper('coalesce', coalesce);
handlebars.registerHelper('concat', concat);
handlebars.registerHelper('split', split);
handlebars.registerHelper('translit', translit);
handlebars.registerHelper('substr', substr);
handlebars.registerHelper('mls', (value) => value);
// funcs
handlebars.registerHelper('json', json);
handlebars.registerHelper('_math', _math);
handlebars.registerHelper('ifCond', ifCond);
handlebars.registerHelper('ifCondAnd', ifCondAnd);
handlebars.registerHelper('ifCondOr', ifCondOr);
handlebars.registerHelper('select', select);
handlebars.registerHelper('empty', empty);
handlebars.registerHelper('round', round);
handlebars.registerHelper('contentList', contentList);
handlebars.registerHelper('inc', inc);
handlebars.registerHelper('qrcode', qrcode);
// Підтримка старого коду
handlebars.registerHelper('qrcode-generator-base64', qrcode);
// from npm/admin
handlebars.registerHelper('token', token);
handlebars.registerHelper('mdToHTML', mdToHTML);
handlebars.registerHelper('descriptionList', descriptionList);
handlebars.registerHelper('tableList', tableList);
handlebars.registerHelper('button', buttonHelper);
handlebars.registerHelper('buttonFilePreview', buttonFilePreview);
handlebarsSync.registerHelper('buttonFilePreview', buttonFilePreview);
handlebars.registerHelper('select', select);
handlebars.registerHelper('badge', badge);
handlebars.registerHelper('contentList', contentList);
handlebarsSync.registerHelper('ifCond', ifCond);
handlebarsSync.registerHelper('button', buttonHelper);
handlebars.registerHelper('ifCond', ifCond);
handlebars.registerHelper('empty', () => { });
handlebarsSync.registerHelper('empty', () => { });
handlebars.registerHelper('coalesce', coalesce);
handlebarsSync.registerHelper('coalesce', coalesce);
handlebarsSync.registerHelper('paddingNumber', paddingNumber);
handlebars.registerHelper('paddingNumber', paddingNumber);
export {
handlebars,
handlebarsSync,
};