@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.
- package/README.md +73 -67
- package/TOOL_LIST.md +785 -133
- package/dist/config/constants.d.ts +18 -7
- package/dist/config/constants.d.ts.map +1 -1
- package/dist/config/constants.js +21 -8
- package/dist/config/constants.js.map +1 -1
- package/dist/config/loader.d.ts +11 -11
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +53 -93
- package/dist/config/loader.js.map +1 -1
- package/dist/config/types.d.ts +3 -6
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +2 -4
- package/dist/config/types.js.map +1 -1
- package/dist/confluence/formatters.js +1 -1
- package/dist/confluence/formatters.js.map +1 -1
- package/dist/confluence/tools.d.ts +8 -12
- package/dist/confluence/tools.d.ts.map +1 -1
- package/dist/confluence/tools.js +285 -233
- package/dist/confluence/tools.js.map +1 -1
- package/dist/index.js +17 -26
- package/dist/index.js.map +1 -1
- package/dist/jira/formatters.d.ts +1 -0
- package/dist/jira/formatters.d.ts.map +1 -1
- package/dist/jira/formatters.js +13 -12
- package/dist/jira/formatters.js.map +1 -1
- package/dist/jira/tools.d.ts +4 -0
- package/dist/jira/tools.d.ts.map +1 -1
- package/dist/jira/tools.js +234 -44
- package/dist/jira/tools.js.map +1 -1
- package/dist/permissions/tool-registry.d.ts +2 -2
- package/dist/permissions/tool-registry.d.ts.map +1 -1
- package/dist/permissions/tool-registry.js +4 -2
- package/dist/permissions/tool-registry.js.map +1 -1
- package/dist/permissions/write-home-validator.d.ts.map +1 -1
- package/dist/permissions/write-home-validator.js +13 -3
- package/dist/permissions/write-home-validator.js.map +1 -1
- package/dist/tempo/defaults.d.ts +17 -0
- package/dist/tempo/defaults.d.ts.map +1 -0
- package/dist/tempo/defaults.js +26 -0
- package/dist/tempo/defaults.js.map +1 -0
- package/dist/tempo/tools.d.ts +5 -0
- package/dist/tempo/tools.d.ts.map +1 -1
- package/dist/tempo/tools.js +161 -35
- package/dist/tempo/tools.js.map +1 -1
- package/dist/utils/buffer-pipeline/index.d.ts +30 -0
- package/dist/utils/buffer-pipeline/index.d.ts.map +1 -0
- package/dist/utils/buffer-pipeline/index.js +317 -0
- package/dist/utils/buffer-pipeline/index.js.map +1 -0
- package/dist/utils/buffer-pipeline/output/csv.d.ts +20 -0
- package/dist/utils/buffer-pipeline/output/csv.d.ts.map +1 -0
- package/dist/utils/buffer-pipeline/output/csv.js +117 -0
- package/dist/utils/buffer-pipeline/output/csv.js.map +1 -0
- package/dist/utils/buffer-pipeline/output/json.d.ts +16 -0
- package/dist/utils/buffer-pipeline/output/json.d.ts.map +1 -0
- package/dist/utils/buffer-pipeline/output/json.js +48 -0
- package/dist/utils/buffer-pipeline/output/json.js.map +1 -0
- package/dist/utils/buffer-pipeline/output/markdown.d.ts +15 -0
- package/dist/utils/buffer-pipeline/output/markdown.d.ts.map +1 -0
- package/dist/utils/buffer-pipeline/output/markdown.js +105 -0
- package/dist/utils/buffer-pipeline/output/markdown.js.map +1 -0
- package/dist/utils/buffer-pipeline/output/xhtml-list.d.ts +16 -0
- package/dist/utils/buffer-pipeline/output/xhtml-list.d.ts.map +1 -0
- package/dist/utils/buffer-pipeline/output/xhtml-list.js +81 -0
- package/dist/utils/buffer-pipeline/output/xhtml-list.js.map +1 -0
- package/dist/utils/buffer-pipeline/output/xhtml-table.d.ts +15 -0
- package/dist/utils/buffer-pipeline/output/xhtml-table.d.ts.map +1 -0
- package/dist/utils/buffer-pipeline/output/xhtml-table.js +176 -0
- package/dist/utils/buffer-pipeline/output/xhtml-table.js.map +1 -0
- package/dist/utils/buffer-pipeline/schema.d.ts +1878 -0
- package/dist/utils/buffer-pipeline/schema.d.ts.map +1 -0
- package/dist/utils/buffer-pipeline/schema.js +168 -0
- package/dist/utils/buffer-pipeline/schema.js.map +1 -0
- package/dist/utils/buffer-pipeline/stages/filter.d.ts +32 -0
- package/dist/utils/buffer-pipeline/stages/filter.d.ts.map +1 -0
- package/dist/utils/buffer-pipeline/stages/filter.js +208 -0
- package/dist/utils/buffer-pipeline/stages/filter.js.map +1 -0
- package/dist/utils/buffer-pipeline/stages/format.d.ts +45 -0
- package/dist/utils/buffer-pipeline/stages/format.d.ts.map +1 -0
- package/dist/utils/buffer-pipeline/stages/format.js +160 -0
- package/dist/utils/buffer-pipeline/stages/format.js.map +1 -0
- package/dist/utils/buffer-pipeline/stages/group-by.d.ts +25 -0
- package/dist/utils/buffer-pipeline/stages/group-by.d.ts.map +1 -0
- package/dist/utils/buffer-pipeline/stages/group-by.js +190 -0
- package/dist/utils/buffer-pipeline/stages/group-by.js.map +1 -0
- package/dist/utils/buffer-pipeline/stages/select.d.ts +54 -0
- package/dist/utils/buffer-pipeline/stages/select.d.ts.map +1 -0
- package/dist/utils/buffer-pipeline/stages/select.js +228 -0
- package/dist/utils/buffer-pipeline/stages/select.js.map +1 -0
- package/dist/utils/buffer-pipeline/stages/sort.d.ts +20 -0
- package/dist/utils/buffer-pipeline/stages/sort.d.ts.map +1 -0
- package/dist/utils/buffer-pipeline/stages/sort.js +96 -0
- package/dist/utils/buffer-pipeline/stages/sort.js.map +1 -0
- package/dist/utils/buffer-pipeline/types.d.ts +277 -0
- package/dist/utils/buffer-pipeline/types.d.ts.map +1 -0
- package/dist/utils/buffer-pipeline/types.js +8 -0
- package/dist/utils/buffer-pipeline/types.js.map +1 -0
- package/dist/utils/buffer-tools.d.ts +749 -19
- package/dist/utils/buffer-tools.d.ts.map +1 -1
- package/dist/utils/buffer-tools.js +738 -491
- package/dist/utils/buffer-tools.js.map +1 -1
- package/dist/utils/content-buffer.d.ts +55 -4
- package/dist/utils/content-buffer.d.ts.map +1 -1
- package/dist/utils/content-buffer.js +107 -9
- package/dist/utils/content-buffer.js.map +1 -1
- package/dist/utils/jicon-help.d.ts +1 -1
- package/dist/utils/jicon-help.d.ts.map +1 -1
- package/dist/utils/jicon-help.js +345 -99
- package/dist/utils/jicon-help.js.map +1 -1
- package/dist/utils/json-structure.d.ts +121 -0
- package/dist/utils/json-structure.d.ts.map +1 -0
- package/dist/utils/json-structure.js +637 -0
- package/dist/utils/json-structure.js.map +1 -0
- package/dist/utils/plantuml/include-expander.d.ts +31 -30
- package/dist/utils/plantuml/include-expander.d.ts.map +1 -1
- package/dist/utils/plantuml/include-expander.js +167 -133
- package/dist/utils/plantuml/include-expander.js.map +1 -1
- package/dist/utils/plantuml/index.d.ts +3 -3
- package/dist/utils/plantuml/index.d.ts.map +1 -1
- package/dist/utils/plantuml/index.js +4 -4
- package/dist/utils/plantuml/index.js.map +1 -1
- package/dist/utils/plantuml/service.d.ts +13 -24
- package/dist/utils/plantuml/service.d.ts.map +1 -1
- package/dist/utils/plantuml/service.js +49 -99
- package/dist/utils/plantuml/service.js.map +1 -1
- package/dist/utils/plantuml/tools.d.ts.map +1 -1
- package/dist/utils/plantuml/tools.js +33 -72
- package/dist/utils/plantuml/tools.js.map +1 -1
- package/dist/utils/plantuml/types.d.ts +1 -35
- package/dist/utils/plantuml/types.d.ts.map +1 -1
- package/dist/utils/plantuml/types.js +1 -11
- package/dist/utils/plantuml/types.js.map +1 -1
- package/dist/utils/plantuml/validation-helper.d.ts +1 -1
- package/dist/utils/plantuml/validation-helper.js +12 -12
- package/dist/utils/plantuml/validation-helper.js.map +1 -1
- package/dist/utils/response-formatter.d.ts +68 -0
- package/dist/utils/response-formatter.d.ts.map +1 -1
- package/dist/utils/response-formatter.js +186 -78
- package/dist/utils/response-formatter.js.map +1 -1
- package/dist/utils/url-tools.d.ts.map +1 -1
- package/dist/utils/url-tools.js +22 -0
- package/dist/utils/url-tools.js.map +1 -1
- package/dist/utils/xhtml/error-locator.js +2 -2
- package/dist/utils/xhtml/error-locator.js.map +1 -1
- package/dist/utils/xhtml/index.d.ts +1 -1
- package/dist/utils/xhtml/index.d.ts.map +1 -1
- package/dist/utils/xhtml/index.js +1 -1
- package/dist/utils/xhtml/index.js.map +1 -1
- package/dist/utils/xhtml/parser.d.ts +34 -5
- package/dist/utils/xhtml/parser.d.ts.map +1 -1
- package/dist/utils/xhtml/parser.js +66 -11
- package/dist/utils/xhtml/parser.js.map +1 -1
- package/dist/utils/xhtml/plantuml.d.ts.map +1 -1
- package/dist/utils/xhtml/plantuml.js +5 -3
- package/dist/utils/xhtml/plantuml.js.map +1 -1
- package/dist/utils/xhtml/serializer.d.ts.map +1 -1
- package/dist/utils/xhtml/serializer.js +12 -15
- package/dist/utils/xhtml/serializer.js.map +1 -1
- package/dist/utils/xhtml/types.d.ts +1 -0
- package/dist/utils/xhtml/types.d.ts.map +1 -1
- package/package.json +12 -4
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format Stage
|
|
3
|
+
*
|
|
4
|
+
* Applies conditional formatting rules to items.
|
|
5
|
+
* Used by output generators to style cells/elements based on conditions.
|
|
6
|
+
*/
|
|
7
|
+
import { evaluateCondition } from "./filter.js";
|
|
8
|
+
/**
|
|
9
|
+
* Evaluate format rules against an item and return applicable styles
|
|
10
|
+
*/
|
|
11
|
+
export function evaluateFormats(item, formats) {
|
|
12
|
+
const fieldStyles = new Map();
|
|
13
|
+
let rowStyle = {};
|
|
14
|
+
for (const format of formats) {
|
|
15
|
+
if (evaluateCondition(item, format.condition)) {
|
|
16
|
+
if (format.fields && format.fields.length > 0) {
|
|
17
|
+
// Apply to specific fields
|
|
18
|
+
for (const field of format.fields) {
|
|
19
|
+
const existing = fieldStyles.get(field) || {};
|
|
20
|
+
fieldStyles.set(field, mergeStyles(existing, format.style));
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
// Apply to entire row
|
|
25
|
+
rowStyle = mergeStyles(rowStyle, format.style);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return { fieldStyles, rowStyle };
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Merge two styles, with later style taking precedence
|
|
33
|
+
*/
|
|
34
|
+
export function mergeStyles(base, override) {
|
|
35
|
+
return {
|
|
36
|
+
...base,
|
|
37
|
+
...override,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Execute format stage - annotates items with formatting info
|
|
42
|
+
*/
|
|
43
|
+
export function executeFormat(items, formats) {
|
|
44
|
+
if (!formats || formats.length === 0) {
|
|
45
|
+
// No formatting - wrap items without styles
|
|
46
|
+
return items.map((data) => ({
|
|
47
|
+
data,
|
|
48
|
+
styles: new Map(),
|
|
49
|
+
}));
|
|
50
|
+
}
|
|
51
|
+
return items.map((data) => {
|
|
52
|
+
const { fieldStyles, rowStyle } = evaluateFormats(data, formats);
|
|
53
|
+
return {
|
|
54
|
+
data,
|
|
55
|
+
styles: fieldStyles,
|
|
56
|
+
rowStyle: Object.keys(rowStyle).length > 0 ? rowStyle : undefined,
|
|
57
|
+
};
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Convert style to inline CSS string
|
|
62
|
+
*/
|
|
63
|
+
export function styleToInlineCss(style) {
|
|
64
|
+
const parts = [];
|
|
65
|
+
if (style.color) {
|
|
66
|
+
parts.push(`color: ${style.color}`);
|
|
67
|
+
}
|
|
68
|
+
if (style.backgroundColor) {
|
|
69
|
+
parts.push(`background-color: ${style.backgroundColor}`);
|
|
70
|
+
}
|
|
71
|
+
if (style.bold) {
|
|
72
|
+
parts.push("font-weight: bold");
|
|
73
|
+
}
|
|
74
|
+
if (style.italic) {
|
|
75
|
+
parts.push("font-style: italic");
|
|
76
|
+
}
|
|
77
|
+
return parts.join("; ");
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Apply text decorations (prefix, suffix, icon) to a value
|
|
81
|
+
*/
|
|
82
|
+
export function applyTextDecorations(value, style) {
|
|
83
|
+
let result = value;
|
|
84
|
+
if (style.icon) {
|
|
85
|
+
result = `${style.icon} ${result}`;
|
|
86
|
+
}
|
|
87
|
+
if (style.prefix) {
|
|
88
|
+
result = `${style.prefix}${result}`;
|
|
89
|
+
}
|
|
90
|
+
if (style.suffix) {
|
|
91
|
+
result = `${result}${style.suffix}`;
|
|
92
|
+
}
|
|
93
|
+
return result;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get the effective style for a field, merging row style and field-specific style
|
|
97
|
+
*/
|
|
98
|
+
export function getEffectiveStyle(item, field) {
|
|
99
|
+
const fieldStyle = item.styles.get(field);
|
|
100
|
+
const rowStyle = item.rowStyle;
|
|
101
|
+
if (!fieldStyle && !rowStyle) {
|
|
102
|
+
return {};
|
|
103
|
+
}
|
|
104
|
+
if (!fieldStyle) {
|
|
105
|
+
return rowStyle || {};
|
|
106
|
+
}
|
|
107
|
+
if (!rowStyle) {
|
|
108
|
+
return fieldStyle;
|
|
109
|
+
}
|
|
110
|
+
// Merge row style (base) with field style (override)
|
|
111
|
+
return mergeStyles(rowStyle, fieldStyle);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Format a cell value with styling for XHTML output
|
|
115
|
+
*/
|
|
116
|
+
export function formatCellXhtml(value, style) {
|
|
117
|
+
// Convert value to string
|
|
118
|
+
let strValue;
|
|
119
|
+
if (value === null || value === undefined) {
|
|
120
|
+
strValue = "";
|
|
121
|
+
}
|
|
122
|
+
else if (Array.isArray(value)) {
|
|
123
|
+
strValue = value.join(", ");
|
|
124
|
+
}
|
|
125
|
+
else if (typeof value === "object") {
|
|
126
|
+
strValue = JSON.stringify(value);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
strValue = String(value);
|
|
130
|
+
}
|
|
131
|
+
// Escape HTML entities
|
|
132
|
+
strValue = escapeXml(strValue);
|
|
133
|
+
// Apply text decorations
|
|
134
|
+
strValue = applyTextDecorations(strValue, style);
|
|
135
|
+
// Wrap in styled span if needed
|
|
136
|
+
const inlineCss = styleToInlineCss(style);
|
|
137
|
+
if (inlineCss || style.cssClass) {
|
|
138
|
+
const attrs = [];
|
|
139
|
+
if (style.cssClass) {
|
|
140
|
+
attrs.push(`class="${escapeXml(style.cssClass)}"`);
|
|
141
|
+
}
|
|
142
|
+
if (inlineCss) {
|
|
143
|
+
attrs.push(`style="${escapeXml(inlineCss)}"`);
|
|
144
|
+
}
|
|
145
|
+
return `<span ${attrs.join(" ")}>${strValue}</span>`;
|
|
146
|
+
}
|
|
147
|
+
return strValue;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Escape XML special characters
|
|
151
|
+
*/
|
|
152
|
+
export function escapeXml(str) {
|
|
153
|
+
return str
|
|
154
|
+
.replace(/&/g, "&")
|
|
155
|
+
.replace(/</g, "<")
|
|
156
|
+
.replace(/>/g, ">")
|
|
157
|
+
.replace(/"/g, """)
|
|
158
|
+
.replace(/'/g, "'");
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../../../src/utils/buffer-pipeline/stages/format.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Group By Stage
|
|
3
|
+
*
|
|
4
|
+
* Groups items by a field and computes aggregations.
|
|
5
|
+
* Similar to SQL GROUP BY with aggregate functions.
|
|
6
|
+
*/
|
|
7
|
+
import type { GroupByConfig } from "../types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Execute group by stage
|
|
10
|
+
* Returns aggregated results, one row per group
|
|
11
|
+
*/
|
|
12
|
+
export declare function executeGroupBy(items: Record<string, unknown>[], config: GroupByConfig): Record<string, unknown>[];
|
|
13
|
+
/**
|
|
14
|
+
* Validate aggregation config
|
|
15
|
+
*/
|
|
16
|
+
export declare function validateGroupByConfig(items: unknown[], config: GroupByConfig): {
|
|
17
|
+
valid: boolean;
|
|
18
|
+
errors: string[];
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Format aggregation results for display
|
|
22
|
+
* Converts arrays to readable strings, rounds numbers
|
|
23
|
+
*/
|
|
24
|
+
export declare function formatAggregationValue(value: unknown): string;
|
|
25
|
+
//# sourceMappingURL=group-by.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"group-by.d.ts","sourceRoot":"","sources":["../../../../src/utils/buffer-pipeline/stages/group-by.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAuB,aAAa,EAAE,MAAM,aAAa,CAAC;AA+FtE;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAChC,MAAM,EAAE,aAAa,GACpB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAkD3B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,EAAE,EAChB,MAAM,EAAE,aAAa,GACpB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CA4CtC;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAiB7D"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Group By Stage
|
|
3
|
+
*
|
|
4
|
+
* Groups items by a field and computes aggregations.
|
|
5
|
+
* Similar to SQL GROUP BY with aggregate functions.
|
|
6
|
+
*/
|
|
7
|
+
import { getFieldValue } from "./select.js";
|
|
8
|
+
/**
|
|
9
|
+
* Compute an aggregation over a list of values
|
|
10
|
+
*/
|
|
11
|
+
function computeAggregation(values, func) {
|
|
12
|
+
switch (func) {
|
|
13
|
+
case "count":
|
|
14
|
+
return values.length;
|
|
15
|
+
case "sum": {
|
|
16
|
+
let sum = 0;
|
|
17
|
+
for (const v of values) {
|
|
18
|
+
const num = typeof v === "number" ? v : parseFloat(String(v));
|
|
19
|
+
if (!isNaN(num)) {
|
|
20
|
+
sum += num;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return sum;
|
|
24
|
+
}
|
|
25
|
+
case "avg": {
|
|
26
|
+
if (values.length === 0)
|
|
27
|
+
return 0;
|
|
28
|
+
let sum = 0;
|
|
29
|
+
let count = 0;
|
|
30
|
+
for (const v of values) {
|
|
31
|
+
const num = typeof v === "number" ? v : parseFloat(String(v));
|
|
32
|
+
if (!isNaN(num)) {
|
|
33
|
+
sum += num;
|
|
34
|
+
count++;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return count > 0 ? sum / count : 0;
|
|
38
|
+
}
|
|
39
|
+
case "min": {
|
|
40
|
+
let min;
|
|
41
|
+
for (const v of values) {
|
|
42
|
+
const num = typeof v === "number" ? v : parseFloat(String(v));
|
|
43
|
+
if (!isNaN(num)) {
|
|
44
|
+
if (min === undefined || num < min) {
|
|
45
|
+
min = num;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return min ?? null;
|
|
50
|
+
}
|
|
51
|
+
case "max": {
|
|
52
|
+
let max;
|
|
53
|
+
for (const v of values) {
|
|
54
|
+
const num = typeof v === "number" ? v : parseFloat(String(v));
|
|
55
|
+
if (!isNaN(num)) {
|
|
56
|
+
if (max === undefined || num > max) {
|
|
57
|
+
max = num;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return max ?? null;
|
|
62
|
+
}
|
|
63
|
+
case "first":
|
|
64
|
+
return values.length > 0 ? values[0] : null;
|
|
65
|
+
case "last":
|
|
66
|
+
return values.length > 0 ? values[values.length - 1] : null;
|
|
67
|
+
case "list":
|
|
68
|
+
return values;
|
|
69
|
+
case "unique":
|
|
70
|
+
return [...new Set(values.map((v) => (v === null || v === undefined ? "" : String(v))))];
|
|
71
|
+
default:
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get a stable string key for grouping
|
|
77
|
+
*/
|
|
78
|
+
function getGroupKey(value) {
|
|
79
|
+
if (value === null || value === undefined) {
|
|
80
|
+
return "__null__";
|
|
81
|
+
}
|
|
82
|
+
if (typeof value === "object") {
|
|
83
|
+
return JSON.stringify(value);
|
|
84
|
+
}
|
|
85
|
+
return String(value);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Execute group by stage
|
|
89
|
+
* Returns aggregated results, one row per group
|
|
90
|
+
*/
|
|
91
|
+
export function executeGroupBy(items, config) {
|
|
92
|
+
// Group items by the specified field
|
|
93
|
+
const groups = new Map();
|
|
94
|
+
for (const item of items) {
|
|
95
|
+
const groupValue = getFieldValue(item, config.field);
|
|
96
|
+
const groupKey = getGroupKey(groupValue);
|
|
97
|
+
if (!groups.has(groupKey)) {
|
|
98
|
+
groups.set(groupKey, {
|
|
99
|
+
groupValue,
|
|
100
|
+
items: [],
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
groups.get(groupKey).items.push(item);
|
|
104
|
+
}
|
|
105
|
+
// Compute aggregations for each group
|
|
106
|
+
const results = [];
|
|
107
|
+
for (const { groupValue, items: groupItems } of groups.values()) {
|
|
108
|
+
const row = {};
|
|
109
|
+
// Add the group field
|
|
110
|
+
const groupFieldName = config.field.split(".").pop() || config.field;
|
|
111
|
+
row[groupFieldName] = groupValue;
|
|
112
|
+
// Compute each aggregation
|
|
113
|
+
for (const agg of config.aggregations) {
|
|
114
|
+
if (agg.function === "count" && !agg.field) {
|
|
115
|
+
// Count all items in group
|
|
116
|
+
row[agg.as] = groupItems.length;
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
// Extract values for the specified field
|
|
120
|
+
const values = agg.field
|
|
121
|
+
? groupItems.map((item) => getFieldValue(item, agg.field))
|
|
122
|
+
: groupItems;
|
|
123
|
+
row[agg.as] = computeAggregation(values, agg.function);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
results.push(row);
|
|
127
|
+
}
|
|
128
|
+
return results;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Validate aggregation config
|
|
132
|
+
*/
|
|
133
|
+
export function validateGroupByConfig(items, config) {
|
|
134
|
+
const errors = [];
|
|
135
|
+
if (items.length === 0) {
|
|
136
|
+
return { valid: true, errors: [] };
|
|
137
|
+
}
|
|
138
|
+
const sampleItem = items[0];
|
|
139
|
+
// Check group field exists
|
|
140
|
+
const groupValue = getFieldValue(sampleItem, config.field);
|
|
141
|
+
if (groupValue === undefined) {
|
|
142
|
+
errors.push(`Group field '${config.field}' not found`);
|
|
143
|
+
}
|
|
144
|
+
// Check aggregation fields exist (for non-count operations)
|
|
145
|
+
for (const agg of config.aggregations) {
|
|
146
|
+
if (agg.field) {
|
|
147
|
+
const aggValue = getFieldValue(sampleItem, agg.field);
|
|
148
|
+
if (aggValue === undefined) {
|
|
149
|
+
errors.push(`Aggregation field '${agg.field}' not found`);
|
|
150
|
+
}
|
|
151
|
+
// Check numeric fields for numeric aggregations
|
|
152
|
+
if (["sum", "avg", "min", "max"].includes(agg.function)) {
|
|
153
|
+
if (aggValue !== undefined &&
|
|
154
|
+
typeof aggValue !== "number" &&
|
|
155
|
+
isNaN(parseFloat(String(aggValue)))) {
|
|
156
|
+
errors.push(`Field '${agg.field}' is not numeric, but used with ${agg.function}()`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
else if (agg.function !== "count") {
|
|
161
|
+
errors.push(`Aggregation '${agg.as}' requires a field for ${agg.function}()`);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return {
|
|
165
|
+
valid: errors.length === 0,
|
|
166
|
+
errors,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Format aggregation results for display
|
|
171
|
+
* Converts arrays to readable strings, rounds numbers
|
|
172
|
+
*/
|
|
173
|
+
export function formatAggregationValue(value) {
|
|
174
|
+
if (value === null || value === undefined) {
|
|
175
|
+
return "-";
|
|
176
|
+
}
|
|
177
|
+
if (Array.isArray(value)) {
|
|
178
|
+
if (value.length === 0)
|
|
179
|
+
return "-";
|
|
180
|
+
if (value.length <= 3)
|
|
181
|
+
return value.join(", ");
|
|
182
|
+
return `${value.slice(0, 3).join(", ")} (+${value.length - 3} more)`;
|
|
183
|
+
}
|
|
184
|
+
if (typeof value === "number") {
|
|
185
|
+
// Round to 2 decimal places
|
|
186
|
+
return Number.isInteger(value) ? String(value) : value.toFixed(2);
|
|
187
|
+
}
|
|
188
|
+
return String(value);
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=group-by.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"group-by.js","sourceRoot":"","sources":["../../../../src/utils/buffer-pipeline/stages/group-by.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
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
|
+
import type { FieldMapping, SelectConfig } from "../types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Get a value from an object using dot notation path
|
|
10
|
+
* Handles nested objects and arrays
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* getFieldValue({ priority: { name: "High" } }, "priority.name") // "High"
|
|
14
|
+
* getFieldValue({ labels: ["bug", "ui"] }, "labels") // ["bug", "ui"]
|
|
15
|
+
* getFieldValue({ fields: { customfield_10001: "value" } }, "fields.customfield_10001") // "value"
|
|
16
|
+
*/
|
|
17
|
+
export declare function getFieldValue(item: unknown, path: string): unknown;
|
|
18
|
+
/**
|
|
19
|
+
* Get the output field name from a field mapping
|
|
20
|
+
*/
|
|
21
|
+
export declare function getOutputFieldName(mapping: FieldMapping): string;
|
|
22
|
+
/**
|
|
23
|
+
* Transform a value according to the specified transformation
|
|
24
|
+
*/
|
|
25
|
+
export declare function transformValue(value: unknown, transform: FieldMapping["transform"]): unknown;
|
|
26
|
+
/**
|
|
27
|
+
* Apply select stage to a single item
|
|
28
|
+
* Returns a new object with only the selected fields
|
|
29
|
+
*/
|
|
30
|
+
export declare function selectItem(item: unknown, config: SelectConfig): Record<string, unknown>;
|
|
31
|
+
/**
|
|
32
|
+
* Apply select stage to all items
|
|
33
|
+
* If no select config is provided, passes items through unchanged
|
|
34
|
+
*/
|
|
35
|
+
export declare function executeSelect(items: unknown[], config?: SelectConfig): Record<string, unknown>[];
|
|
36
|
+
/**
|
|
37
|
+
* Extract all available field paths from an item (for error suggestions)
|
|
38
|
+
* Limited to first 2 levels to avoid overwhelming output
|
|
39
|
+
*/
|
|
40
|
+
export declare function extractFieldPaths(item: unknown, prefix?: string, depth?: number, maxDepth?: number): string[];
|
|
41
|
+
/**
|
|
42
|
+
* Validate select config and return errors if any fields don't exist
|
|
43
|
+
*/
|
|
44
|
+
export declare function validateSelectConfig(items: unknown[], config: SelectConfig): {
|
|
45
|
+
valid: boolean;
|
|
46
|
+
errors: string[];
|
|
47
|
+
suggestions: Map<string, string[]>;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Get the field names that will be available after executing a select stage.
|
|
51
|
+
* If no select config, returns the original field names from the data.
|
|
52
|
+
*/
|
|
53
|
+
export declare function getPostSelectFieldNames(items: unknown[], config?: SelectConfig): string[];
|
|
54
|
+
//# sourceMappingURL=select.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../../src/utils/buffer-pipeline/stages/select.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE9D;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CA8BlE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAOhE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,YAAY,CAAC,WAAW,CAAC,GACnC,OAAO,CAmDT;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,YAAY,GACnB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAczB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,EAAE,EAChB,MAAM,CAAC,EAAE,YAAY,GACpB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAc3B;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,OAAO,EACb,MAAM,GAAE,MAAW,EACnB,KAAK,GAAE,MAAU,EACjB,QAAQ,GAAE,MAAU,GACnB,MAAM,EAAE,CAkCV;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,EAAE,EAChB,MAAM,EAAE,YAAY,GACnB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CAAE,CAiC1E;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,OAAO,EAAE,EAChB,MAAM,CAAC,EAAE,YAAY,GACpB,MAAM,EAAE,CAaV"}
|