2024-07-24 23:57:43 +03:00
|
|
|
type LabelType = "text" | "number" | "boolean" | "date" | "datetime" | "url";
|
|
|
|
|
type Multiplicity = "single" | "multi";
|
|
|
|
|
|
|
|
|
|
interface DefinitionObject {
|
|
|
|
|
isPromoted?: boolean;
|
|
|
|
|
labelType?: LabelType;
|
|
|
|
|
multiplicity?: Multiplicity;
|
|
|
|
|
numberPrecision?: number;
|
|
|
|
|
promotedAlias?: string;
|
|
|
|
|
inverseRelation?: string;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function parse(value: string) {
|
2020-07-18 23:45:28 +02:00
|
|
|
const tokens = value.split(',').map(t => t.trim());
|
2024-07-24 23:57:43 +03:00
|
|
|
const defObj: DefinitionObject = {};
|
2020-07-18 23:45:28 +02:00
|
|
|
|
|
|
|
|
for (const token of tokens) {
|
|
|
|
|
if (token === 'promoted') {
|
|
|
|
|
defObj.isPromoted = true;
|
|
|
|
|
}
|
2024-11-22 17:58:23 +00:00
|
|
|
else if (['text', 'number', 'boolean', 'date', 'datetime', 'time', 'url'].includes(token)) {
|
2024-07-24 23:57:43 +03:00
|
|
|
defObj.labelType = token as LabelType;
|
2020-07-18 23:45:28 +02:00
|
|
|
}
|
|
|
|
|
else if (['single', 'multi'].includes(token)) {
|
2024-07-24 23:57:43 +03:00
|
|
|
defObj.multiplicity = token as Multiplicity;
|
2020-07-18 23:45:28 +02:00
|
|
|
}
|
|
|
|
|
else if (token.startsWith('precision')) {
|
|
|
|
|
const chunks = token.split('=');
|
|
|
|
|
|
|
|
|
|
defObj.numberPrecision = parseInt(chunks[1]);
|
|
|
|
|
}
|
2023-09-22 04:58:06 -04:00
|
|
|
else if (token.startsWith('alias')) {
|
|
|
|
|
const chunks = token.split('=');
|
|
|
|
|
|
|
|
|
|
defObj.promotedAlias = chunks[1];
|
|
|
|
|
}
|
2020-07-18 23:45:28 +02:00
|
|
|
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
|
|
|
|
|
};
|