@crypto512/jicon-mcp 1.3.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 (160) hide show
  1. package/README.md +68 -85
  2. package/TOOL_LIST.md +704 -87
  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 +4 -0
  18. package/dist/confluence/tools.d.ts.map +1 -1
  19. package/dist/confluence/tools.js +180 -125
  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 +189 -50
  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 +108 -34
  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 +253 -28
  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 +61 -6
  137. package/dist/utils/response-formatter.d.ts.map +1 -1
  138. package/dist/utils/response-formatter.js +174 -91
  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/package.json +12 -4
  160. package/crypto512-jicon-mcp-1.3.0.tgz +0 -0
@@ -0,0 +1,228 @@
1
+ /**
2
+ * Select Stage
3
+ *
4
+ * Extracts and transforms fields from input items.
5
+ * Supports dot-notation for nested fields, renaming, and value transformations.
6
+ */
7
+ /**
8
+ * Get a value from an object using dot notation path
9
+ * Handles nested objects and arrays
10
+ *
11
+ * @example
12
+ * getFieldValue({ priority: { name: "High" } }, "priority.name") // "High"
13
+ * getFieldValue({ labels: ["bug", "ui"] }, "labels") // ["bug", "ui"]
14
+ * getFieldValue({ fields: { customfield_10001: "value" } }, "fields.customfield_10001") // "value"
15
+ */
16
+ export function getFieldValue(item, path) {
17
+ if (item === null || item === undefined) {
18
+ return undefined;
19
+ }
20
+ const parts = path.split(".");
21
+ let value = item;
22
+ for (const part of parts) {
23
+ if (value === null || value === undefined) {
24
+ return undefined;
25
+ }
26
+ if (typeof value !== "object") {
27
+ return undefined;
28
+ }
29
+ // Handle array index notation (e.g., "items.0.name")
30
+ if (Array.isArray(value)) {
31
+ const index = parseInt(part, 10);
32
+ if (!isNaN(index)) {
33
+ value = value[index];
34
+ continue;
35
+ }
36
+ }
37
+ value = value[part];
38
+ }
39
+ return value;
40
+ }
41
+ /**
42
+ * Get the output field name from a field mapping
43
+ */
44
+ export function getOutputFieldName(mapping) {
45
+ if (mapping.as) {
46
+ return mapping.as;
47
+ }
48
+ // Default: use last segment of path
49
+ const parts = mapping.from.split(".");
50
+ return parts[parts.length - 1];
51
+ }
52
+ /**
53
+ * Transform a value according to the specified transformation
54
+ */
55
+ export function transformValue(value, transform) {
56
+ if (value === null || value === undefined) {
57
+ return value;
58
+ }
59
+ switch (transform) {
60
+ case "uppercase":
61
+ return typeof value === "string" ? value.toUpperCase() : String(value).toUpperCase();
62
+ case "lowercase":
63
+ return typeof value === "string" ? value.toLowerCase() : String(value).toLowerCase();
64
+ case "date":
65
+ // Parse ISO date and format as YYYY-MM-DD
66
+ if (typeof value === "string" || typeof value === "number") {
67
+ const date = new Date(value);
68
+ if (!isNaN(date.getTime())) {
69
+ return date.toISOString().split("T")[0];
70
+ }
71
+ }
72
+ return value;
73
+ case "number":
74
+ if (typeof value === "number")
75
+ return value;
76
+ if (typeof value === "string") {
77
+ const num = parseFloat(value);
78
+ return isNaN(num) ? value : num;
79
+ }
80
+ return value;
81
+ case "boolean":
82
+ if (typeof value === "boolean")
83
+ return value;
84
+ if (typeof value === "string") {
85
+ const lower = value.toLowerCase();
86
+ if (lower === "true" || lower === "yes" || lower === "1")
87
+ return true;
88
+ if (lower === "false" || lower === "no" || lower === "0")
89
+ return false;
90
+ }
91
+ if (typeof value === "number")
92
+ return value !== 0;
93
+ return Boolean(value);
94
+ case "string":
95
+ if (typeof value === "string")
96
+ return value;
97
+ if (value === null)
98
+ return "null";
99
+ if (value === undefined)
100
+ return "undefined";
101
+ if (Array.isArray(value))
102
+ return value.join(", ");
103
+ if (typeof value === "object")
104
+ return JSON.stringify(value);
105
+ return String(value);
106
+ default:
107
+ return value;
108
+ }
109
+ }
110
+ /**
111
+ * Apply select stage to a single item
112
+ * Returns a new object with only the selected fields
113
+ */
114
+ export function selectItem(item, config) {
115
+ const result = {};
116
+ for (const mapping of config.fields) {
117
+ const value = getFieldValue(item, mapping.from);
118
+ const outputName = getOutputFieldName(mapping);
119
+ const transformedValue = mapping.transform
120
+ ? transformValue(value, mapping.transform)
121
+ : value;
122
+ result[outputName] = transformedValue;
123
+ }
124
+ return result;
125
+ }
126
+ /**
127
+ * Apply select stage to all items
128
+ * If no select config is provided, passes items through unchanged
129
+ */
130
+ export function executeSelect(items, config) {
131
+ if (!config) {
132
+ // No select: pass through as-is (assuming items are objects)
133
+ return items.map((item) => {
134
+ if (item !== null && typeof item === "object" && !Array.isArray(item)) {
135
+ // Strip internal __jicon_id field
136
+ const { __jicon_id, ...rest } = item;
137
+ return rest;
138
+ }
139
+ return { value: item };
140
+ });
141
+ }
142
+ return items.map((item) => selectItem(item, config));
143
+ }
144
+ /**
145
+ * Extract all available field paths from an item (for error suggestions)
146
+ * Limited to first 2 levels to avoid overwhelming output
147
+ */
148
+ export function extractFieldPaths(item, prefix = "", depth = 0, maxDepth = 2) {
149
+ const paths = [];
150
+ if (item === null || item === undefined || typeof item !== "object") {
151
+ return paths;
152
+ }
153
+ if (Array.isArray(item)) {
154
+ // For arrays, just note it's an array
155
+ if (prefix) {
156
+ paths.push(`${prefix}[]`);
157
+ }
158
+ // Sample first element for structure
159
+ if (item.length > 0 && depth < maxDepth) {
160
+ paths.push(...extractFieldPaths(item[0], prefix ? `${prefix}[0]` : "[0]", depth + 1, maxDepth));
161
+ }
162
+ return paths;
163
+ }
164
+ const obj = item;
165
+ for (const key of Object.keys(obj)) {
166
+ // Skip internal fields
167
+ if (key.startsWith("__"))
168
+ continue;
169
+ const path = prefix ? `${prefix}.${key}` : key;
170
+ paths.push(path);
171
+ // Recurse into nested objects
172
+ if (depth < maxDepth && obj[key] !== null && typeof obj[key] === "object") {
173
+ paths.push(...extractFieldPaths(obj[key], path, depth + 1, maxDepth));
174
+ }
175
+ }
176
+ return paths;
177
+ }
178
+ /**
179
+ * Validate select config and return errors if any fields don't exist
180
+ */
181
+ export function validateSelectConfig(items, config) {
182
+ const errors = [];
183
+ const suggestions = new Map();
184
+ if (items.length === 0) {
185
+ return { valid: true, errors: [], suggestions };
186
+ }
187
+ // Sample first item for validation
188
+ const sampleItem = items[0];
189
+ const availablePaths = extractFieldPaths(sampleItem);
190
+ for (const mapping of config.fields) {
191
+ const value = getFieldValue(sampleItem, mapping.from);
192
+ if (value === undefined) {
193
+ // Field not found - find similar fields for suggestion
194
+ const similarFields = availablePaths.filter((path) => {
195
+ const lastPart = mapping.from.split(".").pop()?.toLowerCase() || "";
196
+ return path.toLowerCase().includes(lastPart) || lastPart.includes(path.split(".").pop()?.toLowerCase() || "");
197
+ });
198
+ errors.push(`Field '${mapping.from}' not found`);
199
+ if (similarFields.length > 0) {
200
+ suggestions.set(mapping.from, similarFields.slice(0, 3));
201
+ }
202
+ }
203
+ }
204
+ return {
205
+ valid: errors.length === 0,
206
+ errors,
207
+ suggestions,
208
+ };
209
+ }
210
+ /**
211
+ * Get the field names that will be available after executing a select stage.
212
+ * If no select config, returns the original field names from the data.
213
+ */
214
+ export function getPostSelectFieldNames(items, config) {
215
+ if (!config) {
216
+ // No select: return original field names
217
+ if (items.length === 0)
218
+ return [];
219
+ const sampleItem = items[0];
220
+ if (sampleItem !== null && typeof sampleItem === "object" && !Array.isArray(sampleItem)) {
221
+ return Object.keys(sampleItem).filter(k => !k.startsWith("__"));
222
+ }
223
+ return ["value"];
224
+ }
225
+ // Return the output names from the select config
226
+ return config.fields.map((mapping) => getOutputFieldName(mapping));
227
+ }
228
+ //# sourceMappingURL=select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.js","sourceRoot":"","sources":["../../../../src/utils/buffer-pipeline/stages/select.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Sort Stage
3
+ *
4
+ * Sorts items by one or more fields.
5
+ * Supports ascending and descending order.
6
+ */
7
+ import type { SortConfig } from "../types.js";
8
+ /**
9
+ * Execute sort stage
10
+ * Sorts items by multiple fields in order
11
+ */
12
+ export declare function executeSort(items: Record<string, unknown>[], configs?: SortConfig[]): Record<string, unknown>[];
13
+ /**
14
+ * Validate sort config
15
+ */
16
+ export declare function validateSortConfig(items: unknown[], configs: SortConfig[]): {
17
+ valid: boolean;
18
+ warnings: string[];
19
+ };
20
+ //# sourceMappingURL=sort.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort.d.ts","sourceRoot":"","sources":["../../../../src/utils/buffer-pipeline/stages/sort.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAoD9C;;;GAGG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAChC,OAAO,CAAC,EAAE,UAAU,EAAE,GACrB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAuB3B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,OAAO,EAAE,EAChB,OAAO,EAAE,UAAU,EAAE,GACpB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAoBxC"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Sort Stage
3
+ *
4
+ * Sorts items by one or more fields.
5
+ * Supports ascending and descending order.
6
+ */
7
+ import { getFieldValue } from "./select.js";
8
+ /**
9
+ * Compare two values for sorting
10
+ * Returns negative if a < b, positive if a > b, 0 if equal
11
+ */
12
+ function compareValues(a, b) {
13
+ // Handle null/undefined - sort them last
14
+ if (a === null || a === undefined) {
15
+ if (b === null || b === undefined)
16
+ return 0;
17
+ return 1; // nulls last
18
+ }
19
+ if (b === null || b === undefined) {
20
+ return -1; // nulls last
21
+ }
22
+ // Numeric comparison
23
+ if (typeof a === "number" && typeof b === "number") {
24
+ return a - b;
25
+ }
26
+ // Try numeric comparison for strings that look like numbers
27
+ if (typeof a === "string" && typeof b === "string") {
28
+ const numA = parseFloat(a);
29
+ const numB = parseFloat(b);
30
+ if (!isNaN(numA) && !isNaN(numB)) {
31
+ return numA - numB;
32
+ }
33
+ }
34
+ // Date comparison
35
+ if (typeof a === "string" && typeof b === "string") {
36
+ // Check if both look like dates
37
+ const dateA = Date.parse(a);
38
+ const dateB = Date.parse(b);
39
+ if (!isNaN(dateA) && !isNaN(dateB)) {
40
+ return dateA - dateB;
41
+ }
42
+ }
43
+ // Boolean comparison (false < true)
44
+ if (typeof a === "boolean" && typeof b === "boolean") {
45
+ return a === b ? 0 : a ? 1 : -1;
46
+ }
47
+ // String comparison (case-insensitive)
48
+ const strA = String(a).toLowerCase();
49
+ const strB = String(b).toLowerCase();
50
+ return strA.localeCompare(strB);
51
+ }
52
+ /**
53
+ * Execute sort stage
54
+ * Sorts items by multiple fields in order
55
+ */
56
+ export function executeSort(items, configs) {
57
+ if (!configs || configs.length === 0) {
58
+ return items;
59
+ }
60
+ // Create a copy to avoid mutating original
61
+ const sorted = [...items];
62
+ sorted.sort((a, b) => {
63
+ for (const config of configs) {
64
+ const valueA = getFieldValue(a, config.field);
65
+ const valueB = getFieldValue(b, config.field);
66
+ const comparison = compareValues(valueA, valueB);
67
+ if (comparison !== 0) {
68
+ // Apply direction
69
+ return config.direction === "desc" ? -comparison : comparison;
70
+ }
71
+ }
72
+ return 0;
73
+ });
74
+ return sorted;
75
+ }
76
+ /**
77
+ * Validate sort config
78
+ */
79
+ export function validateSortConfig(items, configs) {
80
+ const warnings = [];
81
+ if (items.length === 0) {
82
+ return { valid: true, warnings: [] };
83
+ }
84
+ const sampleItem = items[0];
85
+ for (const config of configs) {
86
+ const value = getFieldValue(sampleItem, config.field);
87
+ if (value === undefined) {
88
+ warnings.push(`Sort field '${config.field}' not found in items`);
89
+ }
90
+ }
91
+ return {
92
+ valid: true, // Sort doesn't fail on missing fields, just warns
93
+ warnings,
94
+ };
95
+ }
96
+ //# sourceMappingURL=sort.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort.js","sourceRoot":"","sources":["../../../../src/utils/buffer-pipeline/stages/sort.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,277 @@
1
+ /**
2
+ * Buffer Pipeline Types
3
+ *
4
+ * Declarative JSON DSL for data transformation pipelines.
5
+ * Executes extract→filter→transform→aggregate→output server-side.
6
+ */
7
+ /**
8
+ * Field mapping for the select stage
9
+ */
10
+ export interface FieldMapping {
11
+ /** Source field path using dot notation (e.g., "priority.name", "fields.customfield_10001") */
12
+ from: string;
13
+ /** Output field name (default: last segment of path) */
14
+ as?: string;
15
+ /** Transform the value before output */
16
+ transform?: "uppercase" | "lowercase" | "date" | "number" | "boolean" | "string";
17
+ }
18
+ /**
19
+ * Filter condition operators
20
+ */
21
+ export type FilterOperator = "eq" | "ne" | "gt" | "lt" | "gte" | "lte" | "contains" | "startsWith" | "endsWith" | "in" | "notIn" | "exists" | "notExists" | "regex" | "empty" | "notEmpty";
22
+ /**
23
+ * Filter condition.
24
+ *
25
+ * Each condition evaluates its own field/operator, then OR-s with any
26
+ * nested `or` conditions (i.e., the item matches if the parent condition
27
+ * OR any child condition matches).
28
+ * Multiple conditions in the filter array are AND-ed together.
29
+ */
30
+ export interface FilterCondition {
31
+ /** Field path to filter on */
32
+ field: string;
33
+ /** Comparison operator */
34
+ operator: FilterOperator;
35
+ /** Value to compare against (not needed for exists/empty operators) */
36
+ value?: unknown;
37
+ /** Nested OR conditions */
38
+ or?: FilterCondition[];
39
+ }
40
+ /**
41
+ * Aggregation functions for groupBy
42
+ */
43
+ export type AggregationFunction = "count" | "sum" | "avg" | "min" | "max" | "first" | "last" | "list" | "unique";
44
+ /**
45
+ * Aggregation definition
46
+ */
47
+ export interface Aggregation {
48
+ /** Aggregation function */
49
+ function: AggregationFunction;
50
+ /** Field to aggregate (required for sum/avg/min/max, optional for count) */
51
+ field?: string;
52
+ /** Output field name */
53
+ as: string;
54
+ }
55
+ /**
56
+ * Group by configuration
57
+ */
58
+ export interface GroupByConfig {
59
+ /** Field to group by */
60
+ field: string;
61
+ /** Aggregations to compute for each group */
62
+ aggregations: Aggregation[];
63
+ }
64
+ /**
65
+ * Sort direction
66
+ */
67
+ export interface SortConfig {
68
+ /** Field to sort by */
69
+ field: string;
70
+ /** Sort direction (default: "asc") */
71
+ direction?: "asc" | "desc";
72
+ }
73
+ /**
74
+ * Style configuration for conditional formatting
75
+ */
76
+ export interface StyleConfig {
77
+ /** CSS class to apply (for XHTML output) */
78
+ cssClass?: string;
79
+ /** Text prefix */
80
+ prefix?: string;
81
+ /** Text suffix */
82
+ suffix?: string;
83
+ /** Text color (hex or named color) */
84
+ color?: string;
85
+ /** Background color (hex or named color) */
86
+ backgroundColor?: string;
87
+ /** Bold text */
88
+ bold?: boolean;
89
+ /** Italic text */
90
+ italic?: boolean;
91
+ /** Icon to display (emoji or text) */
92
+ icon?: string;
93
+ }
94
+ /**
95
+ * Conditional format rule
96
+ */
97
+ export interface ConditionalFormat {
98
+ /** Condition that triggers this format */
99
+ condition: FilterCondition;
100
+ /** Style to apply when condition matches */
101
+ style: StyleConfig;
102
+ /** Fields to apply style to (default: all fields) */
103
+ fields?: string[];
104
+ }
105
+ /**
106
+ * Link configuration for table columns
107
+ */
108
+ export interface LinkConfig {
109
+ /** Link type - determines URL pattern */
110
+ type: "jira" | "confluence" | "tempo" | "custom";
111
+ /** Custom URL template with {{field}} placeholders */
112
+ template?: string;
113
+ }
114
+ /**
115
+ * Table column definition
116
+ */
117
+ export interface TableColumn {
118
+ /** Field name (after select/rename) */
119
+ field: string;
120
+ /** Column header text */
121
+ header: string;
122
+ /** Link configuration */
123
+ link?: LinkConfig;
124
+ /** CSS width (e.g., "100px", "20%") */
125
+ width?: string;
126
+ /** Text alignment */
127
+ align?: "left" | "center" | "right";
128
+ }
129
+ /**
130
+ * Table output configuration
131
+ */
132
+ export interface TableOutputConfig {
133
+ /** Table title (optional) */
134
+ title?: string;
135
+ /** Column definitions */
136
+ columns: TableColumn[];
137
+ /** Show row numbers */
138
+ showRowNumbers?: boolean;
139
+ /** CSS class for the table */
140
+ tableClass?: string;
141
+ }
142
+ /**
143
+ * List output configuration
144
+ */
145
+ export interface ListOutputConfig {
146
+ /** List title (optional) */
147
+ title?: string;
148
+ /** Template with {{field}} placeholders for each item */
149
+ template: string;
150
+ /** List style (default: "bullet") */
151
+ style?: "bullet" | "numbered" | "none";
152
+ }
153
+ /**
154
+ * Output type
155
+ */
156
+ export type OutputType = "xhtml_table" | "xhtml_list" | "json" | "csv" | "markdown";
157
+ /**
158
+ * Output configuration
159
+ */
160
+ export interface OutputConfig {
161
+ /** Output format type */
162
+ type: OutputType;
163
+ /** Table configuration (required for xhtml_table) */
164
+ table?: TableOutputConfig;
165
+ /** List configuration (required for xhtml_list) */
166
+ list?: ListOutputConfig;
167
+ /** Include metadata (item count, timestamp) in output */
168
+ includeMetadata?: boolean;
169
+ }
170
+ /**
171
+ * Select stage configuration
172
+ */
173
+ export interface SelectConfig {
174
+ /** Fields to include in output */
175
+ fields: FieldMapping[];
176
+ }
177
+ /**
178
+ * Complete pipeline definition
179
+ */
180
+ export interface PipelineDefinition {
181
+ /** Stage 1: Field selection (like SQL SELECT) */
182
+ select?: SelectConfig;
183
+ /** Stage 2: Filtering (like SQL WHERE) */
184
+ filter?: FilterCondition[];
185
+ /** Stage 3: Grouping and aggregation (like SQL GROUP BY) */
186
+ groupBy?: GroupByConfig;
187
+ /** Stage 4: Sorting (like SQL ORDER BY) */
188
+ sort?: SortConfig[];
189
+ /** Stage 5: Limit results */
190
+ limit?: number;
191
+ /** Stage 6: Conditional formatting */
192
+ format?: ConditionalFormat[];
193
+ /** Stage 7: Output configuration (required) */
194
+ output: OutputConfig;
195
+ }
196
+ /**
197
+ * Pipeline execution context
198
+ * Passed through all stages
199
+ */
200
+ export interface PipelineContext {
201
+ /** Source buffer ID */
202
+ sourceBufferId: string;
203
+ /** Jira base URL for links */
204
+ jiraUrl?: string;
205
+ /** Confluence base URL for links */
206
+ confluenceUrl?: string;
207
+ /** Source buffer metadata */
208
+ metadata?: Record<string, unknown>;
209
+ }
210
+ /**
211
+ * Pipeline execution result
212
+ */
213
+ export interface PipelineResult {
214
+ /** New buffer ID containing output */
215
+ bufferId: string;
216
+ /** Number of items in source buffer */
217
+ inputItems: number;
218
+ /** Number of items after filter/group (before limit) */
219
+ outputItems: number;
220
+ /** Pipeline stages that were executed */
221
+ pipelineStages: string[];
222
+ /** Output format type */
223
+ outputType: OutputType;
224
+ /** Preview of first few rows/items */
225
+ preview: string;
226
+ /** Size of output buffer in bytes */
227
+ bufferSizeBytes: number;
228
+ /** XHTML structure (for xhtml_table/xhtml_list) */
229
+ structure?: Array<{
230
+ id: number;
231
+ type: string;
232
+ text?: string;
233
+ children?: number;
234
+ }>;
235
+ /** Next available element ID */
236
+ nextId?: number;
237
+ /** Hint for next action */
238
+ hint: string;
239
+ }
240
+ /**
241
+ * Pipeline error with stage context
242
+ */
243
+ export interface PipelineError {
244
+ /** Error flag */
245
+ error: true;
246
+ /** Error message */
247
+ message: string;
248
+ /** HTTP-like status code */
249
+ statusCode: number;
250
+ /** Stage where error occurred */
251
+ stage?: string;
252
+ /** Index within stage (e.g., which filter condition) */
253
+ stageIndex?: number;
254
+ /** Additional error details */
255
+ details?: {
256
+ field?: string;
257
+ availableFields?: string[];
258
+ suggestion?: string;
259
+ [key: string]: unknown;
260
+ };
261
+ }
262
+ /**
263
+ * Intermediate data item with formatting applied
264
+ */
265
+ export interface FormattedItem {
266
+ /** Original data */
267
+ data: Record<string, unknown>;
268
+ /**
269
+ * Styles to apply per field.
270
+ * Internal-only: Map is not JSON-serializable. Output generators
271
+ * read this directly; it is never sent over the wire.
272
+ */
273
+ styles: Map<string, StyleConfig>;
274
+ /** Row-level style */
275
+ rowStyle?: StyleConfig;
276
+ }
277
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/buffer-pipeline/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Buffer Pipeline Types
3
+ *
4
+ * Declarative JSON DSL for data transformation pipelines.
5
+ * Executes extract→filter→transform→aggregate→output server-side.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/utils/buffer-pipeline/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}