UNPKG

ontotext-platform-custom-scalars

Version:
70 lines (55 loc) 2.05 kB
"use strict"; 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;