@bigbinary/neetoui
Version:
neetoUI drives the experience at all neeto products
262 lines (252 loc) • 10.8 kB
JavaScript
;
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
var _createClass = require('@babel/runtime/helpers/createClass');
var pureDayjs = require('dayjs');
var localeData = require('dayjs/plugin/localeData');
var utc = require('dayjs/plugin/utc');
var weekday = require('dayjs/plugin/weekday');
var weekOfYear = require('dayjs/plugin/weekOfYear');
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
function ownKeys$1(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
var typeToPos = {
year: 0,
month: 1,
day: 2,
hour: 3,
minute: 4,
second: 5
};
var dateTimeFormatDefaults = {
year: "numeric",
month: "2-digit",
day: "2-digit",
hour: "2-digit",
minute: "2-digit",
second: "2-digit"
};
// Cache time-zone lookups from Intl.DateTimeFormat,
// as it is a *very* slow method.
var dtfCache = {};
var getDateTimeFormat = function getDateTimeFormat(timezone) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var timeZoneName = options.timeZoneName || "short";
var key = "".concat(timezone, "|").concat(timeZoneName);
var dtf = dtfCache[key];
if (!dtf) {
dtf = new Intl.DateTimeFormat("en-US", _objectSpread$1(_objectSpread$1({}, dateTimeFormatDefaults), {}, {
hour12: false,
timeZone: timezone,
timeZoneName: timeZoneName
}));
dtfCache[key] = dtf;
}
return dtf;
};
var localeStringifierCache = {};
var getLocaleStringifier = function getLocaleStringifier(timezone) {
var localeStringifier = localeStringifierCache[timezone];
if (!localeStringifier) {
localeStringifier = new Intl.DateTimeFormat("en-US", _objectSpread$1(_objectSpread$1({}, dateTimeFormatDefaults), {}, {
timeZone: timezone
}));
localeStringifierCache[timezone] = localeStringifier;
}
return localeStringifier;
};
// eslint-disable-next-line no-unused-vars
var timezone = (function (o, c, d) {
var defaultTimezone;
var makeFormatParts = function makeFormatParts(timestamp, timezone) {
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var date = new Date(timestamp);
var dtf = getDateTimeFormat(timezone, options);
return dtf.formatToParts(date);
};
var tzOffset = function tzOffset(timestamp, timezone) {
var formatResult = makeFormatParts(timestamp, timezone);
var filled = [];
for (var i = 0; i < formatResult.length; i += 1) {
var _formatResult$i = formatResult[i],
type = _formatResult$i.type,
value = _formatResult$i.value;
var pos = typeToPos[type];
if (pos >= 0) {
filled[pos] = parseInt(value, 10);
}
}
var hour = filled[3];
// Workaround for the same behavior in different node version
// https://github.com/nodejs/node/issues/33027
/* istanbul ignore next */
var fixedHour = hour === 24 ? 0 : hour;
var utcString = "".concat(filled[0], "-").concat(filled[1], "-").concat(filled[2], " ").concat(fixedHour, ":").concat(filled[4], ":").concat(filled[5], ":000");
var utcTs = d.utc(utcString).valueOf();
var asTS = Number(timestamp);
var over = asTS % 1000;
asTS -= over;
return (utcTs - asTS) / (60 * 1000);
};
// find the right offset a given local time. The o input is our guess, which determines which
// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST)
// https://github.com/moment/luxon/blob/master/src/datetime.js#L76
var fixOffset = function fixOffset(localTS, o0, tz) {
// Our UTC time is just a guess because our offset is just a guess
var utcGuess = localTS - o0 * 60 * 1000;
// Test whether the zone matches the offset for this ts
var o2 = tzOffset(utcGuess, tz);
// If so, offset didn't change and we're done
if (o0 === o2) {
return [utcGuess, o0];
}
// If not, change the ts by the difference in the offset
utcGuess -= (o2 - o0) * 60 * 1000;
// If that gives us the local time we want, we're done
var o3 = tzOffset(utcGuess, tz);
if (o2 === o3) {
return [utcGuess, o2];
}
// If it's different, we're in a hole time.
// The offset has changed, but the we don't adjust the time
return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)];
};
var proto = c.prototype;
// eslint-disable-next-line default-param-last
proto.tz = function () {
var timezone = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultTimezone;
var keepLocalTime = arguments.length > 1 ? arguments[1] : undefined;
var oldOffset = this.utcOffset();
var date = this.toDate();
var target = getLocaleStringifier(timezone).format(date);
var diff = Math.round((date - new Date(target)) / 1000 / 60);
var ins = d(target).$set("millisecond", this.$ms).utcOffset(-Math.round(date.getTimezoneOffset() / 15) * 15 - diff, true);
if (keepLocalTime) {
var newOffset = ins.utcOffset();
ins = ins.add(oldOffset - newOffset, "minute");
}
ins.$x.$timezone = timezone;
return ins;
};
proto.offsetName = function (type) {
// type: short(default) / long
var zone = this.$x.$timezone || d.tz.guess();
var result = makeFormatParts(this.valueOf(), zone, {
timeZoneName: type
}).find(function (m) {
return m.type.toLowerCase() === "timezonename";
});
return result && result.value;
};
var oldStartOf = proto.startOf;
proto.startOf = function (units, startOf) {
if (!this.$x || !this.$x.$timezone) {
return oldStartOf.call(this, units, startOf);
}
var withoutTz = d(this.format("YYYY-MM-DD HH:mm:ss:SSS"));
var startOfWithoutTz = oldStartOf.call(withoutTz, units, startOf);
return startOfWithoutTz.tz(this.$x.$timezone, true);
};
d.tz = function (input, arg1, arg2) {
var parseFormat = arg2 && arg1;
var timezone = arg2 || arg1 || defaultTimezone;
var previousOffset = tzOffset(Number(d()), timezone);
if (typeof input !== "string") {
// timestamp number || js Date || Day.js
return d(input).tz(timezone);
}
var localTs = d.utc(input, parseFormat).valueOf();
var _fixOffset = fixOffset(localTs, previousOffset, timezone),
_fixOffset2 = _slicedToArray(_fixOffset, 2),
targetTs = _fixOffset2[0],
targetOffset = _fixOffset2[1];
var ins = d(targetTs).utcOffset(targetOffset);
ins.$x.$timezone = timezone;
return ins;
};
d.tz.guess = function () {
return Intl.DateTimeFormat().resolvedOptions().timeZone;
};
d.tz.setDefault = function (timezone) {
defaultTimezone = timezone;
};
});
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
pureDayjs.extend(weekOfYear);
pureDayjs.extend(weekday);
pureDayjs.extend(localeData);
pureDayjs.extend(utc);
pureDayjs.extend(timezone);
var LRUCache = /*#__PURE__*/function () {
function LRUCache(limit) {
_classCallCheck(this, LRUCache);
this.limit = limit;
this.cache = new Map();
}
return _createClass(LRUCache, [{
key: "get",
value: function get(key) {
var value = this.cache.get(key);
this.cache["delete"](key);
this.cache.set(key, value);
return value;
}
}, {
key: "set",
value: function set(key, value) {
if (this.cache.size >= this.limit) {
var oldestKey = this.cache.keys().next().value;
this.cache["delete"](oldestKey);
}
this.cache.set(key, value);
}
}, {
key: "has",
value: function has(key) {
return this.cache.has(key);
}
}]);
}();
var hasTimezone = function hasTimezone(dateString) {
var timezoneRegex = /Z|[+-]\d{2}:\d{2}$|[+-]\d{4}$|GMT([+-]\d{4})?$/;
return timezoneRegex.test(dateString);
};
var cache = new LRUCache(1000);
var dayjs = function dayjs() {
var _args$;
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
var cacheKey = JSON.stringify(args);
if (cache.has(cacheKey) && args[0] !== undefined) return cache.get(cacheKey);
var userTimezone = pureDayjs.tz().$x.$timezone;
var browserTimezone = pureDayjs.tz.guess();
var timezone = userTimezone || browserTimezone;
if (userTimezone === browserTimezone || userTimezone === undefined) {
var _result = pureDayjs.apply(void 0, args);
if (args[0] !== undefined) cache.set(cacheKey, _result);
return _result;
}
if (args.length > 0 && (typeof args[0] === "string" || args[0] === null)) {
var pureDayjsArgs = args.slice(0, Math.min(args.length, 2));
if (hasTimezone(args[0])) {
args[0] = pureDayjs.apply(void 0, _toConsumableArray(pureDayjsArgs));
} else {
args[0] = pureDayjs.apply(void 0, _toConsumableArray(pureDayjsArgs)).format("YYYY-MM-DD HH:mm:ss");
args[1] = "YYYY-MM-DD HH:mm:ss";
}
}
if (((_args$ = args[0]) === null || _args$ === void 0 ? void 0 : _args$.toString()) === "Invalid Date") {
var _result2 = pureDayjs.apply(void 0, args);
if (args[0] !== undefined) cache.set(cacheKey, _result2);
return _result2;
}
var result = args.length === 2 ? pureDayjs.tz.apply(pureDayjs, args.concat([timezone])) : pureDayjs.tz.apply(pureDayjs, args);
if (args[0] !== undefined) cache.set(cacheKey, result);
return result;
};
Object.assign(dayjs, _objectSpread({}, pureDayjs));
exports.dayjs = dayjs;
//# sourceMappingURL=index-D0rucYPS.js.map