Skip to content

Commit

Permalink
feat: add tag and message formatting functions
Browse files Browse the repository at this point in the history
  • Loading branch information
AlcaDesign committed Sep 5, 2024
1 parent ca6b744 commit 3c48d03
Show file tree
Hide file tree
Showing 7 changed files with 134 additions and 3 deletions.
32 changes: 32 additions & 0 deletions dist/index.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
var src_exports = {};
__export(src_exports, {
escapeIrc: () => escapeIrc,
format: () => format,
formatChannel: () => formatChannel,
formatPrefix: () => formatPrefix,
formatTags: () => formatTags,
parse: () => parse,
parsePrefix: () => parsePrefix,
parseTag: () => parseTag,
Expand Down Expand Up @@ -116,6 +120,15 @@ function parse(line, parseTagCb) {
const ircMessage = { raw, rawTags, tags, prefix, command, channel, params };
return ircMessage;
}
function format(ircMessage) {
const { tags, prefix: p, command, channel, params } = ircMessage;
const prefixWith = (n, c = " ") => n ? `${c}${n}` : null;
const tagsStr = tags ? prefixWith(formatTags(tags), "@") : null;
const prefixStr = p ? prefixWith(formatPrefix(p), ":") : null;
const channelStr = channel ? formatChannel(channel) : null;
const paramsStr = params && params.length ? prefixWith(params.join(" "), ":") : null;
return [tagsStr, prefixStr, command, channelStr, paramsStr].filter(Boolean).join(" ");
}
function parseTag(rawKey, rawValue, messageParams, cb) {
const unescapedKey = unescapeIrc(rawKey);
let key = unescapedKey;
Expand Down Expand Up @@ -156,4 +169,23 @@ function parsePrefix(prefixRaw) {
}
return prefix;
}
function formatTags(tags) {
const entries = Array.isArray(tags) ? tags : Object.entries(tags);
return entries.map(
([key, value]) => `${escapeIrc(key)}=${escapeIrc(value.toString())}`
).join(";");
}
function formatPrefix(prefix) {
if (!prefix) {
return "";
}
const { nick, user, host } = prefix;
if (!nick) {
return "";
}
return `${nick}${user ? `!${user}` : ""}${host ? `@${host}` : ""}`;
}
function formatChannel(channel) {
return channel ? `${channel.startsWith("#") ? channel : `#${channel}`}` : "";
}
//# sourceMappingURL=index.cjs.map
2 changes: 1 addition & 1 deletion dist/index.cjs.map
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"version": 3,
"sources": ["../src/index.ts"],
"mappings": "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",
"mappings": "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",
"names": []
}
11 changes: 11 additions & 0 deletions dist/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,14 @@ export declare function unescapeIrc(value: string): string;
export declare function escapeIrc(value: string | number): string;
export declare function parse(line: string, parseTagCb?: ParseTagCallbackFn): IrcMessage;
export declare function parse(line: '', parseTagCb?: ParseTagCallbackFn): undefined;
interface FormatMessage {
tags?: IrcMessage['tags'];
command: IrcMessage['command'];
prefix?: IrcMessage['prefix'];
channel?: IrcMessage['channel'];
params?: IrcMessage['params'];
}
export declare function format(ircMessage: FormatMessage): string;
interface ParsedTagData {
unescapedKey: string;
unescapedValue: string;
Expand All @@ -26,4 +34,7 @@ interface ParsedTags {
}
export declare function parseTagsFromString(tagsRawString: string, messageParams?: IrcMessage['params'], cb?: ParseTagCallbackFn): ParsedTags;
export declare function parsePrefix(prefixRaw: string): Record<"nick" | "user" | "host", string | undefined>;
export declare function formatTags(tags: Record<string, string> | [string, string][]): string;
export declare function formatPrefix(prefix: IrcMessage['prefix']): string;
export declare function formatChannel(channel: IrcMessage['channel']): string;
export {};
32 changes: 32 additions & 0 deletions dist/index.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,15 @@ function parse(line, parseTagCb) {
const ircMessage = { raw, rawTags, tags, prefix, command, channel, params };
return ircMessage;
}
function format(ircMessage) {
const { tags, prefix: p, command, channel, params } = ircMessage;
const prefixWith = (n, c = " ") => n ? `${c}${n}` : null;
const tagsStr = tags ? prefixWith(formatTags(tags), "@") : null;
const prefixStr = p ? prefixWith(formatPrefix(p), ":") : null;
const channelStr = channel ? formatChannel(channel) : null;
const paramsStr = params && params.length ? prefixWith(params.join(" "), ":") : null;
return [tagsStr, prefixStr, command, channelStr, paramsStr].filter(Boolean).join(" ");
}
function parseTag(rawKey, rawValue, messageParams, cb) {
const unescapedKey = unescapeIrc(rawKey);
let key = unescapedKey;
Expand Down Expand Up @@ -127,8 +136,31 @@ function parsePrefix(prefixRaw) {
}
return prefix;
}
function formatTags(tags) {
const entries = Array.isArray(tags) ? tags : Object.entries(tags);
return entries.map(
([key, value]) => `${escapeIrc(key)}=${escapeIrc(value.toString())}`
).join(";");
}
function formatPrefix(prefix) {
if (!prefix) {
return "";
}
const { nick, user, host } = prefix;
if (!nick) {
return "";
}
return `${nick}${user ? `!${user}` : ""}${host ? `@${host}` : ""}`;
}
function formatChannel(channel) {
return channel ? `${channel.startsWith("#") ? channel : `#${channel}`}` : "";
}
export {
escapeIrc,
format,
formatChannel,
formatPrefix,
formatTags,
parse,
parsePrefix,
parseTag,
Expand Down
2 changes: 1 addition & 1 deletion dist/index.mjs.map
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"version": 3,
"sources": ["../src/index.ts"],
"mappings": ";AAcA,IAAM,kBAAyB;AAAA,EAC9B,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,MAAM;AACP;AACA,IAAM,oBAA2B;AAAA,EAChC,KAAK;AAAA,EACL,MAAM;AAAA,EACN,MAAM;AAAA,EACN,KAAK;AAAA,EACL,MAAM;AACP;AAEO,SAAS,YAAY,OAAe;AAC1C,MAAG,CAAC,SAAS,CAAC,MAAM,SAAS,IAAI,GAAG;AACnC,WAAO;AAAA,EACR;AACA,SAAO,MAAM,QAAQ,eAAe,WAAS,gBAAgB,MAAM,CAAC,CAAiC,CAAC;AACvG;AAEO,SAAS,UAAU,OAAwB;AACjD,MAAG,OAAO,UAAU,UAAU;AAC7B,YAAQ,MAAM,SAAS;AAAA,EACxB;AACA,SAAO,MAAM,QAAQ,gBAAgB,WAAS,OAAO,kBAAkB,KAAuC,KAAK,KAAK;AACzH;AAIO,SAAS,MAAM,MAAc,YAAyD;AAC5F,MAAG,CAAC,MAAM;AACT;AAAA,EACD;AACA,MAAI,SAAS;AACb,QAAM,eAAe,MAAM,KAAK,QAAQ,KAAK,MAAM;AACnD,QAAM,qBAAqB,CAAC,UAAmB;AAC9C,QAAG,UAAU,QAAW;AACvB,cAAQ,aAAa;AACrB,UAAG,UAAU,IAAI;AAChB,iBAAS,KAAK;AACd;AAAA,MACD;AAAA,IACD,WACQ,UAAU,IAAI;AACrB,eAAS,KAAK;AACd;AAAA,IACD;AACA,aAAS,QAAQ;AAAA,EAClB;AACA,QAAM,SAAS,CAAC,MAAc,QAAQ,WAAW,KAAK,KAAK,MAAM;AACjE,QAAM,MAAM;AACZ,MAAI,gBAAwB;AAC5B,MAAG,OAAO,GAAG,GAAG;AACf,UAAM,UAAU,aAAa;AAC7B,oBAAgB,KAAK,MAAM,GAAG,OAAO;AACrC,uBAAmB,OAAO;AAAA,EAC3B;AACA,MAAI,SAA+B,EAAE,MAAM,QAAW,MAAM,QAAW,MAAM,OAAU;AACvF,MAAG,OAAO,GAAG,GAAG;AACf,UAAM,YAAY,aAAa;AAC/B,UAAM,YAAY,KAAK,MAAM,SAAS,GAAG,SAAS;AAClD,aAAS,YAAY,SAAS;AAC9B,uBAAmB,SAAS;AAAA,EAC7B;AACA,QAAM,aAAa,aAAa;AAChC,QAAM,UAAU,KAAK,MAAM,QAAQ,eAAe,KAAK,SAAY,UAAU;AAC7E,qBAAmB,UAAU;AAC7B,MAAI,UAAiC;AACrC,MAAG,OAAO,GAAG,GAAG;AACf,UAAM,aAAa,aAAa;AAChC,QAAG,eAAe,IAAI;AACrB,gBAAU,KAAK,MAAM,MAAM;AAC3B,yBAAmB;AAAA,IACpB,OACK;AACJ,gBAAU,KAAK,MAAM,QAAQ,UAAU;AACvC,yBAAmB,UAAU;AAAA,IAC9B;AAAA,EACD;AACA,QAAM,SAA+B,CAAC;AACtC,SAAM,SAAS,KAAK,QAAQ;AAC3B,QAAG,OAAO,GAAG,GAAG;AACf,aAAO,KAAK,KAAK,MAAM,SAAS,CAAC,CAAC;AAClC;AAAA,IACD;AACA,UAAM,YAAY,aAAa;AAC/B,WAAO,KAAK,KAAK,MAAM,QAAQ,SAAS,CAAC;AACzC,uBAAmB,SAAS;AAAA,EAC7B;AACA,QAAM,EAAE,SAAS,KAAK,IAAI,oBAAoB,eAAe,QAAQ,UAAU;AAC/E,QAAM,aAAa,EAAE,KAAK,SAAS,MAAM,QAAQ,SAAS,SAAS,OAAO;AAC1E,SAAO;AACR;AASO,SAAS,SAAS,QAAgB,UAAkB,eAAsC,IAAwC;AACxI,QAAM,eAAe,YAAY,MAAM;AACvC,MAAI,MAAc;AAClB,QAAM,iBAAiB,YAAY,QAAQ;AAC3C,MAAI,QAAiB;AACrB,MAAG,IAAI;AACN,KAAE,KAAK,KAAM,IAAI,GAAG,KAAK,gBAAgB,iBAAiB,CAAC,CAAC;AAAA,EAC7D;AACA,SAAO,EAAE,cAAc,gBAAgB,KAAK,MAAM;AACnD;AAOO,SAAS,oBAAoB,eAAuB,eAAsC,IAAqC;AACrI,QAAM,UAAiC,CAAC;AACxC,QAAM,OAA2B,CAAC;AAClC,MAAG,CAAC,eAAe;AAClB,WAAO,EAAE,SAAS,KAAK;AAAA,EACxB;AACA,gBAAc,MAAM,GAAG,EAAE,QAAQ,SAAO;AACvC,UAAM,CAAE,QAAQ,QAAS,IAAI,IAAI,MAAM,GAAG;AAC1C,UAAM,EAAE,cAAc,gBAAgB,KAAK,MAAM,IAAI,SAAS,QAAQ,UAAU,eAAe,EAAE;AACjG,YAAQ,YAAY,IAAI;AACxB,SAAK,GAAG,IAAI;AAAA,EACb,CAAC;AACD,SAAO,EAAE,SAAS,KAAK;AACxB;AAEO,SAAS,YAAY,WAAmB;AAC9C,QAAM,SAA+B,EAAE,MAAM,QAAW,MAAM,QAAW,MAAM,OAAU;AACzF,MAAG,CAAC,WAAW;AACd,WAAO;AAAA,EACR;AACA,MAAG,UAAU,SAAS,GAAG,GAAG;AAC3B,UAAM,CAAE,MAAM,QAAS,IAAI,UAAU,MAAM,GAAG;AAC9C,WAAO,OAAO;AACd,KAAE,OAAO,MAAM,OAAO,IAAK,IAAI,SAAS,SAAS,GAAG,IAAI,SAAS,MAAM,GAAG,IAAI,CAAE,UAAU,MAAU;AAAA,EACrG,WACQ,UAAU,SAAS,GAAG,GAAG;AAChC,KAAE,OAAO,MAAM,OAAO,IAAK,IAAI,UAAU,MAAM,GAAG;AAAA,EACnD,OACK;AACJ,WAAO,OAAO;AAAA,EACf;AACA,SAAO;AACR;",
"mappings": "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",
"names": []
}
40 changes: 40 additions & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,24 @@ export function parse(line: string, parseTagCb?: ParseTagCallbackFn): IrcMessage
return ircMessage;
}

interface FormatMessage {
tags?: IrcMessage['tags'];
command: IrcMessage['command'];
prefix?: IrcMessage['prefix'];
channel?: IrcMessage['channel'];
params?: IrcMessage['params'];
}

export function format(ircMessage: FormatMessage): string {
const { tags, prefix: p, command, channel, params } = ircMessage;
const prefixWith = (n: string, c: string = ' ') => n ? `${c}${n}` : null;
const tagsStr = tags ? prefixWith(formatTags(tags), '@') : null;
const prefixStr = p ? prefixWith(formatPrefix(p), ':') : null;
const channelStr = channel ? formatChannel(channel) : null;
const paramsStr = params && params.length ? prefixWith(params.join(' '), ':') : null;
return [ tagsStr, prefixStr, command, channelStr, paramsStr ].filter(Boolean).join(' ');
}

interface ParsedTagData {
unescapedKey: string;
unescapedValue: string;
Expand Down Expand Up @@ -164,3 +182,25 @@ export function parsePrefix(prefixRaw: string) {
}
return prefix;
}

export function formatTags(tags: Record<string, string> | [ string, string ][]): string {
const entries = Array.isArray(tags) ? tags : Object.entries(tags);
return entries.map(([ key, value ]) =>
`${escapeIrc(key)}=${escapeIrc(value.toString())}`
).join(';');
}

export function formatPrefix(prefix: IrcMessage['prefix']) {
if(!prefix) {
return '';
}
const { nick, user, host } = prefix;
if(!nick) {
return '';
}
return `${nick}${user ? `!${user}` : ''}${host ? `@${host}` : ''}`;
}

export function formatChannel(channel: IrcMessage['channel']) {
return channel ? `${channel.startsWith('#') ? channel : `#${channel}`}` : '';
}
Loading

0 comments on commit 3c48d03

Please sign in to comment.