@path58/n8n-mcp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (319) hide show
  1. package/AGENT_INSTALL.md +223 -0
  2. package/CHANGELOG.md +38 -0
  3. package/LICENSE +21 -0
  4. package/README.md +187 -0
  5. package/dist/autofix/suggestion-fixers/deprecated-node-fixer.js +465 -0
  6. package/dist/autofix/suggestion-fixers/deprecated-node-fixer.js.map +1 -0
  7. package/dist/autofix/suggestion-fixers/fixer-registry.js +495 -0
  8. package/dist/autofix/suggestion-fixers/fixer-registry.js.map +1 -0
  9. package/dist/autofix/suggestion-fixers/l1-structure-fixer.js +639 -0
  10. package/dist/autofix/suggestion-fixers/l1-structure-fixer.js.map +1 -0
  11. package/dist/autofix/suggestion-fixers/l4-connection-fixer.js +449 -0
  12. package/dist/autofix/suggestion-fixers/l4-connection-fixer.js.map +1 -0
  13. package/dist/autofix/suggestion-fixers/l5-parameter-fixer.js +575 -0
  14. package/dist/autofix/suggestion-fixers/l5-parameter-fixer.js.map +1 -0
  15. package/dist/autofix/suggestion-fixers/l5-typeversion-fixer.js +431 -0
  16. package/dist/autofix/suggestion-fixers/l5-typeversion-fixer.js.map +1 -0
  17. package/dist/autofix/suggestion-fixers/l5-webhook-path-fixer.js +356 -0
  18. package/dist/autofix/suggestion-fixers/l5-webhook-path-fixer.js.map +1 -0
  19. package/dist/autofix/suggestion-fixers/l6-ai-tool-variant-fixer.js +618 -0
  20. package/dist/autofix/suggestion-fixers/l6-ai-tool-variant-fixer.js.map +1 -0
  21. package/dist/autofix/suggestion-fixers/l6-pattern-fixer.js +1475 -0
  22. package/dist/autofix/suggestion-fixers/l6-pattern-fixer.js.map +1 -0
  23. package/dist/autofix/suggestion-fixers/llm-fixer.js +716 -0
  24. package/dist/autofix/suggestion-fixers/llm-fixer.js.map +1 -0
  25. package/dist/autofix/suggestion-fixers/missing-credential-fixer.js +336 -0
  26. package/dist/autofix/suggestion-fixers/missing-credential-fixer.js.map +1 -0
  27. package/dist/autofix/suggestion-fixers/types.js +29 -0
  28. package/dist/autofix/suggestion-fixers/types.js.map +1 -0
  29. package/dist/autofix/suggestion-fixers/typo-fixer.js +197 -0
  30. package/dist/autofix/suggestion-fixers/typo-fixer.js.map +1 -0
  31. package/dist/classification/certification-engine.js +208 -0
  32. package/dist/classification/certification-engine.js.map +1 -0
  33. package/dist/classification/feedback-collector.js +516 -0
  34. package/dist/classification/feedback-collector.js.map +1 -0
  35. package/dist/classification/l5-parameter-analyzer.js +670 -0
  36. package/dist/classification/l5-parameter-analyzer.js.map +1 -0
  37. package/dist/classification/l6-graph-analyzer.js +613 -0
  38. package/dist/classification/l6-graph-analyzer.js.map +1 -0
  39. package/dist/classification/severity-classifier.js +237 -0
  40. package/dist/classification/severity-classifier.js.map +1 -0
  41. package/dist/config/env.js +280 -0
  42. package/dist/config/env.js.map +1 -0
  43. package/dist/config/env.schema.js +234 -0
  44. package/dist/config/env.schema.js.map +1 -0
  45. package/dist/config/scraperEnv.js +55 -0
  46. package/dist/config/scraperEnv.js.map +1 -0
  47. package/dist/db/postgresClient.js +38 -0
  48. package/dist/db/postgresClient.js.map +1 -0
  49. package/dist/db/scraperDb.js +6 -0
  50. package/dist/db/scraperDb.js.map +1 -0
  51. package/dist/db/scraperPostgresClient.js +118 -0
  52. package/dist/db/scraperPostgresClient.js.map +1 -0
  53. package/dist/db/validationRepository.js +55 -0
  54. package/dist/db/validationRepository.js.map +1 -0
  55. package/dist/db/validatorPostgresClient.js +248 -0
  56. package/dist/db/validatorPostgresClient.js.map +1 -0
  57. package/dist/db/workflowInstanceMappingRepository.js +128 -0
  58. package/dist/db/workflowInstanceMappingRepository.js.map +1 -0
  59. package/dist/errors/AppError.js +156 -0
  60. package/dist/errors/AppError.js.map +1 -0
  61. package/dist/errors/index.js +7 -0
  62. package/dist/errors/index.js.map +1 -0
  63. package/dist/factory/error-to-problem-mappers.js +385 -0
  64. package/dist/factory/error-to-problem-mappers.js.map +1 -0
  65. package/dist/factory/gap-recorder.js +260 -0
  66. package/dist/factory/gap-recorder.js.map +1 -0
  67. package/dist/factory/problem-recorder.js +94 -0
  68. package/dist/factory/problem-recorder.js.map +1 -0
  69. package/dist/factory/warning-to-gap-mappers.js +493 -0
  70. package/dist/factory/warning-to-gap-mappers.js.map +1 -0
  71. package/dist/factory/workflow-normalizer.js +247 -0
  72. package/dist/factory/workflow-normalizer.js.map +1 -0
  73. package/dist/mcp/adapters/catalog.js +13 -0
  74. package/dist/mcp/adapters/catalog.js.map +1 -0
  75. package/dist/mcp/adapters/index.js +36 -0
  76. package/dist/mcp/adapters/index.js.map +1 -0
  77. package/dist/mcp/adapters/supabase-catalog.js +467 -0
  78. package/dist/mcp/adapters/supabase-catalog.js.map +1 -0
  79. package/dist/mcp/adapters/test-catalog-adapter.js +100 -0
  80. package/dist/mcp/adapters/test-catalog-adapter.js.map +1 -0
  81. package/dist/mcp/adapters/validation.js +258 -0
  82. package/dist/mcp/adapters/validation.js.map +1 -0
  83. package/dist/mcp/build-email-workflow.js +113 -0
  84. package/dist/mcp/build-email-workflow.js.map +1 -0
  85. package/dist/mcp/config.js +22 -0
  86. package/dist/mcp/config.js.map +1 -0
  87. package/dist/mcp/formatters/errors.js +217 -0
  88. package/dist/mcp/formatters/errors.js.map +1 -0
  89. package/dist/mcp/formatters/index.js +12 -0
  90. package/dist/mcp/formatters/index.js.map +1 -0
  91. package/dist/mcp/formatters/response.js +141 -0
  92. package/dist/mcp/formatters/response.js.map +1 -0
  93. package/dist/mcp/quick-test.js +33 -0
  94. package/dist/mcp/quick-test.js.map +1 -0
  95. package/dist/mcp/server.js +70 -0
  96. package/dist/mcp/server.js.map +1 -0
  97. package/dist/mcp/test-mcp-error.js +81 -0
  98. package/dist/mcp/test-mcp-error.js.map +1 -0
  99. package/dist/mcp/test-mcp.js +80 -0
  100. package/dist/mcp/test-mcp.js.map +1 -0
  101. package/dist/mcp/tools/fixes/expression-fixes.js +166 -0
  102. package/dist/mcp/tools/fixes/expression-fixes.js.map +1 -0
  103. package/dist/mcp/tools/fixes/flow-fixes.js +155 -0
  104. package/dist/mcp/tools/fixes/flow-fixes.js.map +1 -0
  105. package/dist/mcp/tools/fixes/index.js +91 -0
  106. package/dist/mcp/tools/fixes/index.js.map +1 -0
  107. package/dist/mcp/tools/fixes/node-fixes.js +233 -0
  108. package/dist/mcp/tools/fixes/node-fixes.js.map +1 -0
  109. package/dist/mcp/tools/fixes/parameter-fixes.js +277 -0
  110. package/dist/mcp/tools/fixes/parameter-fixes.js.map +1 -0
  111. package/dist/mcp/tools/fixes/types.js +10 -0
  112. package/dist/mcp/tools/fixes/types.js.map +1 -0
  113. package/dist/mcp/tools/handlers/check-parameter.js +300 -0
  114. package/dist/mcp/tools/handlers/check-parameter.js.map +1 -0
  115. package/dist/mcp/tools/handlers/find-similar-pattern.js +121 -0
  116. package/dist/mcp/tools/handlers/find-similar-pattern.js.map +1 -0
  117. package/dist/mcp/tools/handlers/get-node-info.js +131 -0
  118. package/dist/mcp/tools/handlers/get-node-info.js.map +1 -0
  119. package/dist/mcp/tools/handlers/get-operation-schema.js +141 -0
  120. package/dist/mcp/tools/handlers/get-operation-schema.js.map +1 -0
  121. package/dist/mcp/tools/handlers/list-nodes.js +126 -0
  122. package/dist/mcp/tools/handlers/list-nodes.js.map +1 -0
  123. package/dist/mcp/tools/handlers/list-operations.js +138 -0
  124. package/dist/mcp/tools/handlers/list-operations.js.map +1 -0
  125. package/dist/mcp/tools/handlers/suggest-fix.js +120 -0
  126. package/dist/mcp/tools/handlers/suggest-fix.js.map +1 -0
  127. package/dist/mcp/tools/handlers/validate-workflow.js +92 -0
  128. package/dist/mcp/tools/handlers/validate-workflow.js.map +1 -0
  129. package/dist/mcp/tools/index.js +190 -0
  130. package/dist/mcp/tools/index.js.map +1 -0
  131. package/dist/mcp/tools/schemas.js +195 -0
  132. package/dist/mcp/tools/schemas.js.map +1 -0
  133. package/dist/mcp/tools/validate.js +95 -0
  134. package/dist/mcp/tools/validate.js.map +1 -0
  135. package/dist/mcp/types/mcp.js +7 -0
  136. package/dist/mcp/types/mcp.js.map +1 -0
  137. package/dist/mcp/utils/timeout.js +78 -0
  138. package/dist/mcp/utils/timeout.js.map +1 -0
  139. package/dist/services/BatchProcessor.js +433 -0
  140. package/dist/services/BatchProcessor.js.map +1 -0
  141. package/dist/services/CheckpointManager.js +281 -0
  142. package/dist/services/CheckpointManager.js.map +1 -0
  143. package/dist/services/CostCalculator.js +211 -0
  144. package/dist/services/CostCalculator.js.map +1 -0
  145. package/dist/services/EmbeddingCache.js +68 -0
  146. package/dist/services/EmbeddingCache.js.map +1 -0
  147. package/dist/services/EmbeddingService.js +143 -0
  148. package/dist/services/EmbeddingService.js.map +1 -0
  149. package/dist/services/RankingService.js +81 -0
  150. package/dist/services/RankingService.js.map +1 -0
  151. package/dist/services/RedisCache.js +376 -0
  152. package/dist/services/RedisCache.js.map +1 -0
  153. package/dist/services/RedisCatalogCache.js +680 -0
  154. package/dist/services/RedisCatalogCache.js.map +1 -0
  155. package/dist/services/ResumeManager.js +252 -0
  156. package/dist/services/ResumeManager.js.map +1 -0
  157. package/dist/services/SearchService.js +282 -0
  158. package/dist/services/SearchService.js.map +1 -0
  159. package/dist/services/SemanticCatalogSearch.js +405 -0
  160. package/dist/services/SemanticCatalogSearch.js.map +1 -0
  161. package/dist/services/ValidationCache.js +157 -0
  162. package/dist/services/ValidationCache.js.map +1 -0
  163. package/dist/services/WorkflowPipelineService.js +1997 -0
  164. package/dist/services/WorkflowPipelineService.js.map +1 -0
  165. package/dist/services/catalog/index.js +34 -0
  166. package/dist/services/catalog/index.js.map +1 -0
  167. package/dist/services/catalog/interfaces.js +17 -0
  168. package/dist/services/catalog/interfaces.js.map +1 -0
  169. package/dist/services/catalog/loaders.js +169 -0
  170. package/dist/services/catalog/loaders.js.map +1 -0
  171. package/dist/services/catalog/types.js +138 -0
  172. package/dist/services/catalog/types.js.map +1 -0
  173. package/dist/services/documentation-normalization/docUrlUtils.js +88 -0
  174. package/dist/services/documentation-normalization/docUrlUtils.js.map +1 -0
  175. package/dist/services/error-quality/ErrorQualityService.js +262 -0
  176. package/dist/services/error-quality/ErrorQualityService.js.map +1 -0
  177. package/dist/services/error-quality/analyzers/CredentialAnalyzer.js +260 -0
  178. package/dist/services/error-quality/analyzers/CredentialAnalyzer.js.map +1 -0
  179. package/dist/services/error-quality/analyzers/IssuePredictor.js +380 -0
  180. package/dist/services/error-quality/analyzers/IssuePredictor.js.map +1 -0
  181. package/dist/services/error-quality/analyzers/MockCoverageAnalyzer.js +267 -0
  182. package/dist/services/error-quality/analyzers/MockCoverageAnalyzer.js.map +1 -0
  183. package/dist/services/error-quality/data/ErrorPatternSeeder.js +963 -0
  184. package/dist/services/error-quality/data/ErrorPatternSeeder.js.map +1 -0
  185. package/dist/services/error-quality/index.js +25 -0
  186. package/dist/services/error-quality/index.js.map +1 -0
  187. package/dist/services/error-quality/reports/ReportGenerator.js +343 -0
  188. package/dist/services/error-quality/reports/ReportGenerator.js.map +1 -0
  189. package/dist/services/error-quality/taxonomy/ErrorTaxonomy.js +698 -0
  190. package/dist/services/error-quality/taxonomy/ErrorTaxonomy.js.map +1 -0
  191. package/dist/services/error-quality/types.js +11 -0
  192. package/dist/services/error-quality/types.js.map +1 -0
  193. package/dist/services/progress/ProgressTracker.js +288 -0
  194. package/dist/services/progress/ProgressTracker.js.map +1 -0
  195. package/dist/services/progress/formatters.js +122 -0
  196. package/dist/services/progress/formatters.js.map +1 -0
  197. package/dist/services/progress/index.js +36 -0
  198. package/dist/services/progress/index.js.map +1 -0
  199. package/dist/services/progress/types.js +7 -0
  200. package/dist/services/progress/types.js.map +1 -0
  201. package/dist/services/search/embeddingGenerator.js +112 -0
  202. package/dist/services/search/embeddingGenerator.js.map +1 -0
  203. package/dist/types/aiCapabilities.js +7 -0
  204. package/dist/types/aiCapabilities.js.map +1 -0
  205. package/dist/types/aiConfigSchema.js +7 -0
  206. package/dist/types/aiConfigSchema.js.map +1 -0
  207. package/dist/utils/bannerLogger.js +186 -0
  208. package/dist/utils/bannerLogger.js.map +1 -0
  209. package/dist/utils/bannerService.js +23 -0
  210. package/dist/utils/bannerService.js.map +1 -0
  211. package/dist/utils/bannerServiceAdapter.js +54 -0
  212. package/dist/utils/bannerServiceAdapter.js.map +1 -0
  213. package/dist/utils/batchLogger.js +171 -0
  214. package/dist/utils/batchLogger.js.map +1 -0
  215. package/dist/utils/bottomStickyBanner.js +239 -0
  216. package/dist/utils/bottomStickyBanner.js.map +1 -0
  217. package/dist/utils/credentialMatcher.js +206 -0
  218. package/dist/utils/credentialMatcher.js.map +1 -0
  219. package/dist/utils/credentialNormalizer.js +442 -0
  220. package/dist/utils/credentialNormalizer.js.map +1 -0
  221. package/dist/utils/integratedBannerLogger.js +59 -0
  222. package/dist/utils/integratedBannerLogger.js.map +1 -0
  223. package/dist/utils/n8nSourceGit.js +195 -0
  224. package/dist/utils/n8nSourceGit.js.map +1 -0
  225. package/dist/utils/nodeTypeNormalizer.js +131 -0
  226. package/dist/utils/nodeTypeNormalizer.js.map +1 -0
  227. package/dist/utils/openaiClient.js +397 -0
  228. package/dist/utils/openaiClient.js.map +1 -0
  229. package/dist/utils/productionLogger.js +16 -0
  230. package/dist/utils/productionLogger.js.map +1 -0
  231. package/dist/utils/progressBarBanner.js +132 -0
  232. package/dist/utils/progressBarBanner.js.map +1 -0
  233. package/dist/utils/scriptHeartbeat.js +117 -0
  234. package/dist/utils/scriptHeartbeat.js.map +1 -0
  235. package/dist/utils/scriptLogger.js +125 -0
  236. package/dist/utils/scriptLogger.js.map +1 -0
  237. package/dist/utils/scriptRunner.js +95 -0
  238. package/dist/utils/scriptRunner.js.map +1 -0
  239. package/dist/utils/scriptTimeout.js +128 -0
  240. package/dist/utils/scriptTimeout.js.map +1 -0
  241. package/dist/utils/scriptWrapper.js +219 -0
  242. package/dist/utils/scriptWrapper.js.map +1 -0
  243. package/dist/utils/stickyBanner.js +226 -0
  244. package/dist/utils/stickyBanner.js.map +1 -0
  245. package/dist/utils/terminalSpinner.js +97 -0
  246. package/dist/utils/terminalSpinner.js.map +1 -0
  247. package/dist/utils/threeLineBanner.js +427 -0
  248. package/dist/utils/threeLineBanner.js.map +1 -0
  249. package/dist/utils/validatorCheckpointManager.js +170 -0
  250. package/dist/utils/validatorCheckpointManager.js.map +1 -0
  251. package/dist/utils/validatorConnectionManager.js +124 -0
  252. package/dist/utils/validatorConnectionManager.js.map +1 -0
  253. package/dist/validation/catalog.js +56 -0
  254. package/dist/validation/catalog.js.map +1 -0
  255. package/dist/validation/config/deprecated-nodes.js +234 -0
  256. package/dist/validation/config/deprecated-nodes.js.map +1 -0
  257. package/dist/validation/config/l6-severity.js +227 -0
  258. package/dist/validation/config/l6-severity.js.map +1 -0
  259. package/dist/validation/config/terminal-nodes.js +132 -0
  260. package/dist/validation/config/terminal-nodes.js.map +1 -0
  261. package/dist/validation/config/unreachable-nodes.js +67 -0
  262. package/dist/validation/config/unreachable-nodes.js.map +1 -0
  263. package/dist/validation/core.js +47 -0
  264. package/dist/validation/core.js.map +1 -0
  265. package/dist/validation/docExtraction.js +12 -0
  266. package/dist/validation/docExtraction.js.map +1 -0
  267. package/dist/validation/dryRunMockRunner.js +128 -0
  268. package/dist/validation/dryRunMockRunner.js.map +1 -0
  269. package/dist/validation/fixtureEngine.js +61 -0
  270. package/dist/validation/fixtureEngine.js.map +1 -0
  271. package/dist/validation/index.js +15 -0
  272. package/dist/validation/index.js.map +1 -0
  273. package/dist/validation/k-levels/k2-blockers.js +222 -0
  274. package/dist/validation/k-levels/k2-blockers.js.map +1 -0
  275. package/dist/validation/l1-structure.js +296 -0
  276. package/dist/validation/l1-structure.js.map +1 -0
  277. package/dist/validation/l2-nodes.js +282 -0
  278. package/dist/validation/l2-nodes.js.map +1 -0
  279. package/dist/validation/l3-credentials.js +322 -0
  280. package/dist/validation/l3-credentials.js.map +1 -0
  281. package/dist/validation/l4-connections.js +698 -0
  282. package/dist/validation/l4-connections.js.map +1 -0
  283. package/dist/validation/l5-parameters.js +803 -0
  284. package/dist/validation/l5-parameters.js.map +1 -0
  285. package/dist/validation/l6-checks/ai-tool-variants.js +407 -0
  286. package/dist/validation/l6-checks/ai-tool-variants.js.map +1 -0
  287. package/dist/validation/l6-checks/catalog-checks.js +260 -0
  288. package/dist/validation/l6-checks/catalog-checks.js.map +1 -0
  289. package/dist/validation/l6-checks/data-contracts.js +197 -0
  290. package/dist/validation/l6-checks/data-contracts.js.map +1 -0
  291. package/dist/validation/l6-checks/deprecation.js +133 -0
  292. package/dist/validation/l6-checks/deprecation.js.map +1 -0
  293. package/dist/validation/l6-checks/error-handling.js +193 -0
  294. package/dist/validation/l6-checks/error-handling.js.map +1 -0
  295. package/dist/validation/l6-checks/expression-syntax.js +387 -0
  296. package/dist/validation/l6-checks/expression-syntax.js.map +1 -0
  297. package/dist/validation/l6-checks/flow-integrity.js +504 -0
  298. package/dist/validation/l6-checks/flow-integrity.js.map +1 -0
  299. package/dist/validation/l6-checks/index.js +106 -0
  300. package/dist/validation/l6-checks/index.js.map +1 -0
  301. package/dist/validation/l6-checks/loops.js +370 -0
  302. package/dist/validation/l6-checks/loops.js.map +1 -0
  303. package/dist/validation/l6-checks/performance.js +182 -0
  304. package/dist/validation/l6-checks/performance.js.map +1 -0
  305. package/dist/validation/l6-checks/security.js +273 -0
  306. package/dist/validation/l6-checks/security.js.map +1 -0
  307. package/dist/validation/l6-patterns.js +472 -0
  308. package/dist/validation/l6-patterns.js.map +1 -0
  309. package/dist/validation/mockLevelResolver.js +95 -0
  310. package/dist/validation/mockLevelResolver.js.map +1 -0
  311. package/dist/validation/n8nApiClient.js +21 -0
  312. package/dist/validation/n8nApiClient.js.map +1 -0
  313. package/dist/validation/n8nCli.js +87 -0
  314. package/dist/validation/n8nCli.js.map +1 -0
  315. package/dist/validation/types.js +8 -0
  316. package/dist/validation/types.js.map +1 -0
  317. package/dist/validation/usageStats.js +82 -0
  318. package/dist/validation/usageStats.js.map +1 -0
  319. package/package.json +274 -0
