@crypto512/jicon-mcp 1.2.0 → 2.0.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.
Files changed (161) hide show
  1. package/README.md +73 -67
  2. package/TOOL_LIST.md +785 -133
  3. package/dist/config/constants.d.ts +18 -7
  4. package/dist/config/constants.d.ts.map +1 -1
  5. package/dist/config/constants.js +21 -8
  6. package/dist/config/constants.js.map +1 -1
  7. package/dist/config/loader.d.ts +11 -11
  8. package/dist/config/loader.d.ts.map +1 -1
  9. package/dist/config/loader.js +53 -93
  10. package/dist/config/loader.js.map +1 -1
  11. package/dist/config/types.d.ts +3 -6
  12. package/dist/config/types.d.ts.map +1 -1
  13. package/dist/config/types.js +2 -4
  14. package/dist/config/types.js.map +1 -1
  15. package/dist/confluence/formatters.js +1 -1
  16. package/dist/confluence/formatters.js.map +1 -1
  17. package/dist/confluence/tools.d.ts +8 -12
  18. package/dist/confluence/tools.d.ts.map +1 -1
  19. package/dist/confluence/tools.js +285 -233
  20. package/dist/confluence/tools.js.map +1 -1
  21. package/dist/index.js +17 -26
  22. package/dist/index.js.map +1 -1
  23. package/dist/jira/formatters.d.ts +1 -0
  24. package/dist/jira/formatters.d.ts.map +1 -1
  25. package/dist/jira/formatters.js +13 -12
  26. package/dist/jira/formatters.js.map +1 -1
  27. package/dist/jira/tools.d.ts +4 -0
  28. package/dist/jira/tools.d.ts.map +1 -1
  29. package/dist/jira/tools.js +234 -44
  30. package/dist/jira/tools.js.map +1 -1
  31. package/dist/permissions/tool-registry.d.ts +2 -2
  32. package/dist/permissions/tool-registry.d.ts.map +1 -1
  33. package/dist/permissions/tool-registry.js +4 -2
  34. package/dist/permissions/tool-registry.js.map +1 -1
  35. package/dist/permissions/write-home-validator.d.ts.map +1 -1
  36. package/dist/permissions/write-home-validator.js +13 -3
  37. package/dist/permissions/write-home-validator.js.map +1 -1
  38. package/dist/tempo/defaults.d.ts +17 -0
  39. package/dist/tempo/defaults.d.ts.map +1 -0
  40. package/dist/tempo/defaults.js +26 -0
  41. package/dist/tempo/defaults.js.map +1 -0
  42. package/dist/tempo/tools.d.ts +5 -0
  43. package/dist/tempo/tools.d.ts.map +1 -1
  44. package/dist/tempo/tools.js +161 -35
  45. package/dist/tempo/tools.js.map +1 -1
  46. package/dist/utils/buffer-pipeline/index.d.ts +30 -0
  47. package/dist/utils/buffer-pipeline/index.d.ts.map +1 -0
  48. package/dist/utils/buffer-pipeline/index.js +317 -0
  49. package/dist/utils/buffer-pipeline/index.js.map +1 -0
  50. package/dist/utils/buffer-pipeline/output/csv.d.ts +20 -0
  51. package/dist/utils/buffer-pipeline/output/csv.d.ts.map +1 -0
  52. package/dist/utils/buffer-pipeline/output/csv.js +117 -0
  53. package/dist/utils/buffer-pipeline/output/csv.js.map +1 -0
  54. package/dist/utils/buffer-pipeline/output/json.d.ts +16 -0
  55. package/dist/utils/buffer-pipeline/output/json.d.ts.map +1 -0
  56. package/dist/utils/buffer-pipeline/output/json.js +48 -0
  57. package/dist/utils/buffer-pipeline/output/json.js.map +1 -0
  58. package/dist/utils/buffer-pipeline/output/markdown.d.ts +15 -0
  59. package/dist/utils/buffer-pipeline/output/markdown.d.ts.map +1 -0
  60. package/dist/utils/buffer-pipeline/output/markdown.js +105 -0
  61. package/dist/utils/buffer-pipeline/output/markdown.js.map +1 -0
  62. package/dist/utils/buffer-pipeline/output/xhtml-list.d.ts +16 -0
  63. package/dist/utils/buffer-pipeline/output/xhtml-list.d.ts.map +1 -0
  64. package/dist/utils/buffer-pipeline/output/xhtml-list.js +81 -0
  65. package/dist/utils/buffer-pipeline/output/xhtml-list.js.map +1 -0
  66. package/dist/utils/buffer-pipeline/output/xhtml-table.d.ts +15 -0
  67. package/dist/utils/buffer-pipeline/output/xhtml-table.d.ts.map +1 -0
  68. package/dist/utils/buffer-pipeline/output/xhtml-table.js +176 -0
  69. package/dist/utils/buffer-pipeline/output/xhtml-table.js.map +1 -0
  70. package/dist/utils/buffer-pipeline/schema.d.ts +1878 -0
  71. package/dist/utils/buffer-pipeline/schema.d.ts.map +1 -0
  72. package/dist/utils/buffer-pipeline/schema.js +168 -0
  73. package/dist/utils/buffer-pipeline/schema.js.map +1 -0
  74. package/dist/utils/buffer-pipeline/stages/filter.d.ts +32 -0
  75. package/dist/utils/buffer-pipeline/stages/filter.d.ts.map +1 -0
  76. package/dist/utils/buffer-pipeline/stages/filter.js +208 -0
  77. package/dist/utils/buffer-pipeline/stages/filter.js.map +1 -0
  78. package/dist/utils/buffer-pipeline/stages/format.d.ts +45 -0
  79. package/dist/utils/buffer-pipeline/stages/format.d.ts.map +1 -0
  80. package/dist/utils/buffer-pipeline/stages/format.js +160 -0
  81. package/dist/utils/buffer-pipeline/stages/format.js.map +1 -0
  82. package/dist/utils/buffer-pipeline/stages/group-by.d.ts +25 -0
  83. package/dist/utils/buffer-pipeline/stages/group-by.d.ts.map +1 -0
  84. package/dist/utils/buffer-pipeline/stages/group-by.js +190 -0
  85. package/dist/utils/buffer-pipeline/stages/group-by.js.map +1 -0
  86. package/dist/utils/buffer-pipeline/stages/select.d.ts +54 -0
  87. package/dist/utils/buffer-pipeline/stages/select.d.ts.map +1 -0
  88. package/dist/utils/buffer-pipeline/stages/select.js +228 -0
  89. package/dist/utils/buffer-pipeline/stages/select.js.map +1 -0
  90. package/dist/utils/buffer-pipeline/stages/sort.d.ts +20 -0
  91. package/dist/utils/buffer-pipeline/stages/sort.d.ts.map +1 -0
  92. package/dist/utils/buffer-pipeline/stages/sort.js +96 -0
  93. package/dist/utils/buffer-pipeline/stages/sort.js.map +1 -0
  94. package/dist/utils/buffer-pipeline/types.d.ts +277 -0
  95. package/dist/utils/buffer-pipeline/types.d.ts.map +1 -0
  96. package/dist/utils/buffer-pipeline/types.js +8 -0
  97. package/dist/utils/buffer-pipeline/types.js.map +1 -0
  98. package/dist/utils/buffer-tools.d.ts +749 -19
  99. package/dist/utils/buffer-tools.d.ts.map +1 -1
  100. package/dist/utils/buffer-tools.js +738 -491
  101. package/dist/utils/buffer-tools.js.map +1 -1
  102. package/dist/utils/content-buffer.d.ts +55 -4
  103. package/dist/utils/content-buffer.d.ts.map +1 -1
  104. package/dist/utils/content-buffer.js +107 -9
  105. package/dist/utils/content-buffer.js.map +1 -1
  106. package/dist/utils/jicon-help.d.ts +1 -1
  107. package/dist/utils/jicon-help.d.ts.map +1 -1
  108. package/dist/utils/jicon-help.js +345 -99
  109. package/dist/utils/jicon-help.js.map +1 -1
  110. package/dist/utils/json-structure.d.ts +121 -0
  111. package/dist/utils/json-structure.d.ts.map +1 -0
  112. package/dist/utils/json-structure.js +637 -0
  113. package/dist/utils/json-structure.js.map +1 -0
  114. package/dist/utils/plantuml/include-expander.d.ts +31 -30
  115. package/dist/utils/plantuml/include-expander.d.ts.map +1 -1
  116. package/dist/utils/plantuml/include-expander.js +167 -133
  117. package/dist/utils/plantuml/include-expander.js.map +1 -1
  118. package/dist/utils/plantuml/index.d.ts +3 -3
  119. package/dist/utils/plantuml/index.d.ts.map +1 -1
  120. package/dist/utils/plantuml/index.js +4 -4
  121. package/dist/utils/plantuml/index.js.map +1 -1
  122. package/dist/utils/plantuml/service.d.ts +13 -24
  123. package/dist/utils/plantuml/service.d.ts.map +1 -1
  124. package/dist/utils/plantuml/service.js +49 -99
  125. package/dist/utils/plantuml/service.js.map +1 -1
  126. package/dist/utils/plantuml/tools.d.ts.map +1 -1
  127. package/dist/utils/plantuml/tools.js +33 -72
  128. package/dist/utils/plantuml/tools.js.map +1 -1
  129. package/dist/utils/plantuml/types.d.ts +1 -35
  130. package/dist/utils/plantuml/types.d.ts.map +1 -1
  131. package/dist/utils/plantuml/types.js +1 -11
  132. package/dist/utils/plantuml/types.js.map +1 -1
  133. package/dist/utils/plantuml/validation-helper.d.ts +1 -1
  134. package/dist/utils/plantuml/validation-helper.js +12 -12
  135. package/dist/utils/plantuml/validation-helper.js.map +1 -1
  136. package/dist/utils/response-formatter.d.ts +68 -0
  137. package/dist/utils/response-formatter.d.ts.map +1 -1
  138. package/dist/utils/response-formatter.js +186 -78
  139. package/dist/utils/response-formatter.js.map +1 -1
  140. package/dist/utils/url-tools.d.ts.map +1 -1
  141. package/dist/utils/url-tools.js +22 -0
  142. package/dist/utils/url-tools.js.map +1 -1
  143. package/dist/utils/xhtml/error-locator.js +2 -2
  144. package/dist/utils/xhtml/error-locator.js.map +1 -1
  145. package/dist/utils/xhtml/index.d.ts +1 -1
  146. package/dist/utils/xhtml/index.d.ts.map +1 -1
  147. package/dist/utils/xhtml/index.js +1 -1
  148. package/dist/utils/xhtml/index.js.map +1 -1
  149. package/dist/utils/xhtml/parser.d.ts +34 -5
  150. package/dist/utils/xhtml/parser.d.ts.map +1 -1
  151. package/dist/utils/xhtml/parser.js +66 -11
  152. package/dist/utils/xhtml/parser.js.map +1 -1
  153. package/dist/utils/xhtml/plantuml.d.ts.map +1 -1
  154. package/dist/utils/xhtml/plantuml.js +5 -3
  155. package/dist/utils/xhtml/plantuml.js.map +1 -1
  156. package/dist/utils/xhtml/serializer.d.ts.map +1 -1
  157. package/dist/utils/xhtml/serializer.js +12 -15
  158. package/dist/utils/xhtml/serializer.js.map +1 -1
  159. package/dist/utils/xhtml/types.d.ts +1 -0
  160. package/dist/utils/xhtml/types.d.ts.map +1 -1
  161. package/package.json +12 -4
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Markdown Output Generator
3
+ *
4
+ * Outputs pipeline results as Markdown tables.
5
+ */
6
+ import { getFieldValue } from "../stages/select.js";
7
+ /**
8
+ * Escape a value for Markdown
9
+ * Handles pipes and newlines
10
+ */
11
+ function escapeMarkdownValue(value) {
12
+ if (value === null || value === undefined) {
13
+ return "";
14
+ }
15
+ let strValue;
16
+ if (Array.isArray(value)) {
17
+ strValue = value.join(", ");
18
+ }
19
+ else if (typeof value === "object") {
20
+ strValue = JSON.stringify(value);
21
+ }
22
+ else {
23
+ strValue = String(value);
24
+ }
25
+ // Escape pipes and newlines
26
+ return strValue
27
+ .replace(/\|/g, "\\|")
28
+ .replace(/\n/g, "<br>");
29
+ }
30
+ /**
31
+ * Generate alignment indicator for markdown table
32
+ */
33
+ function getAlignment(align) {
34
+ switch (align) {
35
+ case "center":
36
+ return ":---:";
37
+ case "right":
38
+ return "---:";
39
+ default:
40
+ return "---";
41
+ }
42
+ }
43
+ /**
44
+ * Generate Markdown header row
45
+ */
46
+ function generateHeader(columns) {
47
+ const headers = columns.map((col) => escapeMarkdownValue(col.header));
48
+ const separators = columns.map((col) => getAlignment(col.align));
49
+ return [
50
+ `| ${headers.join(" | ")} |`,
51
+ `| ${separators.join(" | ")} |`,
52
+ ];
53
+ }
54
+ /**
55
+ * Generate Markdown data row
56
+ */
57
+ function generateRow(item, columns) {
58
+ const cells = columns.map((col) => {
59
+ const value = getFieldValue(item.data, col.field);
60
+ return escapeMarkdownValue(value);
61
+ });
62
+ return `| ${cells.join(" | ")} |`;
63
+ }
64
+ /**
65
+ * Generate Markdown table output
66
+ */
67
+ export function generateMarkdown(items, config) {
68
+ const lines = [];
69
+ // Title
70
+ if (config.title) {
71
+ lines.push(`## ${config.title}`);
72
+ lines.push("");
73
+ }
74
+ // Table header
75
+ lines.push(...generateHeader(config.columns));
76
+ // Data rows
77
+ for (const item of items) {
78
+ lines.push(generateRow(item, config.columns));
79
+ }
80
+ return lines.join("\n");
81
+ }
82
+ /**
83
+ * Generate a preview of the Markdown output
84
+ */
85
+ export function generateMarkdownPreview(items, config, maxRows = 3) {
86
+ const previewItems = items.slice(0, maxRows);
87
+ const lines = [];
88
+ // Title
89
+ if (config.title) {
90
+ lines.push(`## ${config.title}`);
91
+ lines.push("");
92
+ }
93
+ // Table header
94
+ lines.push(...generateHeader(config.columns));
95
+ // Data rows
96
+ for (const item of previewItems) {
97
+ lines.push(generateRow(item, config.columns));
98
+ }
99
+ if (items.length > maxRows) {
100
+ lines.push("");
101
+ lines.push(`*... ${items.length - maxRows} more rows*`);
102
+ }
103
+ return lines.join("\n");
104
+ }
105
+ //# sourceMappingURL=markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../../../src/utils/buffer-pipeline/output/markdown.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * XHTML List Output Generator
3
+ *
4
+ * Generates Confluence-compatible XHTML lists from formatted items.
5
+ * Supports bullet, numbered, and unstyled lists with template placeholders.
6
+ */
7
+ import type { FormattedItem, ListOutputConfig, PipelineContext } from "../types.js";
8
+ /**
9
+ * Generate XHTML list output
10
+ */
11
+ export declare function generateXhtmlList(items: FormattedItem[], config: ListOutputConfig, context: PipelineContext): string;
12
+ /**
13
+ * Generate a preview of the first few items
14
+ */
15
+ export declare function generateListPreview(items: FormattedItem[], config: ListOutputConfig, context: PipelineContext, maxItems?: number): string;
16
+ //# sourceMappingURL=xhtml-list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xhtml-list.d.ts","sourceRoot":"","sources":["../../../../src/utils/buffer-pipeline/output/xhtml-list.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA0DpF;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,aAAa,EAAE,EACtB,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,eAAe,GACvB,MAAM,CAyBR;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,aAAa,EAAE,EACtB,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,eAAe,EACxB,QAAQ,GAAE,MAAU,GACnB,MAAM,CASR"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * XHTML List Output Generator
3
+ *
4
+ * Generates Confluence-compatible XHTML lists from formatted items.
5
+ * Supports bullet, numbered, and unstyled lists with template placeholders.
6
+ */
7
+ import { escapeXml, getEffectiveStyle, formatCellXhtml, styleToInlineCss } from "../stages/format.js";
8
+ import { getFieldValue } from "../stages/select.js";
9
+ /**
10
+ * Process template string, replacing {{field}} placeholders with values
11
+ */
12
+ function processTemplate(template, item, _context) {
13
+ // Find all {{field}} placeholders
14
+ const placeholders = template.match(/\{\{(\w+(?:\.\w+)*)\}\}/g) || [];
15
+ let result = template;
16
+ for (const placeholder of placeholders) {
17
+ const fieldPath = placeholder.slice(2, -2);
18
+ const value = getFieldValue(item.data, fieldPath);
19
+ // Get styling for this field
20
+ const style = getEffectiveStyle(item, fieldPath);
21
+ const formattedValue = formatCellXhtml(value, style);
22
+ result = result.replace(placeholder, formattedValue);
23
+ }
24
+ // Escape any remaining non-placeholder text
25
+ // Split by already-processed HTML tags and escape text between them
26
+ // This is a simplified approach - we trust the template author
27
+ return result;
28
+ }
29
+ /**
30
+ * Generate a list item
31
+ */
32
+ function generateListItem(item, template, context) {
33
+ const content = processTemplate(template, item, context);
34
+ // Apply row-level style if present
35
+ let attrs = "";
36
+ if (item.rowStyle) {
37
+ const css = styleToInlineCss(item.rowStyle);
38
+ if (css) {
39
+ attrs = ` style="${escapeXml(css)}"`;
40
+ }
41
+ if (item.rowStyle.cssClass) {
42
+ attrs += ` class="${escapeXml(item.rowStyle.cssClass)}"`;
43
+ }
44
+ }
45
+ return `<li${attrs}>${content}</li>`;
46
+ }
47
+ /**
48
+ * Generate XHTML list output
49
+ */
50
+ export function generateXhtmlList(items, config, context) {
51
+ const lines = [];
52
+ // Add title if present
53
+ if (config.title) {
54
+ lines.push(`<h2>${escapeXml(config.title)}</h2>`);
55
+ }
56
+ // Determine list tag
57
+ const listStyle = config.style ?? "bullet";
58
+ const listTag = listStyle === "numbered" ? "ol" : "ul";
59
+ const listAttr = listStyle === "none" ? ' style="list-style-type: none"' : "";
60
+ // List start
61
+ lines.push(`<${listTag}${listAttr}>`);
62
+ // List items
63
+ for (const item of items) {
64
+ lines.push(generateListItem(item, config.template, context));
65
+ }
66
+ // List end
67
+ lines.push(`</${listTag}>`);
68
+ return lines.join("\n");
69
+ }
70
+ /**
71
+ * Generate a preview of the first few items
72
+ */
73
+ export function generateListPreview(items, config, context, maxItems = 3) {
74
+ const previewItems = items.slice(0, maxItems);
75
+ const preview = generateXhtmlList(previewItems, config, context);
76
+ if (items.length > maxItems) {
77
+ return `${preview}\n<!-- ... ${items.length - maxItems} more items -->`;
78
+ }
79
+ return preview;
80
+ }
81
+ //# sourceMappingURL=xhtml-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xhtml-list.js","sourceRoot":"","sources":["../../../../src/utils/buffer-pipeline/output/xhtml-list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * XHTML Table Output Generator
3
+ *
4
+ * Generates Confluence-compatible XHTML tables from formatted items.
5
+ */
6
+ import type { FormattedItem, PipelineContext, TableOutputConfig } from "../types.js";
7
+ /**
8
+ * Generate XHTML table output
9
+ */
10
+ export declare function generateXhtmlTable(items: FormattedItem[], config: TableOutputConfig, context: PipelineContext): string;
11
+ /**
12
+ * Generate a preview of the first few rows
13
+ */
14
+ export declare function generateTablePreview(items: FormattedItem[], config: TableOutputConfig, context: PipelineContext, maxRows?: number): string;
15
+ //# sourceMappingURL=xhtml-table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xhtml-table.d.ts","sourceRoot":"","sources":["../../../../src/utils/buffer-pipeline/output/xhtml-table.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAc,eAAe,EAAe,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAmK9G;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,EAAE,EACtB,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,eAAe,GACvB,MAAM,CAmCR;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,EAAE,EACtB,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,eAAe,EACxB,OAAO,GAAE,MAAU,GAClB,MAAM,CASR"}
@@ -0,0 +1,176 @@
1
+ /**
2
+ * XHTML Table Output Generator
3
+ *
4
+ * Generates Confluence-compatible XHTML tables from formatted items.
5
+ */
6
+ import { escapeXml, formatCellXhtml, getEffectiveStyle, styleToInlineCss } from "../stages/format.js";
7
+ import { getFieldValue } from "../stages/select.js";
8
+ /**
9
+ * Generate a link URL based on link config
10
+ */
11
+ function generateLinkUrl(value, item, link, context) {
12
+ const strValue = value === null || value === undefined ? "" : String(value);
13
+ if (!strValue)
14
+ return null;
15
+ switch (link.type) {
16
+ case "jira":
17
+ if (context.jiraUrl) {
18
+ return `${context.jiraUrl}/browse/${strValue}`;
19
+ }
20
+ return null;
21
+ case "confluence":
22
+ if (context.confluenceUrl) {
23
+ // For page IDs
24
+ return `${context.confluenceUrl}/pages/viewpage.action?pageId=${strValue}`;
25
+ }
26
+ return null;
27
+ case "tempo":
28
+ // Tempo worklogs don't have direct URLs
29
+ return null;
30
+ case "custom":
31
+ if (link.template) {
32
+ // Replace {{field}} placeholders
33
+ let url = link.template;
34
+ const placeholders = url.match(/\{\{(\w+(?:\.\w+)*)\}\}/g) || [];
35
+ for (const placeholder of placeholders) {
36
+ const fieldPath = placeholder.slice(2, -2);
37
+ const fieldValue = fieldPath === "value" ? strValue : getFieldValue(item, fieldPath);
38
+ url = url.replace(placeholder, encodeURIComponent(String(fieldValue ?? "")));
39
+ }
40
+ return url;
41
+ }
42
+ return null;
43
+ default:
44
+ return null;
45
+ }
46
+ }
47
+ /**
48
+ * Generate a table cell with optional link and styling
49
+ */
50
+ function generateCell(value, item, column, context) {
51
+ const style = getEffectiveStyle(item, column.field);
52
+ let content = formatCellXhtml(value, style);
53
+ // Add link if configured
54
+ if (column.link) {
55
+ const url = generateLinkUrl(value, item.data, column.link, context);
56
+ if (url) {
57
+ content = `<a href="${escapeXml(url)}">${content}</a>`;
58
+ }
59
+ }
60
+ // Build cell attributes
61
+ const attrs = [];
62
+ if (column.align && column.align !== "left") {
63
+ attrs.push(`style="text-align: ${column.align}"`);
64
+ }
65
+ if (column.width) {
66
+ const existingStyle = attrs.find((a) => a.startsWith("style="));
67
+ if (existingStyle) {
68
+ const idx = attrs.indexOf(existingStyle);
69
+ attrs[idx] = existingStyle.replace('style="', `style="width: ${column.width}; `);
70
+ }
71
+ else {
72
+ attrs.push(`style="width: ${column.width}"`);
73
+ }
74
+ }
75
+ const attrStr = attrs.length > 0 ? " " + attrs.join(" ") : "";
76
+ return `<td${attrStr}>${content}</td>`;
77
+ }
78
+ /**
79
+ * Generate a table row
80
+ */
81
+ function generateRow(item, columns, context, rowNumber) {
82
+ const cells = [];
83
+ // Add row number cell if enabled
84
+ if (rowNumber !== undefined) {
85
+ cells.push(`<td style="text-align: right; width: 30px">${rowNumber}</td>`);
86
+ }
87
+ // Add data cells
88
+ for (const column of columns) {
89
+ const value = getFieldValue(item.data, column.field);
90
+ cells.push(generateCell(value, item, column, context));
91
+ }
92
+ // Apply row-level style if present
93
+ let rowAttrs = "";
94
+ if (item.rowStyle) {
95
+ const rowCss = styleToInlineCss(item.rowStyle);
96
+ if (rowCss) {
97
+ rowAttrs = ` style="${escapeXml(rowCss)}"`;
98
+ }
99
+ if (item.rowStyle.cssClass) {
100
+ rowAttrs += ` class="${escapeXml(item.rowStyle.cssClass)}"`;
101
+ }
102
+ }
103
+ return `<tr${rowAttrs}>${cells.join("")}</tr>`;
104
+ }
105
+ /**
106
+ * Generate table header row
107
+ */
108
+ function generateHeaderRow(columns, showRowNumbers) {
109
+ const headers = [];
110
+ if (showRowNumbers) {
111
+ headers.push(`<th style="text-align: right; width: 30px">#</th>`);
112
+ }
113
+ for (const column of columns) {
114
+ const attrs = [];
115
+ if (column.align && column.align !== "left") {
116
+ attrs.push(`style="text-align: ${column.align}"`);
117
+ }
118
+ if (column.width) {
119
+ const existingStyle = attrs.find((a) => a.startsWith("style="));
120
+ if (existingStyle) {
121
+ const idx = attrs.indexOf(existingStyle);
122
+ attrs[idx] = existingStyle.replace('style="', `style="width: ${column.width}; `);
123
+ }
124
+ else {
125
+ attrs.push(`style="width: ${column.width}"`);
126
+ }
127
+ }
128
+ const attrStr = attrs.length > 0 ? " " + attrs.join(" ") : "";
129
+ headers.push(`<th${attrStr}>${escapeXml(column.header)}</th>`);
130
+ }
131
+ return `<tr>${headers.join("")}</tr>`;
132
+ }
133
+ /**
134
+ * Generate XHTML table output
135
+ */
136
+ export function generateXhtmlTable(items, config, context) {
137
+ const lines = [];
138
+ // Add title if present
139
+ if (config.title) {
140
+ lines.push(`<h2>${escapeXml(config.title)}</h2>`);
141
+ }
142
+ // Build table attributes
143
+ const tableAttrs = [];
144
+ if (config.tableClass) {
145
+ tableAttrs.push(`class="${escapeXml(config.tableClass)}"`);
146
+ }
147
+ const tableAttrStr = tableAttrs.length > 0 ? " " + tableAttrs.join(" ") : "";
148
+ // Table start
149
+ lines.push(`<table${tableAttrStr}>`);
150
+ // Table header
151
+ lines.push(`<thead>`);
152
+ lines.push(generateHeaderRow(config.columns, config.showRowNumbers ?? false));
153
+ lines.push(`</thead>`);
154
+ // Table body
155
+ lines.push(`<tbody>`);
156
+ items.forEach((item, index) => {
157
+ const rowNumber = config.showRowNumbers ? index + 1 : undefined;
158
+ lines.push(generateRow(item, config.columns, context, rowNumber));
159
+ });
160
+ lines.push(`</tbody>`);
161
+ // Table end
162
+ lines.push(`</table>`);
163
+ return lines.join("\n");
164
+ }
165
+ /**
166
+ * Generate a preview of the first few rows
167
+ */
168
+ export function generateTablePreview(items, config, context, maxRows = 3) {
169
+ const previewItems = items.slice(0, maxRows);
170
+ const preview = generateXhtmlTable(previewItems, config, context);
171
+ if (items.length > maxRows) {
172
+ return `${preview}\n<!-- ... ${items.length - maxRows} more rows -->`;
173
+ }
174
+ return preview;
175
+ }
176
+ //# sourceMappingURL=xhtml-table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xhtml-table.js","sourceRoot":"","sources":["../../../../src/utils/buffer-pipeline/output/xhtml-table.ts"],"names":[],"mappings":"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"}