@sanity/form-builder
Version:
Sanity form builder
87 lines (86 loc) • 2.21 kB
JavaScript
;
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;