@@ -0,0 +1,7 @@
1
+ /**
2
+ * AI Config Schema Type Definitions
3
+ *
4
+ * Types for AI node configuration schema extraction (RAG-1.2.4.3)
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=aiConfigSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aiConfigSchema.js","sourceRoot":"","sources":["../../src/types/aiConfigSchema.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,186 @@
1
+ /**
2
+ * Banner Logger
3
+ *
4
+ * Intercepts console.log/warn/error and routes them to the banner's log area
5
+ * while keeping the banner fixed at the bottom.
6
+ */
7
+ import { getBottomBanner, COLORS } from './bottomStickyBanner.js';
8
+ class BannerLogger {
9
+ originalConsoleLog = null;
10
+ originalConsoleWarn = null;
11
+ originalConsoleError = null;
12
+ originalConsoleInfo = null;
13
+ isIntercepted = false;
14
+ banner = getBottomBanner();
15
+ /**
16
+ * Start intercepting console output
17
+ */
18
+ intercept() {
19
+ if (this.isIntercepted)
20
+ return;
21
+ // Store originals
22
+ this.originalConsoleLog = console.log;
23
+ this.originalConsoleWarn = console.warn;
24
+ this.originalConsoleError = console.error;
25
+ this.originalConsoleInfo = console.info;
26
+ // Override console methods
27
+ // Write logs within the scroll region (above the banner)
28
+ // The banner sets scroll region to rows 1..(H-5), so logs should scroll there
29
+ const writeLogAboveBanner = (message) => {
30
+ // Get terminal height to calculate scroll region
31
+ const terminalHeight = process.stdout.rows || 24;
32
+ const scrollBottom = Math.max(1, terminalHeight - 5); // Banner is last 5 lines (divider + 4 lines)
33
+ // Ensure we're writing within the scroll region
34
+ // The banner manages the scroll region, so we just write normally
35
+ // and the terminal will scroll within the region
36
+ process.stdout.write(message + '\n');
37
+ };
38
+ console.log = (...args) => {
39
+ // Check if first arg is a JSON string (structured logger output)
40
+ const firstArg = args[0];
41
+ if (typeof firstArg === 'string') {
42
+ const trimmed = firstArg.trim();
43
+ if (trimmed.startsWith('{')) {
44
+ try {
45
+ const parsed = JSON.parse(trimmed);
46
+ if (parsed.level && parsed.message) {
47
+ // It's structured logger output - format it properly
48
+ const level = parsed.level.toLowerCase();
49
+ const message = this.formatStructuredLog(parsed, level);
50
+ writeLogAboveBanner(message);
51
+ return;
52
+ }
53
+ }
54
+ catch {
55
+ // Not JSON, continue with normal formatting
56
+ }
57
+ }
58
+ }
59
+ // Regular console.log output
60
+ const message = this.formatMessage(args, 'info');
61
+ writeLogAboveBanner(message);
62
+ };
63
+ console.info = (...args) => {
64
+ const message = this.formatMessage(args, 'info');
65
+ writeLogAboveBanner(message);
66
+ };
67
+ console.warn = (...args) => {
68
+ const message = this.formatMessage(args, 'warn');
69
+ writeLogAboveBanner(message);
70
+ };
71
+ console.error = (...args) => {
72
+ const message = this.formatMessage(args, 'error');
73
+ writeLogAboveBanner(message);
74
+ };
75
+ this.isIntercepted = true;
76
+ }
77
+ /**
78
+ * Restore original console methods
79
+ */
80
+ restore() {
81
+ if (!this.isIntercepted || !this.originalConsoleLog)
82
+ return;
83
+ console.log = this.originalConsoleLog;
84
+ console.warn = this.originalConsoleWarn;
85
+ console.error = this.originalConsoleError;
86
+ console.info = this.originalConsoleInfo;
87
+ this.isIntercepted = false;
88
+ }
89
+ /**
90
+ * Format message with color based on level
91
+ * Handles both structured logger JSON output and regular console output
92
+ */
93
+ formatMessage(args, level) {
94
+ const timestamp = new Date().toISOString().split('T')[1].split('.')[0]; // HH:MM:SS
95
+ // Process all arguments
96
+ let message = '';
97
+ let logLevel = level;
98
+ let context = {};
99
+ for (const arg of args) {
100
+ if (typeof arg === 'string') {
101
+ // Try to parse JSON strings (structured logger output)
102
+ try {
103
+ const parsed = JSON.parse(arg);
104
+ if (typeof parsed === 'object' && parsed !== null && parsed.message) {
105
+ // It's a structured log entry from logger.ts
106
+ logLevel = (parsed.level || level).toLowerCase();
107
+ message = parsed.message || message;
108
+ // Extract context (everything except timestamp, level, message)
109
+ const ctx = { ...parsed };
110
+ delete ctx.timestamp;
111
+ delete ctx.level;
112
+ delete ctx.message;
113
+ context = { ...context, ...ctx };
114
+ continue;
115
+ }
116
+ }
117
+ catch {
118
+ // Not JSON, treat as regular string
119
+ }
120
+ message += (message ? ' ' : '') + arg;
121
+ }
122
+ else if (arg instanceof Error) {
123
+ message += (message ? ' ' : '') + arg.message;
124
+ context.error_name = arg.name;
125
+ context.error_message = arg.message;
126
+ }
127
+ else if (typeof arg === 'object' && arg !== null) {
128
+ // Merge object into context
129
+ try {
130
+ context = { ...context, ...arg };
131
+ }
132
+ catch {
133
+ message += (message ? ' ' : '') + String(arg);
134
+ }
135
+ }
136
+ else {
137
+ message += (message ? ' ' : '') + String(arg);
138
+ }
139
+ }
140
+ // Format context if present
141
+ const contextStr = Object.keys(context).length > 0
142
+ ? ` ${COLORS.dim}${JSON.stringify(context)}${COLORS.reset}`
143
+ : '';
144
+ // Determine color and icon based on actual log level
145
+ const color = logLevel === 'error' ? COLORS.red : logLevel === 'warn' ? COLORS.yellow : COLORS.cyan;
146
+ const icon = logLevel === 'error' ? '❌' : logLevel === 'warn' ? '⚠️ ' : 'ℹ️ ';
147
+ const levelTag = logLevel.toUpperCase();
148
+ // Truncate long messages (leave room for timestamp, icon, level tag, and context)
149
+ const maxWidth = 100;
150
+ const truncated = message.length > maxWidth ? message.substring(0, maxWidth - 3) + '...' : message;
151
+ return `${COLORS.gray}[${timestamp}]${COLORS.reset} ${color}${icon} ${levelTag}${COLORS.reset} ${truncated}${contextStr}`;
152
+ }
153
+ /**
154
+ * Format structured log entry (from logger.ts JSON output)
155
+ */
156
+ formatStructuredLog(entry, level) {
157
+ const timestamp = new Date(entry.timestamp || Date.now()).toISOString().split('T')[1].split('.')[0];
158
+ const message = entry.message || '';
159
+ // Extract context (everything except timestamp, level, message)
160
+ const context = {};
161
+ for (const key in entry) {
162
+ if (key !== 'timestamp' && key !== 'level' && key !== 'message') {
163
+ context[key] = entry[key];
164
+ }
165
+ }
166
+ const contextStr = Object.keys(context).length > 0
167
+ ? ` ${COLORS.dim}${JSON.stringify(context)}${COLORS.reset}`
168
+ : '';
169
+ const color = level === 'error' ? COLORS.red : level === 'warn' ? COLORS.yellow : COLORS.cyan;
170
+ const icon = level === 'error' ? '❌' : level === 'warn' ? '⚠️ ' : 'ℹ️ ';
171
+ const levelTag = level.toUpperCase();
172
+ // Truncate long messages
173
+ const maxWidth = 100;
174
+ const truncated = message.length > maxWidth ? message.substring(0, maxWidth - 3) + '...' : message;
175
+ return `${COLORS.gray}[${timestamp}]${COLORS.reset} ${color}${icon} ${levelTag}${COLORS.reset} ${truncated}${contextStr}`;
176
+ }
177
+ /**
178
+ * Add a formatted log line directly
179
+ */
180
+ log(message, level = 'info') {
181
+ const formatted = this.formatMessage([message], level);
182
+ process.stdout.write(formatted + '\n');
183
+ }
184
+ }
185
+ export const bannerLogger = new BannerLogger();
186
+ //# sourceMappingURL=bannerLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bannerLogger.js","sourceRoot":"","sources":["../../src/utils/bannerLogger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Banner Service
3
+ *
4
+ * Re-exports the EnhancedBannerService from shared-utilities for backward compatibility.
5
+ * All new code should import directly from '@tsvika58/shared-utilities/banner'.
6
+ *
7
+ * @deprecated Import from '@tsvika58/shared-utilities/banner' instead
8
+ */
9
+ import { EnhancedBannerService, createBannerService, } from '@tsvika58/shared-utilities/banner';
10
+ // Create default instance for backward compatibility
11
+ const defaultConfig = {
12
+ lines: 4,
13
+ showDivider: true,
14
+ interceptConsole: true,
15
+ };
16
+ /**
17
+ * Default banner service instance
18
+ * @deprecated Use createBannerService() from shared-utilities instead
19
+ */
20
+ export const bannerService = createBannerService(defaultConfig);
21
+ // Re-export from shared-utilities
22
+ export { EnhancedBannerService, createBannerService };
23
+ //# sourceMappingURL=bannerService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bannerService.js","sourceRoot":"","sources":["../../src/utils/bannerService.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,qBAAqB,EACrB,mBAAmB,GAGpB,MAAM,mCAAmC,CAAC;AAE3C,qDAAqD;AACrD,MAAM,aAAa,GAAgC;IACjD,KAAK,EAAE,CAAC;IACR,WAAW,EAAE,IAAI;IACjB,gBAAgB,EAAE,IAAI;CACvB,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC;AAQhE,kCAAkC;AAClC,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Banner Service Adapter for n8n-workflow-validator
3
+ *
4
+ * Uses the EnhancedBannerService from shared-utilities v1.4.0.
5
+ * This provides a unified banner system across all projects with:
6
+ * - Sticky progress banner at bottom of terminal
7
+ * - Console interception for clean log display
8
+ * - File logging integration
9
+ * - Terminal capability detection
10
+ *
11
+ * Migration: This replaces the previous local ThreeLineBanner and BannerService.
12
+ */
13
+ import { EnhancedBannerService, createBannerService, } from '@tsvika58/shared-utilities/banner';
14
+ import { createBannerAdapter } from '@tsvika58/shared-utilities/script-execution';
15
+ /**
16
+ * Default banner configuration for n8n-validator scripts
17
+ */
18
+ const defaultConfig = {
19
+ lines: 4,
20
+ showDivider: true,
21
+ interceptConsole: true,
22
+ };
23
+ /**
24
+ * Shared banner service instance
25
+ *
26
+ * Use this for direct access to the banner service.
27
+ * For scripts using executeScript/runScript, use bannerAdapter instead.
28
+ */
29
+ export const bannerService = createBannerService(defaultConfig);
30
+ /**
31
+ * Adapter instance for use with shared-utilities scriptRunner
32
+ *
33
+ * This adapter:
34
+ * - Translates between shared-utilities BannerService interface and EnhancedBannerService
35
+ * - Tracks last progress event for batch/checkpoint updates
36
+ * - Handles optional methods gracefully
37
+ * - Ensures banner refreshes when batch info or checkpoint changes
38
+ *
39
+ * Usage:
40
+ * ```typescript
41
+ * import { bannerAdapter } from './utils/bannerServiceAdapter.js';
42
+ * import { runScript } from './utils/scriptRunner.js';
43
+ *
44
+ * await runScript(async () => {
45
+ * // Your script logic
46
+ * }, {
47
+ * bannerService: bannerAdapter,
48
+ * // ... other options
49
+ * });
50
+ * ```
51
+ */
52
+ export const bannerAdapter = createBannerAdapter(bannerService);
53
+ export { EnhancedBannerService, createBannerService };
54
+ //# sourceMappingURL=bannerServiceAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bannerServiceAdapter.js","sourceRoot":"","sources":["../../src/utils/bannerServiceAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACL,qBAAqB,EACrB,mBAAmB,GAEpB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAElF;;GAEG;AACH,MAAM,aAAa,GAAgC;IACjD,KAAK,EAAE,CAAC;IACR,WAAW,EAAE,IAAI;IACjB,gBAAgB,EAAE,IAAI;CACvB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC;AAEhE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC;AAIhE,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,171 @@
1
+ /**
2
+ * Batch Logger Utility
3
+ *
4
+ * Logs problems, failures, warnings, and verbose information during batch operations.
5
+ * Displays logs above the sticky banner and saves to file for later review.
6
+ *
7
+ * Usage:
8
+ * const logger = new BatchLogger('batch-validation');
9
+ * logger.error('Failed to validate workflow', { workflowId: '123', error: '...' });
10
+ * logger.warning('Missing credential', { workflowId: '123', credential: 'slack' });
11
+ * logger.info('Processing batch', { batchSize: 100 });
12
+ */
13
+ import * as fs from 'fs/promises';
14
+ import * as path from 'path';
15
+ export class BatchLogger {
16
+ logFile;
17
+ logEntries = [];
18
+ maxDisplayLines;
19
+ displayLines = [];
20
+ isInitialized = false;
21
+ constructor(logName, maxDisplayLines = 10) {
22
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
23
+ this.logFile = path.join(process.cwd(), 'logs', `${logName}-${timestamp}.log`);
24
+ this.maxDisplayLines = maxDisplayLines;
25
+ }
26
+ /**
27
+ * Initialize logger (create log directory and file)
28
+ */
29
+ async initialize() {
30
+ const logDir = path.dirname(this.logFile);
31
+ await fs.mkdir(logDir, { recursive: true });
32
+ // Write header to log file
33
+ await fs.appendFile(this.logFile, `# Batch Validation Log\n` +
34
+ `Started: ${new Date().toISOString()}\n` +
35
+ `Log File: ${this.logFile}\n` +
36
+ `${'='.repeat(80)}\n\n`);
37
+ this.isInitialized = true;
38
+ }
39
+ /**
40
+ * Log an entry
41
+ */
42
+ async log(level, message, context, workflowId) {
43
+ const entry = {
44
+ timestamp: new Date(),
45
+ level,
46
+ message,
47
+ context,
48
+ workflowId,
49
+ };
50
+ this.logEntries.push(entry);
51
+ // Format log line for display
52
+ const timeStr = entry.timestamp.toLocaleTimeString();
53
+ const levelStr = level.toUpperCase().padEnd(7);
54
+ const workflowStr = workflowId ? ` [${workflowId}]` : '';
55
+ const contextStr = context
56
+ ? ` ${JSON.stringify(context)}`
57
+ : '';
58
+ const displayLine = `[${timeStr}] ${levelStr}${workflowStr} ${message}${contextStr}`;
59
+ // Add to display lines (keep last N lines)
60
+ this.displayLines.push(displayLine);
61
+ if (this.displayLines.length > this.maxDisplayLines) {
62
+ this.displayLines.shift();
63
+ }
64
+ // Write to file
65
+ if (this.isInitialized) {
66
+ const fileLine = `${entry.timestamp.toISOString()} [${levelStr}]${workflowStr} ${message}${contextStr ? ` ${JSON.stringify(context)}` : ''}\n`;
67
+ await fs.appendFile(this.logFile, fileLine).catch((err) => {
68
+ // Don't throw if file write fails, just log to console
69
+ console.error('Failed to write to log file:', err);
70
+ });
71
+ }
72
+ // Also log to console (will appear above banner)
73
+ const colorCode = this.getColorCode(level);
74
+ const resetCode = '\x1b[0m';
75
+ console.log(`${colorCode}${displayLine}${resetCode}`);
76
+ }
77
+ /**
78
+ * Get ANSI color code for log level
79
+ */
80
+ getColorCode(level) {
81
+ switch (level) {
82
+ case 'error':
83
+ return '\x1b[31m'; // Red
84
+ case 'warning':
85
+ return '\x1b[33m'; // Yellow
86
+ case 'info':
87
+ return '\x1b[36m'; // Cyan
88
+ case 'debug':
89
+ return '\x1b[90m'; // Gray
90
+ default:
91
+ return '';
92
+ }
93
+ }
94
+ /**
95
+ * Log info message
96
+ */
97
+ async info(message, context, workflowId) {
98
+ await this.log('info', message, context, workflowId);
99
+ }
100
+ /**
101
+ * Log warning message
102
+ */
103
+ async warning(message, context, workflowId) {
104
+ await this.log('warning', message, context, workflowId);
105
+ }
106
+ /**
107
+ * Log error message
108
+ */
109
+ async error(message, context, workflowId) {
110
+ await this.log('error', message, context, workflowId);
111
+ }
112
+ /**
113
+ * Log debug message
114
+ */
115
+ async debug(message, context, workflowId) {
116
+ await this.log('debug', message, context, workflowId);
117
+ }
118
+ /**
119
+ * Get display lines for showing above banner
120
+ */
121
+ getDisplayLines() {
122
+ return [...this.displayLines];
123
+ }
124
+ /**
125
+ * Get all log entries
126
+ */
127
+ getLogEntries() {
128
+ return [...this.logEntries];
129
+ }
130
+ /**
131
+ * Get statistics
132
+ */
133
+ getStatistics() {
134
+ return {
135
+ total: this.logEntries.length,
136
+ errors: this.logEntries.filter((e) => e.level === 'error').length,
137
+ warnings: this.logEntries.filter((e) => e.level === 'warning').length,
138
+ info: this.logEntries.filter((e) => e.level === 'info').length,
139
+ debug: this.logEntries.filter((e) => e.level === 'debug').length,
140
+ };
141
+ }
142
+ /**
143
+ * Write summary to log file
144
+ */
145
+ async writeSummary() {
146
+ if (!this.isInitialized)
147
+ return;
148
+ const stats = this.getStatistics();
149
+ const summary = `
150
+ ${'='.repeat(80)}
151
+ # Summary
152
+ ${'='.repeat(80)}
153
+ Total Log Entries: ${stats.total}
154
+ - Errors: ${stats.errors}
155
+ - Warnings: ${stats.warnings}
156
+ - Info: ${stats.info}
157
+ - Debug: ${stats.debug}
158
+ Ended: ${new Date().toISOString()}
159
+ ${'='.repeat(80)}
160
+ `;
161
+ await fs.appendFile(this.logFile, summary);
162
+ console.log(`\n📝 Log file saved to: ${this.logFile}`);
163
+ }
164
+ /**
165
+ * Get log file path
166
+ */
167
+ getLogFilePath() {
168
+ return this.logFile;
169
+ }
170
+ }
171
+ //# sourceMappingURL=batchLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batchLogger.js","sourceRoot":"","sources":["../../src/utils/batchLogger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAY7B,MAAM,OAAO,WAAW;IACd,OAAO,CAAS;IAChB,UAAU,GAAe,EAAE,CAAC;IAC5B,eAAe,CAAS;IACxB,YAAY,GAAa,EAAE,CAAC;IAC5B,aAAa,GAAG,KAAK,CAAC;IAE9B,YAAY,OAAe,EAAE,kBAA0B,EAAE;QACvD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACjE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CACtB,OAAO,CAAC,GAAG,EAAE,EACb,MAAM,EACN,GAAG,OAAO,IAAI,SAAS,MAAM,CAC9B,CAAC;QACF,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE5C,2BAA2B;QAC3B,MAAM,EAAE,CAAC,UAAU,CACjB,IAAI,CAAC,OAAO,EACZ,0BAA0B;YACxB,YAAY,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI;YACxC,aAAa,IAAI,CAAC,OAAO,IAAI;YAC7B,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAC1B,CAAC;QAEF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IAC5B,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,GAAG,CACf,KAAe,EACf,OAAe,EACf,OAAiC,EACjC,UAAmB;QAEnB,MAAM,KAAK,GAAa;YACtB,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,KAAK;YACL,OAAO;YACP,OAAO;YACP,UAAU;SACX,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE5B,8BAA8B;QAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,CAAC;QACrD,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,MAAM,UAAU,GAAG,OAAO;YACxB,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;YAC/B,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,WAAW,GAAG,IAAI,OAAO,KAAK,QAAQ,GAAG,WAAW,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;QAErF,2CAA2C;QAC3C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACpC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACpD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC5B,CAAC;QAED,gBAAgB;QAChB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,QAAQ,IAAI,WAAW,IAAI,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;YAC/I,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACxD,uDAAuD;gBACvD,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;QACL,CAAC;QAED,iDAAiD;QACjD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,SAAS,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,EAAE,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,KAAe;QAClC,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,OAAO;gBACV,OAAO,UAAU,CAAC,CAAC,MAAM;YAC3B,KAAK,SAAS;gBACZ,OAAO,UAAU,CAAC,CAAC,SAAS;YAC9B,KAAK,MAAM;gBACT,OAAO,UAAU,CAAC,CAAC,OAAO;YAC5B,KAAK,OAAO;gBACV,OAAO,UAAU,CAAC,CAAC,OAAO;YAC5B;gBACE,OAAO,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CACR,OAAe,EACf,OAAiC,EACjC,UAAmB;QAEnB,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IACvD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CACX,OAAe,EACf,OAAiC,EACjC,UAAmB;QAEnB,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CACT,OAAe,EACf,OAAiC,EACjC,UAAmB;QAEnB,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CACT,OAAe,EACf,OAAiC,EACjC,UAAmB;QAEnB,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,aAAa;QAOX,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YAC7B,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,MAAM;YACjE,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,MAAM;YACrE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,MAAM;YAC9D,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,MAAM;SACjE,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY;QAChB,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO;QAEhC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG;EAClB,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;;EAEd,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;qBACK,KAAK,CAAC,KAAK;cAClB,KAAK,CAAC,MAAM;gBACV,KAAK,CAAC,QAAQ;YAClB,KAAK,CAAC,IAAI;aACT,KAAK,CAAC,KAAK;SACf,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;EAC/B,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;CACf,CAAC;QAEE,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF"}