@cran/gql.core
Version:
Cran/GraphQL Core Utilities
45 lines (44 loc) • 1.19 kB
JavaScript
import { createScalar } from "../utilities/createScalar";
const allowed = {
epoch: true,
infinity: true,
"-infinity": true,
now: true,
today: true,
tomorrow: true,
yesterday: true,
};
function asDate(value, invalid) {
const date = new Date(value);
if (isNaN(date.valueOf())) {
invalid();
}
return `${date.getUTCFullYear()}-${date.getUTCMonth().toString().padStart(2, "0")}-${date.getDate().toString().padStart(2, "0")}`;
}
export const DateScalar = createScalar("date", "date (no time of day)", {
string(value, invalid) {
if (allowed[value.toLowerCase()]) {
return value;
}
return asDate(value, invalid);
},
number: asDate,
}
// serialized as YYYY-MM-DD
);
function asTstz(value, invalid) {
const date = new Date(value);
if (isNaN(date.valueOf())) {
return invalid();
}
return date.toISOString();
}
export const TstzScalar = createScalar("tstz", "times of day only, with time zone", {
string(value, invalid) {
if (allowed[value.toLowerCase()]) {
return value;
}
return asTstz(value, invalid);
},
number: asTstz,
});