tell-me-when
Version:
human relative date and time parser
33 lines • 1.07 kB
JavaScript
import { GrammarNode } from "./GrammarNode.mjs";
import { locales } from "../locales.mjs";
const grammarCache = new Map();
export function getGrammar({
locales: localeNames = getDefaultLocaleNames()
} = {}) {
const key = JSON.stringify(localeNames);
let grammar = grammarCache.get(key);
if (grammar) return grammar;
grammarCache.set(key, grammar = getGrammarHelper({
localeNames
}));
return grammar;
}
function getGrammarHelper({
localeNames
}) {
if (localeNames.length === 1) {
return locales[localeNames[0]];
}
return GrammarNode.longestOf(...localeNames.map(name => locales[name]));
}
let defaultLocaleNames;
function getDefaultLocaleNames() {
if (defaultLocaleNames) return defaultLocaleNames;
const {
locale: primaryLocale
} = new Intl.DateTimeFormat().resolvedOptions();
const localeKeys = Object.keys(locales);
const primary = localeKeys.find(k => primaryLocale.startsWith(k));
return defaultLocaleNames = [...(primary ? [primary] : []), ...localeKeys.filter(k => k !== primary)];
}
//# sourceMappingURL=getGrammar.mjs.map