synt_backend
Version:
Synt light-weight node backend service
80 lines (68 loc) • 1.74 kB
JavaScript
export const INVALID = "<invalid>";
export function parse(value = "") {
const [type, ...rest] = value.split(" ");
if (type === "simple") {
const [repeatType, ...values] = rest;
if (repeatType === "one_time") {
return {
type,
repeatType,
date: values[0],
};
}
if (repeatType === "repeat") {
const [intervalWithCount, startingDate] = values;
const [count, unit] = intervalWithCount.split("_");
return {
type,
repeatType,
count: count === INVALID ? INVALID : Number(count),
unit,
startingDate,
};
}
if (repeatType === "before") {
const [offsetWithCount, event] = values;
const [count, unit] = offsetWithCount.split("_");
return {
type,
repeatType,
count: count === INVALID ? INVALID : Number(count),
unit,
event,
};
}
return {
type,
repeatType: INVALID,
};
}
return {
type: INVALID,
};
}
export function stringify(value) {
if (value.type === "simple") {
if (value.repeatType === "one_time") {
return [value.type, value.repeatType, value.date ?? INVALID].join(" ");
}
if (value.repeatType === "repeat") {
return [
value.type,
value.repeatType,
[value.count ?? INVALID, value.unit ?? INVALID].join("_"),
value.startingDate ?? INVALID,
].join(" ");
}
if (value.repeatType === "before") {
return [
value.type,
value.repeatType,
[value.count ?? INVALID, value.unit ?? INVALID].join("_"),
value.event ?? INVALID,
].join(" ");
}
return [value.type, INVALID].join(" ");
}
return INVALID;
}