type LabelType = "text" | "number" | "boolean" | "date" | "datetime" | "time" | "url"; type Multiplicity = "single" | "multi"; interface DefinitionObject { isPromoted?: boolean; labelType?: LabelType; multiplicity?: Multiplicity; numberPrecision?: number; promotedAlias?: string; inverseRelation?: string; } function parse(value: string) { 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 as LabelType; } else if (["single", "multi"].includes(token)) { defObj.multiplicity = token as Multiplicity; } 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]; } else { console.log("Unrecognized attribute definition token:", token); } } return defObj; } export default { parse };