@1771technologies/lytenyte-pro
Version:
Blazingly fast headless React data grid with 100s of features.
30 lines (29 loc) • 975 B
JavaScript
function toDate(value) {
if (value instanceof Date)
return value;
if (typeof value === "string" || typeof value === "number") {
const d = new Date(value);
return isNaN(d.getTime()) ? null : d;
}
return null;
}
export function createDateIdentifierPlugin(options) {
const identifierSet = new Set(options.identifiers);
return {
name: "date-identifier",
evaluate: (node, context) => {
if (node.type !== "Identifier")
return null;
if (!identifierSet.has(node.name))
return null;
const raw = context[node.name];
const date = toDate(raw);
if (date === null) {
if (raw === undefined || raw === null)
return { value: null };
throw new Error(`Context value for "${node.name}" cannot be coerced to a Date`);
}
return { value: date };
},
};
}