UNPKG

@sanity/form-builder

Version:
87 lines (86 loc) 2.21 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _isValid = _interopRequireDefault(require("date-fns/isValid")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var TRUTHY_STRINGS = ['yes', 'true', '1']; var FALSEY_STRINGS = ['false', 'no', 'false', '0', 'null']; var BOOL_STRINGS = TRUTHY_STRINGS.concat(FALSEY_STRINGS); var TRUE = () => true; var has = prop => val => val && val[prop]; var is = typeName => val => (val && val._type) === typeName; function toLocalDate(input) { var newDate = new Date(input.getTime() + input.getTimezoneOffset() * 60 * 1000); var offset = input.getTimezoneOffset() / 60; var hours = input.getHours(); newDate.setHours(hours - offset); return newDate; } function getTZName() { try { return Intl.DateTimeFormat().resolvedOptions().timeZone; } catch (e) {} // eslint-disable-line no-empty return null; } var converters = { string: { number: { test: Number, convert: Number }, boolean: { test: value => BOOL_STRINGS.includes(value.toLowerCase()), convert: value => TRUTHY_STRINGS.includes(value.toLowerCase()) || !FALSEY_STRINGS.includes(value.toLowerCase()) }, richDate: { test: value => (0, _isValid.default)(value), convert: value => { return { _type: 'richDate', local: toLocalDate(new Date(value)).toJSON(), utc: new Date(value).toJSON(), timezone: getTZName(), offset: new Date().getTimezoneOffset() }; } } }, date: { richDate: { test: is('date'), convert: value => Object.assign({}, value, { _type: 'richDate' }) } }, richDate: { datetime: { test: has('utc'), convert: value => value.utc } }, number: { string: { test: TRUE, convert: String }, boolean: { test: TRUE, convert: Number } }, boolean: { string: { test: TRUE, convert: value => value ? 'Yes' : 'No' }, number: { test: TRUE, convert: Number } } }; var _default = converters; exports.default = _default;