@lyra/form-builder
Version:
Lyra form builder
96 lines (84 loc) • 2.29 kB
JavaScript
;
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
}
}
};