@jagadeesh52423/atlassian-mcp-server 1.0.2 → 1.1.0
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.
- package/dist/clients/base-client.d.ts +26 -0
- package/dist/clients/base-client.d.ts.map +1 -0
- package/dist/clients/base-client.js +58 -0
- package/dist/clients/base-client.js.map +1 -0
- package/dist/clients/bitbucket-client.d.ts +17 -0
- package/dist/clients/bitbucket-client.d.ts.map +1 -0
- package/dist/clients/bitbucket-client.js +36 -0
- package/dist/clients/bitbucket-client.js.map +1 -0
- package/dist/clients/confluence-client.d.ts +8 -0
- package/dist/clients/confluence-client.d.ts.map +1 -0
- package/dist/clients/confluence-client.js +16 -0
- package/dist/clients/confluence-client.js.map +1 -0
- package/dist/clients/index.d.ts +5 -0
- package/dist/clients/index.d.ts.map +1 -0
- package/dist/clients/index.js +5 -0
- package/dist/clients/index.js.map +1 -0
- package/dist/clients/jira-client.d.ts +8 -0
- package/dist/clients/jira-client.d.ts.map +1 -0
- package/dist/clients/jira-client.js +16 -0
- package/dist/clients/jira-client.js.map +1 -0
- package/dist/constants.d.ts +67 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +78 -0
- package/dist/constants.js.map +1 -0
- package/dist/error-handler.d.ts +83 -0
- package/dist/error-handler.d.ts.map +1 -0
- package/dist/error-handler.js +141 -0
- package/dist/error-handler.js.map +1 -0
- package/dist/formatters/adf-formatter.d.ts +25 -0
- package/dist/formatters/adf-formatter.d.ts.map +1 -0
- package/dist/formatters/adf-formatter.js +609 -0
- package/dist/formatters/adf-formatter.js.map +1 -0
- package/dist/formatters/index.d.ts +2 -0
- package/dist/formatters/index.d.ts.map +1 -0
- package/dist/formatters/index.js +2 -0
- package/dist/formatters/index.js.map +1 -0
- package/dist/handlers/bitbucket-handlers.d.ts +94 -0
- package/dist/handlers/bitbucket-handlers.d.ts.map +1 -0
- package/dist/handlers/bitbucket-handlers.js +251 -0
- package/dist/handlers/bitbucket-handlers.js.map +1 -0
- package/dist/handlers/confluence-handlers.d.ts +106 -0
- package/dist/handlers/confluence-handlers.d.ts.map +1 -0
- package/dist/handlers/confluence-handlers.js +340 -0
- package/dist/handlers/confluence-handlers.js.map +1 -0
- package/dist/handlers/index.d.ts +4 -0
- package/dist/handlers/index.d.ts.map +1 -0
- package/dist/handlers/index.js +4 -0
- package/dist/handlers/index.js.map +1 -0
- package/dist/handlers/jira-handlers.d.ts +237 -0
- package/dist/handlers/jira-handlers.d.ts.map +1 -0
- package/dist/handlers/jira-handlers.js +816 -0
- package/dist/handlers/jira-handlers.js.map +1 -0
- package/dist/index.js +189 -2536
- package/dist/index.js.map +1 -1
- package/dist/services/bitbucket.d.ts +11 -1
- package/dist/services/bitbucket.d.ts.map +1 -1
- package/dist/services/bitbucket.js +78 -0
- package/dist/services/bitbucket.js.map +1 -1
- package/dist/services/confluence.d.ts +5 -0
- package/dist/services/confluence.d.ts.map +1 -1
- package/dist/services/confluence.js +59 -4
- package/dist/services/confluence.js.map +1 -1
- package/dist/services/jira.d.ts +57 -0
- package/dist/services/jira.d.ts.map +1 -1
- package/dist/services/jira.js +395 -24
- package/dist/services/jira.js.map +1 -1
- package/dist/tools/bitbucket-tools.d.ts +6 -0
- package/dist/tools/bitbucket-tools.d.ts.map +1 -0
- package/dist/tools/bitbucket-tools.js +386 -0
- package/dist/tools/bitbucket-tools.js.map +1 -0
- package/dist/tools/confluence-tools.d.ts +17 -0
- package/dist/tools/confluence-tools.d.ts.map +1 -0
- package/dist/tools/confluence-tools.js +440 -0
- package/dist/tools/confluence-tools.js.map +1 -0
- package/dist/tools/index.d.ts +8 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +15 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/jira-tools.d.ts +6 -0
- package/dist/tools/jira-tools.d.ts.map +1 -0
- package/dist/tools/jira-tools.js +1032 -0
- package/dist/tools/jira-tools.js.map +1 -0
- package/dist/types.d.ts +23 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ADF (Atlassian Document Format) Formatter
|
|
3
|
+
* Handles conversion between plain text/markdown and ADF format used by Jira API v3
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Extracts plain text from ADF (Atlassian Document Format) body
|
|
7
|
+
*/
|
|
8
|
+
export declare function extractTextFromADF(body: any): string;
|
|
9
|
+
/**
|
|
10
|
+
* Formats wiki markup to cleaner text
|
|
11
|
+
*/
|
|
12
|
+
export declare function formatWikiMarkup(text: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* Parses inline formatting like **bold**, *italic*, `code`, {{code}}
|
|
15
|
+
*/
|
|
16
|
+
export declare function parseInlineFormatting(text: string): any[];
|
|
17
|
+
/**
|
|
18
|
+
* Enhanced description parser that converts text to proper ADF format
|
|
19
|
+
*/
|
|
20
|
+
export declare function parseDescriptionToADF(description: string): any;
|
|
21
|
+
/**
|
|
22
|
+
* Convert description to wiki markup text format
|
|
23
|
+
*/
|
|
24
|
+
export declare function parseDescriptionToWikiMarkup(description: string): string;
|
|
25
|
+
//# sourceMappingURL=adf-formatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adf-formatter.d.ts","sourceRoot":"","sources":["../../src/formatters/adf-formatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,CAqGpD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAqBrD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,EAAE,CAmHzD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG,CAgT9D;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CA6FxE"}
|
|
@@ -0,0 +1,609 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ADF (Atlassian Document Format) Formatter
|
|
3
|
+
* Handles conversion between plain text/markdown and ADF format used by Jira API v3
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Extracts plain text from ADF (Atlassian Document Format) body
|
|
7
|
+
*/
|
|
8
|
+
export function extractTextFromADF(body) {
|
|
9
|
+
if (!body)
|
|
10
|
+
return '';
|
|
11
|
+
// If body is already a string (wiki markup), return it directly
|
|
12
|
+
if (typeof body === 'string') {
|
|
13
|
+
return formatWikiMarkup(body);
|
|
14
|
+
}
|
|
15
|
+
// If body doesn't have content property, it might be wiki markup in another format
|
|
16
|
+
if (!body.content) {
|
|
17
|
+
return formatWikiMarkup(String(body));
|
|
18
|
+
}
|
|
19
|
+
let text = '';
|
|
20
|
+
const extractFromContent = (content) => {
|
|
21
|
+
for (const item of content) {
|
|
22
|
+
if (item.type === 'text' && item.text) {
|
|
23
|
+
text += item.text;
|
|
24
|
+
}
|
|
25
|
+
else if (item.type === 'hardBreak') {
|
|
26
|
+
text += '\n';
|
|
27
|
+
}
|
|
28
|
+
else if (item.type === 'paragraph') {
|
|
29
|
+
if (item.content) {
|
|
30
|
+
extractFromContent(item.content);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
else if (item.type === 'heading') {
|
|
34
|
+
const level = item.attrs?.level || 1;
|
|
35
|
+
const prefix = '#'.repeat(level);
|
|
36
|
+
text += `${prefix} `;
|
|
37
|
+
if (item.content) {
|
|
38
|
+
extractFromContent(item.content);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
else if (item.type === 'bulletList' || item.type === 'orderedList') {
|
|
42
|
+
if (item.content) {
|
|
43
|
+
extractFromContent(item.content);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else if (item.type === 'listItem') {
|
|
47
|
+
text += '- ';
|
|
48
|
+
if (item.content) {
|
|
49
|
+
extractFromContent(item.content);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
else if (item.type === 'codeBlock') {
|
|
53
|
+
text += '```';
|
|
54
|
+
if (item.content) {
|
|
55
|
+
extractFromContent(item.content);
|
|
56
|
+
}
|
|
57
|
+
text += '```';
|
|
58
|
+
}
|
|
59
|
+
else if (item.type === 'table') {
|
|
60
|
+
// Extract table as markdown
|
|
61
|
+
if (item.content) {
|
|
62
|
+
const rows = [];
|
|
63
|
+
item.content.forEach((row) => {
|
|
64
|
+
if (row.type === 'tableRow' && row.content) {
|
|
65
|
+
const cells = [];
|
|
66
|
+
row.content.forEach((cell) => {
|
|
67
|
+
if ((cell.type === 'tableCell' || cell.type === 'tableHeader') && cell.content) {
|
|
68
|
+
let cellText = '';
|
|
69
|
+
const extractCellText = (cellContent) => {
|
|
70
|
+
cellContent.forEach((cellItem) => {
|
|
71
|
+
if (cellItem.type === 'paragraph' && cellItem.content) {
|
|
72
|
+
cellItem.content.forEach((textItem) => {
|
|
73
|
+
if (textItem.type === 'text' && textItem.text) {
|
|
74
|
+
cellText += textItem.text;
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
};
|
|
80
|
+
extractCellText(cell.content);
|
|
81
|
+
cells.push(cellText.trim());
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
if (cells.length > 0) {
|
|
85
|
+
rows.push(cells);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
// Format as markdown table
|
|
90
|
+
if (rows.length > 0) {
|
|
91
|
+
const [headerRow, ...dataRows] = rows;
|
|
92
|
+
// Header row
|
|
93
|
+
text += '\n| ' + headerRow.join(' | ') + ' |\n';
|
|
94
|
+
// Separator row
|
|
95
|
+
text += '|' + headerRow.map(() => '--------').join('|') + '|\n';
|
|
96
|
+
// Data rows
|
|
97
|
+
dataRows.forEach(row => {
|
|
98
|
+
text += '| ' + row.join(' | ') + ' |\n';
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else if (item.content) {
|
|
104
|
+
extractFromContent(item.content);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
extractFromContent(body.content);
|
|
109
|
+
return formatWikiMarkup(text.trim());
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Formats wiki markup to cleaner text
|
|
113
|
+
*/
|
|
114
|
+
export function formatWikiMarkup(text) {
|
|
115
|
+
if (!text)
|
|
116
|
+
return '';
|
|
117
|
+
return text
|
|
118
|
+
// Convert Confluence headers to markdown headers
|
|
119
|
+
.replace(/^h([1-6])\.\s*/gm, (match, level) => '#'.repeat(parseInt(level)) + ' ')
|
|
120
|
+
// Convert horizontal rules
|
|
121
|
+
.replace(/^----+$/gm, '---')
|
|
122
|
+
// Handle panels - convert to blockquotes for better readability
|
|
123
|
+
.replace(/\{panel:title=([^|]*)[^}]*\}/g, '\n> **$1**\n>')
|
|
124
|
+
.replace(/\{panel\}/g, '\n')
|
|
125
|
+
// Handle colored text/backgrounds - keep the text but remove styling
|
|
126
|
+
.replace(/\{color:[^}]*\}([^{]*)\{color\}/g, '$1')
|
|
127
|
+
// Convert checkboxes
|
|
128
|
+
.replace(/☐/g, '- [ ]')
|
|
129
|
+
.replace(/☑/g, '- [x]')
|
|
130
|
+
// Clean up multiple newlines
|
|
131
|
+
.replace(/\n{3,}/g, '\n\n')
|
|
132
|
+
// Ensure proper spacing around headers
|
|
133
|
+
.replace(/\n(#{1,6}\s)/g, '\n\n$1')
|
|
134
|
+
.trim();
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Parses inline formatting like **bold**, *italic*, `code`, {{code}}
|
|
138
|
+
*/
|
|
139
|
+
export function parseInlineFormatting(text) {
|
|
140
|
+
const result = [];
|
|
141
|
+
let currentPos = 0;
|
|
142
|
+
// Process patterns in order of precedence to avoid conflicts
|
|
143
|
+
// **bold** should be processed before *italic* to handle **text** correctly
|
|
144
|
+
const patterns = [
|
|
145
|
+
{ regex: /\*\*(.*?)\*\*/g, type: 'strong' }, // **bold** (process first)
|
|
146
|
+
{ regex: /`([^`]+?)`/g, type: 'code' }, // `code` (markdown style)
|
|
147
|
+
{ regex: /\{\{(.+?)\}\}/g, type: 'code' }, // {{code}} (Confluence/Jira wiki style)
|
|
148
|
+
];
|
|
149
|
+
let matches = [];
|
|
150
|
+
// Find all formatting matches
|
|
151
|
+
patterns.forEach(pattern => {
|
|
152
|
+
let match;
|
|
153
|
+
const regex = new RegExp(pattern.regex.source, 'g');
|
|
154
|
+
while ((match = regex.exec(text)) !== null) {
|
|
155
|
+
matches.push({
|
|
156
|
+
start: match.index,
|
|
157
|
+
end: match.index + match[0].length,
|
|
158
|
+
text: match[1],
|
|
159
|
+
type: pattern.type,
|
|
160
|
+
fullMatch: match[0]
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
// Sort matches by position and remove overlapping matches
|
|
165
|
+
matches.sort((a, b) => a.start - b.start);
|
|
166
|
+
// After processing bold and code, handle italic patterns that don't overlap
|
|
167
|
+
let tempText = text;
|
|
168
|
+
// Remove already matched bold and code patterns from consideration
|
|
169
|
+
matches.forEach(match => {
|
|
170
|
+
tempText = tempText.substring(0, match.start) + ' '.repeat(match.end - match.start) + tempText.substring(match.end);
|
|
171
|
+
});
|
|
172
|
+
// Now find italic patterns in the remaining text
|
|
173
|
+
const italicRegex = /\*([^*]+?)\*/g;
|
|
174
|
+
let italicMatch;
|
|
175
|
+
while ((italicMatch = italicRegex.exec(tempText)) !== null) {
|
|
176
|
+
matches.push({
|
|
177
|
+
start: italicMatch.index,
|
|
178
|
+
end: italicMatch.index + italicMatch[0].length,
|
|
179
|
+
text: italicMatch[1],
|
|
180
|
+
type: 'em',
|
|
181
|
+
fullMatch: italicMatch[0]
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
// Sort matches by position and remove overlapping matches
|
|
185
|
+
matches.sort((a, b) => a.start - b.start);
|
|
186
|
+
// Filter out overlapping matches (keep the first one in case of conflict)
|
|
187
|
+
const filteredMatches = [];
|
|
188
|
+
for (const match of matches) {
|
|
189
|
+
const isOverlapping = filteredMatches.some(existing => (match.start >= existing.start && match.start < existing.end) ||
|
|
190
|
+
(match.end > existing.start && match.end <= existing.end) ||
|
|
191
|
+
(match.start <= existing.start && match.end >= existing.end));
|
|
192
|
+
if (!isOverlapping) {
|
|
193
|
+
filteredMatches.push(match);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// Sort filtered matches by position for proper processing
|
|
197
|
+
filteredMatches.sort((a, b) => a.start - b.start);
|
|
198
|
+
// Process text with formatting
|
|
199
|
+
filteredMatches.forEach(match => {
|
|
200
|
+
// Add text before the match
|
|
201
|
+
if (match.start > currentPos) {
|
|
202
|
+
const beforeText = text.substring(currentPos, match.start);
|
|
203
|
+
if (beforeText) {
|
|
204
|
+
result.push({
|
|
205
|
+
type: 'text',
|
|
206
|
+
text: beforeText
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
// Add formatted text
|
|
211
|
+
result.push({
|
|
212
|
+
type: 'text',
|
|
213
|
+
text: match.text,
|
|
214
|
+
marks: [{ type: match.type }]
|
|
215
|
+
});
|
|
216
|
+
currentPos = match.end;
|
|
217
|
+
});
|
|
218
|
+
// Add remaining text
|
|
219
|
+
if (currentPos < text.length) {
|
|
220
|
+
const remainingText = text.substring(currentPos);
|
|
221
|
+
if (remainingText) {
|
|
222
|
+
result.push({
|
|
223
|
+
type: 'text',
|
|
224
|
+
text: remainingText
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
// If no formatting was found, return simple text
|
|
229
|
+
if (result.length === 0) {
|
|
230
|
+
result.push({
|
|
231
|
+
type: 'text',
|
|
232
|
+
text: text
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
return result;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Enhanced description parser that converts text to proper ADF format
|
|
239
|
+
*/
|
|
240
|
+
export function parseDescriptionToADF(description) {
|
|
241
|
+
const lines = description.split('\n');
|
|
242
|
+
const content = [];
|
|
243
|
+
for (let i = 0; i < lines.length; i++) {
|
|
244
|
+
const line = lines[i].trim();
|
|
245
|
+
if (line === '') {
|
|
246
|
+
// Skip empty lines - let Claude handle spacing naturally
|
|
247
|
+
continue;
|
|
248
|
+
}
|
|
249
|
+
// Handle Confluence wiki markup headers (h1., h2., h3., etc.)
|
|
250
|
+
const confluenceHeaderMatch = line.match(/^h([1-6])\.\s*(.*)$/);
|
|
251
|
+
if (confluenceHeaderMatch) {
|
|
252
|
+
const level = parseInt(confluenceHeaderMatch[1]);
|
|
253
|
+
const headerText = confluenceHeaderMatch[2];
|
|
254
|
+
content.push({
|
|
255
|
+
type: 'heading',
|
|
256
|
+
attrs: { level },
|
|
257
|
+
content: [{
|
|
258
|
+
type: 'text',
|
|
259
|
+
text: headerText
|
|
260
|
+
}]
|
|
261
|
+
});
|
|
262
|
+
continue;
|
|
263
|
+
}
|
|
264
|
+
// Handle markdown headers (## Header, ### Header)
|
|
265
|
+
if (line.startsWith('###')) {
|
|
266
|
+
content.push({
|
|
267
|
+
type: 'heading',
|
|
268
|
+
attrs: { level: 3 },
|
|
269
|
+
content: [{
|
|
270
|
+
type: 'text',
|
|
271
|
+
text: line.substring(3).trim()
|
|
272
|
+
}]
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
else if (line.startsWith('##')) {
|
|
276
|
+
content.push({
|
|
277
|
+
type: 'heading',
|
|
278
|
+
attrs: { level: 2 },
|
|
279
|
+
content: [{
|
|
280
|
+
type: 'text',
|
|
281
|
+
text: line.substring(2).trim()
|
|
282
|
+
}]
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
else if (line.startsWith('#')) {
|
|
286
|
+
content.push({
|
|
287
|
+
type: 'heading',
|
|
288
|
+
attrs: { level: 1 },
|
|
289
|
+
content: [{
|
|
290
|
+
type: 'text',
|
|
291
|
+
text: line.substring(1).trim()
|
|
292
|
+
}]
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
// Handle horizontal rules (---- or ----)
|
|
296
|
+
else if (/^-{4,}$/.test(line)) {
|
|
297
|
+
content.push({
|
|
298
|
+
type: 'rule'
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
// Handle Confluence panels
|
|
302
|
+
else if (line.match(/^\{panel:/)) {
|
|
303
|
+
const panelMatch = line.match(/^\{panel:title=([^|]*)[^}]*\}$/);
|
|
304
|
+
if (panelMatch) {
|
|
305
|
+
const title = panelMatch[1];
|
|
306
|
+
// Start collecting panel content
|
|
307
|
+
const panelContent = [];
|
|
308
|
+
i++; // Move to next line
|
|
309
|
+
// Collect content until we hit {panel}
|
|
310
|
+
while (i < lines.length && !lines[i].trim().match(/^\{panel\}$/)) {
|
|
311
|
+
const panelLine = lines[i].trim();
|
|
312
|
+
if (panelLine) {
|
|
313
|
+
panelContent.push({
|
|
314
|
+
type: 'paragraph',
|
|
315
|
+
content: parseInlineFormatting(panelLine)
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
i++;
|
|
319
|
+
}
|
|
320
|
+
// Create panel as an info panel (closest ADF equivalent)
|
|
321
|
+
content.push({
|
|
322
|
+
type: 'panel',
|
|
323
|
+
attrs: { panelType: 'info' },
|
|
324
|
+
content: [
|
|
325
|
+
{
|
|
326
|
+
type: 'paragraph',
|
|
327
|
+
content: [{
|
|
328
|
+
type: 'text',
|
|
329
|
+
text: title,
|
|
330
|
+
marks: [{ type: 'strong' }]
|
|
331
|
+
}]
|
|
332
|
+
},
|
|
333
|
+
...panelContent
|
|
334
|
+
]
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
// Handle bullet points
|
|
339
|
+
else if (line.startsWith('- ') || line.startsWith('* ')) {
|
|
340
|
+
// Check if we need to start a new bullet list or continue existing one
|
|
341
|
+
const lastItem = content[content.length - 1];
|
|
342
|
+
const bulletText = line.substring(2).trim();
|
|
343
|
+
if (lastItem && lastItem.type === 'bulletList') {
|
|
344
|
+
lastItem.content.push({
|
|
345
|
+
type: 'listItem',
|
|
346
|
+
content: [{
|
|
347
|
+
type: 'paragraph',
|
|
348
|
+
content: parseInlineFormatting(bulletText)
|
|
349
|
+
}]
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
else {
|
|
353
|
+
content.push({
|
|
354
|
+
type: 'bulletList',
|
|
355
|
+
content: [{
|
|
356
|
+
type: 'listItem',
|
|
357
|
+
content: [{
|
|
358
|
+
type: 'paragraph',
|
|
359
|
+
content: parseInlineFormatting(bulletText)
|
|
360
|
+
}]
|
|
361
|
+
}]
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
// Handle numbered lists
|
|
366
|
+
else if (/^\d+\.\s/.test(line)) {
|
|
367
|
+
const match = line.match(/^\d+\.\s(.+)$/);
|
|
368
|
+
if (match) {
|
|
369
|
+
const listText = match[1];
|
|
370
|
+
const lastItem = content[content.length - 1];
|
|
371
|
+
if (lastItem && lastItem.type === 'orderedList') {
|
|
372
|
+
lastItem.content.push({
|
|
373
|
+
type: 'listItem',
|
|
374
|
+
content: [{
|
|
375
|
+
type: 'paragraph',
|
|
376
|
+
content: parseInlineFormatting(listText)
|
|
377
|
+
}]
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
else {
|
|
381
|
+
content.push({
|
|
382
|
+
type: 'orderedList',
|
|
383
|
+
content: [{
|
|
384
|
+
type: 'listItem',
|
|
385
|
+
content: [{
|
|
386
|
+
type: 'paragraph',
|
|
387
|
+
content: parseInlineFormatting(listText)
|
|
388
|
+
}]
|
|
389
|
+
}]
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
// Handle code blocks (```)
|
|
395
|
+
else if (line.startsWith('```')) {
|
|
396
|
+
const codeLines = [];
|
|
397
|
+
i++; // Skip the opening ```
|
|
398
|
+
while (i < lines.length && !lines[i].trim().startsWith('```')) {
|
|
399
|
+
codeLines.push(lines[i]);
|
|
400
|
+
i++;
|
|
401
|
+
}
|
|
402
|
+
content.push({
|
|
403
|
+
type: 'codeBlock',
|
|
404
|
+
content: [{
|
|
405
|
+
type: 'text',
|
|
406
|
+
text: codeLines.join('\n')
|
|
407
|
+
}]
|
|
408
|
+
});
|
|
409
|
+
}
|
|
410
|
+
// Handle markdown tables - convert to proper ADF table structure
|
|
411
|
+
else if (line.includes('|') && line.trim() !== '|') {
|
|
412
|
+
const cells = line.split('|').map(cell => cell.trim()).filter(cell => cell !== '');
|
|
413
|
+
if (cells.length >= 2) {
|
|
414
|
+
// Collect all table rows from current position
|
|
415
|
+
const allTableRows = [];
|
|
416
|
+
// Start from current line and collect consecutive table rows
|
|
417
|
+
let tableEndIndex = i;
|
|
418
|
+
for (let tableIdx = i; tableIdx < lines.length; tableIdx++) {
|
|
419
|
+
const tableLine = lines[tableIdx].trim();
|
|
420
|
+
// Skip empty lines
|
|
421
|
+
if (tableLine === '') {
|
|
422
|
+
tableEndIndex = tableIdx;
|
|
423
|
+
continue;
|
|
424
|
+
}
|
|
425
|
+
// Stop if no pipes (end of table)
|
|
426
|
+
if (!tableLine.includes('|')) {
|
|
427
|
+
tableEndIndex = tableIdx - 1;
|
|
428
|
+
break;
|
|
429
|
+
}
|
|
430
|
+
// Skip separator lines like |-|-|
|
|
431
|
+
if (tableLine.match(/^\|?[\s\-:|]+\|?$/)) {
|
|
432
|
+
tableEndIndex = tableIdx;
|
|
433
|
+
continue;
|
|
434
|
+
}
|
|
435
|
+
// Parse row cells
|
|
436
|
+
const rowCells = tableLine.split('|').map(cell => cell.trim()).filter(cell => cell !== '');
|
|
437
|
+
if (rowCells.length >= 2) {
|
|
438
|
+
allTableRows.push(rowCells);
|
|
439
|
+
tableEndIndex = tableIdx;
|
|
440
|
+
}
|
|
441
|
+
else {
|
|
442
|
+
tableEndIndex = tableIdx - 1;
|
|
443
|
+
break; // End of table
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
// Convert to proper ADF table structure if we have table rows
|
|
447
|
+
if (allTableRows.length > 0) {
|
|
448
|
+
// Create proper ADF table structure
|
|
449
|
+
const tableRows = [];
|
|
450
|
+
// Header row (first row)
|
|
451
|
+
if (allTableRows.length > 0) {
|
|
452
|
+
const headerCells = allTableRows[0].map(cellText => ({
|
|
453
|
+
type: 'tableHeader',
|
|
454
|
+
attrs: {},
|
|
455
|
+
content: [{
|
|
456
|
+
type: 'paragraph',
|
|
457
|
+
content: parseInlineFormatting(cellText)
|
|
458
|
+
}]
|
|
459
|
+
}));
|
|
460
|
+
tableRows.push({
|
|
461
|
+
type: 'tableRow',
|
|
462
|
+
content: headerCells
|
|
463
|
+
});
|
|
464
|
+
}
|
|
465
|
+
// Data rows (remaining rows)
|
|
466
|
+
for (let rowIdx = 1; rowIdx < allTableRows.length; rowIdx++) {
|
|
467
|
+
const dataCells = allTableRows[rowIdx].map(cellText => ({
|
|
468
|
+
type: 'tableCell',
|
|
469
|
+
attrs: {},
|
|
470
|
+
content: [{
|
|
471
|
+
type: 'paragraph',
|
|
472
|
+
content: parseInlineFormatting(cellText)
|
|
473
|
+
}]
|
|
474
|
+
}));
|
|
475
|
+
tableRows.push({
|
|
476
|
+
type: 'tableRow',
|
|
477
|
+
content: dataCells
|
|
478
|
+
});
|
|
479
|
+
}
|
|
480
|
+
// Create the complete table structure
|
|
481
|
+
content.push({
|
|
482
|
+
type: 'table',
|
|
483
|
+
attrs: {
|
|
484
|
+
isNumberColumnEnabled: false,
|
|
485
|
+
layout: 'default'
|
|
486
|
+
},
|
|
487
|
+
content: tableRows
|
|
488
|
+
});
|
|
489
|
+
// Skip the lines we've processed
|
|
490
|
+
i = tableEndIndex; // Skip the table rows we just processed
|
|
491
|
+
continue;
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
// If we reach here, it's not a valid table, treat as regular paragraph
|
|
495
|
+
content.push({
|
|
496
|
+
type: 'paragraph',
|
|
497
|
+
content: parseInlineFormatting(line)
|
|
498
|
+
});
|
|
499
|
+
}
|
|
500
|
+
// Regular paragraph
|
|
501
|
+
else {
|
|
502
|
+
content.push({
|
|
503
|
+
type: 'paragraph',
|
|
504
|
+
content: parseInlineFormatting(line)
|
|
505
|
+
});
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
// If no content was parsed, add a simple paragraph
|
|
509
|
+
if (content.length === 0) {
|
|
510
|
+
content.push({
|
|
511
|
+
type: 'paragraph',
|
|
512
|
+
content: [{
|
|
513
|
+
type: 'text',
|
|
514
|
+
text: description || ''
|
|
515
|
+
}]
|
|
516
|
+
});
|
|
517
|
+
}
|
|
518
|
+
return {
|
|
519
|
+
type: 'doc',
|
|
520
|
+
version: 1,
|
|
521
|
+
content
|
|
522
|
+
};
|
|
523
|
+
}
|
|
524
|
+
/**
|
|
525
|
+
* Convert description to wiki markup text format
|
|
526
|
+
*/
|
|
527
|
+
export function parseDescriptionToWikiMarkup(description) {
|
|
528
|
+
const lines = description.split('\n');
|
|
529
|
+
const result = [];
|
|
530
|
+
for (let i = 0; i < lines.length; i++) {
|
|
531
|
+
const line = lines[i].trim();
|
|
532
|
+
if (line === '') {
|
|
533
|
+
result.push('');
|
|
534
|
+
continue;
|
|
535
|
+
}
|
|
536
|
+
// Handle markdown headers
|
|
537
|
+
if (line.startsWith('###')) {
|
|
538
|
+
result.push('h3. ' + line.substring(3).trim());
|
|
539
|
+
}
|
|
540
|
+
else if (line.startsWith('##')) {
|
|
541
|
+
result.push('h2. ' + line.substring(2).trim());
|
|
542
|
+
}
|
|
543
|
+
else if (line.startsWith('#')) {
|
|
544
|
+
result.push('h1. ' + line.substring(1).trim());
|
|
545
|
+
}
|
|
546
|
+
// Handle markdown tables
|
|
547
|
+
else if (line.includes('|') && line.trim() !== '|') {
|
|
548
|
+
const cells = line.split('|').map(cell => cell.trim()).filter(cell => cell !== '');
|
|
549
|
+
if (cells.length >= 2) {
|
|
550
|
+
// Collect table rows
|
|
551
|
+
const allTableRows = [];
|
|
552
|
+
let currentLine = i;
|
|
553
|
+
while (currentLine < lines.length) {
|
|
554
|
+
const tableLine = lines[currentLine].trim();
|
|
555
|
+
if (tableLine === '') {
|
|
556
|
+
currentLine++;
|
|
557
|
+
continue;
|
|
558
|
+
}
|
|
559
|
+
if (!tableLine.includes('|')) {
|
|
560
|
+
break;
|
|
561
|
+
}
|
|
562
|
+
// Skip separator lines
|
|
563
|
+
if (tableLine.match(/^\|?[\s\-:|]+\|?$/)) {
|
|
564
|
+
currentLine++;
|
|
565
|
+
continue;
|
|
566
|
+
}
|
|
567
|
+
const rowCells = tableLine.split('|').map(cell => cell.trim()).filter(cell => cell !== '');
|
|
568
|
+
if (rowCells.length >= 2) {
|
|
569
|
+
allTableRows.push(rowCells);
|
|
570
|
+
}
|
|
571
|
+
else {
|
|
572
|
+
break;
|
|
573
|
+
}
|
|
574
|
+
currentLine++;
|
|
575
|
+
}
|
|
576
|
+
// Convert to Confluence wiki markup
|
|
577
|
+
if (allTableRows.length > 0) {
|
|
578
|
+
// Header row
|
|
579
|
+
if (allTableRows.length > 0) {
|
|
580
|
+
result.push('||*' + allTableRows[0].join('*||*') + '*||');
|
|
581
|
+
// Add separator line based on number of columns
|
|
582
|
+
const numColumns = allTableRows[0].length;
|
|
583
|
+
const separator = '|' + '-|'.repeat(numColumns);
|
|
584
|
+
result.push(separator);
|
|
585
|
+
}
|
|
586
|
+
// Data rows
|
|
587
|
+
for (let rowIdx = 1; rowIdx < allTableRows.length; rowIdx++) {
|
|
588
|
+
result.push('|' + allTableRows[rowIdx].join('|') + '|');
|
|
589
|
+
}
|
|
590
|
+
// Skip processed lines
|
|
591
|
+
i = currentLine - 1;
|
|
592
|
+
continue;
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
// If not a valid table, treat as regular text
|
|
596
|
+
result.push(line);
|
|
597
|
+
}
|
|
598
|
+
// Handle bullet points
|
|
599
|
+
else if (line.startsWith('- ') || line.startsWith('* ')) {
|
|
600
|
+
result.push('* ' + line.substring(2).trim());
|
|
601
|
+
}
|
|
602
|
+
// Regular text
|
|
603
|
+
else {
|
|
604
|
+
result.push(line);
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
return result.join('\n');
|
|
608
|
+
}
|
|
609
|
+
//# sourceMappingURL=adf-formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adf-formatter.js","sourceRoot":"","sources":["../../src/formatters/adf-formatter.ts"],"names":[],"mappings":"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"}
|