chrono-node
Version:
A natural language date parser in Javascript
55 lines • 2.52 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const timezone_1 = require("../../timezone");
const TIMEZONE_NAME_PATTERN = new RegExp("^\\s*,?\\s*\\(?([A-Z]{2,4})\\)?(?=\\W|$)", "i");
class ExtractTimezoneAbbrRefiner {
constructor(timezoneOverrides) {
this.timezoneOverrides = timezoneOverrides;
}
refine(context, results) {
var _a;
const timezoneOverrides = (_a = context.option.timezones) !== null && _a !== void 0 ? _a : {};
results.forEach((result) => {
var _a, _b;
const suffix = context.text.substring(result.index + result.text.length);
const match = TIMEZONE_NAME_PATTERN.exec(suffix);
if (!match) {
return;
}
const timezoneAbbr = match[1].toUpperCase();
const refDate = (_b = (_a = result.start.date()) !== null && _a !== void 0 ? _a : result.refDate) !== null && _b !== void 0 ? _b : new Date();
const tzOverrides = Object.assign(Object.assign({}, this.timezoneOverrides), timezoneOverrides);
const extractedTimezoneOffset = timezone_1.toTimezoneOffset(timezoneAbbr, refDate, tzOverrides);
if (extractedTimezoneOffset == null) {
return;
}
context.debug(() => {
console.log(`Extracting timezone: '${timezoneAbbr}' into: ${extractedTimezoneOffset} for: ${result.start}`);
});
const currentTimezoneOffset = result.start.get("timezoneOffset");
if (currentTimezoneOffset !== null && extractedTimezoneOffset != currentTimezoneOffset) {
if (result.start.isCertain("timezoneOffset")) {
return;
}
if (timezoneAbbr != match[1]) {
return;
}
}
if (result.start.isOnlyDate()) {
if (timezoneAbbr != match[1]) {
return;
}
}
result.text += match[0];
if (!result.start.isCertain("timezoneOffset")) {
result.start.assign("timezoneOffset", extractedTimezoneOffset);
}
if (result.end != null && !result.end.isCertain("timezoneOffset")) {
result.end.assign("timezoneOffset", extractedTimezoneOffset);
}
});
return results;
}
}
exports.default = ExtractTimezoneAbbrRefiner;
//# sourceMappingURL=ExtractTimezoneAbbrRefiner.js.map
;