UNPKG

slack-message-parser

Version:
151 lines (96 loc) 4.31 kB
# API ## `function parse(message)` Parses Slack message and returns a tree ([`Node`](#interface-node)). ### Arguments | Name | Type | Description | | ------- | ------ | ------------------------ | | message | String | a Slack message to parse | ### Returns | Type | Description | | ---- | -------------------------------------- | | Root | A root node of the parsed message tree | ## `interface Node` Represents each parts of the message, its type and properties. Every node at least have one property, `type`. | Name | Type | Description | | ------ | ---------------- | ---------------------- | | type | Number(NodeType) | Type of the node | | source | String | Raw string of the node | You can test the type with `NodeType` object (which is actually TypeScript enum). ```js import { NodeType } from "slack-message-parser"; switch (node.type) { case NodeType.Text: // ... case NodeType.ChannelLink: // ... } ``` The names of Node and NodeType are one-to-one equivalent (e.g. `Text` node have `type` property that the value is `NodeType.Text`). ### `Root` node A node sits on top of the tree. Every parse result have this node as its root node. #### Properties | Name | Type | Description | | -------- | ------ | ----------- | | children | Node[] | Child nodes | ### `Text` node Texts. #### Properties | Name | Type | Description | | ---- | ------ | ------------ | | text | String | Text content | ### `ChannelLink` node Link to a channel. #### Properties | Name | Type | Description | | --------- | ------------------- | -------------------------- | | channelID | String | An ID of the channel | | label | Node[] \| undefined | Display texts for the link | ### `UserLink` node Link to a user. #### Properties | Name | Type | Description | | ------ | ------------------- | -------------------------- | | userId | String | An ID of the user | | label | Node[] \| undefined | Display texts for the user | ### `URL` node Link other than channels and users (e.g. `https://foo.bar`, `mailto:foo@bar`). #### Properties | Name | Type | Description | | ----- | ------------------- | -------------------------- | | url | String | A link url | | label | Node[] \| undefined | Display texts for the link | ### `Command` node Special commands like `<!date>`, `<!everyone>`, `<!subteam^id|@handle>`, and more. For more details, please refer [Formatting messages | Slack](https://api.slack.com/docs/message-formatting). #### Properties | Name | Type | Description | | --------- | ------------------- | -------------------------------------------------------------------------- | | name | String | A name of the command | | arguments | String[] | Command arguments(prefixed by `^`, `ID` is an argument of `<!subteam^ID>`) | | label | Node[] \| undefined | Display texts for the link | ### `Emoji` node Emojis! #### Properties | Name | Type | Description | | --------- | ------------------- | ------------------------------------------------ | | name | String | A name of the emoji (the text between both `:`s) | | variation | String \| undefined | Emoji variation, currently `skin-tone-` only | ### `PreText` node Code block. Multi-line codes. #### Properties | Name | Type | Description | | ---- | ------ | ------------ | | text | String | Text content | ### `Code` node Inline code. #### Properties | Name | Type | Description | | ---- | ------ | ------------ | | text | String | Text content | ### `Italic`/`Bold`/`Strike`/`Quote` node Represents text decorations. Each nodes just have decoration information, so it acts as container (does not hold texts directly). #### Properties | Name | Type | Description | | -------- | ------ | ----------- | | children | Node[] | Child nodes |