@sena-ai/slack-mrkdwn 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mrkdwn.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mrkdwn.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/mrkdwn.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,163 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { SAFE_SLACK_MESSAGE_OPTIONS, createSlackTextPayload, markdownToMrkdwn, markdownToSlack, } from '../mrkdwn.js';
3
+ describe('markdownToMrkdwn', () => {
4
+ it('converts bold', () => {
5
+ expect(markdownToMrkdwn('this is **bold** text')).toBe('this is *bold* text');
6
+ });
7
+ it('converts italic (single asterisk)', () => {
8
+ expect(markdownToMrkdwn('this is *italic* text')).toBe('this is _italic_ text');
9
+ });
10
+ it('converts bold+italic', () => {
11
+ expect(markdownToMrkdwn('this is ***bold italic*** text')).toBe('this is *_bold italic_* text');
12
+ });
13
+ it('converts strikethrough', () => {
14
+ expect(markdownToMrkdwn('this is ~~deleted~~ text')).toBe('this is ~deleted~ text');
15
+ });
16
+ it('converts links with nested parentheses', () => {
17
+ expect(markdownToMrkdwn('click [here](https://example.com/a_(b))')).toBe('click <https://example.com/a_(b)|here>');
18
+ });
19
+ it('converts images to links', () => {
20
+ expect(markdownToMrkdwn('![alt text](https://img.png)')).toBe('<https://img.png|alt text>');
21
+ });
22
+ it('preserves explicit Slack link tokens', () => {
23
+ expect(markdownToMrkdwn('열기 <https://example.com|문서>')).toBe('열기 <https://example.com|문서>');
24
+ });
25
+ it('preserves explicit mention and channel tokens', () => {
26
+ expect(markdownToMrkdwn('<@U123> in <#C123|general>')).toBe('<@U123> in <#C123|general>');
27
+ });
28
+ it('converts headings to bold', () => {
29
+ expect(markdownToMrkdwn('# Title\n## Subtitle')).toBe('*Title*\n*Subtitle*');
30
+ });
31
+ it('converts horizontal rules', () => {
32
+ expect(markdownToMrkdwn('above\n---\nbelow')).toBe('above\n———\nbelow');
33
+ });
34
+ it('converts unordered list markers to bullets', () => {
35
+ expect(markdownToMrkdwn('- item 1\n- item 2\n* item 3')).toBe('• item 1\n• item 2\n• item 3');
36
+ });
37
+ it('escapes plain-text angle brackets and ampersands', () => {
38
+ expect(markdownToMrkdwn('a < b & c > d')).toBe('a &lt; b &amp; c &gt; d');
39
+ });
40
+ it('preserves inline code', () => {
41
+ expect(markdownToMrkdwn('use `**not bold**` here')).toBe('use `**not bold**` here');
42
+ });
43
+ it('preserves code blocks', () => {
44
+ const input = '```\n**not bold**\n[not a link](url)\n```';
45
+ expect(markdownToMrkdwn(input)).toBe(input);
46
+ });
47
+ it('handles mixed content', () => {
48
+ const input = '## Summary\n\nThis is **important** and [link](https://x.com).\n\n```js\nconst x = 1\n```';
49
+ const expected = '*Summary*\n\nThis is *important* and <https://x.com|link>.\n\n```js\nconst x = 1\n```';
50
+ expect(markdownToMrkdwn(input)).toBe(expected);
51
+ });
52
+ it('passes through plain text unchanged', () => {
53
+ const input = 'just plain text with no formatting';
54
+ expect(markdownToMrkdwn(input)).toBe(input);
55
+ });
56
+ it('handles numbered lists (no change needed)', () => {
57
+ const input = '1. first\n2. second';
58
+ expect(markdownToMrkdwn(input)).toBe(input);
59
+ });
60
+ it('preserves blockquotes', () => {
61
+ const input = '> this is a quote';
62
+ expect(markdownToMrkdwn(input)).toBe('> this is a quote');
63
+ });
64
+ });
65
+ describe('createSlackTextPayload', () => {
66
+ it('applies safe-mode message options', () => {
67
+ expect(createSlackTextPayload('hello')).toEqual({
68
+ text: 'hello',
69
+ ...SAFE_SLACK_MESSAGE_OPTIONS,
70
+ });
71
+ });
72
+ });
73
+ describe('markdownToSlack', () => {
74
+ it('returns safe text payload when no tables', () => {
75
+ const result = markdownToSlack('just **bold** text');
76
+ expect(result).toEqual({
77
+ text: 'just *bold* text',
78
+ ...SAFE_SLACK_MESSAGE_OPTIONS,
79
+ });
80
+ expect(result.blocks).toBeUndefined();
81
+ });
82
+ it('converts a simple markdown table to a table block', () => {
83
+ const md = '| Name | Age |\n|------|-----|\n| Alice | 30 |\n| Bob | 25 |';
84
+ const result = markdownToSlack(md);
85
+ expect(result.blocks).toBeDefined();
86
+ expect(result.blocks).toHaveLength(1);
87
+ const table = result.blocks[0];
88
+ expect(table.type).toBe('table');
89
+ expect(table.rows).toHaveLength(3);
90
+ expect(table.column_settings).toEqual([{ align: 'left' }, { align: 'left' }]);
91
+ const rows = table.rows;
92
+ expect(rows[0]).toEqual([
93
+ { type: 'raw_text', text: 'Name' },
94
+ { type: 'raw_text', text: 'Age' },
95
+ ]);
96
+ expect(rows[1]).toEqual([
97
+ { type: 'raw_text', text: 'Alice' },
98
+ { type: 'raw_text', text: '30' },
99
+ ]);
100
+ });
101
+ it('detects single-column markdown tables', () => {
102
+ const md = '| Col |\n|---|\n| value |';
103
+ const result = markdownToSlack(md);
104
+ expect(result.blocks?.[0].type).toBe('table');
105
+ });
106
+ it('respects column alignment from separator row', () => {
107
+ const md = '| Left | Center | Right |\n|:-----|:------:|------:|\n| a | b | c |';
108
+ const result = markdownToSlack(md);
109
+ const table = result.blocks[0];
110
+ expect(table.column_settings).toEqual([
111
+ { align: 'left' },
112
+ { align: 'center' },
113
+ { align: 'right' },
114
+ ]);
115
+ });
116
+ it('wraps surrounding text in verbatim section blocks', () => {
117
+ const md = 'Before table\n\n| A | B |\n|---|---|\n| 1 | 2 |\n\nAfter table';
118
+ const result = markdownToSlack(md);
119
+ expect(result.blocks).toHaveLength(3);
120
+ const first = result.blocks[0];
121
+ const last = result.blocks[2];
122
+ expect(first.type).toBe('section');
123
+ expect(first.text?.verbatim).toBe(true);
124
+ expect(result.blocks[1].type).toBe('table');
125
+ expect(last.type).toBe('section');
126
+ expect(last.text?.verbatim).toBe(true);
127
+ });
128
+ it('does not convert tables inside code blocks', () => {
129
+ const md = '```\n| A | B |\n|---|---|\n| 1 | 2 |\n```';
130
+ const result = markdownToSlack(md);
131
+ expect(result.blocks).toBeUndefined();
132
+ });
133
+ it('converts only first table to block, extras become code blocks', () => {
134
+ const md = '| A | B |\n|---|---|\n| 1 | 2 |\n\n| C | D |\n|---|---|\n| 3 | 4 |';
135
+ const result = markdownToSlack(md);
136
+ expect(result.blocks).toBeDefined();
137
+ const tableBlocks = result.blocks.filter(b => b.type === 'table');
138
+ expect(tableBlocks).toHaveLength(1);
139
+ const sectionBlocks = result.blocks.filter(b => b.type === 'section');
140
+ const hasCodeBlock = sectionBlocks.some(b => {
141
+ const text = b.text?.text ?? '';
142
+ return text.includes('```');
143
+ });
144
+ expect(hasCodeBlock).toBe(true);
145
+ });
146
+ it('pads rows with fewer cells than header', () => {
147
+ const md = '| A | B | C |\n|---|---|---|\n| 1 |';
148
+ const result = markdownToSlack(md);
149
+ const rows = result.blocks[0].rows;
150
+ expect(rows[1]).toHaveLength(3);
151
+ expect(rows[1][1].text).toBe('');
152
+ expect(rows[1][2].text).toBe('');
153
+ });
154
+ it('includes fallback text and safe-mode options for notifications', () => {
155
+ const md = '| A | B |\n|---|---|\n| 1 | 2 |';
156
+ const result = markdownToSlack(md);
157
+ expect(result).toMatchObject({
158
+ text: expect.any(String),
159
+ ...SAFE_SLACK_MESSAGE_OPTIONS,
160
+ });
161
+ });
162
+ });
163
+ //# sourceMappingURL=mrkdwn.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mrkdwn.test.js","sourceRoot":"","sources":["../../src/__tests__/mrkdwn.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { SAFE_SLACK_MESSAGE_OPTIONS, createSlackTextPayload, markdownToMrkdwn, markdownToSlack, } from './mrkdwn.js';
2
+ export type { SlackMessagePayload } from './mrkdwn.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,gBAAgB,EAChB,eAAe,GAChB,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { SAFE_SLACK_MESSAGE_OPTIONS, createSlackTextPayload, markdownToMrkdwn, markdownToSlack, } from './mrkdwn.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,gBAAgB,EAChB,eAAe,GAChB,MAAM,aAAa,CAAA"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Convert standard Markdown to Slack-safe mrkdwn format.
3
+ *
4
+ * Safe mode rules:
5
+ * - Never rely on Slack auto parsing.
6
+ * - Preserve explicit Slack tokens like <@U123>, <#C123>, <!here>, <https://x|label>.
7
+ * - Escape plain-text &, <, > outside code and explicit Slack tokens.
8
+ */
9
+ export declare const SAFE_SLACK_MESSAGE_OPTIONS: Readonly<{
10
+ parse: "none";
11
+ link_names: false;
12
+ unfurl_links: false;
13
+ unfurl_media: false;
14
+ }>;
15
+ export type SlackMessagePayload = {
16
+ text: string;
17
+ blocks?: Array<Record<string, unknown>>;
18
+ parse: 'none';
19
+ link_names: false;
20
+ unfurl_links: false;
21
+ unfurl_media: false;
22
+ };
23
+ export declare function createSlackTextPayload(text: string): SlackMessagePayload;
24
+ export declare function markdownToMrkdwn(md: string): string;
25
+ export declare function markdownToSlack(md: string): SlackMessagePayload;
26
+ //# sourceMappingURL=mrkdwn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mrkdwn.d.ts","sourceRoot":"","sources":["../src/mrkdwn.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,eAAO,MAAM,0BAA0B;;;;;EAKrC,CAAA;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACvC,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,KAAK,CAAA;IACjB,YAAY,EAAE,KAAK,CAAA;IACnB,YAAY,EAAE,KAAK,CAAA;CACpB,CAAA;AAQD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAKxE;AAeD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAiCnD;AAgPD,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,mBAAmB,CA6C/D"}
package/dist/mrkdwn.js ADDED
@@ -0,0 +1,307 @@
1
+ /**
2
+ * Convert standard Markdown to Slack-safe mrkdwn format.
3
+ *
4
+ * Safe mode rules:
5
+ * - Never rely on Slack auto parsing.
6
+ * - Preserve explicit Slack tokens like <@U123>, <#C123>, <!here>, <https://x|label>.
7
+ * - Escape plain-text &, <, > outside code and explicit Slack tokens.
8
+ */
9
+ const PH = '\u200B\u200B';
10
+ export const SAFE_SLACK_MESSAGE_OPTIONS = Object.freeze({
11
+ parse: 'none',
12
+ link_names: false,
13
+ unfurl_links: false,
14
+ unfurl_media: false,
15
+ });
16
+ const SECTION_TEXT_LIMIT = 3000;
17
+ const EXPLICIT_SLACK_TOKEN_RE = /<(?:@[A-Z0-9]+(?:\|[^>\n]+)?|#[A-Z0-9]+(?:\|[^>\n]+)?|![^>\n]+|(?:https?|mailto|tel|slack):[^>\n]+|www\.[^>\n]+)>/gi;
18
+ export function createSlackTextPayload(text) {
19
+ return {
20
+ text,
21
+ ...SAFE_SLACK_MESSAGE_OPTIONS,
22
+ };
23
+ }
24
+ function createSlackPayload(text, blocks) {
25
+ return blocks && blocks.length > 0
26
+ ? {
27
+ text,
28
+ blocks,
29
+ ...SAFE_SLACK_MESSAGE_OPTIONS,
30
+ }
31
+ : createSlackTextPayload(text);
32
+ }
33
+ export function markdownToMrkdwn(md) {
34
+ const placeholders = [];
35
+ function hold(value) {
36
+ placeholders.push(value);
37
+ return `${PH}PH_${placeholders.length - 1}${PH}`;
38
+ }
39
+ let text = md.replace(/```[\s\S]*?```/g, match => hold(match));
40
+ text = text.replace(/`[^`\n]+`/g, match => hold(match));
41
+ text = text.replace(EXPLICIT_SLACK_TOKEN_RE, match => hold(match));
42
+ text = replaceMarkdownImages(text, hold);
43
+ text = replaceMarkdownLinks(text, hold);
44
+ text = text.replace(/^#{1,6}\s+(.+)$/gm, (_, content) => hold(`*${content}*`));
45
+ text = text.replace(/\*{3}(.+?)\*{3}/g, (_, content) => hold(`*_${content}_*`));
46
+ text = text.replace(/_{3}(.+?)_{3}/g, (_, content) => hold(`*_${content}_*`));
47
+ text = text.replace(/\*{2}(.+?)\*{2}/g, (_, content) => hold(`*${content}*`));
48
+ text = text.replace(/_{2}(.+?)_{2}/g, (_, content) => hold(`*${content}*`));
49
+ text = text.replace(/(?<!\*)\*(?!\*)(.+?)(?<!\*)\*(?!\*)/g, '_$1_');
50
+ text = text.replace(/(?<!\w)_(?!_)(.+?)(?<!_)_(?!\w)/g, '_$1_');
51
+ text = text.replace(/~~(.+?)~~/g, '~$1~');
52
+ text = text.replace(/^[-*_]{3,}$/gm, '———');
53
+ text = text.replace(/^(\s*)[-*+]\s+/gm, '$1• ');
54
+ text = text.replace(/^(?:>\s?)+/gm, match => hold(match));
55
+ text = escapePlainText(text);
56
+ for (let i = placeholders.length - 1; i >= 0; i--) {
57
+ text = text.replace(`${PH}PH_${i}${PH}`, placeholders[i]);
58
+ }
59
+ return text;
60
+ }
61
+ function replaceMarkdownImages(text, hold) {
62
+ return replaceMarkdownLinkLike(text, hold, true);
63
+ }
64
+ function replaceMarkdownLinks(text, hold) {
65
+ return replaceMarkdownLinkLike(text, hold, false);
66
+ }
67
+ function replaceMarkdownLinkLike(text, hold, image) {
68
+ let out = '';
69
+ let i = 0;
70
+ while (i < text.length) {
71
+ const markerStart = image ? '![' : '[';
72
+ if (!text.startsWith(markerStart, i)) {
73
+ out += text[i];
74
+ i++;
75
+ continue;
76
+ }
77
+ const labelStart = image ? i + 1 : i;
78
+ const labelEnd = findClosingBracket(text, labelStart);
79
+ if (labelEnd < 0 || text[labelEnd + 1] !== '(') {
80
+ out += text[i];
81
+ i++;
82
+ continue;
83
+ }
84
+ const urlEnd = findClosingParen(text, labelEnd + 1);
85
+ if (urlEnd < 0) {
86
+ out += text[i];
87
+ i++;
88
+ continue;
89
+ }
90
+ const label = text.slice(labelStart + 1, labelEnd);
91
+ const url = text.slice(labelEnd + 2, urlEnd).trim();
92
+ out += hold(`<${url}|${label}>`);
93
+ i = urlEnd + 1;
94
+ }
95
+ return out;
96
+ }
97
+ function findClosingBracket(text, start) {
98
+ let depth = 0;
99
+ for (let i = start; i < text.length; i++) {
100
+ const ch = text[i];
101
+ if (ch === '\\') {
102
+ i++;
103
+ continue;
104
+ }
105
+ if (ch === '[')
106
+ depth++;
107
+ if (ch === ']') {
108
+ depth--;
109
+ if (depth === 0)
110
+ return i;
111
+ }
112
+ }
113
+ return -1;
114
+ }
115
+ function findClosingParen(text, start) {
116
+ let depth = 0;
117
+ for (let i = start; i < text.length; i++) {
118
+ const ch = text[i];
119
+ if (ch === '\\') {
120
+ i++;
121
+ continue;
122
+ }
123
+ if (ch === '(')
124
+ depth++;
125
+ if (ch === ')') {
126
+ depth--;
127
+ if (depth === 0)
128
+ return i;
129
+ }
130
+ }
131
+ return -1;
132
+ }
133
+ function escapePlainText(text) {
134
+ return text
135
+ .replace(/&(?!(?:amp|lt|gt);)/g, '&amp;')
136
+ .replace(/</g, '&lt;')
137
+ .replace(/>/g, '&gt;');
138
+ }
139
+ function isTableSeparator(line) {
140
+ return /^\|?\s*:?-+:?\s*(?:\|\s*:?-+:?\s*)*\|?\s*$/.test(line.trim());
141
+ }
142
+ function isTableRow(line) {
143
+ const trimmed = line.trim();
144
+ return trimmed.includes('|') && trimmed.length > 0 && !isTableSeparator(trimmed);
145
+ }
146
+ function containsTable(text) {
147
+ const lines = text.split('\n');
148
+ for (let i = 0; i < lines.length - 1; i++) {
149
+ if (isTableRow(lines[i]) && isTableSeparator(lines[i + 1]))
150
+ return true;
151
+ }
152
+ return false;
153
+ }
154
+ function splitIntoSegments(md) {
155
+ const lines = md.split('\n');
156
+ const segments = [];
157
+ let textBuf = [];
158
+ let inCodeBlock = false;
159
+ let i = 0;
160
+ while (i < lines.length) {
161
+ if (lines[i].trimStart().startsWith('```')) {
162
+ inCodeBlock = !inCodeBlock;
163
+ textBuf.push(lines[i]);
164
+ i++;
165
+ continue;
166
+ }
167
+ if (inCodeBlock) {
168
+ textBuf.push(lines[i]);
169
+ i++;
170
+ continue;
171
+ }
172
+ if (i + 1 < lines.length && isTableRow(lines[i]) && isTableSeparator(lines[i + 1])) {
173
+ if (textBuf.length > 0) {
174
+ segments.push({ type: 'text', content: textBuf.join('\n') });
175
+ textBuf = [];
176
+ }
177
+ const tableLines = [lines[i], lines[i + 1]];
178
+ i += 2;
179
+ while (i < lines.length && isTableRow(lines[i])) {
180
+ tableLines.push(lines[i]);
181
+ i++;
182
+ }
183
+ segments.push({ type: 'table', content: tableLines.join('\n') });
184
+ }
185
+ else {
186
+ textBuf.push(lines[i]);
187
+ i++;
188
+ }
189
+ }
190
+ if (textBuf.length > 0) {
191
+ segments.push({ type: 'text', content: textBuf.join('\n') });
192
+ }
193
+ return segments;
194
+ }
195
+ function parseRowCells(line) {
196
+ const source = line.trim().replace(/^\|/, '').replace(/\|\s*$/, '');
197
+ const cells = [];
198
+ let current = '';
199
+ let escaped = false;
200
+ let inInlineCode = false;
201
+ for (const ch of source) {
202
+ if (escaped) {
203
+ current += ch;
204
+ escaped = false;
205
+ continue;
206
+ }
207
+ if (ch === '\\') {
208
+ escaped = true;
209
+ current += ch;
210
+ continue;
211
+ }
212
+ if (ch === '`') {
213
+ inInlineCode = !inInlineCode;
214
+ current += ch;
215
+ continue;
216
+ }
217
+ if (ch === '|' && !inInlineCode) {
218
+ cells.push(current.trim());
219
+ current = '';
220
+ continue;
221
+ }
222
+ current += ch;
223
+ }
224
+ cells.push(current.trim());
225
+ return cells;
226
+ }
227
+ function parseColumnAlignments(separator) {
228
+ return parseRowCells(separator).map(col => {
229
+ const t = col.trim();
230
+ if (t.startsWith(':') && t.endsWith(':'))
231
+ return 'center';
232
+ if (t.endsWith(':'))
233
+ return 'right';
234
+ return 'left';
235
+ });
236
+ }
237
+ function parseTableToBlock(tableStr) {
238
+ const lines = tableStr.trim().split('\n');
239
+ const headerCells = parseRowCells(lines[0]);
240
+ const alignments = parseColumnAlignments(lines[1]);
241
+ const colCount = headerCells.length;
242
+ const columnSettings = Array.from({ length: colCount }, (_, i) => ({
243
+ align: alignments[i] || 'left',
244
+ }));
245
+ const rows = [];
246
+ rows.push(headerCells.map(text => ({ type: 'raw_text', text })));
247
+ for (let r = 2; r < lines.length; r++) {
248
+ const cells = parseRowCells(lines[r]);
249
+ rows.push(Array.from({ length: colCount }, (_, i) => ({
250
+ type: 'raw_text',
251
+ text: cells[i] ?? '',
252
+ })));
253
+ }
254
+ return { type: 'table', column_settings: columnSettings, rows };
255
+ }
256
+ function createMrkdwnSection(text) {
257
+ return {
258
+ type: 'section',
259
+ text: {
260
+ type: 'mrkdwn',
261
+ text,
262
+ verbatim: true,
263
+ },
264
+ };
265
+ }
266
+ export function markdownToSlack(md) {
267
+ const mrkdwnText = markdownToMrkdwn(md);
268
+ const withoutCode = md.replace(/```[\s\S]*?```/g, '');
269
+ if (!containsTable(withoutCode)) {
270
+ return createSlackTextPayload(mrkdwnText);
271
+ }
272
+ const segments = splitIntoSegments(md);
273
+ const blocks = [];
274
+ let tableUsed = false;
275
+ for (const seg of segments) {
276
+ if (seg.type === 'table') {
277
+ if (!tableUsed) {
278
+ blocks.push(parseTableToBlock(seg.content));
279
+ tableUsed = true;
280
+ }
281
+ else {
282
+ blocks.push(createMrkdwnSection('```\n' + seg.content + '\n```'));
283
+ }
284
+ continue;
285
+ }
286
+ const mrkdwn = markdownToMrkdwn(seg.content).trim();
287
+ if (!mrkdwn)
288
+ continue;
289
+ if (mrkdwn.length <= SECTION_TEXT_LIMIT) {
290
+ blocks.push(createMrkdwnSection(mrkdwn));
291
+ continue;
292
+ }
293
+ let remaining = mrkdwn;
294
+ while (remaining.length > 0) {
295
+ if (remaining.length <= SECTION_TEXT_LIMIT) {
296
+ blocks.push(createMrkdwnSection(remaining));
297
+ break;
298
+ }
299
+ const splitAt = remaining.lastIndexOf('\n\n', SECTION_TEXT_LIMIT);
300
+ const cutPoint = splitAt > 0 ? splitAt : SECTION_TEXT_LIMIT;
301
+ blocks.push(createMrkdwnSection(remaining.slice(0, cutPoint)));
302
+ remaining = remaining.slice(cutPoint).replace(/^\n+/, '');
303
+ }
304
+ }
305
+ return createSlackPayload(mrkdwnText, blocks);
306
+ }
307
+ //# sourceMappingURL=mrkdwn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mrkdwn.js","sourceRoot":"","sources":["../src/mrkdwn.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,EAAE,GAAG,cAAc,CAAA;AAEzB,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC,MAAM,CAAC;IACtD,KAAK,EAAE,MAAe;IACtB,UAAU,EAAE,KAAc;IAC1B,YAAY,EAAE,KAAc;IAC5B,YAAY,EAAE,KAAc;CAC7B,CAAC,CAAA;AAaF,MAAM,kBAAkB,GAAG,IAAI,CAAA;AAC/B,MAAM,uBAAuB,GAC3B,qHAAqH,CAAA;AAEvH,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,OAAO;QACL,IAAI;QACJ,GAAG,0BAA0B;KAC9B,CAAA;AACH,CAAC;AAED,SAAS,kBAAkB,CACzB,IAAY,EACZ,MAAuC;IAEvC,OAAO,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAChC,CAAC,CAAC;YACE,IAAI;YACJ,MAAM;YACN,GAAG,0BAA0B;SAC9B;QACH,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAAU;IACzC,MAAM,YAAY,GAAa,EAAE,CAAA;IAEjC,SAAS,IAAI,CAAC,KAAa;QACzB,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACxB,OAAO,GAAG,EAAE,MAAM,YAAY,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,EAAE,CAAA;IAClD,CAAC;IAED,IAAI,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IAC9D,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IACvD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IAClE,IAAI,GAAG,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IACxC,IAAI,GAAG,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAEvC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAA;IAC9E,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC,CAAA;IAC/E,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC,CAAA;IAC7E,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAA;IAC7E,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAA;IAC3E,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,sCAAsC,EAAE,MAAM,CAAC,CAAA;IACnE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,kCAAkC,EAAE,MAAM,CAAC,CAAA;IAC/D,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;IACzC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,CAAA;IAC3C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAA;IAC/C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IAEzD,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;IAE5B,KAAK,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAClD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3D,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,IAA+B;IAC1E,OAAO,uBAAuB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AAClD,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY,EAAE,IAA+B;IACzE,OAAO,uBAAuB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;AACnD,CAAC;AAED,SAAS,uBAAuB,CAC9B,IAAY,EACZ,IAA+B,EAC/B,KAAc;IAEd,IAAI,GAAG,GAAG,EAAE,CAAA;IACZ,IAAI,CAAC,GAAG,CAAC,CAAA;IAET,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAA;QACtC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC;YACrC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAA;YACd,CAAC,EAAE,CAAA;YACH,SAAQ;QACV,CAAC;QAED,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACpC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;QACrD,IAAI,QAAQ,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAC/C,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAA;YACd,CAAC,EAAE,CAAA;YACH,SAAQ;QACV,CAAC;QAED,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAA;QACnD,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACf,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAA;YACd,CAAC,EAAE,CAAA;YACH,SAAQ;QACV,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAA;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA;QACnD,GAAG,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,KAAK,GAAG,CAAC,CAAA;QAChC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAA;IAChB,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY,EAAE,KAAa;IACrD,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QAClB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAChB,CAAC,EAAE,CAAA;YACH,SAAQ;QACV,CAAC;QACD,IAAI,EAAE,KAAK,GAAG;YAAE,KAAK,EAAE,CAAA;QACvB,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACf,KAAK,EAAE,CAAA;YACP,IAAI,KAAK,KAAK,CAAC;gBAAE,OAAO,CAAC,CAAA;QAC3B,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC,CAAA;AACX,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY,EAAE,KAAa;IACnD,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QAClB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAChB,CAAC,EAAE,CAAA;YACH,SAAQ;QACV,CAAC;QACD,IAAI,EAAE,KAAK,GAAG;YAAE,KAAK,EAAE,CAAA;QACvB,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACf,KAAK,EAAE,CAAA;YACP,IAAI,KAAK,KAAK,CAAC;gBAAE,OAAO,CAAC,CAAA;QAC3B,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC,CAAA;AACX,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,OAAO,IAAI;SACR,OAAO,CAAC,sBAAsB,EAAE,OAAO,CAAC;SACxC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;AAC1B,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,4CAA4C,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;AACvE,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;IAC3B,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAA;AAClF,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAA;IACzE,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,iBAAiB,CAAC,EAAU;IACnC,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC5B,MAAM,QAAQ,GAAc,EAAE,CAAA;IAC9B,IAAI,OAAO,GAAa,EAAE,CAAA;IAC1B,IAAI,WAAW,GAAG,KAAK,CAAA;IACvB,IAAI,CAAC,GAAG,CAAC,CAAA;IAET,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACxB,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3C,WAAW,GAAG,CAAC,WAAW,CAAA;YAC1B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;YACtB,CAAC,EAAE,CAAA;YACH,SAAQ;QACV,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;YACtB,CAAC,EAAE,CAAA;YACH,SAAQ;QACV,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACnF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBAC5D,OAAO,GAAG,EAAE,CAAA;YACd,CAAC;YAED,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YAC3C,CAAC,IAAI,CAAC,CAAA;YACN,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChD,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;gBACzB,CAAC,EAAE,CAAA;YACL,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAClE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;YACtB,CAAC,EAAE,CAAA;QACL,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC9D,CAAC;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;IACnE,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,IAAI,OAAO,GAAG,EAAE,CAAA;IAChB,IAAI,OAAO,GAAG,KAAK,CAAA;IACnB,IAAI,YAAY,GAAG,KAAK,CAAA;IAExB,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;QACxB,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,IAAI,EAAE,CAAA;YACb,OAAO,GAAG,KAAK,CAAA;YACf,SAAQ;QACV,CAAC;QAED,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAChB,OAAO,GAAG,IAAI,CAAA;YACd,OAAO,IAAI,EAAE,CAAA;YACb,SAAQ;QACV,CAAC;QAED,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACf,YAAY,GAAG,CAAC,YAAY,CAAA;YAC5B,OAAO,IAAI,EAAE,CAAA;YACb,SAAQ;QACV,CAAC;QAED,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;YAC1B,OAAO,GAAG,EAAE,CAAA;YACZ,SAAQ;QACV,CAAC;QAED,OAAO,IAAI,EAAE,CAAA;IACf,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IAC1B,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,qBAAqB,CAAC,SAAiB;IAC9C,OAAO,aAAa,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QACxC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;QACpB,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,QAAQ,CAAA;QACzD,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,OAAO,CAAA;QACnC,OAAO,MAAM,CAAA;IACf,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB;IACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACzC,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3C,MAAM,UAAU,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAClD,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAA;IAEnC,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACjE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,IAAK,MAAgB;KAC1C,CAAC,CAAC,CAAA;IAEH,MAAM,IAAI,GAAiD,EAAE,CAAA;IAC7D,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IAEhE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QACrC,IAAI,CAAC,IAAI,CACP,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAC1C,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;SACrB,CAAC,CAAC,CACJ,CAAA;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,IAAI,EAAE,CAAA;AACjE,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY;IACvC,OAAO;QACL,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,IAAI;YACJ,QAAQ,EAAE,IAAI;SACf;KACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAU;IACxC,MAAM,UAAU,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAA;IACvC,MAAM,WAAW,GAAG,EAAE,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAA;IACrD,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,OAAO,sBAAsB,CAAC,UAAU,CAAC,CAAA;IAC3C,CAAC;IAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAA;IACtC,MAAM,MAAM,GAAmC,EAAE,CAAA;IACjD,IAAI,SAAS,GAAG,KAAK,CAAA;IAErB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;gBAC3C,SAAS,GAAG,IAAI,CAAA;YAClB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAA;YACnE,CAAC;YACD,SAAQ;QACV,CAAC;QAED,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAA;QACnD,IAAI,CAAC,MAAM;YAAE,SAAQ;QAErB,IAAI,MAAM,CAAC,MAAM,IAAI,kBAAkB,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAA;YACxC,SAAQ;QACV,CAAC;QAED,IAAI,SAAS,GAAG,MAAM,CAAA;QACtB,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,SAAS,CAAC,MAAM,IAAI,kBAAkB,EAAE,CAAC;gBAC3C,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAA;gBAC3C,MAAK;YACP,CAAC;YAED,MAAM,OAAO,GAAG,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;YACjE,MAAM,QAAQ,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAA;YAC3D,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAA;YAC9D,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;QAC3D,CAAC;IACH,CAAC;IAED,OAAO,kBAAkB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;AAC/C,CAAC"}
package/package.json ADDED
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "@sena-ai/slack-mrkdwn",
3
+ "version": "1.5.1",
4
+ "type": "module",
5
+ "exports": {
6
+ ".": {
7
+ "types": "./dist/index.d.ts",
8
+ "import": "./dist/index.js",
9
+ "default": "./dist/index.js"
10
+ }
11
+ },
12
+ "files": [
13
+ "dist"
14
+ ],
15
+ "devDependencies": {
16
+ "typescript": "^5.8.0"
17
+ },
18
+ "scripts": {
19
+ "build": "tsc -b",
20
+ "dev": "tsc -b --watch"
21
+ }
22
+ }