Notes/apps/server/src/services/promoted_attribute_definition_parser.ts
2025-04-22 17:16:41 +03:00

37 lines
1.2 KiB
TypeScript

import type { DefinitionObject } from "./promoted_attribute_definition_interface.js";
function parse(value: string): DefinitionObject {
const tokens = value.split(",").map((t) => t.trim());
const defObj: DefinitionObject = {};
for (const token of tokens) {
if (token === "promoted") {
defObj.isPromoted = true;
} else if (["text", "number", "boolean", "date", "datetime", "time", "url"].includes(token)) {
defObj.labelType = token;
} else if (["single", "multi"].includes(token)) {
defObj.multiplicity = token;
} else if (token.startsWith("precision")) {
const chunks = token.split("=");
defObj.numberPrecision = parseInt(chunks[1]);
} else if (token.startsWith("alias")) {
const chunks = token.split("=");
defObj.promotedAlias = chunks[1];
} else if (token.startsWith("inverse")) {
const chunks = token.split("=");
defObj.inverseRelation = chunks[1].replace(/[^\p{L}\p{N}_:]/gu, "");
} else {
console.log("Unrecognized attribute definition token:", token);
}
}
return defObj;
}
export default {
parse
};