slate-irc-parser
Version:
Streaming IRC message parser
1 lines • 3.05 kB
Source Map (JSON)
{"version":3,"file":"slate-irc-parser.modern.mjs","sources":["../index.ts"],"sourcesContent":["import util from 'util'\nimport debugModule from 'debug'\nimport linewise from 'linewise'\nimport { Writable, Duplex } from 'stream'\n\nconst debug = debugModule('slate-irc-parser')\n\nexport default class Parser extends Writable {\n nlstream: Duplex\n\n /**\n * Initialize IRC parser.\n *\n * @api public\n */\n constructor() {\n super()\n this.nlstream = linewise.getPerLineBuffer()\n this.nlstream.on('data', this.online.bind(this))\n this.nlstream.resume()\n }\n\n /**\n * Write `chunk`.\n *\n * @param {Buffer} chunk\n * @api public\n */\n write(chunk: Buffer): boolean {\n return this.nlstream.write(chunk)\n }\n\n /**\n * Parse lines and emit \"message\" events.\n *\n * @param {String} line\n * @api private\n */\n online(line: String): void {\n // Remove a single CR at the end of the line if it does exist\n line = line.replace(/\\r$/, '')\n\n debug('line %s', util.inspect(line))\n const orig = line\n\n // prefix\n let prefix\n if (':' == line[0]) {\n const i = line.indexOf(' ')\n prefix = line.slice(1, i)\n line = line.slice(i + 1)\n }\n\n // command\n let i = line.indexOf(' ')\n if (-1 == i) i = line.length\n const command = line.slice(0, i)\n line = line.slice(i)\n\n // params\n i = line.indexOf(' :')\n if (-1 == i) i = line.length\n const params = line.slice(1, i)\n line = line.slice(i + 2)\n\n const msg = {\n prefix: prefix || '',\n command: command,\n params: params || '',\n trailing: line || '',\n string: orig,\n }\n\n debug('message %j', msg)\n this.emit('message', msg)\n }\n\n /**\n * Emit \"end\".\n *\n * @api public\n */\n end() {\n this.emit('end')\n return this\n }\n}\n"],"names":["debug","debugModule","Parser","Writable","constructor","super","this","nlstream","linewise","getPerLineBuffer","on","online","bind","resume","write","chunk","line","replace","util","inspect","orig","prefix","i","indexOf","slice","length","command","msg","params","trailing","string","emit","end"],"mappings":"mGAKA,MAAMA,EAAQC,EAAY,oBAEL,MAAAC,UAAeC,EAQlCC,WAAAA,GACEC,QAAOC,KARTC,cAAQ,EASND,KAAKC,SAAWC,EAASC,mBACzBH,KAAKC,SAASG,GAAG,OAAQJ,KAAKK,OAAOC,KAAKN,OAC1CA,KAAKC,SAASM,QAChB,CAQAC,KAAAA,CAAMC,GACJ,OAAWT,KAACC,SAASO,MAAMC,EAC7B,CAQAJ,MAAAA,CAAOK,GAELA,EAAOA,EAAKC,QAAQ,MAAO,IAE3BjB,EAAM,UAAWkB,EAAKC,QAAQH,IAC9B,MAAMI,EAAOJ,EAGb,IAAIK,EACJ,GAAI,KAAOL,EAAK,GAAI,CAClB,MAAMM,EAAIN,EAAKO,QAAQ,KACvBF,EAASL,EAAKQ,MAAM,EAAGF,GACvBN,EAAOA,EAAKQ,MAAMF,EAAI,EACxB,CAGA,IAAIA,EAAIN,EAAKO,QAAQ,MAChB,GAAKD,IAAGA,EAAIN,EAAKS,QACtB,MAAMC,EAAUV,EAAKQ,MAAM,EAAGF,GAI9BA,GAHAN,EAAOA,EAAKQ,MAAMF,IAGTC,QAAQ,OACZ,GAAKD,IAAGA,EAAIN,EAAKS,QACtB,MAGME,EAAM,CACVN,OAAQA,GAAU,GAClBK,QAASA,EACTE,OANaZ,EAAKQ,MAAM,EAAGF,IAMT,GAClBO,UANFb,EAAOA,EAAKQ,MAAMF,EAAI,KAMF,GAClBQ,OAAQV,GAGVpB,EAAM,aAAc2B,GACpBrB,KAAKyB,KAAK,UAAWJ,EACvB,CAOAK,GAAAA,GAEE,OADA1B,KAAKyB,KAAK,WAEZ"}