rte-moment
Version:
moment binding for relative time expression
61 lines (60 loc) • 2.21 kB
JavaScript
;
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)
t[p[i]] = s[p[i]];
return t;
};
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
/**
* moment binder
*/
var moment_1 = __importDefault(require("moment"));
var relative_time_expression_1 = require("relative-time-expression");
var period_edge_1 = require("period-edge");
__export(require("relative-time-expression"));
function startOf(m, p) {
if (p.number > 1) {
return moment_1.default(period_edge_1.startOf(m.toDate(), p.number + p.unit));
}
return m.startOf(p.unit);
}
function endOf(m, p) {
if (p.number > 1) {
return moment_1.default(period_edge_1.endOf(m.toDate(), p.number + p.unit));
}
return m.endOf(p.unit);
}
function parseToMoment(exp, options) {
if (options === void 0) { options = {}; }
var forceEnd = options.forceEnd, _a = options.base, base = _a === void 0 ? moment_1.default() : _a, parseOptions = __rest(options, ["forceEnd", "base"]);
var ast = relative_time_expression_1.parse(exp, parseOptions);
return ast.body.reduce(function (moment, m) {
if (m.type === 'Offset') {
if (m.op === '+') {
return moment.add(m.number, m.unit);
}
else {
return moment.subtract(m.number, m.unit);
}
}
else {
if (m.op === '/' && !forceEnd) {
return startOf(moment, m);
}
else {
return endOf(moment, m);
}
}
}, base);
}
exports.default = parseToMoment;