ontotext-platform-custom-scalars
Version:
A library of customized GraphQL scalars for Ontotext Platform
76 lines (59 loc) • 2.24 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _graphql = require("graphql");
var _Utilities = require("../Utilities");
var _moment = _interopRequireDefault(require("moment"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
var RFC_3339_REGEX = /^(-?\d{4,6}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01]))$/;
var DATE_FORMAT = "YYYY-MM-DD[T]HH:mm:ss.SSS[Z]";
function validateDate(date) {
if (!RFC_3339_REGEX.test(date)) {
throw new _graphql.GraphQLError("Invalid value for 'Date' - '".concat(date, "'"));
}
}
function parseAndFormat(value) {
var date = (0, _moment["default"])(value);
return "".concat(date.format("Y"), "-").concat(date.format("MM"), "-").concat(date.format("DD"));
}
/**
* Defines custom GraphQLScalarType for RFC-3339 compliant Full Date values.
*/
var _default = new _graphql.GraphQLScalarType({
name: "Date",
description: "An RFC-3339 compliant Full Date Scalar",
serialize: function serialize(value) {
if (value instanceof Date) {
return parseAndFormat(value);
} else if (typeof value === 'string' || value instanceof String) {
if (RFC_3339_REGEX.test(value)) {
return value;
}
if (!isNaN(Date.parse(value))) {
return parseAndFormat(value);
}
}
throw new _graphql.GraphQLError("Expected '".concat(this.name, "' value, but got '").concat(JSON.stringify(value), "'."));
},
parseValue: function parseValue(value) {
if (typeof value === 'string' || value instanceof String) {
validateDate(value);
if (!isNaN(Date.parse(value))) {
return (0, _moment["default"])(value).format(DATE_FORMAT);
}
}
throw new _graphql.GraphQLError("Expected value in '".concat(this.name, "' format, but got '").concat(JSON.stringify(value), "'."));
},
parseLiteral: function parseLiteral(node) {
var type = node.kind;
if (type !== _graphql.Kind.STRING) {
(0, _Utilities.throwConversionError)(type, this.name);
}
var dateStr = node.value;
validateDate(dateStr);
return (0, _moment["default"])(dateStr).format(DATE_FORMAT);
}
});
exports["default"] = _default;