@opengis/fastify-table
Version:
core-plugins
129 lines (128 loc) • 5.66 kB
JavaScript
/* eslint-disable prefer-rest-params */
import handlebarsSync from "handlebars";
// @ts-expect-error hb cjs module
import promisedHandlebars from "promised-handlebars";
// const promisedHandlebars = require("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.push(...getKeysRecursive(obj1[curr], fullKey));
}
return acc;
}, []);
}
// avoid unhandled exception if helper not registered
handlebars.registerHelper("helperMissing", function hm() {
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);
handlebarsSync.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);
handlebarsSync.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 };