UNPKG

@lyra/form-builder

Version:
96 lines (84 loc) 2.29 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _is_valid = require('date-fns/is_valid'); var _is_valid2 = _interopRequireDefault(_is_valid); var _parse = require('date-fns/parse'); var _parse2 = _interopRequireDefault(_parse); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const TRUTHY_STRINGS = ['yes', 'true', '1']; const FALSEY_STRINGS = ['false', 'no', 'false', '0', 'null']; const BOOL_STRINGS = TRUTHY_STRINGS.concat(FALSEY_STRINGS); const TRUE = () => true; const has = prop => val => val && val[prop]; const is = typeName => val => (val && val._type) === typeName; function toLocalDate(input) { const newDate = new Date(input.getTime() + input.getTimezoneOffset() * 60 * 1000); const offset = input.getTimezoneOffset() / 60; const 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; } exports.default = { 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: val => (0, _is_valid2.default)((0, _parse2.default)(val)), 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 } } };