tell-me-when
Version:
human relative date and time parser
1 lines • 3.51 kB
Source Map (JSON)
{"version":3,"file":"ParseState.mjs","names":["ParseState","index","start","end","flags","constructor","input","length","done","peek","pattern","toRegExp","RegExp","source","replace","lastIndex","match","exec","undefined","s"],"sources":["../../src/util/ParseState.ts"],"sourcesContent":["export class ParseState {\n index = 0\n readonly start: number\n readonly end: number\n readonly flags: string\n\n constructor(\n public input: string,\n {\n start = 0,\n end = input.length,\n flags = 'g',\n }: {\n /**\n * The starting index (defaults to 0)\n */\n start?: number\n /**\n * The ending index (defaults to input.length)\n */\n end?: number\n /**\n * Flags to add to all regexes\n */\n flags?: string\n } = {}\n ) {\n this.start = start\n this.end = end\n this.flags = flags\n }\n\n get done() {\n return this.index >= this.end\n }\n\n /**\n * If pattern matches the input at the current index, returns the match,\n * but doesn't advance the index.\n */\n peek(pattern: string | RegExp): RegExpExecArray | undefined {\n if (typeof pattern === 'string') pattern = toRegExp(pattern)\n pattern = new RegExp(\n pattern.source,\n `${this.flags}${pattern.flags.replace(\n new RegExp(`[${this.flags}]`, 'g'),\n ''\n )}`\n )\n pattern.lastIndex = this.index\n const match = pattern.exec(this.input)\n return match?.index === this.index &&\n match.index + match[0].length <= this.end\n ? match\n : undefined\n }\n\n /**\n * If pattern matches the input at the current index, returns the match,\n * and advances the index to the end of the match.\n */\n match(pattern: string | RegExp): RegExpExecArray | undefined {\n const match = this.peek(pattern)\n if (match) {\n this.index += match[0].length\n }\n return match\n }\n}\n\nexport function toRegExp(s: string, flags = ''): RegExp {\n return new RegExp(s.replace(/[/\\-\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'), flags)\n}\n"],"mappings":"AAAA,OAAO,MAAMA,UAAU,CAAC;EACtBC,KAAK,GAAG,CAAC;EACAC,KAAK;EACLC,GAAG;EACHC,KAAK;EAEdC,WAAWA,CACFC,KAAa,EACpB;IACEJ,KAAK,GAAG,CAAC;IACTC,GAAG,GAAGG,KAAK,CAACC,MAAM;IAClBH,KAAK,GAAG;EAcV,CAAC,GAAG,CAAC,CAAC,EACN;IAAA,KAnBOE,KAAa,GAAbA,KAAa;IAoBpB,IAAI,CAACJ,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,GAAG,GAAGA,GAAG;IACd,IAAI,CAACC,KAAK,GAAGA,KAAK;EACpB;EAEA,IAAII,IAAIA,CAAA,EAAG;IACT,OAAO,IAAI,CAACP,KAAK,IAAI,IAAI,CAACE,GAAG;EAC/B;;EAEA;AACF;AACA;AACA;EACEM,IAAIA,CAACC,OAAwB,EAA+B;IAC1D,IAAI,OAAOA,OAAO,KAAK,QAAQ,EAAEA,OAAO,GAAGC,QAAQ,CAACD,OAAO,CAAC;IAC5DA,OAAO,GAAG,IAAIE,MAAM,CAClBF,OAAO,CAACG,MAAM,EACd,GAAG,IAAI,CAACT,KAAK,GAAGM,OAAO,CAACN,KAAK,CAACU,OAAO,CACnC,IAAIF,MAAM,CAAC,IAAI,IAAI,CAACR,KAAK,GAAG,EAAE,GAAG,CAAC,EAClC,EACF,CAAC,EACH,CAAC;IACDM,OAAO,CAACK,SAAS,GAAG,IAAI,CAACd,KAAK;IAC9B,MAAMe,KAAK,GAAGN,OAAO,CAACO,IAAI,CAAC,IAAI,CAACX,KAAK,CAAC;IACtC,OAAO,CAAAU,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEf,KAAK,MAAK,IAAI,CAACA,KAAK,IAChCe,KAAK,CAACf,KAAK,GAAGe,KAAK,CAAC,CAAC,CAAC,CAACT,MAAM,IAAI,IAAI,CAACJ,GAAG,GACvCa,KAAK,GACLE,SAAS;EACf;;EAEA;AACF;AACA;AACA;EACEF,KAAKA,CAACN,OAAwB,EAA+B;IAC3D,MAAMM,KAAK,GAAG,IAAI,CAACP,IAAI,CAACC,OAAO,CAAC;IAChC,IAAIM,KAAK,EAAE;MACT,IAAI,CAACf,KAAK,IAAIe,KAAK,CAAC,CAAC,CAAC,CAACT,MAAM;IAC/B;IACA,OAAOS,KAAK;EACd;AACF;AAEA,OAAO,SAASL,QAAQA,CAACQ,CAAS,EAAEf,KAAK,GAAG,EAAE,EAAU;EACtD,OAAO,IAAIQ,MAAM,CAACO,CAAC,CAACL,OAAO,CAAC,wBAAwB,EAAE,MAAM,CAAC,EAAEV,KAAK,CAAC;AACvE","ignoreList":[]}