slack-message-parser
Version:
Parser for Slack message
70 lines (69 loc) • 2.19 kB
JavaScript
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.parse = void 0;
const Node_js_1 = require("./types/Node.js");
const parser_js_1 = __importDefault(require("./parser.js"));
const parseText = (text) => {
const children = [];
let textBuffer = "";
const flush = () => {
if (!textBuffer) {
return;
}
children.push({
type: Node_js_1.NodeType.Text,
text: textBuffer,
source: textBuffer,
});
textBuffer = "";
};
let i = 0;
const l = text.length;
while (i < l) {
const match = (0, parser_js_1.default)(text, i, parseText);
if (match) {
flush();
const [node, position] = match;
children.push(node);
i = position;
continue;
}
textBuffer += text.charAt(i);
i += 1;
}
flush();
return children;
};
/**
* Parses a Slack message and returns a parsed Node tree.
*
* @param message - a Slack message to parse
* @returns Root node of the parsed message tree
*/
const parse = (message) => {
return {
type: Node_js_1.NodeType.Root,
children: parseText(message),
source: message,
};
};
exports.parse = parse;
exports.default = exports.parse;
__exportStar(require("./types/Node.js"), exports);
;