@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,30 @@
1
+ /**
2
+ * Buffer Pipeline Executor
3
+ *
4
+ * Main entry point for executing data transformation pipelines.
5
+ * Orchestrates all stages: select → filter → groupBy → sort → limit → format → output
6
+ */
7
+ import type { PipelineContext, PipelineDefinition, PipelineError, PipelineResult } from "./types.js";
8
+ export type { PipelineDefinition, PipelineContext, PipelineResult, PipelineError, FormattedItem, OutputType, } from "./types.js";
9
+ export { BufferPipelineInputSchema, PipelineSchema } from "./schema.js";
10
+ /**
11
+ * Execute pipeline and return raw output string
12
+ * Used by the tool handler to get content for buffer storage
13
+ */
14
+ export declare function executePipelineWithOutput(data: unknown[], pipeline: PipelineDefinition, context: PipelineContext): {
15
+ result: PipelineResult;
16
+ output: string;
17
+ } | {
18
+ error: PipelineError;
19
+ };
20
+ /**
21
+ * Validate a pipeline definition without executing it
22
+ * Returns validation errors and available fields
23
+ */
24
+ export declare function validatePipeline(data: unknown[], pipeline: PipelineDefinition): {
25
+ valid: boolean;
26
+ errors: string[];
27
+ warnings: string[];
28
+ availableFields: string[];
29
+ };
30
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/buffer-pipeline/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAGV,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,cAAc,EACf,MAAM,YAAY,CAAC;AAiBpB,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,aAAa,EACb,aAAa,EACb,UAAU,GACX,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,yBAAyB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAoBxE;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,OAAO,EAAE,EACf,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,EAAE,eAAe,GACvB;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,aAAa,CAAA;CAAE,CAgPvE;AAoBD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,OAAO,EAAE,EACf,QAAQ,EAAE,kBAAkB,GAC3B;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,eAAe,EAAE,MAAM,EAAE,CAAA;CAAE,CAiErF"}
@@ -0,0 +1,317 @@
1
+ /**
2
+ * Buffer Pipeline Executor
3
+ *
4
+ * Main entry point for executing data transformation pipelines.
5
+ * Orchestrates all stages: select → filter → groupBy → sort → limit → format → output
6
+ */
7
+ // Stage imports
8
+ import { executeSelect, extractFieldPaths, validateSelectConfig } from "./stages/select.js";
9
+ import { executeFilter, validateFilterConditions } from "./stages/filter.js";
10
+ import { executeGroupBy, validateGroupByConfig } from "./stages/group-by.js";
11
+ import { executeSort, validateSortConfig } from "./stages/sort.js";
12
+ import { executeFormat } from "./stages/format.js";
13
+ // Output imports
14
+ import { generateXhtmlTable, generateTablePreview } from "./output/xhtml-table.js";
15
+ import { generateXhtmlList, generateListPreview } from "./output/xhtml-list.js";
16
+ import { generateJson, generateJsonPreview } from "./output/json.js";
17
+ import { generateCsv, generateCsvPreview, inferColumnsFromData } from "./output/csv.js";
18
+ import { generateMarkdown, generateMarkdownPreview } from "./output/markdown.js";
19
+ // Re-export schemas
20
+ export { BufferPipelineInputSchema, PipelineSchema } from "./schema.js";
21
+ /**
22
+ * Create a pipeline error with context
23
+ */
24
+ function createError(message, statusCode, stage, details) {
25
+ return {
26
+ error: true,
27
+ message,
28
+ statusCode,
29
+ stage,
30
+ details,
31
+ };
32
+ }
33
+ /**
34
+ * Execute pipeline and return raw output string
35
+ * Used by the tool handler to get content for buffer storage
36
+ */
37
+ export function executePipelineWithOutput(data, pipeline, context) {
38
+ const executedStages = [];
39
+ const inputCount = data.length;
40
+ // Track current data through stages
41
+ let items = [];
42
+ // Stage 1: Select (field extraction)
43
+ if (pipeline.select) {
44
+ const validation = validateSelectConfig(data, pipeline.select);
45
+ if (!validation.valid) {
46
+ const suggestions = [];
47
+ validation.suggestions.forEach((suggs, field) => {
48
+ suggestions.push(`${field} -> maybe: ${suggs.join(", ")}`);
49
+ });
50
+ return {
51
+ error: createError(`Select validation failed: ${validation.errors.join("; ")}`, 400, "select", {
52
+ availableFields: data.length > 0 ? extractFieldPaths(data[0]) : [],
53
+ suggestion: suggestions.length > 0 ? suggestions.join("; ") : undefined,
54
+ }),
55
+ };
56
+ }
57
+ items = executeSelect(data, pipeline.select);
58
+ executedStages.push("select");
59
+ }
60
+ else {
61
+ items = executeSelect(data);
62
+ executedStages.push("select (passthrough)");
63
+ }
64
+ // Stage 2: Filter
65
+ if (pipeline.filter && pipeline.filter.length > 0) {
66
+ const validation = validateFilterConditions(items, pipeline.filter);
67
+ if (!validation.valid) {
68
+ return {
69
+ error: createError(`Filter validation failed: ${validation.errors.join("; ")}`, 400, "filter", {
70
+ availableFields: items.length > 0 ? Object.keys(items[0]) : [],
71
+ }),
72
+ };
73
+ }
74
+ items = executeFilter(items, pipeline.filter);
75
+ executedStages.push("filter");
76
+ }
77
+ // Stage 3: Group By
78
+ if (pipeline.groupBy) {
79
+ const validation = validateGroupByConfig(items, pipeline.groupBy);
80
+ if (!validation.valid) {
81
+ return {
82
+ error: createError(`GroupBy validation failed: ${validation.errors.join("; ")}`, 400, "groupBy", {
83
+ availableFields: items.length > 0 ? Object.keys(items[0]) : [],
84
+ }),
85
+ };
86
+ }
87
+ items = executeGroupBy(items, pipeline.groupBy);
88
+ executedStages.push("groupBy");
89
+ }
90
+ // Stage 4: Sort
91
+ if (pipeline.sort && pipeline.sort.length > 0) {
92
+ items = executeSort(items, pipeline.sort);
93
+ executedStages.push("sort");
94
+ }
95
+ // Stage 5: Limit
96
+ const outputCount = items.length;
97
+ if (pipeline.limit && pipeline.limit > 0 && items.length > pipeline.limit) {
98
+ items = items.slice(0, pipeline.limit);
99
+ executedStages.push(`limit(${pipeline.limit})`);
100
+ }
101
+ // Stage 6: Format
102
+ let formattedItems;
103
+ if (pipeline.format && pipeline.format.length > 0) {
104
+ formattedItems = executeFormat(items, pipeline.format);
105
+ executedStages.push("format");
106
+ }
107
+ else {
108
+ formattedItems = executeFormat(items);
109
+ }
110
+ // Stage 7: Output
111
+ const outputType = pipeline.output.type;
112
+ let output;
113
+ let preview;
114
+ // Helper: validate table column fields exist in post-select data
115
+ const validateTableColumns = (columns) => {
116
+ if (items.length === 0)
117
+ return null; // No data to validate against
118
+ const availableFields = Object.keys(items[0]);
119
+ const missingFields = [];
120
+ const suggestions = [];
121
+ for (const col of columns) {
122
+ // Check if field exists (support dot notation for nested access)
123
+ const topLevelField = col.field.split(".")[0];
124
+ if (!availableFields.includes(topLevelField) && !availableFields.includes(col.field)) {
125
+ missingFields.push(col.field);
126
+ // Find similar fields for suggestion
127
+ const similar = availableFields.filter(f => f.toLowerCase().includes(topLevelField.toLowerCase()) ||
128
+ topLevelField.toLowerCase().includes(f.toLowerCase()));
129
+ if (similar.length > 0) {
130
+ suggestions.push(`"${col.field}" → maybe "${similar[0]}"`);
131
+ }
132
+ }
133
+ }
134
+ if (missingFields.length > 0) {
135
+ const hint = pipeline.select
136
+ ? "After select stage renames fields, use the NEW names (the 'as' values) in table columns."
137
+ : undefined;
138
+ return createError(`Table column fields not found: ${missingFields.join(", ")}`, 400, "output", {
139
+ missingFields,
140
+ availableFields,
141
+ suggestions: suggestions.length > 0 ? suggestions : undefined,
142
+ hint,
143
+ });
144
+ }
145
+ return null;
146
+ };
147
+ switch (outputType) {
148
+ case "xhtml_table": {
149
+ if (!pipeline.output.table) {
150
+ return {
151
+ error: createError("Table configuration required for xhtml_table output", 400, "output"),
152
+ };
153
+ }
154
+ // Validate column fields exist in data
155
+ const columnError = validateTableColumns(pipeline.output.table.columns);
156
+ if (columnError) {
157
+ return { error: columnError };
158
+ }
159
+ output = generateXhtmlTable(formattedItems, pipeline.output.table, context);
160
+ preview = generateTablePreview(formattedItems, pipeline.output.table, context);
161
+ executedStages.push("output(xhtml_table)");
162
+ break;
163
+ }
164
+ case "xhtml_list": {
165
+ if (!pipeline.output.list) {
166
+ return {
167
+ error: createError("List configuration required for xhtml_list output", 400, "output"),
168
+ };
169
+ }
170
+ output = generateXhtmlList(formattedItems, pipeline.output.list, context);
171
+ preview = generateListPreview(formattedItems, pipeline.output.list, context);
172
+ executedStages.push("output(xhtml_list)");
173
+ break;
174
+ }
175
+ case "json": {
176
+ output = generateJson(formattedItems, pipeline.output);
177
+ preview = generateJsonPreview(formattedItems, pipeline.output);
178
+ executedStages.push("output(json)");
179
+ break;
180
+ }
181
+ case "csv": {
182
+ const columns = pipeline.output.table?.columns ?? inferColumnsFromData(formattedItems);
183
+ if (columns.length === 0) {
184
+ return {
185
+ error: createError("No columns for CSV output", 400, "output"),
186
+ };
187
+ }
188
+ // Validate column fields if explicitly provided
189
+ if (pipeline.output.table?.columns) {
190
+ const columnError = validateTableColumns(columns);
191
+ if (columnError) {
192
+ return { error: columnError };
193
+ }
194
+ }
195
+ const csvConfig = { columns, ...pipeline.output.table };
196
+ output = generateCsv(formattedItems, csvConfig);
197
+ preview = generateCsvPreview(formattedItems, csvConfig);
198
+ executedStages.push("output(csv)");
199
+ break;
200
+ }
201
+ case "markdown": {
202
+ const mdColumns = pipeline.output.table?.columns ?? inferColumnsFromData(formattedItems);
203
+ if (mdColumns.length === 0) {
204
+ return {
205
+ error: createError("No columns for Markdown output", 400, "output"),
206
+ };
207
+ }
208
+ // Validate column fields if explicitly provided
209
+ if (pipeline.output.table?.columns) {
210
+ const columnError = validateTableColumns(mdColumns);
211
+ if (columnError) {
212
+ return { error: columnError };
213
+ }
214
+ }
215
+ const mdConfig = { columns: mdColumns, ...pipeline.output.table };
216
+ output = generateMarkdown(formattedItems, mdConfig);
217
+ preview = generateMarkdownPreview(formattedItems, mdConfig);
218
+ executedStages.push("output(markdown)");
219
+ break;
220
+ }
221
+ default:
222
+ return {
223
+ error: createError(`Unknown output type: ${outputType}`, 400, "output"),
224
+ };
225
+ }
226
+ return {
227
+ result: {
228
+ bufferId: "", // Set by caller
229
+ inputItems: inputCount,
230
+ outputItems: outputCount,
231
+ pipelineStages: executedStages,
232
+ outputType,
233
+ preview,
234
+ bufferSizeBytes: output.length,
235
+ hint: getHint(outputType),
236
+ },
237
+ output,
238
+ };
239
+ }
240
+ /**
241
+ * Get contextual hint based on output type
242
+ */
243
+ function getHint(outputType) {
244
+ switch (outputType) {
245
+ case "xhtml_table":
246
+ case "xhtml_list":
247
+ return "Use confluence_draft_create(bufferId) to publish to Confluence, or buffer_edit to modify";
248
+ case "json":
249
+ return "Use buffer_pipeline again with this buffer as source, or buffer_get_chunk to view";
250
+ case "csv":
251
+ case "markdown":
252
+ return "Use buffer_get_chunk to view content";
253
+ default:
254
+ return "";
255
+ }
256
+ }
257
+ /**
258
+ * Validate a pipeline definition without executing it
259
+ * Returns validation errors and available fields
260
+ */
261
+ export function validatePipeline(data, pipeline) {
262
+ const errors = [];
263
+ const warnings = [];
264
+ const availableFields = data.length > 0 ? extractFieldPaths(data[0]) : [];
265
+ // Validate select
266
+ if (pipeline.select) {
267
+ const validation = validateSelectConfig(data, pipeline.select);
268
+ if (!validation.valid) {
269
+ errors.push(...validation.errors);
270
+ }
271
+ // Warn about field renames if subsequent stages exist
272
+ if (pipeline.groupBy || pipeline.sort || pipeline.filter) {
273
+ const renamedFields = pipeline.select.fields
274
+ .filter((f) => {
275
+ const originalName = f.from.split(".").pop() || "";
276
+ return f.as && f.as !== originalName;
277
+ })
278
+ .map((f) => `"${f.from}" → "${f.as}"`);
279
+ if (renamedFields.length > 0) {
280
+ warnings.push(`Fields renamed by select: ${renamedFields.join(", ")}. Use NEW names (after "→") in subsequent stages (groupBy, sort, filter).`);
281
+ }
282
+ }
283
+ }
284
+ // Validate filter
285
+ if (pipeline.filter && pipeline.filter.length > 0) {
286
+ const validation = validateFilterConditions(data, pipeline.filter);
287
+ if (!validation.valid) {
288
+ errors.push(...validation.errors);
289
+ }
290
+ }
291
+ // Validate groupBy
292
+ if (pipeline.groupBy) {
293
+ const validation = validateGroupByConfig(data, pipeline.groupBy);
294
+ if (!validation.valid) {
295
+ errors.push(...validation.errors);
296
+ }
297
+ }
298
+ // Validate sort
299
+ if (pipeline.sort && pipeline.sort.length > 0) {
300
+ const validation = validateSortConfig(data, pipeline.sort);
301
+ warnings.push(...validation.warnings);
302
+ }
303
+ // Validate output
304
+ if (pipeline.output.type === "xhtml_table" && !pipeline.output.table) {
305
+ errors.push("Table configuration required for xhtml_table output");
306
+ }
307
+ if (pipeline.output.type === "xhtml_list" && !pipeline.output.list) {
308
+ errors.push("List configuration required for xhtml_list output");
309
+ }
310
+ return {
311
+ valid: errors.length === 0,
312
+ errors,
313
+ warnings,
314
+ availableFields,
315
+ };
316
+ }
317
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/buffer-pipeline/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * CSV Output Generator
3
+ *
4
+ * Outputs pipeline results as CSV with proper escaping.
5
+ */
6
+ import type { FormattedItem, TableColumn, TableOutputConfig } from "../types.js";
7
+ /**
8
+ * Generate CSV output
9
+ * Requires table configuration for column definitions
10
+ */
11
+ export declare function generateCsv(items: FormattedItem[], config: TableOutputConfig): string;
12
+ /**
13
+ * Generate a preview of the CSV output
14
+ */
15
+ export declare function generateCsvPreview(items: FormattedItem[], config: TableOutputConfig, maxRows?: number): string;
16
+ /**
17
+ * Infer column definitions from data if not provided
18
+ */
19
+ export declare function inferColumnsFromData(items: FormattedItem[]): TableColumn[];
20
+ //# sourceMappingURL=csv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csv.d.ts","sourceRoot":"","sources":["../../../../src/utils/buffer-pipeline/output/csv.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAuDjF;;;GAGG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,aAAa,EAAE,EACtB,MAAM,EAAE,iBAAiB,GACxB,MAAM,CAYR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,EAAE,EACtB,MAAM,EAAE,iBAAiB,EACzB,OAAO,GAAE,MAAU,GAClB,MAAM,CAiBR;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,EAAE,GACrB,WAAW,EAAE,CAmBf"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * CSV Output Generator
3
+ *
4
+ * Outputs pipeline results as CSV with proper escaping.
5
+ */
6
+ import { getFieldValue } from "../stages/select.js";
7
+ /**
8
+ * Escape a value for CSV
9
+ * Handles quotes, commas, and newlines
10
+ */
11
+ function escapeCsvValue(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
+ // Check if escaping is needed
26
+ const needsQuotes = strValue.includes(",") ||
27
+ strValue.includes('"') ||
28
+ strValue.includes("\n") ||
29
+ strValue.includes("\r");
30
+ if (needsQuotes) {
31
+ // Escape quotes by doubling them
32
+ return `"${strValue.replace(/"/g, '""')}"`;
33
+ }
34
+ return strValue;
35
+ }
36
+ /**
37
+ * Generate CSV header row
38
+ */
39
+ function generateHeader(columns) {
40
+ return columns.map((col) => escapeCsvValue(col.header)).join(",");
41
+ }
42
+ /**
43
+ * Generate CSV data row
44
+ */
45
+ function generateRow(item, columns) {
46
+ return columns
47
+ .map((col) => {
48
+ const value = getFieldValue(item.data, col.field);
49
+ return escapeCsvValue(value);
50
+ })
51
+ .join(",");
52
+ }
53
+ /**
54
+ * Generate CSV output
55
+ * Requires table configuration for column definitions
56
+ */
57
+ export function generateCsv(items, config) {
58
+ const lines = [];
59
+ // Header row
60
+ lines.push(generateHeader(config.columns));
61
+ // Data rows
62
+ for (const item of items) {
63
+ lines.push(generateRow(item, config.columns));
64
+ }
65
+ return lines.join("\n");
66
+ }
67
+ /**
68
+ * Generate a preview of the CSV output
69
+ */
70
+ export function generateCsvPreview(items, config, maxRows = 3) {
71
+ const previewItems = items.slice(0, maxRows);
72
+ const lines = [];
73
+ // Header row
74
+ lines.push(generateHeader(config.columns));
75
+ // Data rows
76
+ for (const item of previewItems) {
77
+ lines.push(generateRow(item, config.columns));
78
+ }
79
+ if (items.length > maxRows) {
80
+ lines.push(`... ${items.length - maxRows} more rows`);
81
+ }
82
+ return lines.join("\n");
83
+ }
84
+ /**
85
+ * Infer column definitions from data if not provided
86
+ */
87
+ export function inferColumnsFromData(items) {
88
+ if (items.length === 0) {
89
+ return [];
90
+ }
91
+ const firstItem = items[0].data;
92
+ const columns = [];
93
+ for (const key of Object.keys(firstItem)) {
94
+ // Skip internal fields
95
+ if (key.startsWith("__"))
96
+ continue;
97
+ columns.push({
98
+ field: key,
99
+ header: formatColumnHeader(key),
100
+ });
101
+ }
102
+ return columns;
103
+ }
104
+ /**
105
+ * Format a field name as a column header
106
+ * Converts camelCase/snake_case to Title Case
107
+ */
108
+ function formatColumnHeader(fieldName) {
109
+ return fieldName
110
+ .replace(/([a-z])([A-Z])/g, "$1 $2") // camelCase -> camel Case
111
+ .replace(/_/g, " ") // snake_case -> snake case
112
+ .replace(/\./g, " ") // dot.notation -> dot notation
113
+ .split(" ")
114
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
115
+ .join(" ");
116
+ }
117
+ //# sourceMappingURL=csv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csv.js","sourceRoot":"","sources":["../../../../src/utils/buffer-pipeline/output/csv.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * JSON Output Generator
3
+ *
4
+ * Outputs pipeline results as clean JSON.
5
+ * Strips internal fields and optionally includes metadata.
6
+ */
7
+ import type { FormattedItem, OutputConfig } from "../types.js";
8
+ /**
9
+ * Generate JSON output
10
+ */
11
+ export declare function generateJson(items: FormattedItem[], config: OutputConfig): string;
12
+ /**
13
+ * Generate a preview of the JSON output
14
+ */
15
+ export declare function generateJsonPreview(items: FormattedItem[], _config: OutputConfig, maxItems?: number): string;
16
+ //# sourceMappingURL=json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../../../src/utils/buffer-pipeline/output/json.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAkB/D;;GAEG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,aAAa,EAAE,EACtB,MAAM,EAAE,YAAY,GACnB,MAAM,CAkBR;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,aAAa,EAAE,EACtB,OAAO,EAAE,YAAY,EACrB,QAAQ,GAAE,MAAU,GACnB,MAAM,CAWR"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * JSON Output Generator
3
+ *
4
+ * Outputs pipeline results as clean JSON.
5
+ * Strips internal fields and optionally includes metadata.
6
+ */
7
+ /**
8
+ * Clean an item by removing internal fields
9
+ */
10
+ function cleanItem(item) {
11
+ const cleaned = {};
12
+ for (const [key, value] of Object.entries(item)) {
13
+ // Skip internal fields
14
+ if (key.startsWith("__"))
15
+ continue;
16
+ cleaned[key] = value;
17
+ }
18
+ return cleaned;
19
+ }
20
+ /**
21
+ * Generate JSON output
22
+ */
23
+ export function generateJson(items, config) {
24
+ const cleanedItems = items.map((item) => cleanItem(item.data));
25
+ if (config.includeMetadata) {
26
+ return JSON.stringify({
27
+ metadata: {
28
+ itemCount: cleanedItems.length,
29
+ generatedAt: new Date().toISOString(),
30
+ },
31
+ items: cleanedItems,
32
+ }, null, 2);
33
+ }
34
+ return JSON.stringify(cleanedItems, null, 2);
35
+ }
36
+ /**
37
+ * Generate a preview of the JSON output
38
+ */
39
+ export function generateJsonPreview(items, _config, maxItems = 3) {
40
+ const previewItems = items.slice(0, maxItems);
41
+ const cleanedItems = previewItems.map((item) => cleanItem(item.data));
42
+ const preview = JSON.stringify(cleanedItems, null, 2);
43
+ if (items.length > maxItems) {
44
+ return `${preview}\n// ... ${items.length - maxItems} more items`;
45
+ }
46
+ return preview;
47
+ }
48
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../../../src/utils/buffer-pipeline/output/json.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;GAEG;AACH,SAAS,SAAS,CAAC,IAA6B;IAC9C,MAAM,OAAO,GAA4B,EAAE,CAAC;IAE5C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,uBAAuB;QACvB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QAEnC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAsB,EACtB,MAAoB;IAEpB,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAE/D,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,SAAS,CACnB;YACE,QAAQ,EAAE;gBACR,SAAS,EAAE,YAAY,CAAC,MAAM;gBAC9B,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACtC;YACD,KAAK,EAAE,YAAY;SACpB,EACD,IAAI,EACJ,CAAC,CACF,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAsB,EACtB,OAAqB,EACrB,WAAmB,CAAC;IAEpB,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC9C,MAAM,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAEtE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAEtD,IAAI,KAAK,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;QAC5B,OAAO,GAAG,OAAO,YAAY,KAAK,CAAC,MAAM,GAAG,QAAQ,aAAa,CAAC;IACpE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Markdown Output Generator
3
+ *
4
+ * Outputs pipeline results as Markdown tables.
5
+ */
6
+ import type { FormattedItem, TableOutputConfig } from "../types.js";
7
+ /**
8
+ * Generate Markdown table output
9
+ */
10
+ export declare function generateMarkdown(items: FormattedItem[], config: TableOutputConfig): string;
11
+ /**
12
+ * Generate a preview of the Markdown output
13
+ */
14
+ export declare function generateMarkdownPreview(items: FormattedItem[], config: TableOutputConfig, maxRows?: number): string;
15
+ //# sourceMappingURL=markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../../../src/utils/buffer-pipeline/output/markdown.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAe,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAkEjF;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,aAAa,EAAE,EACtB,MAAM,EAAE,iBAAiB,GACxB,MAAM,CAkBR;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,aAAa,EAAE,EACtB,MAAM,EAAE,iBAAiB,EACzB,OAAO,GAAE,MAAU,GAClB,MAAM,CAwBR"}