UNPKG

ontotext-platform-custom-scalars

Version:
78 lines (62 loc) 2.27 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_MONTH = 'YearMonth'; var YEAR_MONTH_REGEX = /^-?\d*-(0?[1-9]|1[012])(?:Z|([+-])\d\d:\d\d)?$/; function validateYearMonth(yearMonth) { if (!YEAR_MONTH_REGEX.test(yearMonth)) { throw new _graphql.GraphQLError("Invalid value for '".concat(YEAR_MONTH, "' - '").concat(yearMonth, "'")); } } /** * Builds 'yyyy-mm' format for the passed date. If the month is a single digit, to it will be added leading zero. * * @param value to retrieve the year and the month * @returns {string} */ function buildOutput(value) { var date = (0, _moment["default"])(value); return "".concat(date.format("Y"), "-").concat(date.format("MM")); } /** * Defines custom GraphQLScalarType for RFC-3339 compliant year month values. */ var _default = new _graphql.GraphQLScalarType({ name: YEAR_MONTH, description: "An RFC-3339 compliant Year Month Scalar", serialize: function serialize(value) { if (value instanceof Date) { return buildOutput(value); } else if (typeof value === 'string' || value instanceof String) { if (YEAR_MONTH_REGEX.test(value)) { return value; } if (!isNaN(Date.parse(value))) { return buildOutput(value); } } throw new _graphql.GraphQLError("Expected '".concat(YEAR_MONTH, "' value, but got '").concat(JSON.stringify(value), "'.")); }, parseValue: function parseValue(value) { if (typeof value === 'string' || value instanceof String) { validateYearMonth(value); return value; } throw new _graphql.GraphQLError("Expected value in '".concat(YEAR_MONTH, "' format, but got '").concat(JSON.stringify(value), "'.")); }, parseLiteral: function parseLiteral(node) { if (node.kind !== _graphql.Kind.STRING) { (0, _Utilities.throwConversionError)(node.kind, YEAR_MONTH); } var value = node.value; validateYearMonth(value); return value; } }); exports["default"] = _default;