ontotext-platform-custom-scalars
Version:
A library of customized GraphQL scalars for Ontotext Platform
70 lines (55 loc) • 2.05 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 YEAR = 'Year';
var YEAR_REGEX = /-?\d{4,}(Z|([+-])\d\d:\d\d)?/;
function validateYear(year) {
if (!YEAR_REGEX.test(year)) {
throw new _graphql.GraphQLError("Invalid value for '".concat(YEAR, "' - '").concat(year, "'"));
}
}
function getYearAsStr(year) {
return (0, _moment["default"])([year]).year().toString();
}
/**
* Defines custom GraphQLScalarType for RFC-3339 compliant year values.
*/
var _default = new _graphql.GraphQLScalarType({
name: YEAR,
description: "An RFC-3339 compliant Year Scalar",
serialize: function serialize(value) {
if (value instanceof Date) {
return getYearAsStr(value.getUTCFullYear().toString());
} else if (typeof value === 'string' || value instanceof String) {
if (!isNaN(Date.parse(value))) {
// when the date is in ISO format we need to only the year
return getYearAsStr(value.match(YEAR_REGEX)[0] || value);
}
validateYear(value);
return getYearAsStr(value.match(YEAR_REGEX)[0] || value);
}
throw new _graphql.GraphQLError("Expected '".concat(YEAR, "' value, but got '").concat(JSON.stringify(value), "'."));
},
parseValue: function parseValue(value) {
if (typeof value === 'string' || value instanceof String) {
validateYear(value);
return value;
}
throw new _graphql.GraphQLError("Expected value in '".concat(YEAR, "' format, but got '").concat(JSON.stringify(value), "'."));
},
parseLiteral: function parseLiteral(node) {
if (node.kind !== _graphql.Kind.STRING) {
(0, _Utilities.throwConversionError)(node.kind, YEAR);
}
var value = node.value;
validateYear(value);
return value;
}
});
exports["default"] = _default;