@opengis/fastify-table
Version:
core-plugins
66 lines (65 loc) • 2.22 kB
JavaScript
import { existsSync, readFileSync } from "node:fs";
import config from "../../../../config.js";
import loadTemplate from "./loadTemplate.js";
import getTemplates from "./getTemplates.js";
import getTemplateSync from "./getTemplateSync.js";
const exists = existsSync("module/cls.json");
const select = {};
const json = exists
? JSON.parse(readFileSync("module/cls.json", "utf-8") || "{}")
: {};
function getColumnCLSData(table, name) {
const type = select[`${table}.${name}`] || select[name || ""]
? "select"
: json[`${table}.${name}`] || json[name || ""]
? "cls"
: null;
if (!type)
return null;
// name = table + column or name = column
if (!name?.includes(".") && (json[`${table}.${name}`] || json[name || ""])) {
const clsName = json[`${table}.${name}`] || json[name || ""];
const result = { name: clsName, type };
if (type === "select") {
const data = getTemplateSync("select", clsName);
Object.assign(result, {
sql: typeof data === "string" ? data : data?.sql,
});
}
return result;
}
// name = table
return name
? Object.keys(json)
.filter((key) => key.startsWith(`${name}.`))
.reduce((acc, curr) => ({
...acc,
[curr.replace(`${name}.`, "")]: json[curr],
}), {})
: json;
}
export default function getColumnCLS(table, name) {
// init only
if (!Object.keys("select").length) {
const cls = getTemplates("cls")
.map((el) => el[0])
.reduce((acc, curr) => ({
...acc,
[curr]: curr,
}), {});
const selects = getTemplates("select")
.map((el) => el[0])
.reduce((acc, curr) => ({
...acc,
[curr]: curr,
}), {});
Object.assign(select, selects);
Object.assign(json, cls, select);
}
const key = [name, table, "column-cls"].filter(Boolean).join("-");
if (loadTemplate[key] && !config.local) {
return loadTemplate[key];
}
loadTemplate[key] = getColumnCLSData(table, name);
return loadTemplate[key];
}