@fairfox/polly 0.3.2 → 0.3.4

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.
@@ -9,12 +9,12 @@
9
9
  "// Context analysis - analyze individual execution contexts\n\nimport { Project, Node, SyntaxKind } from \"ts-morph\"\nimport type { ContextInfo, ComponentInfo } from \"../types/architecture\"\nimport type { MessageHandler } from \"../types/core\"\n\nexport class ContextAnalyzer {\n private project: Project\n\n constructor(tsConfigPath: string) {\n this.project = new Project({\n tsConfigFilePath: tsConfigPath,\n })\n }\n\n /**\n * Analyze a specific context given its entry point\n */\n analyzeContext(\n contextType: string,\n entryPoint: string,\n handlers: MessageHandler[]\n ): ContextInfo {\n const sourceFile = this.project.getSourceFile(entryPoint)\n\n if (!sourceFile) {\n throw new Error(`Could not find source file: ${entryPoint}`)\n }\n\n // Extract Chrome API usage\n const chromeAPIs = this.extractChromeAPIs(sourceFile)\n\n // Extract dependencies\n const dependencies = this.extractDependencies(sourceFile)\n\n // Extract JSDoc description\n const description = this.extractDescription(sourceFile)\n\n // Extract components (for UI contexts)\n const components = this.isUIContext(contextType)\n ? this.extractComponents(sourceFile)\n : undefined\n\n // Filter handlers for this context\n const contextHandlers = handlers.filter((h) => h.node === contextType)\n\n return {\n type: contextType,\n entryPoint,\n handlers: contextHandlers,\n chromeAPIs,\n externalAPIs: [], // Will be filled by integration analyzer\n components,\n dependencies,\n description,\n }\n }\n\n /**\n * Extract Chrome API usage from source file\n */\n private extractChromeAPIs(sourceFile: any): string[] {\n const apis = new Set<string>()\n\n sourceFile.forEachDescendant((node: any) => {\n if (Node.isPropertyAccessExpression(node)) {\n const text = node.getText()\n\n // Match chrome.* API calls\n if (text.startsWith(\"chrome.\")) {\n // Extract API namespace (e.g., \"chrome.tabs\", \"chrome.storage.local\")\n const match = text.match(/^chrome\\.([^.(]+(?:\\.[^.(]+)?)/)\n if (match) {\n apis.add(match[1])\n }\n }\n\n // Also match browser.* for Firefox compatibility\n if (text.startsWith(\"browser.\")) {\n const match = text.match(/^browser\\.([^.(]+(?:\\.[^.(]+)?)/)\n if (match) {\n apis.add(match[1])\n }\n }\n\n // Match bus.adapters.* pattern (framework abstraction over Chrome APIs)\n // e.g., bus.adapters.storage.get() -> storage\n // bus.adapters.tabs.query() -> tabs\n if (text.includes(\"bus.adapters.\")) {\n const match = text.match(/bus\\.adapters\\.([^.(]+)/)\n if (match) {\n apis.add(match[1])\n }\n }\n }\n })\n\n return Array.from(apis).sort()\n }\n\n /**\n * Extract import dependencies\n */\n private extractDependencies(sourceFile: any): string[] {\n const deps: string[] = []\n\n for (const importDecl of sourceFile.getImportDeclarations()) {\n const moduleSpecifier = importDecl.getModuleSpecifierValue()\n deps.push(moduleSpecifier)\n }\n\n return deps\n }\n\n /**\n * Extract JSDoc description from file\n */\n private extractDescription(sourceFile: any): string | undefined {\n // Look for file-level JSDoc comment\n const firstStatement = sourceFile.getStatements()[0]\n if (!firstStatement) return undefined\n\n const leadingComments = firstStatement.getLeadingCommentRanges()\n if (leadingComments.length === 0) return undefined\n\n const comment = leadingComments[0].getText()\n\n // Extract description from JSDoc\n const descMatch = comment.match(/@description\\s+(.+?)(?:\\n|$)/s)\n if (descMatch) {\n return descMatch[1].trim()\n }\n\n // Or just take the first line of the comment\n const lines = comment\n .split(\"\\n\")\n .map((l: string) => l.replace(/^[\\s*]+/, \"\").trim())\n .filter((l: string) => l && !l.startsWith(\"@\"))\n\n return lines[0] || undefined\n }\n\n /**\n * Extract React/Preact components from source file\n */\n private extractComponents(sourceFile: any): ComponentInfo[] {\n const components: ComponentInfo[] = []\n\n sourceFile.forEachDescendant((node: any) => {\n // Function components\n if (Node.isFunctionDeclaration(node)) {\n const name = node.getName()\n if (name && this.looksLikeComponent(name, node)) {\n components.push({\n name,\n type: \"function\",\n filePath: sourceFile.getFilePath(),\n line: node.getStartLineNumber(),\n props: this.extractProps(node),\n description: this.extractJSDocDescription(node),\n })\n }\n }\n\n // Arrow function components (const Foo = () => ...)\n if (Node.isVariableDeclaration(node)) {\n const name = node.getName()\n const initializer = node.getInitializer()\n\n if (\n name &&\n initializer &&\n (Node.isArrowFunction(initializer) || Node.isFunctionExpression(initializer))\n ) {\n if (this.looksLikeComponent(name, initializer)) {\n components.push({\n name,\n type: \"function\",\n filePath: sourceFile.getFilePath(),\n line: node.getStartLineNumber(),\n props: this.extractProps(initializer),\n description: this.extractJSDocDescription(node),\n })\n }\n }\n }\n\n // Class components\n if (Node.isClassDeclaration(node)) {\n const name = node.getName()\n if (name && this.looksLikeClassComponent(node)) {\n components.push({\n name,\n type: \"class\",\n filePath: sourceFile.getFilePath(),\n line: node.getStartLineNumber(),\n props: this.extractPropsFromClass(node),\n description: this.extractJSDocDescription(node),\n })\n }\n }\n })\n\n return components\n }\n\n /**\n * Check if a function looks like a React/Preact component\n */\n private looksLikeComponent(name: string, node: any): boolean {\n // Component names should start with uppercase\n if (!/^[A-Z]/.test(name)) return false\n\n // Check if it returns JSX\n const body = node.getBody()\n if (!body) return false\n\n let hasJSX = false\n\n if (Node.isBlock(body)) {\n body.forEachDescendant((child: any) => {\n if (Node.isJsxElement(child) || Node.isJsxSelfClosingElement(child)) {\n hasJSX = true\n }\n })\n } else {\n // Arrow function with implicit return\n if (Node.isJsxElement(body) || Node.isJsxSelfClosingElement(body)) {\n hasJSX = true\n }\n }\n\n return hasJSX\n }\n\n /**\n * Check if a class looks like a React component\n */\n private looksLikeClassComponent(node: any): boolean {\n const extendedTypes = node.getExtends()\n if (!extendedTypes) return false\n\n const extendsText = extendedTypes.getText()\n return /Component|PureComponent/.test(extendsText)\n }\n\n /**\n * Extract props from function component\n */\n private extractProps(node: any): string[] {\n const params = node.getParameters()\n if (params.length === 0) return []\n\n const propsParam = params[0]\n const type = propsParam.getType()\n\n const props: string[] = []\n for (const prop of type.getProperties()) {\n props.push(prop.getName())\n }\n\n return props\n }\n\n /**\n * Extract props from class component\n */\n private extractPropsFromClass(node: any): string[] {\n const extendedTypes = node.getExtends()\n if (!extendedTypes) return []\n\n const typeArgs = extendedTypes.getType().getTypeArguments()\n if (typeArgs.length === 0) return []\n\n const propsType = typeArgs[0]\n const props: string[] = []\n\n for (const prop of propsType.getProperties()) {\n props.push(prop.getName())\n }\n\n return props\n }\n\n /**\n * Extract JSDoc description from node\n */\n private extractJSDocDescription(node: any): string | undefined {\n const jsDocs = node.getJsDocs()\n if (jsDocs.length === 0) return undefined\n\n const description = jsDocs[0].getDescription().trim()\n return description || undefined\n }\n\n /**\n * Check if context is a UI context\n */\n private isUIContext(contextType: string): boolean {\n return [\"popup\", \"options\", \"devtools\"].includes(contextType)\n }\n}\n",
10
10
  "// Message flow analysis - trace messages between contexts\n\nimport { Project, Node } from \"ts-morph\"\nimport type { MessageFlow, MessageStep } from \"../types/architecture\"\nimport type { MessageHandler } from \"../types/core\"\n\nexport class FlowAnalyzer {\n private project: Project\n private handlers: MessageHandler[]\n\n constructor(tsConfigPath: string, handlers: MessageHandler[]) {\n this.project = new Project({\n tsConfigFilePath: tsConfigPath,\n })\n this.handlers = handlers\n }\n\n /**\n * Analyze message flows between contexts\n */\n analyzeFlows(): MessageFlow[] {\n const flows: MessageFlow[] = []\n\n // Group handlers by message type\n const handlersByType = new Map<string, MessageHandler[]>()\n for (const handler of this.handlers) {\n if (!handlersByType.has(handler.messageType)) {\n handlersByType.set(handler.messageType, [])\n }\n handlersByType.get(handler.messageType)!.push(handler)\n }\n\n // For each message type, trace the flow\n for (const [messageType, handlers] of handlersByType) {\n // Find senders\n const senders = this.findMessageSenders(messageType)\n\n // For each sender, create a flow\n for (const sender of senders) {\n const recipients = handlers.map((h) => h.node)\n\n // Build sequence of steps\n const sequence = this.buildSequence(messageType, sender, handlers)\n\n // Extract flow metadata\n const flowMetadata = this.extractFlowMetadata(sender.file, sender.line)\n\n flows.push({\n messageType,\n from: sender.context,\n to: recipients,\n trigger: flowMetadata.trigger,\n flowName: flowMetadata.flowName,\n description: flowMetadata.description,\n sequence,\n })\n }\n }\n\n return flows\n }\n\n /**\n * Find all places where a message is sent\n * Supports: .send(), .emit(), postMessage(), ws.send(), broadcast(), etc.\n */\n private findMessageSenders(messageType: string): Array<{\n context: string\n file: string\n line: number\n }> {\n const senders: Array<{ context: string; file: string; line: number }> = []\n\n for (const sourceFile of this.project.getSourceFiles()) {\n const filePath = sourceFile.getFilePath()\n const context = this.inferContext(filePath)\n\n sourceFile.forEachDescendant((node) => {\n if (Node.isCallExpression(node)) {\n const expression = node.getExpression()\n\n // Pattern 1: .send() or .emit() calls (ws.send, socket.emit, bus.send, etc.)\n if (Node.isPropertyAccessExpression(expression)) {\n const methodName = expression.getName()\n\n if (methodName === \"send\" || methodName === \"emit\" || methodName === \"postMessage\" || methodName === \"broadcast\") {\n const args = node.getArguments()\n if (args.length > 0) {\n const firstArg = args[0]\n\n let msgType: string | undefined\n\n // Check if first argument is a string literal: send(\"MESSAGE\")\n if (Node.isStringLiteral(firstArg)) {\n msgType = firstArg.getLiteralValue()\n }\n // Check if first argument is an object literal: send({ type: \"MESSAGE\" })\n else if (Node.isObjectLiteralExpression(firstArg)) {\n const typeProperty = firstArg.getProperty(\"type\")\n if (typeProperty && Node.isPropertyAssignment(typeProperty)) {\n const initializer = typeProperty.getInitializer()\n if (initializer && Node.isStringLiteral(initializer)) {\n msgType = initializer.getLiteralValue()\n }\n }\n }\n\n if (msgType === messageType) {\n senders.push({\n context,\n file: filePath,\n line: node.getStartLineNumber(),\n })\n }\n }\n }\n }\n\n // Pattern 2: Standalone postMessage() calls (Web Workers, Window.postMessage)\n if (Node.isIdentifier(expression)) {\n if (expression.getText() === \"postMessage\") {\n const args = node.getArguments()\n if (args.length > 0) {\n const firstArg = args[0]\n let msgType: string | undefined\n\n if (Node.isStringLiteral(firstArg)) {\n msgType = firstArg.getLiteralValue()\n } else if (Node.isObjectLiteralExpression(firstArg)) {\n const typeProperty = firstArg.getProperty(\"type\")\n if (typeProperty && Node.isPropertyAssignment(typeProperty)) {\n const initializer = typeProperty.getInitializer()\n if (initializer && Node.isStringLiteral(initializer)) {\n msgType = initializer.getLiteralValue()\n }\n }\n }\n\n if (msgType === messageType) {\n senders.push({\n context,\n file: filePath,\n line: node.getStartLineNumber(),\n })\n }\n }\n }\n }\n }\n })\n }\n\n return senders\n }\n\n /**\n * Build sequence of steps for a message flow\n */\n private buildSequence(\n messageType: string,\n sender: { context: string; file: string; line: number },\n handlers: MessageHandler[]\n ): MessageStep[] {\n const steps: MessageStep[] = []\n let stepNumber = 1\n\n // Step 1: Send message\n steps.push({\n step: stepNumber++,\n action: `${sender.context}.send(${messageType})`,\n context: sender.context,\n location: {\n file: sender.file,\n line: sender.line,\n },\n })\n\n // Step 2+: Handle in each recipient context\n for (const handler of handlers) {\n steps.push({\n step: stepNumber++,\n action: `${handler.node}.handle(${messageType})`,\n context: handler.node,\n location: handler.location,\n })\n\n // Add substeps for any messages sent by this handler\n const subsends = this.findMessagesInHandler(handler)\n for (const subsend of subsends) {\n steps.push({\n step: stepNumber++,\n action: `${handler.node}.send(${subsend.messageType})`,\n context: handler.node,\n location: subsend.location,\n })\n }\n }\n\n return steps\n }\n\n /**\n * Find messages sent within a handler\n */\n private findMessagesInHandler(handler: MessageHandler): Array<{\n messageType: string\n location: { file: string; line: number }\n }> {\n const sends: Array<{ messageType: string; location: { file: string; line: number } }> = []\n\n const sourceFile = this.project.getSourceFile(handler.location.file)\n if (!sourceFile) return sends\n\n // Find the handler function at the given line\n const targetLine = handler.location.line\n\n sourceFile.forEachDescendant((node) => {\n if (Node.isCallExpression(node)) {\n const line = node.getStartLineNumber()\n\n // Rough heuristic: if it's near the handler line, it's probably in the handler\n if (Math.abs(line - targetLine) < 20) {\n const expression = node.getExpression()\n\n if (Node.isPropertyAccessExpression(expression)) {\n const methodName = expression.getName()\n\n if (methodName === \"send\" || methodName === \"emit\") {\n const args = node.getArguments()\n if (args.length > 0) {\n const firstArg = args[0]\n let messageType: string | undefined\n\n // Check if first argument is a string literal: send(\"MESSAGE\")\n if (Node.isStringLiteral(firstArg)) {\n messageType = firstArg.getLiteralValue()\n }\n // Check if first argument is an object literal: send({ type: \"MESSAGE\" })\n else if (Node.isObjectLiteralExpression(firstArg)) {\n const typeProperty = firstArg.getProperty(\"type\")\n if (typeProperty && Node.isPropertyAssignment(typeProperty)) {\n const initializer = typeProperty.getInitializer()\n if (initializer && Node.isStringLiteral(initializer)) {\n messageType = initializer.getLiteralValue()\n }\n }\n }\n\n if (messageType) {\n sends.push({\n messageType,\n location: {\n file: handler.location.file,\n line,\n },\n })\n }\n }\n }\n }\n }\n }\n })\n\n return sends\n }\n\n /**\n * Extract flow metadata from JSDoc annotations\n */\n private extractFlowMetadata(\n filePath: string,\n lineNumber: number\n ): {\n trigger?: string\n flowName?: string\n description?: string\n } {\n const sourceFile = this.project.getSourceFile(filePath)\n if (!sourceFile) return {}\n\n // Find the node at this line\n let targetNode: any = null\n\n sourceFile.forEachDescendant((node) => {\n if (node.getStartLineNumber() === lineNumber) {\n targetNode = node\n }\n })\n\n if (!targetNode) return {}\n\n // Look for JSDoc comments\n const jsDocs = targetNode.getJsDocs?.() || []\n if (jsDocs.length === 0) return {}\n\n const comment = jsDocs[0].getText()\n\n // Extract @flow annotation\n const flowMatch = comment.match(/@flow\\s+([^\\s]+)/)\n const flowName = flowMatch ? flowMatch[1] : undefined\n\n // Extract @trigger annotation\n const triggerMatch = comment.match(/@trigger\\s+(.+?)(?:\\n|$)/)\n const trigger = triggerMatch ? triggerMatch[1].trim() : undefined\n\n // Extract @description\n const descMatch = comment.match(/@description\\s+(.+?)(?:\\n|$)/s)\n const description = descMatch ? descMatch[1].trim() : undefined\n\n return { trigger, flowName, description }\n }\n\n /**\n * Infer context from file path\n */\n private inferContext(filePath: string): string {\n const path = filePath.toLowerCase()\n\n // Chrome extension contexts\n if (path.includes(\"/background/\") || path.includes(\"\\\\background\\\\\")) {\n return \"background\"\n }\n if (path.includes(\"/content/\") || path.includes(\"\\\\content\\\\\")) {\n return \"content\"\n }\n if (path.includes(\"/popup/\") || path.includes(\"\\\\popup\\\\\")) {\n return \"popup\"\n }\n if (path.includes(\"/devtools/\") || path.includes(\"\\\\devtools\\\\\")) {\n return \"devtools\"\n }\n if (path.includes(\"/options/\") || path.includes(\"\\\\options\\\\\")) {\n return \"options\"\n }\n if (path.includes(\"/offscreen/\") || path.includes(\"\\\\offscreen\\\\\")) {\n return \"offscreen\"\n }\n\n // WebSocket/server app contexts\n if (path.includes(\"/server/\") || path.includes(\"\\\\server\\\\\") || path.includes(\"/server.\")) {\n return \"server\"\n }\n if (path.includes(\"/client/\") || path.includes(\"\\\\client\\\\\") || path.includes(\"/client.\")) {\n return \"client\"\n }\n\n // PWA/Worker contexts\n if (path.includes(\"/worker/\") || path.includes(\"\\\\worker\\\\\") || path.includes(\"service-worker\")) {\n return \"worker\"\n }\n\n return \"unknown\"\n }\n}\n",
11
11
  "// External integration detection - find external APIs, services, etc.\n\nimport { Project, Node } from \"ts-morph\"\nimport type { ExternalIntegration, ExternalAPICall } from \"../types/architecture\"\n\nexport class IntegrationAnalyzer {\n private project: Project\n\n constructor(tsConfigPath: string) {\n this.project = new Project({\n tsConfigFilePath: tsConfigPath,\n })\n }\n\n /**\n * Analyze external integrations in the codebase\n */\n analyzeIntegrations(): ExternalIntegration[] {\n const integrations = new Map<string, ExternalIntegration>()\n\n // Find all fetch() calls\n const fetchCalls = this.findFetchCalls()\n for (const call of fetchCalls) {\n this.addOrMergeIntegration(integrations, this.createAPIIntegration(call))\n }\n\n // Find WebSocket connections\n const websockets = this.findWebSockets()\n for (const ws of websockets) {\n this.addOrMergeIntegration(integrations, this.createWebSocketIntegration(ws))\n }\n\n // Find external script imports\n const externalScripts = this.findExternalScripts()\n for (const script of externalScripts) {\n this.addOrMergeIntegration(integrations, script)\n }\n\n return Array.from(integrations.values())\n }\n\n /**\n * Find all fetch() API calls\n */\n private findFetchCalls(): Array<{\n url: string\n method: string\n file: string\n line: number\n description?: string\n }> {\n const calls: Array<{\n url: string\n method: string\n file: string\n line: number\n description?: string\n }> = []\n\n for (const sourceFile of this.project.getSourceFiles()) {\n sourceFile.forEachDescendant((node) => {\n if (Node.isCallExpression(node)) {\n const expression = node.getExpression()\n\n // Check for fetch() calls\n if (Node.isIdentifier(expression) && expression.getText() === \"fetch\") {\n const args = node.getArguments()\n if (args.length > 0) {\n // Extract URL\n const urlArg = args[0]\n let url: string | null = null\n\n if (Node.isStringLiteral(urlArg)) {\n url = urlArg.getLiteralValue()\n } else if (Node.isTemplateExpression(urlArg)) {\n // Try to extract base URL from template\n url = this.extractBaseURL(urlArg.getText())\n }\n\n if (url) {\n // Extract method\n let method = \"GET\" // Default\n if (args.length > 1 && Node.isObjectLiteralExpression(args[1])) {\n const options = args[1]\n const methodProp = options.getProperty(\"method\")\n if (\n methodProp &&\n Node.isPropertyAssignment(methodProp)\n ) {\n const initializer = methodProp.getInitializer()\n if (initializer && Node.isStringLiteral(initializer)) {\n method = initializer.getLiteralValue().toUpperCase()\n }\n }\n }\n\n // Extract description from JSDoc\n const description = this.extractJSDocDescription(node)\n\n calls.push({\n url,\n method,\n file: sourceFile.getFilePath(),\n line: node.getStartLineNumber(),\n description,\n })\n }\n }\n }\n }\n })\n }\n\n return calls\n }\n\n /**\n * Find WebSocket connections\n */\n private findWebSockets(): Array<{\n url: string\n file: string\n line: number\n description?: string\n }> {\n const websockets: Array<{\n url: string\n file: string\n line: number\n description?: string\n }> = []\n\n for (const sourceFile of this.project.getSourceFiles()) {\n sourceFile.forEachDescendant((node) => {\n if (Node.isNewExpression(node)) {\n const expression = node.getExpression()\n\n // Check for new WebSocket()\n if (Node.isIdentifier(expression) && expression.getText() === \"WebSocket\") {\n const args = node.getArguments()\n if (args.length > 0 && Node.isStringLiteral(args[0])) {\n const url = args[0].getLiteralValue()\n const description = this.extractJSDocDescription(node)\n\n websockets.push({\n url,\n file: sourceFile.getFilePath(),\n line: node.getStartLineNumber(),\n description,\n })\n }\n }\n }\n })\n }\n\n return websockets\n }\n\n /**\n * Find external script dependencies (from imports)\n */\n private findExternalScripts(): ExternalIntegration[] {\n const scripts: ExternalIntegration[] = []\n const seen = new Set<string>()\n\n for (const sourceFile of this.project.getSourceFiles()) {\n for (const importDecl of sourceFile.getImportDeclarations()) {\n const moduleSpecifier = importDecl.getModuleSpecifierValue()\n\n // Only consider external packages (not relative imports)\n if (!moduleSpecifier.startsWith(\".\") && !moduleSpecifier.startsWith(\"/\")) {\n // Extract package name (handle scoped packages)\n const packageName = moduleSpecifier.startsWith(\"@\")\n ? moduleSpecifier.split(\"/\").slice(0, 2).join(\"/\")\n : moduleSpecifier.split(\"/\")[0]\n\n if (!seen.has(packageName)) {\n seen.add(packageName)\n\n scripts.push({\n type: \"external-script\",\n name: packageName,\n technology: \"npm package\",\n usedIn: [sourceFile.getFilePath()],\n description: `External dependency: ${packageName}`,\n })\n }\n }\n }\n }\n\n return scripts\n }\n\n /**\n * Create API integration from fetch call\n */\n private createAPIIntegration(call: {\n url: string\n method: string\n file: string\n line: number\n description?: string\n }): ExternalIntegration {\n // Extract base URL\n const baseURL = this.extractBaseURL(call.url)\n\n // Infer name from URL\n const name = this.inferAPIName(baseURL)\n\n return {\n type: \"api\",\n name,\n technology: \"REST API\",\n url: baseURL,\n usedIn: [call.file],\n description: call.description || `External API: ${name}`,\n calls: [\n {\n method: call.method,\n endpoint: call.url,\n location: {\n file: call.file,\n line: call.line,\n },\n description: call.description,\n },\n ],\n }\n }\n\n /**\n * Create WebSocket integration\n */\n private createWebSocketIntegration(ws: {\n url: string\n file: string\n line: number\n description?: string\n }): ExternalIntegration {\n const name = this.inferAPIName(ws.url)\n\n return {\n type: \"websocket\",\n name,\n technology: \"WebSocket\",\n url: ws.url,\n usedIn: [ws.file],\n description: ws.description || `WebSocket connection: ${name}`,\n }\n }\n\n /**\n * Extract base URL from full URL or template\n */\n private extractBaseURL(url: string): string {\n // Remove template parts\n url = url.replace(/\\$\\{[^}]+\\}/g, \"\")\n url = url.replace(/`/g, \"\")\n\n try {\n const parsed = new URL(url)\n return `${parsed.protocol}//${parsed.host}`\n } catch {\n // If parsing fails, try to extract domain\n const match = url.match(/https?:\\/\\/([^/]+)/)\n return match ? match[0] : url\n }\n }\n\n /**\n * Infer API name from URL\n */\n private inferAPIName(url: string): string {\n try {\n const parsed = new URL(url)\n const hostname = parsed.hostname\n\n // Remove www. prefix\n const cleanHost = hostname.replace(/^www\\./, \"\")\n\n // Take first part of domain\n const parts = cleanHost.split(\".\")\n if (parts.length > 0) {\n // Capitalize first letter\n return parts[0].charAt(0).toUpperCase() + parts[0].slice(1) + \" API\"\n }\n } catch {\n // Fallback\n }\n\n return \"External API\"\n }\n\n /**\n * Add or merge integration into map\n */\n private addOrMergeIntegration(\n map: Map<string, ExternalIntegration>,\n integration: ExternalIntegration\n ): void {\n const key = `${integration.type}:${integration.name}`\n\n if (map.has(key)) {\n const existing = map.get(key)!\n\n // Merge usedIn\n existing.usedIn = [...new Set([...existing.usedIn, ...integration.usedIn])]\n\n // Merge calls\n if (integration.calls && existing.calls) {\n existing.calls.push(...integration.calls)\n } else if (integration.calls) {\n existing.calls = integration.calls\n }\n } else {\n map.set(key, integration)\n }\n }\n\n /**\n * Extract JSDoc description from node\n */\n private extractJSDocDescription(node: any): string | undefined {\n const jsDocs = node.getJsDocs?.() || []\n if (jsDocs.length === 0) return undefined\n\n const comment = jsDocs[0].getDescription().trim()\n return comment || undefined\n }\n}\n",
12
- "// Handler extraction from TypeScript code\n// Extracts message handlers and their state mutations\n\nimport { Project, type SourceFile, SyntaxKind, Node } from \"ts-morph\"\nimport type { MessageHandler, StateAssignment, VerificationCondition } from \"../types\"\n\nexport interface HandlerAnalysis {\n handlers: MessageHandler[]\n messageTypes: Set<string>\n}\n\nexport class HandlerExtractor {\n private project: Project\n private typeGuardCache: WeakMap<SourceFile, Map<string, string>>\n\n constructor(tsConfigPath: string) {\n this.project = new Project({\n tsConfigFilePath: tsConfigPath,\n })\n this.typeGuardCache = new WeakMap()\n }\n\n /**\n * Extract all message handlers from the codebase\n */\n extractHandlers(): HandlerAnalysis {\n const handlers: MessageHandler[] = []\n const messageTypes = new Set<string>()\n\n // Find all source files\n const sourceFiles = this.project.getSourceFiles()\n\n for (const sourceFile of sourceFiles) {\n const fileHandlers = this.extractFromFile(sourceFile)\n handlers.push(...fileHandlers)\n\n for (const handler of fileHandlers) {\n messageTypes.add(handler.messageType)\n }\n }\n\n return {\n handlers,\n messageTypes,\n }\n }\n\n /**\n * Extract handlers from a single source file\n */\n private extractFromFile(sourceFile: SourceFile): MessageHandler[] {\n const handlers: MessageHandler[] = []\n const filePath = sourceFile.getFilePath()\n\n // Determine context from file path\n const context = this.inferContext(filePath)\n\n // Find all handler patterns\n sourceFile.forEachDescendant((node) => {\n if (Node.isCallExpression(node)) {\n const expression = node.getExpression()\n\n // Pattern 1: .on() calls (bus.on, ws.on, socket.on, etc.)\n if (Node.isPropertyAccessExpression(expression)) {\n const methodName = expression.getName()\n\n if (methodName === \"on\" || methodName === \"addEventListener\") {\n const handler = this.extractHandler(node, context, filePath)\n if (handler) {\n handlers.push(handler)\n }\n }\n }\n }\n\n // Pattern 2: Switch/case message routers\n if (Node.isSwitchStatement(node)) {\n const switchHandlers = this.extractSwitchCaseHandlers(node, context, filePath)\n handlers.push(...switchHandlers)\n }\n\n // Pattern 3: Handler map patterns (const handlers = { 'EVENT': fn })\n if (Node.isVariableDeclaration(node)) {\n const mapHandlers = this.extractHandlerMapPattern(node, context, filePath)\n handlers.push(...mapHandlers)\n }\n\n // Pattern 4: Type guard if/else-if chains\n if (Node.isIfStatement(node)) {\n const typeGuardHandlers = this.extractTypeGuardHandlers(node, context, filePath)\n handlers.push(...typeGuardHandlers)\n }\n })\n\n return handlers\n }\n\n /**\n * Extract handler details from a .on() call expression\n */\n private extractHandler(\n callExpr: any,\n context: string,\n filePath: string\n ): MessageHandler | null {\n const args = callExpr.getArguments()\n\n if (args.length < 2) {\n return null\n }\n\n // First argument should be the message type (string literal)\n const messageTypeArg = args[0]\n let messageType: string | null = null\n\n if (Node.isStringLiteral(messageTypeArg)) {\n messageType = messageTypeArg.getLiteralValue()\n } else if (Node.isTemplateExpression(messageTypeArg)) {\n // Handle template literals if needed\n messageType = messageTypeArg.getText().replace(/[`'\"]/g, \"\")\n }\n\n if (!messageType) {\n return null\n }\n\n // Second argument is the handler function\n const handlerArg = args[1]\n const assignments: StateAssignment[] = []\n const preconditions: VerificationCondition[] = []\n const postconditions: VerificationCondition[] = []\n\n // Parse the handler function for state assignments and verification conditions\n if (Node.isArrowFunction(handlerArg) || Node.isFunctionExpression(handlerArg)) {\n this.extractAssignments(handlerArg, assignments)\n this.extractVerificationConditions(handlerArg, preconditions, postconditions)\n }\n\n const line = callExpr.getStartLineNumber()\n\n return {\n messageType,\n node: context, // Renamed from 'context' to 'node' for generalization\n assignments,\n preconditions,\n postconditions,\n location: {\n file: filePath,\n line,\n },\n }\n }\n\n /**\n * Extract state assignments from a handler function\n */\n private extractAssignments(funcNode: any, assignments: StateAssignment[]): void {\n funcNode.forEachDescendant((node: any) => {\n // Look for assignment expressions: state.field = value\n if (Node.isBinaryExpression(node)) {\n const operator = node.getOperatorToken().getText()\n\n if (operator === \"=\") {\n const left = node.getLeft()\n const right = node.getRight()\n\n // Check if left side is a state property access\n if (Node.isPropertyAccessExpression(left)) {\n const fieldPath = this.getPropertyPath(left)\n\n // Check if this is a state access\n if (fieldPath.startsWith(\"state.\")) {\n const field = fieldPath.substring(6) // Remove \"state.\" prefix\n const value = this.extractValue(right)\n\n if (value !== undefined) {\n assignments.push({\n field,\n value,\n })\n }\n }\n }\n }\n }\n })\n }\n\n /**\n * Extract verification conditions (requires/ensures) from a handler function\n */\n private extractVerificationConditions(\n funcNode: any,\n preconditions: VerificationCondition[],\n postconditions: VerificationCondition[]\n ): void {\n const body = funcNode.getBody()\n\n // Get all statements in the function body\n const statements = Node.isBlock(body) ? body.getStatements() : [body]\n\n statements.forEach((statement: any, index: number) => {\n // Look for expression statements that are function calls\n if (Node.isExpressionStatement(statement)) {\n const expr = statement.getExpression()\n\n if (Node.isCallExpression(expr)) {\n const callee = expr.getExpression()\n\n if (Node.isIdentifier(callee)) {\n const functionName = callee.getText()\n\n if (functionName === \"requires\") {\n // Extract precondition\n const condition = this.extractCondition(expr)\n if (condition) {\n preconditions.push(condition)\n }\n } else if (functionName === \"ensures\") {\n // Extract postcondition\n const condition = this.extractCondition(expr)\n if (condition) {\n postconditions.push(condition)\n }\n }\n }\n }\n }\n })\n }\n\n /**\n * Extract condition from a requires() or ensures() call\n */\n private extractCondition(callExpr: any): VerificationCondition | null {\n const args = callExpr.getArguments()\n\n if (args.length === 0) {\n return null\n }\n\n // First argument is the condition expression\n const conditionArg = args[0]\n const expression = conditionArg.getText()\n\n // Second argument (optional) is the message\n let message: string | undefined\n if (args.length >= 2 && Node.isStringLiteral(args[1])) {\n message = args[1].getLiteralValue()\n }\n\n const line = callExpr.getStartLineNumber()\n const column = callExpr.getStartLinePos()\n\n return {\n expression,\n message,\n location: {\n line,\n column,\n },\n }\n }\n\n /**\n * Get the full property access path (e.g., \"state.user.loggedIn\")\n */\n private getPropertyPath(node: any): string {\n const parts: string[] = []\n\n let current = node\n while (Node.isPropertyAccessExpression(current)) {\n parts.unshift(current.getName())\n current = current.getExpression()\n }\n\n // Add the base identifier\n if (Node.isIdentifier(current)) {\n parts.unshift(current.getText())\n }\n\n return parts.join(\".\")\n }\n\n /**\n * Extract a literal value from an expression\n */\n private extractValue(node: any): string | boolean | number | null | undefined {\n if (Node.isStringLiteral(node)) {\n return node.getLiteralValue()\n }\n\n if (Node.isNumericLiteral(node)) {\n return node.getLiteralValue()\n }\n\n if (node.getKind() === SyntaxKind.TrueKeyword) {\n return true\n }\n\n if (node.getKind() === SyntaxKind.FalseKeyword) {\n return false\n }\n\n if (node.getKind() === SyntaxKind.NullKeyword) {\n return null\n }\n\n // For complex expressions, return undefined (can't extract)\n return undefined\n }\n\n /**\n * Extract handlers from switch/case message router patterns\n * Detects: switch(message.type) { case 'EVENT': handler(); }\n */\n private extractSwitchCaseHandlers(\n switchNode: any,\n context: string,\n filePath: string\n ): MessageHandler[] {\n const handlers: MessageHandler[] = []\n\n try {\n // Check if switching on message.type or similar\n const expression = switchNode.getExpression()\n const expressionText = expression.getText()\n\n // Look for patterns like: message.type, data.type, msg.type, event.type\n if (!/\\.(type|kind|event|action)/.test(expressionText)) {\n return handlers\n }\n\n // Extract handlers from each case clause\n const caseClauses = switchNode.getClauses()\n for (const clause of caseClauses) {\n if (Node.isCaseClause(clause)) {\n const caseExpr = clause.getExpression()\n\n // Extract message type from case expression\n let messageType: string | null = null\n if (Node.isStringLiteral(caseExpr)) {\n messageType = caseExpr.getLiteralValue()\n }\n\n if (messageType) {\n const line = clause.getStartLineNumber()\n\n handlers.push({\n messageType,\n node: context,\n assignments: [],\n preconditions: [],\n postconditions: [],\n location: { file: filePath, line },\n })\n }\n }\n }\n } catch (error) {\n // Skip malformed switch statements\n }\n\n return handlers\n }\n\n /**\n * Extract handlers from handler map patterns\n * Detects: const handlers = { 'EVENT': handlerFn, ... }\n */\n private extractHandlerMapPattern(\n varDecl: any,\n context: string,\n filePath: string\n ): MessageHandler[] {\n const handlers: MessageHandler[] = []\n\n try {\n const initializer = varDecl.getInitializer()\n if (!initializer || !Node.isObjectLiteralExpression(initializer)) {\n return handlers\n }\n\n // Check if variable name suggests it's a handler map\n const varName = varDecl.getName().toLowerCase()\n if (!/(handler|listener|callback|event)s?/.test(varName)) {\n return handlers\n }\n\n // Extract handlers from object properties\n const properties = initializer.getProperties()\n for (const prop of properties) {\n if (Node.isPropertyAssignment(prop)) {\n const nameNode = prop.getNameNode()\n let messageType: string | null = null\n\n if (Node.isStringLiteral(nameNode)) {\n messageType = nameNode.getLiteralValue()\n } else if (Node.isIdentifier(nameNode)) {\n messageType = nameNode.getText()\n }\n\n if (messageType) {\n const line = prop.getStartLineNumber()\n\n handlers.push({\n messageType,\n node: context,\n assignments: [],\n preconditions: [],\n postconditions: [],\n location: { file: filePath, line },\n })\n }\n }\n }\n } catch (error) {\n // Skip malformed object literals\n }\n\n return handlers\n }\n\n /**\n * Extract handlers from type guard if/else-if patterns\n * Detects: if (isQueryMessage(msg)) { handleQuery(msg); }\n */\n private extractTypeGuardHandlers(\n ifNode: Node,\n context: string,\n filePath: string\n ): MessageHandler[] {\n const handlers: MessageHandler[] = []\n\n try {\n // Get the source file to find type predicates\n const sourceFile = ifNode.getSourceFile()\n\n // Use cached type guards or compute if not cached\n let typeGuards = this.typeGuardCache.get(sourceFile)\n if (!typeGuards) {\n typeGuards = this.findTypePredicateFunctions(sourceFile)\n this.typeGuardCache.set(sourceFile, typeGuards)\n }\n\n if (typeGuards.size === 0) {\n return handlers\n }\n\n // Process the if statement and all else-if chains\n let currentIf: Node = ifNode\n\n while (currentIf) {\n const handler = this.extractHandlerFromIfClause(currentIf, typeGuards, context, filePath)\n if (handler) {\n handlers.push(handler)\n }\n\n // Check for else-if\n const elseStatement = currentIf.getElseStatement()\n if (elseStatement && Node.isIfStatement(elseStatement)) {\n currentIf = elseStatement\n } else {\n break\n }\n }\n } catch (error) {\n // Skip malformed if statements\n }\n\n return handlers\n }\n\n /**\n * Extract handler from a single if clause\n */\n private extractHandlerFromIfClause(\n ifNode: Node,\n typeGuards: Map<string, string>,\n context: string,\n filePath: string\n ): MessageHandler | null {\n try {\n // Get condition expression\n const condition = ifNode.getExpression()\n\n // Check if condition is a call expression (function call)\n if (!Node.isCallExpression(condition)) {\n return null\n }\n\n // Get the function being called\n const funcExpr = condition.getExpression()\n let funcName: string | undefined\n\n if (Node.isIdentifier(funcExpr)) {\n funcName = funcExpr.getText()\n }\n\n // Try to find message type from local type guards first\n let messageType: string | undefined = undefined\n\n if (funcName && typeGuards.has(funcName)) {\n // Found in local file\n messageType = typeGuards.get(funcName)!\n } else if (Node.isIdentifier(funcExpr)) {\n // Not found locally - try to resolve from imports\n messageType = this.resolveImportedTypeGuard(funcExpr)\n }\n\n if (!messageType) {\n return null\n }\n\n // Found a type guard call! Use the message type\n const line = ifNode.getStartLineNumber()\n\n return {\n messageType,\n node: context,\n assignments: [],\n preconditions: [],\n postconditions: [],\n location: { file: filePath, line },\n }\n } catch (error) {\n return null\n }\n }\n\n /**\n * Find all type predicate functions in a source file\n * Returns a map of function name → message type\n */\n private findTypePredicateFunctions(sourceFile: SourceFile): Map<string, string> {\n const typeGuards = new Map<string, string>()\n\n sourceFile.forEachDescendant((node) => {\n if (Node.isFunctionDeclaration(node) || Node.isFunctionExpression(node) || Node.isArrowFunction(node)) {\n const returnType = node.getReturnType()\n const returnTypeText = returnType.getText()\n\n // Check if return type is a type predicate: \"arg is Type\"\n if (/is\\s+\\w+/.test(returnTypeText)) {\n // Extract function name\n let functionName: string | undefined\n if (Node.isFunctionDeclaration(node)) {\n functionName = node.getName()\n } else if (Node.isFunctionExpression(node)) {\n const parent = node.getParent()\n if (Node.isVariableDeclaration(parent)) {\n functionName = parent.getName()\n }\n } else if (Node.isArrowFunction(node)) {\n const parent = node.getParent()\n if (Node.isVariableDeclaration(parent)) {\n functionName = parent.getName()\n }\n }\n\n if (functionName) {\n // Extract message type from:\n // 1. Type predicate: \"msg is QueryMessage\" → \"query\" or \"QueryMessage\"\n // 2. Function body: return msg.type === 'query'\n\n let messageType: string | null = null\n\n // Strategy 1: Parse from type predicate name\n // \"msg is QueryMessage\" → extract \"QueryMessage\"\n const typeMatch = returnTypeText.match(/is\\s+(\\w+)/)\n if (typeMatch) {\n const typeName = typeMatch[1]\n // Convert \"QueryMessage\" → \"query\"\n messageType = this.extractMessageTypeFromTypeName(typeName)\n }\n\n // Strategy 2: Analyze function body for msg.type === 'value'\n if (!messageType) {\n const body = node.getBody()\n if (body) {\n const bodyText = body.getText()\n const typeValueMatch = bodyText.match(/\\.type\\s*===?\\s*['\"](\\w+)['\"]/)\n if (typeValueMatch) {\n messageType = typeValueMatch[1]\n }\n }\n }\n\n if (messageType) {\n typeGuards.set(functionName, messageType)\n }\n }\n }\n }\n })\n\n return typeGuards\n }\n\n /**\n * Resolve type guard from imported function\n * Uses ts-morph symbol resolution to find definition across files\n */\n private resolveImportedTypeGuard(identifier: any): string | null {\n try {\n // Get the definition nodes (where the function is defined)\n const definitions = identifier.getDefinitionNodes()\n\n for (const def of definitions) {\n // Check if it's a function with type predicate return type\n if (Node.isFunctionDeclaration(def) ||\n Node.isFunctionExpression(def) ||\n Node.isArrowFunction(def)) {\n\n const returnType = def.getReturnType()\n const returnTypeText = returnType.getText()\n\n // Check for type predicate: \"arg is Type\"\n if (/is\\s+\\w+/.test(returnTypeText)) {\n // Strategy 1: Parse from type predicate name\n // \"msg is QueryMessage\" → extract \"QueryMessage\"\n const typeMatch = returnTypeText.match(/is\\s+(\\w+)/)\n if (typeMatch) {\n const typeName = typeMatch[1]\n // Convert \"QueryMessage\" → \"query\"\n return this.extractMessageTypeFromTypeName(typeName)\n }\n\n // Strategy 2: Analyze function body for msg.type === 'value'\n const body = def.getBody()\n if (body) {\n const bodyText = body.getText()\n const typeValueMatch = bodyText.match(/\\.type\\s*===?\\s*['\"](\\w+)['\"]/)\n if (typeValueMatch) {\n return typeValueMatch[1]\n }\n }\n }\n }\n }\n } catch (error) {\n // Skip resolution errors (e.g., external dependencies, malformed code)\n }\n\n return null\n }\n\n /**\n * Extract message type from TypeScript type name\n * Examples:\n * QueryMessage → query\n * CommandMessage → command\n * SubscribeMessage → subscribe\n */\n private extractMessageTypeFromTypeName(typeName: string): string {\n // Remove common suffixes and convert to lowercase\n const messageType = typeName\n .replace(/Message$/, '')\n .replace(/Event$/, '')\n .replace(/Request$/, '')\n .replace(/Command$/, '')\n .replace(/Query$/, '')\n .toLowerCase()\n\n return messageType\n }\n\n /**\n * Infer the context (background, content, popup, etc.) from file path\n */\n private inferContext(filePath: string): string {\n const path = filePath.toLowerCase()\n\n // Chrome extension contexts\n if (path.includes(\"/background/\") || path.includes(\"\\\\background\\\\\")) {\n return \"background\"\n }\n if (path.includes(\"/content/\") || path.includes(\"\\\\content\\\\\")) {\n return \"content\"\n }\n if (path.includes(\"/popup/\") || path.includes(\"\\\\popup\\\\\")) {\n return \"popup\"\n }\n if (path.includes(\"/devtools/\") || path.includes(\"\\\\devtools\\\\\")) {\n return \"devtools\"\n }\n if (path.includes(\"/options/\") || path.includes(\"\\\\options\\\\\")) {\n return \"options\"\n }\n if (path.includes(\"/offscreen/\") || path.includes(\"\\\\offscreen\\\\\")) {\n return \"offscreen\"\n }\n\n // WebSocket/server app contexts\n if (path.includes(\"/server/\") || path.includes(\"\\\\server\\\\\") || path.includes(\"/server.\")) {\n return \"server\"\n }\n if (path.includes(\"/client/\") || path.includes(\"\\\\client\\\\\") || path.includes(\"/client.\")) {\n return \"client\"\n }\n\n // PWA/Worker contexts\n if (path.includes(\"/worker/\") || path.includes(\"\\\\worker\\\\\") || path.includes(\"service-worker\")) {\n return \"worker\"\n }\n\n return \"unknown\"\n }\n}\n\nexport function extractHandlers(tsConfigPath: string): HandlerAnalysis {\n const extractor = new HandlerExtractor(tsConfigPath)\n return extractor.extractHandlers()\n}\n",
12
+ "// Handler extraction from TypeScript code\n// Extracts message handlers and their state mutations\n\nimport { Project, type SourceFile, SyntaxKind, Node } from \"ts-morph\"\nimport type { MessageHandler, StateAssignment, VerificationCondition } from \"../types\"\n\nexport interface HandlerAnalysis {\n handlers: MessageHandler[]\n messageTypes: Set<string>\n}\n\nexport class HandlerExtractor {\n private project: Project\n private typeGuardCache: WeakMap<SourceFile, Map<string, string>>\n\n constructor(tsConfigPath: string) {\n this.project = new Project({\n tsConfigFilePath: tsConfigPath,\n compilerOptions: {\n // Allow .ts/.tsx extensions in imports (Bun/Deno style)\n allowImportingTsExtensions: true,\n // Use bundler module resolution (supports .ts extensions)\n moduleResolution: 99, // ModuleResolutionKind.Bundler\n },\n })\n this.typeGuardCache = new WeakMap()\n }\n\n /**\n * Extract all message handlers from the codebase\n */\n extractHandlers(): HandlerAnalysis {\n const handlers: MessageHandler[] = []\n const messageTypes = new Set<string>()\n\n // Find all source files\n const sourceFiles = this.project.getSourceFiles()\n\n if (process.env.POLLY_DEBUG) {\n console.log(`[DEBUG] Loaded ${sourceFiles.length} source files`)\n if (sourceFiles.length <= 20) {\n // Only log file names if there aren't too many\n for (const sf of sourceFiles) {\n console.log(`[DEBUG] - ${sf.getFilePath()}`)\n }\n }\n }\n\n for (const sourceFile of sourceFiles) {\n const fileHandlers = this.extractFromFile(sourceFile)\n handlers.push(...fileHandlers)\n\n for (const handler of fileHandlers) {\n messageTypes.add(handler.messageType)\n }\n }\n\n if (process.env.POLLY_DEBUG) {\n console.log(`[DEBUG] Total handlers extracted: ${handlers.length}`)\n }\n\n return {\n handlers,\n messageTypes,\n }\n }\n\n /**\n * Extract handlers from a single source file\n */\n private extractFromFile(sourceFile: SourceFile): MessageHandler[] {\n const handlers: MessageHandler[] = []\n const filePath = sourceFile.getFilePath()\n\n // Determine context from file path\n const context = this.inferContext(filePath)\n\n // Find all handler patterns\n sourceFile.forEachDescendant((node) => {\n if (Node.isCallExpression(node)) {\n const expression = node.getExpression()\n\n // Pattern 1: .on() calls (bus.on, ws.on, socket.on, etc.)\n if (Node.isPropertyAccessExpression(expression)) {\n const methodName = expression.getName()\n\n if (methodName === \"on\" || methodName === \"addEventListener\") {\n const handler = this.extractHandler(node, context, filePath)\n if (handler) {\n handlers.push(handler)\n }\n }\n }\n }\n\n // Pattern 2: Switch/case message routers\n if (Node.isSwitchStatement(node)) {\n const switchHandlers = this.extractSwitchCaseHandlers(node, context, filePath)\n handlers.push(...switchHandlers)\n }\n\n // Pattern 3: Handler map patterns (const handlers = { 'EVENT': fn })\n if (Node.isVariableDeclaration(node)) {\n const mapHandlers = this.extractHandlerMapPattern(node, context, filePath)\n handlers.push(...mapHandlers)\n }\n\n // Pattern 4: Type guard if/else-if chains\n if (Node.isIfStatement(node)) {\n const typeGuardHandlers = this.extractTypeGuardHandlers(node, context, filePath)\n handlers.push(...typeGuardHandlers)\n }\n })\n\n return handlers\n }\n\n /**\n * Extract handler details from a .on() call expression\n */\n private extractHandler(\n callExpr: any,\n context: string,\n filePath: string\n ): MessageHandler | null {\n const args = callExpr.getArguments()\n\n if (args.length < 2) {\n return null\n }\n\n // First argument should be the message type (string literal)\n const messageTypeArg = args[0]\n let messageType: string | null = null\n\n if (Node.isStringLiteral(messageTypeArg)) {\n messageType = messageTypeArg.getLiteralValue()\n } else if (Node.isTemplateExpression(messageTypeArg)) {\n // Handle template literals if needed\n messageType = messageTypeArg.getText().replace(/[`'\"]/g, \"\")\n }\n\n if (!messageType) {\n return null\n }\n\n // Second argument is the handler function\n const handlerArg = args[1]\n const assignments: StateAssignment[] = []\n const preconditions: VerificationCondition[] = []\n const postconditions: VerificationCondition[] = []\n\n // Parse the handler function for state assignments and verification conditions\n if (Node.isArrowFunction(handlerArg) || Node.isFunctionExpression(handlerArg)) {\n this.extractAssignments(handlerArg, assignments)\n this.extractVerificationConditions(handlerArg, preconditions, postconditions)\n }\n\n const line = callExpr.getStartLineNumber()\n\n return {\n messageType,\n node: context, // Renamed from 'context' to 'node' for generalization\n assignments,\n preconditions,\n postconditions,\n location: {\n file: filePath,\n line,\n },\n }\n }\n\n /**\n * Extract state assignments from a handler function\n */\n private extractAssignments(funcNode: any, assignments: StateAssignment[]): void {\n funcNode.forEachDescendant((node: any) => {\n // Look for assignment expressions: state.field = value\n if (Node.isBinaryExpression(node)) {\n const operator = node.getOperatorToken().getText()\n\n if (operator === \"=\") {\n const left = node.getLeft()\n const right = node.getRight()\n\n // Check if left side is a state property access\n if (Node.isPropertyAccessExpression(left)) {\n const fieldPath = this.getPropertyPath(left)\n\n // Check if this is a state access\n if (fieldPath.startsWith(\"state.\")) {\n const field = fieldPath.substring(6) // Remove \"state.\" prefix\n const value = this.extractValue(right)\n\n if (value !== undefined) {\n assignments.push({\n field,\n value,\n })\n }\n }\n }\n }\n }\n })\n }\n\n /**\n * Extract verification conditions (requires/ensures) from a handler function\n */\n private extractVerificationConditions(\n funcNode: any,\n preconditions: VerificationCondition[],\n postconditions: VerificationCondition[]\n ): void {\n const body = funcNode.getBody()\n\n // Get all statements in the function body\n const statements = Node.isBlock(body) ? body.getStatements() : [body]\n\n statements.forEach((statement: any, index: number) => {\n // Look for expression statements that are function calls\n if (Node.isExpressionStatement(statement)) {\n const expr = statement.getExpression()\n\n if (Node.isCallExpression(expr)) {\n const callee = expr.getExpression()\n\n if (Node.isIdentifier(callee)) {\n const functionName = callee.getText()\n\n if (functionName === \"requires\") {\n // Extract precondition\n const condition = this.extractCondition(expr)\n if (condition) {\n preconditions.push(condition)\n }\n } else if (functionName === \"ensures\") {\n // Extract postcondition\n const condition = this.extractCondition(expr)\n if (condition) {\n postconditions.push(condition)\n }\n }\n }\n }\n }\n })\n }\n\n /**\n * Extract condition from a requires() or ensures() call\n */\n private extractCondition(callExpr: any): VerificationCondition | null {\n const args = callExpr.getArguments()\n\n if (args.length === 0) {\n return null\n }\n\n // First argument is the condition expression\n const conditionArg = args[0]\n const expression = conditionArg.getText()\n\n // Second argument (optional) is the message\n let message: string | undefined\n if (args.length >= 2 && Node.isStringLiteral(args[1])) {\n message = args[1].getLiteralValue()\n }\n\n const line = callExpr.getStartLineNumber()\n const column = callExpr.getStartLinePos()\n\n return {\n expression,\n message,\n location: {\n line,\n column,\n },\n }\n }\n\n /**\n * Get the full property access path (e.g., \"state.user.loggedIn\")\n */\n private getPropertyPath(node: any): string {\n const parts: string[] = []\n\n let current = node\n while (Node.isPropertyAccessExpression(current)) {\n parts.unshift(current.getName())\n current = current.getExpression()\n }\n\n // Add the base identifier\n if (Node.isIdentifier(current)) {\n parts.unshift(current.getText())\n }\n\n return parts.join(\".\")\n }\n\n /**\n * Extract a literal value from an expression\n */\n private extractValue(node: any): string | boolean | number | null | undefined {\n if (Node.isStringLiteral(node)) {\n return node.getLiteralValue()\n }\n\n if (Node.isNumericLiteral(node)) {\n return node.getLiteralValue()\n }\n\n if (node.getKind() === SyntaxKind.TrueKeyword) {\n return true\n }\n\n if (node.getKind() === SyntaxKind.FalseKeyword) {\n return false\n }\n\n if (node.getKind() === SyntaxKind.NullKeyword) {\n return null\n }\n\n // For complex expressions, return undefined (can't extract)\n return undefined\n }\n\n /**\n * Extract handlers from switch/case message router patterns\n * Detects: switch(message.type) { case 'EVENT': handler(); }\n */\n private extractSwitchCaseHandlers(\n switchNode: any,\n context: string,\n filePath: string\n ): MessageHandler[] {\n const handlers: MessageHandler[] = []\n\n try {\n // Check if switching on message.type or similar\n const expression = switchNode.getExpression()\n const expressionText = expression.getText()\n\n // Look for patterns like: message.type, data.type, msg.type, event.type\n if (!/\\.(type|kind|event|action)/.test(expressionText)) {\n return handlers\n }\n\n // Extract handlers from each case clause\n const caseClauses = switchNode.getClauses()\n for (const clause of caseClauses) {\n if (Node.isCaseClause(clause)) {\n const caseExpr = clause.getExpression()\n\n // Extract message type from case expression\n let messageType: string | null = null\n if (Node.isStringLiteral(caseExpr)) {\n messageType = caseExpr.getLiteralValue()\n }\n\n if (messageType) {\n const line = clause.getStartLineNumber()\n\n handlers.push({\n messageType,\n node: context,\n assignments: [],\n preconditions: [],\n postconditions: [],\n location: { file: filePath, line },\n })\n }\n }\n }\n } catch (error) {\n // Skip malformed switch statements\n }\n\n return handlers\n }\n\n /**\n * Extract handlers from handler map patterns\n * Detects: const handlers = { 'EVENT': handlerFn, ... }\n */\n private extractHandlerMapPattern(\n varDecl: any,\n context: string,\n filePath: string\n ): MessageHandler[] {\n const handlers: MessageHandler[] = []\n\n try {\n const initializer = varDecl.getInitializer()\n if (!initializer || !Node.isObjectLiteralExpression(initializer)) {\n return handlers\n }\n\n // Check if variable name suggests it's a handler map\n const varName = varDecl.getName().toLowerCase()\n if (!/(handler|listener|callback|event)s?/.test(varName)) {\n return handlers\n }\n\n // Extract handlers from object properties\n const properties = initializer.getProperties()\n for (const prop of properties) {\n if (Node.isPropertyAssignment(prop)) {\n const nameNode = prop.getNameNode()\n let messageType: string | null = null\n\n if (Node.isStringLiteral(nameNode)) {\n messageType = nameNode.getLiteralValue()\n } else if (Node.isIdentifier(nameNode)) {\n messageType = nameNode.getText()\n }\n\n if (messageType) {\n const line = prop.getStartLineNumber()\n\n handlers.push({\n messageType,\n node: context,\n assignments: [],\n preconditions: [],\n postconditions: [],\n location: { file: filePath, line },\n })\n }\n }\n }\n } catch (error) {\n // Skip malformed object literals\n }\n\n return handlers\n }\n\n /**\n * Extract handlers from type guard if/else-if patterns\n * Detects: if (isQueryMessage(msg)) { handleQuery(msg); }\n */\n private extractTypeGuardHandlers(\n ifNode: Node,\n context: string,\n filePath: string\n ): MessageHandler[] {\n const handlers: MessageHandler[] = []\n\n try {\n // Get the source file to find type predicates\n const sourceFile = ifNode.getSourceFile()\n\n // Use cached type guards or compute if not cached\n let typeGuards = this.typeGuardCache.get(sourceFile)\n if (!typeGuards) {\n typeGuards = this.findTypePredicateFunctions(sourceFile)\n this.typeGuardCache.set(sourceFile, typeGuards)\n }\n\n // DEBUG: Log local type guards found\n if (process.env.POLLY_DEBUG) {\n console.log(`[DEBUG] File: ${sourceFile.getBaseName()}`)\n console.log(`[DEBUG] Local type guards found: ${typeGuards.size}`)\n if (typeGuards.size > 0) {\n for (const [name, type] of typeGuards.entries()) {\n console.log(`[DEBUG] - ${name} → ${type}`)\n }\n }\n }\n\n // Don't return early - we still want to try imported type guards\n // even if no local type guards exist\n\n // Process the if statement and all else-if chains\n let currentIf: Node = ifNode\n\n while (currentIf) {\n const handler = this.extractHandlerFromIfClause(currentIf, typeGuards, context, filePath)\n if (handler) {\n handlers.push(handler)\n\n if (process.env.POLLY_DEBUG) {\n console.log(`[DEBUG] Found handler: ${handler.messageType} at line ${handler.location.line}`)\n }\n }\n\n // Check for else-if\n const elseStatement = currentIf.getElseStatement()\n if (elseStatement && Node.isIfStatement(elseStatement)) {\n currentIf = elseStatement\n } else {\n break\n }\n }\n } catch (error) {\n // DEBUG: Log errors\n if (process.env.POLLY_DEBUG) {\n console.log(`[DEBUG] Error in extractTypeGuardHandlers: ${error}`)\n }\n }\n\n return handlers\n }\n\n /**\n * Extract handler from a single if clause\n */\n private extractHandlerFromIfClause(\n ifNode: Node,\n typeGuards: Map<string, string>,\n context: string,\n filePath: string\n ): MessageHandler | null {\n try {\n // Get condition expression\n const condition = ifNode.getExpression()\n\n // Check if condition is a call expression (function call)\n if (!Node.isCallExpression(condition)) {\n return null\n }\n\n // Get the function being called\n const funcExpr = condition.getExpression()\n let funcName: string | undefined\n\n if (Node.isIdentifier(funcExpr)) {\n funcName = funcExpr.getText()\n }\n\n if (process.env.POLLY_DEBUG && funcName) {\n console.log(`[DEBUG] Processing if condition with function: ${funcName}`)\n }\n\n // Try to find message type from local type guards first\n let messageType: string | undefined = undefined\n\n if (funcName && typeGuards.has(funcName)) {\n // Found in local file\n messageType = typeGuards.get(funcName)!\n\n if (process.env.POLLY_DEBUG) {\n console.log(`[DEBUG] Found in local type guards: ${funcName} → ${messageType}`)\n }\n } else if (Node.isIdentifier(funcExpr)) {\n // Not found locally - try to resolve from imports\n if (process.env.POLLY_DEBUG) {\n console.log(`[DEBUG] Not found locally, trying import resolution for: ${funcName}`)\n }\n\n messageType = this.resolveImportedTypeGuard(funcExpr)\n }\n\n if (!messageType) {\n if (process.env.POLLY_DEBUG && funcName) {\n console.log(`[DEBUG] Could not resolve message type for: ${funcName}`)\n }\n return null\n }\n\n // Found a type guard call! Use the message type\n const line = ifNode.getStartLineNumber()\n\n return {\n messageType,\n node: context,\n assignments: [],\n preconditions: [],\n postconditions: [],\n location: { file: filePath, line },\n }\n } catch (error) {\n return null\n }\n }\n\n /**\n * Find all type predicate functions in a source file\n * Returns a map of function name → message type\n */\n private findTypePredicateFunctions(sourceFile: SourceFile): Map<string, string> {\n const typeGuards = new Map<string, string>()\n\n sourceFile.forEachDescendant((node) => {\n if (Node.isFunctionDeclaration(node) || Node.isFunctionExpression(node) || Node.isArrowFunction(node)) {\n const returnType = node.getReturnType()\n const returnTypeText = returnType.getText()\n\n // Check if return type is a type predicate: \"arg is Type\"\n if (/is\\s+\\w+/.test(returnTypeText)) {\n // Extract function name\n let functionName: string | undefined\n if (Node.isFunctionDeclaration(node)) {\n functionName = node.getName()\n } else if (Node.isFunctionExpression(node)) {\n const parent = node.getParent()\n if (Node.isVariableDeclaration(parent)) {\n functionName = parent.getName()\n }\n } else if (Node.isArrowFunction(node)) {\n const parent = node.getParent()\n if (Node.isVariableDeclaration(parent)) {\n functionName = parent.getName()\n }\n }\n\n if (functionName) {\n // Extract message type from:\n // 1. Type predicate: \"msg is QueryMessage\" → \"query\" or \"QueryMessage\"\n // 2. Function body: return msg.type === 'query'\n\n let messageType: string | null = null\n\n // Strategy 1: Parse from type predicate name\n // \"msg is QueryMessage\" → extract \"QueryMessage\"\n const typeMatch = returnTypeText.match(/is\\s+(\\w+)/)\n if (typeMatch) {\n const typeName = typeMatch[1]\n // Convert \"QueryMessage\" → \"query\"\n messageType = this.extractMessageTypeFromTypeName(typeName)\n }\n\n // Strategy 2: Analyze function body for msg.type === 'value'\n if (!messageType) {\n const body = node.getBody()\n if (body) {\n const bodyText = body.getText()\n const typeValueMatch = bodyText.match(/\\.type\\s*===?\\s*['\"](\\w+)['\"]/)\n if (typeValueMatch) {\n messageType = typeValueMatch[1]\n }\n }\n }\n\n if (messageType) {\n typeGuards.set(functionName, messageType)\n }\n }\n }\n }\n })\n\n return typeGuards\n }\n\n /**\n * Resolve type guard from imported function\n * Uses ts-morph symbol resolution to find definition across files\n */\n private resolveImportedTypeGuard(identifier: any): string | null {\n try {\n const funcName = identifier.getText()\n\n // Get the definition nodes (where the function is defined)\n const definitions = identifier.getDefinitionNodes()\n\n if (definitions.length === 0) {\n if (process.env.POLLY_DEBUG) {\n console.log(`[DEBUG] No definitions found for imported function: ${funcName}`)\n }\n return null\n }\n\n for (const def of definitions) {\n // Check if it's a function with type predicate return type\n if (Node.isFunctionDeclaration(def) ||\n Node.isFunctionExpression(def) ||\n Node.isArrowFunction(def)) {\n\n const returnType = def.getReturnType()\n const returnTypeText = returnType.getText()\n\n // DEBUG: Log return type\n if (process.env.POLLY_DEBUG) {\n console.log(`[DEBUG] Function ${funcName} return type: ${returnTypeText}`)\n }\n\n // Check for type predicate: \"arg is Type\"\n if (/is\\s+\\w+/.test(returnTypeText)) {\n // Strategy 1: Parse from type predicate name\n // \"msg is QueryMessage\" → extract \"QueryMessage\"\n const typeMatch = returnTypeText.match(/is\\s+(\\w+)/)\n if (typeMatch) {\n const typeName = typeMatch[1]\n // Convert \"QueryMessage\" → \"query\"\n const messageType = this.extractMessageTypeFromTypeName(typeName)\n\n if (process.env.POLLY_DEBUG) {\n console.log(`[DEBUG] Resolved ${funcName} → ${messageType}`)\n }\n\n return messageType\n }\n\n // Strategy 2: Analyze function body for msg.type === 'value'\n const body = def.getBody()\n if (body) {\n const bodyText = body.getText()\n const typeValueMatch = bodyText.match(/\\.type\\s*===?\\s*['\"](\\w+)['\"]/)\n if (typeValueMatch) {\n const messageType = typeValueMatch[1]\n\n if (process.env.POLLY_DEBUG) {\n console.log(`[DEBUG] Resolved ${funcName} → ${messageType} (from body)`)\n }\n\n return messageType\n }\n }\n }\n }\n }\n } catch (error) {\n // DEBUG: Log errors\n if (process.env.POLLY_DEBUG) {\n console.log(`[DEBUG] Error resolving imported type guard: ${error}`)\n }\n }\n\n return null\n }\n\n /**\n * Extract message type from TypeScript type name\n * Examples:\n * QueryMessage → query\n * CommandMessage → command\n * SubscribeMessage → subscribe\n */\n private extractMessageTypeFromTypeName(typeName: string): string {\n // Remove common suffixes and convert to lowercase\n const messageType = typeName\n .replace(/Message$/, '')\n .replace(/Event$/, '')\n .replace(/Request$/, '')\n .replace(/Command$/, '')\n .replace(/Query$/, '')\n .toLowerCase()\n\n return messageType\n }\n\n /**\n * Infer the context (background, content, popup, etc.) from file path\n */\n private inferContext(filePath: string): string {\n const path = filePath.toLowerCase()\n\n // Chrome extension contexts\n if (path.includes(\"/background/\") || path.includes(\"\\\\background\\\\\")) {\n return \"background\"\n }\n if (path.includes(\"/content/\") || path.includes(\"\\\\content\\\\\")) {\n return \"content\"\n }\n if (path.includes(\"/popup/\") || path.includes(\"\\\\popup\\\\\")) {\n return \"popup\"\n }\n if (path.includes(\"/devtools/\") || path.includes(\"\\\\devtools\\\\\")) {\n return \"devtools\"\n }\n if (path.includes(\"/options/\") || path.includes(\"\\\\options\\\\\")) {\n return \"options\"\n }\n if (path.includes(\"/offscreen/\") || path.includes(\"\\\\offscreen\\\\\")) {\n return \"offscreen\"\n }\n\n // WebSocket/server app contexts\n if (path.includes(\"/server/\") || path.includes(\"\\\\server\\\\\") || path.includes(\"/server.\")) {\n return \"server\"\n }\n if (path.includes(\"/client/\") || path.includes(\"\\\\client\\\\\") || path.includes(\"/client.\")) {\n return \"client\"\n }\n\n // PWA/Worker contexts\n if (path.includes(\"/worker/\") || path.includes(\"\\\\worker\\\\\") || path.includes(\"service-worker\")) {\n return \"worker\"\n }\n\n return \"unknown\"\n }\n}\n\nexport function extractHandlers(tsConfigPath: string): HandlerAnalysis {\n const extractor = new HandlerExtractor(tsConfigPath)\n return extractor.extractHandlers()\n}\n",
13
13
  "// ADR (Architecture Decision Record) extractor\n// Parses ADRs from markdown files following Michael Nygard's format\n\nimport * as fs from \"node:fs\"\nimport * as path from \"node:path\"\nimport type { ADR, ADRStatus, ADRLink, ADRCollection } from \"../types/adr\"\n\nexport class ADRExtractor {\n private projectRoot: string\n\n constructor(projectRoot: string) {\n this.projectRoot = projectRoot\n }\n\n /**\n * Extract ADRs from docs/adr directory\n */\n extract(): ADRCollection {\n const adrDir = this.findADRDirectory()\n\n if (!adrDir || !fs.existsSync(adrDir)) {\n return {\n adrs: [],\n directory: adrDir || path.join(this.projectRoot, \"docs\", \"adr\"),\n }\n }\n\n const files = fs\n .readdirSync(adrDir)\n .filter((file) => file.endsWith(\".md\"))\n .map((file) => path.join(adrDir, file))\n\n const adrs: ADR[] = []\n\n for (const file of files) {\n try {\n const adr = this.parseADR(file)\n if (adr) {\n adrs.push(adr)\n }\n } catch (error) {\n console.warn(`Failed to parse ADR: ${file}`, error)\n }\n }\n\n // Sort by ID\n adrs.sort((a, b) => a.id.localeCompare(b.id))\n\n return {\n adrs,\n directory: adrDir,\n }\n }\n\n /**\n * Find ADR directory\n */\n private findADRDirectory(): string | null {\n const candidates = [\n path.join(this.projectRoot, \"docs\", \"adr\"),\n path.join(this.projectRoot, \"docs\", \"architecture\", \"decisions\"),\n path.join(this.projectRoot, \"adr\"),\n path.join(this.projectRoot, \"architecture\", \"decisions\"),\n ]\n\n for (const candidate of candidates) {\n if (fs.existsSync(candidate)) {\n return candidate\n }\n }\n\n return null\n }\n\n /**\n * Parse ADR from markdown file\n */\n private parseADR(filePath: string): ADR | null {\n const content = fs.readFileSync(filePath, \"utf-8\")\n const fileName = path.basename(filePath, \".md\")\n\n // Extract ID from filename (e.g., \"0001-use-preact.md\" → \"0001\")\n const idMatch = fileName.match(/^(\\d+)/)\n const id = idMatch ? idMatch[1] : fileName\n\n // Extract title from first heading\n const titleMatch = content.match(/^#\\s+(.+)$/m)\n const title = titleMatch ? titleMatch[1].trim() : fileName\n\n // Extract status\n const status = this.extractStatus(content)\n\n // Extract date\n const date = this.extractDate(content)\n\n // Extract sections\n const context = this.extractSection(content, \"Context\")\n const decision = this.extractSection(content, \"Decision\")\n const consequences = this.extractSection(content, \"Consequences\")\n\n // Extract alternatives (if present)\n const alternativesSection = this.extractSection(content, \"Alternatives\")\n const alternatives = alternativesSection\n ? alternativesSection\n .split(\"\\n\")\n .filter((line) => line.trim().startsWith(\"-\"))\n .map((line) => line.replace(/^-\\s*/, \"\").trim())\n : undefined\n\n // Extract links\n const links = this.extractLinks(content)\n\n if (!context || !decision || !consequences) {\n // Not a valid ADR format\n return null\n }\n\n return {\n id,\n title,\n status,\n date,\n context,\n decision,\n consequences,\n alternatives,\n links,\n source: filePath,\n }\n }\n\n /**\n * Extract status from content\n */\n private extractStatus(content: string): ADRStatus {\n const statusMatch = content.match(/Status:\\s*(\\w+)/i)\n if (!statusMatch) return \"accepted\"\n\n const status = statusMatch[1].toLowerCase()\n if ([\"proposed\", \"accepted\", \"deprecated\", \"superseded\"].includes(status)) {\n return status as ADRStatus\n }\n\n return \"accepted\"\n }\n\n /**\n * Extract date from content\n */\n private extractDate(content: string): string {\n // Try to find date in various formats\n const dateMatch =\n content.match(/Date:\\s*(\\d{4}-\\d{2}-\\d{2})/i) ||\n content.match(/(\\d{4}-\\d{2}-\\d{2})/i)\n\n return dateMatch ? dateMatch[1] : new Date().toISOString().split(\"T\")[0]\n }\n\n /**\n * Extract section content\n */\n private extractSection(content: string, sectionName: string): string {\n // Match section heading and capture content until next heading or end\n const regex = new RegExp(\n `##\\\\s+${sectionName}\\\\s*\\\\n([\\\\s\\\\S]*?)(?=\\\\n##|$)`,\n \"i\"\n )\n const match = content.match(regex)\n\n return match ? match[1].trim() : \"\"\n }\n\n /**\n * Extract links to other ADRs\n */\n private extractLinks(content: string): ADRLink[] {\n const links: ADRLink[] = []\n\n // Look for supersedes/superseded-by links\n const supersedesMatch = content.match(/Supersedes:\\s*ADR-(\\d+)/gi)\n if (supersedesMatch) {\n for (const match of supersedesMatch) {\n const idMatch = match.match(/ADR-(\\d+)/)\n if (idMatch) {\n links.push({\n type: \"supersedes\",\n adrId: idMatch[1],\n })\n }\n }\n }\n\n const supersededByMatch = content.match(/Superseded by:\\s*ADR-(\\d+)/gi)\n if (supersededByMatch) {\n for (const match of supersededByMatch) {\n const idMatch = match.match(/ADR-(\\d+)/)\n if (idMatch) {\n links.push({\n type: \"superseded-by\",\n adrId: idMatch[1],\n })\n }\n }\n }\n\n return links\n }\n}\n\n/**\n * Extract ADRs from project\n */\nexport function extractADRs(projectRoot: string): ADRCollection {\n const extractor = new ADRExtractor(projectRoot)\n return extractor.extract()\n}\n",
14
14
  "// Structurizr DSL generator\n\nimport type { ArchitectureAnalysis } from \"../../analysis/src\";\n\nexport interface StructurizrDSLOptions {\n /** Include dynamic diagrams for message flows */\n includeDynamicDiagrams?: boolean;\n\n /** Include component diagrams for contexts */\n includeComponentDiagrams?: boolean;\n\n /** Which contexts to generate component diagrams for */\n componentDiagramContexts?: string[];\n\n /** Custom theme URL */\n theme?: string;\n\n /** Custom styles */\n styles?: Record<string, string>;\n}\n\nexport class StructurizrDSLGenerator {\n private analysis: ArchitectureAnalysis;\n private options: StructurizrDSLOptions;\n\n constructor(analysis: ArchitectureAnalysis, options: StructurizrDSLOptions = {}) {\n this.analysis = analysis;\n this.options = {\n includeDynamicDiagrams: true,\n includeComponentDiagrams: true,\n componentDiagramContexts: [\"background\"],\n theme: \"https://static.structurizr.com/themes/default\",\n ...options,\n };\n }\n\n /**\n * Generate complete Structurizr DSL\n */\n generate(): string {\n const parts: string[] = [];\n\n parts.push(this.generateWorkspaceHeader());\n parts.push(this.generateModel());\n parts.push(this.generateViews());\n parts.push(this.generateWorkspaceFooter());\n\n return parts.join(\"\\n\\n\");\n }\n\n /**\n * Generate workspace header\n */\n private generateWorkspaceHeader(): string {\n const { name, description } = this.analysis.system;\n\n const parts = [`workspace \"${this.escape(name)}\" \"${this.escape(description || \"\")}\" {`];\n parts.push(\"\");\n parts.push(\" !identifiers hierarchical\");\n\n // Add ADRs if present\n if (this.analysis.adrs && this.analysis.adrs.adrs.length > 0) {\n parts.push(\" !adrs \" + this.analysis.adrs.directory);\n }\n\n return parts.join(\"\\n\");\n }\n\n /**\n * Generate workspace footer\n */\n private generateWorkspaceFooter(): string {\n return \"}\";\n }\n\n /**\n * Generate model section\n */\n private generateModel(): string {\n const parts: string[] = [];\n\n parts.push(\" model {\");\n parts.push(this.generatePeople());\n parts.push(this.generateExternalSystems());\n parts.push(this.generateMainSystem());\n parts.push(\" }\");\n\n return parts.join(\"\\n\\n\");\n }\n\n /**\n * Generate people/actors\n */\n private generatePeople(): string {\n return ` user = person \"User\" \"Extension user\"`;\n }\n\n /**\n * Generate external systems\n */\n private generateExternalSystems(): string {\n const parts: string[] = [];\n\n for (const integration of this.analysis.integrations) {\n if (integration.type === \"api\" || integration.type === \"websocket\") {\n const tech =\n integration.technology || (integration.type === \"websocket\" ? \"WebSocket\" : \"REST API\");\n let desc = integration.description || \"\";\n\n // Generate better description from API calls if available\n if (!desc && integration.calls && integration.calls.length > 0) {\n const endpoints = integration.calls\n .slice(0, 3)\n .map((c) => c.endpoint)\n .join(\", \");\n const methods = [...new Set(integration.calls.map((c) => c.method))].join(\", \");\n desc = `External API with endpoints: ${endpoints}. Methods: ${methods}`;\n }\n\n parts.push(\n ` ${this.toId(integration.name)} = softwareSystem \"${this.escape(integration.name)}\" \"${this.escape(desc)}\" {`\n );\n parts.push(\n ` tags \"External System\" \"${integration.type === \"websocket\" ? \"WebSocket\" : \"REST API\"}\"`\n );\n parts.push(` }`);\n }\n }\n\n return parts.join(\"\\n\");\n }\n\n /**\n * Generate main system (the extension)\n */\n private generateMainSystem(): string {\n const parts: string[] = [];\n\n parts.push(` extension = softwareSystem \"${this.escape(this.analysis.system.name)}\" {`);\n\n // Generate containers (contexts)\n for (const [contextType, contextInfo] of Object.entries(this.analysis.contexts)) {\n parts.push(this.generateContainer(contextType, contextInfo));\n }\n\n // Generate relationships between containers\n parts.push(this.generateContainerRelationships());\n\n parts.push(\" }\");\n\n return parts.join(\"\\n\\n\");\n }\n\n /**\n * Generate container (context)\n */\n private generateContainer(contextType: string, contextInfo: any): string {\n const parts: string[] = [];\n\n const technology = this.getContextTechnology(contextType);\n const description = contextInfo.description || `${this.capitalize(contextType)} context`;\n\n parts.push(\n ` ${contextType} = container \"${this.capitalize(contextType)}\" \"${this.escape(description)}\" \"${technology}\" {`\n );\n\n // Generate components if enabled\n if (\n this.options.includeComponentDiagrams &&\n this.options.componentDiagramContexts?.includes(contextType)\n ) {\n parts.push(this.generateComponents(contextType, contextInfo));\n parts.push(\"\");\n parts.push(this.generateComponentRelationships(contextType, contextInfo));\n }\n\n parts.push(\" }\");\n\n return parts.join(\"\\n\");\n }\n\n /**\n * Generate components within a container\n */\n private generateComponents(contextType: string, contextInfo: any): string {\n const parts: string[] = [];\n\n // Generate components from handlers\n const handlersByType = new Map<string, any[]>();\n for (const handler of contextInfo.handlers) {\n if (!handlersByType.has(handler.messageType)) {\n handlersByType.set(handler.messageType, []);\n }\n handlersByType.get(handler.messageType)!.push(handler);\n }\n\n for (const [messageType, handlers] of handlersByType) {\n const componentName = this.toComponentName(messageType);\n const description = this.generateComponentDescription(messageType, handlers[0]);\n const tags = this.getComponentTags(messageType, handlers[0]);\n\n parts.push(\n ` ${this.toId(componentName)} = component \"${componentName}\" \"${description}\" {`\n );\n if (tags.length > 0) {\n parts.push(` tags \"${tags.join('\" \"')}\"`);\n }\n parts.push(` }`);\n }\n\n // Generate components from UI components\n if (contextInfo.components) {\n for (const comp of contextInfo.components) {\n parts.push(\n ` ${this.toId(comp.name)} = component \"${comp.name}\" \"${this.escape(comp.description || \"UI component\")}\" {`\n );\n parts.push(` tags \"UI Component\"`);\n parts.push(` }`);\n }\n }\n\n // Add Chrome API components if used\n if (contextInfo.chromeAPIs && contextInfo.chromeAPIs.length > 0) {\n for (const api of contextInfo.chromeAPIs) {\n const apiId = this.toId(`chrome_${api}`);\n parts.push(\n ` ${apiId} = component \"Chrome ${this.capitalize(api)} API\" \"Browser API for ${api}\" {`\n );\n parts.push(` tags \"Chrome API\" \"External\"`);\n parts.push(` }`);\n }\n }\n\n return parts.join(\"\\n\");\n }\n\n /**\n * Generate better component descriptions based on message type\n */\n private generateComponentDescription(messageType: string, handler: any): string {\n const type = messageType.toLowerCase();\n\n // Authentication related\n if (type.includes(\"login\")) {\n return \"Authenticates users and establishes sessions\";\n }\n if (type.includes(\"logout\")) {\n return \"Terminates user sessions and clears credentials\";\n }\n\n // CRUD operations\n if (type.includes(\"add\") || type.includes(\"create\")) {\n const entity = type.replace(/_(add|create)/, \"\").replace(/_/g, \" \");\n return `Creates new ${entity} items and persists to storage`;\n }\n if (type.includes(\"remove\") || type.includes(\"delete\")) {\n const entity = type.replace(/_(remove|delete)/, \"\").replace(/_/g, \" \");\n return `Removes ${entity} items from storage`;\n }\n if (type.includes(\"update\") || type.includes(\"toggle\")) {\n const entity = type.replace(/_(update|toggle)/, \"\").replace(/_/g, \" \");\n return `Updates ${entity} item state and syncs with storage`;\n }\n if (type.includes(\"clear\")) {\n const entity = type.replace(/_clear.*/, \"\").replace(/_/g, \" \");\n return `Clears all ${entity} items matching criteria`;\n }\n\n // Query operations\n if (type.includes(\"get\") || type.includes(\"fetch\") || type.includes(\"load\")) {\n const entity = type.replace(/_(get|fetch|load)/, \"\").replace(/_/g, \" \");\n return `Retrieves ${entity} data from storage`;\n }\n\n // Default\n return `Processes ${messageType} messages and coordinates business logic`;\n }\n\n /**\n * Determine appropriate tags for a component\n */\n private getComponentTags(messageType: string, handler: any): string[] {\n const tags: string[] = [\"Message Handler\"];\n const type = messageType.toLowerCase();\n\n // Add functional tags\n if (type.includes(\"login\") || type.includes(\"logout\") || type.includes(\"auth\")) {\n tags.push(\"Authentication\");\n } else if (\n type.includes(\"add\") ||\n type.includes(\"create\") ||\n type.includes(\"update\") ||\n type.includes(\"delete\") ||\n type.includes(\"remove\") ||\n type.includes(\"toggle\")\n ) {\n tags.push(\"CRUD\");\n } else if (type.includes(\"get\") || type.includes(\"fetch\") || type.includes(\"load\")) {\n tags.push(\"Query\");\n }\n\n // Add domain tags\n if (type.includes(\"user\")) {\n tags.push(\"User Management\");\n }\n if (type.includes(\"todo\")) {\n tags.push(\"Todo Management\");\n }\n if (type.includes(\"state\")) {\n tags.push(\"State Management\");\n }\n\n return tags;\n }\n\n /**\n * Generate relationships between components within a container\n */\n private generateComponentRelationships(contextType: string, contextInfo: any): string {\n const parts: string[] = [];\n\n // Build a map of handler components\n const handlersByType = new Map<string, any[]>();\n for (const handler of contextInfo.handlers) {\n if (!handlersByType.has(handler.messageType)) {\n handlersByType.set(handler.messageType, []);\n }\n handlersByType.get(handler.messageType)!.push(handler);\n }\n\n // Add relationships to Chrome APIs\n if (contextInfo.chromeAPIs && contextInfo.chromeAPIs.length > 0) {\n for (const api of contextInfo.chromeAPIs) {\n const apiId = this.toId(`chrome_${api}`);\n\n // Find handlers that use this API\n for (const [messageType, handlers] of handlersByType) {\n const componentId = this.toId(this.toComponentName(messageType));\n\n // Infer relationship based on API\n let description = `Uses ${api}`;\n if (api === \"storage\") {\n if (\n messageType.toLowerCase().includes(\"get\") ||\n messageType.toLowerCase().includes(\"load\")\n ) {\n description = \"Reads from storage\";\n } else {\n description = \"Writes to storage\";\n }\n } else if (api === \"tabs\") {\n description = \"Manages browser tabs\";\n } else if (api === \"runtime\") {\n description = \"Sends messages\";\n }\n\n parts.push(` ${componentId} -> ${apiId} \"${description}\"`);\n }\n }\n }\n\n // Add state management relationships (handlers that modify state)\n const stateHandlers: string[] = [];\n const queryHandlers: string[] = [];\n\n for (const [messageType, handlers] of handlersByType) {\n const type = messageType.toLowerCase();\n const componentId = this.toId(this.toComponentName(messageType));\n\n if (\n type.includes(\"add\") ||\n type.includes(\"create\") ||\n type.includes(\"update\") ||\n type.includes(\"delete\") ||\n type.includes(\"remove\") ||\n type.includes(\"toggle\") ||\n type.includes(\"clear\") ||\n type.includes(\"login\") ||\n type.includes(\"logout\")\n ) {\n stateHandlers.push(componentId);\n } else if (type.includes(\"get\") || type.includes(\"fetch\") || type.includes(\"load\")) {\n queryHandlers.push(componentId);\n }\n }\n\n // Create implicit state manager if we have state operations\n if (stateHandlers.length > 0 && queryHandlers.length > 0) {\n // Query handlers depend on state set by mutation handlers\n for (const queryHandler of queryHandlers) {\n for (const stateHandler of stateHandlers) {\n if (queryHandler !== stateHandler) {\n parts.push(` ${stateHandler} -> ${queryHandler} \"Updates state\" {`);\n parts.push(` tags \"Implicit\"`);\n parts.push(` }`);\n }\n }\n }\n }\n\n return parts.join(\"\\n\");\n }\n\n /**\n * Generate relationships between containers\n */\n private generateContainerRelationships(): string {\n const parts: string[] = [];\n\n // Add user relationships\n const uiContexts = [\"popup\", \"options\", \"devtools\"];\n for (const contextType of Object.keys(this.analysis.contexts)) {\n if (uiContexts.includes(contextType)) {\n parts.push(` user -> extension.${contextType} \"Uses\"`);\n }\n }\n\n // Add message flow relationships\n for (const flow of this.analysis.messageFlows) {\n const tech = `Sends ${flow.messageType}`;\n for (const to of flow.to) {\n parts.push(` extension.${flow.from} -> extension.${to} \"${tech}\"`);\n }\n }\n\n // Add external API relationships\n for (const integration of this.analysis.integrations) {\n if (integration.type === \"api\" || integration.type === \"websocket\") {\n // Find which contexts use this integration\n for (const [contextType, contextInfo] of Object.entries(this.analysis.contexts)) {\n const usesIntegration = contextInfo.externalAPIs.some((api: any) =>\n integration.calls?.some((call) => call.endpoint === api.endpoint)\n );\n\n if (usesIntegration) {\n const method = integration.type === \"websocket\" ? \"Connects to\" : \"Calls\";\n parts.push(\n ` extension.${contextType} -> ${this.toId(integration.name)} \"${method}\"`\n );\n }\n }\n }\n }\n\n return parts.join(\"\\n\");\n }\n\n /**\n * Generate views section\n */\n private generateViews(): string {\n const parts: string[] = [];\n\n parts.push(\" views {\");\n parts.push(this.generateSystemContextView());\n parts.push(this.generateContainerView());\n\n if (this.options.includeComponentDiagrams) {\n for (const contextType of this.options.componentDiagramContexts || []) {\n if (this.analysis.contexts[contextType]) {\n parts.push(this.generateComponentView(contextType));\n }\n }\n }\n\n if (this.options.includeDynamicDiagrams) {\n parts.push(this.generateDynamicViews());\n }\n\n parts.push(this.generateStyles());\n parts.push(\" }\");\n\n // Add documentation section if ADRs exist\n if (this.analysis.adrs && this.analysis.adrs.adrs.length > 0) {\n parts.push(\"\");\n parts.push(this.generateDocumentation());\n }\n\n return parts.join(\"\\n\\n\");\n }\n\n /**\n * Generate documentation section for ADRs\n */\n private generateDocumentation(): string {\n if (!this.analysis.adrs || this.analysis.adrs.adrs.length === 0) {\n return \"\";\n }\n\n const parts: string[] = [];\n parts.push(\" documentation {\");\n\n for (const adr of this.analysis.adrs.adrs) {\n parts.push(` decision \"${adr.id}\" {`);\n parts.push(` title \"${this.escape(adr.title)}\"`);\n parts.push(` status \"${adr.status}\"`);\n parts.push(` date \"${adr.date}\"`);\n parts.push(` content \"${this.escape(adr.context)}\"`);\n parts.push(\" }\");\n }\n\n parts.push(\" }\");\n\n return parts.join(\"\\n\");\n }\n\n /**\n * Generate system context view\n */\n private generateSystemContextView(): string {\n return ` systemContext extension \"SystemContext\" {\n include *\n autoLayout lr\n }`;\n }\n\n /**\n * Generate container view\n */\n private generateContainerView(): string {\n return ` container extension \"Containers\" {\n include *\n autoLayout lr\n }`;\n }\n\n /**\n * Generate component view\n */\n private generateComponentView(contextType: string): string {\n return ` component extension.${contextType} \"Components_${this.capitalize(contextType)}\" {\n include *\n autoLayout tb\n }`;\n }\n\n /**\n * Generate dynamic views for message flows\n */\n private generateDynamicViews(): string {\n const parts: string[] = [];\n\n // Group flows by domain/feature\n const flowsByDomain = new Map<string, any[]>();\n\n for (const flow of this.analysis.messageFlows) {\n // Extract domain from message type (e.g., USER_LOGIN -> user, TODO_ADD -> todo)\n const messageType = flow.messageType.toLowerCase();\n let domain = \"general\";\n\n if (\n messageType.includes(\"user\") ||\n messageType.includes(\"login\") ||\n messageType.includes(\"logout\") ||\n messageType.includes(\"auth\")\n ) {\n domain = \"authentication\";\n } else if (messageType.includes(\"todo\")) {\n domain = \"todo\";\n } else if (messageType.includes(\"state\")) {\n domain = \"state\";\n }\n\n if (!flowsByDomain.has(domain)) {\n flowsByDomain.set(domain, []);\n }\n flowsByDomain.get(domain)!.push(flow);\n }\n\n // Generate a dynamic view for each domain\n let count = 0;\n for (const [domain, flows] of flowsByDomain) {\n if (count >= 5) break; // Limit to avoid too many diagrams\n\n const viewName = this.capitalize(domain) + \" Flow\";\n parts.push(this.generateDynamicView(viewName, flows, domain));\n count++;\n }\n\n return parts.join(\"\\n\\n\");\n }\n\n /**\n * Generate single dynamic view\n */\n private generateDynamicView(flowName: string, flows: any[], domain: string): string {\n const parts: string[] = [];\n\n // Create a user-centric description\n const description = this.getDynamicViewDescription(domain);\n parts.push(` dynamic extension \"${flowName}\" \"${description}\" {`);\n\n // Add user interaction if this is a UI flow\n const uiContexts = [\"popup\", \"options\", \"devtools\"];\n const hasUIFlow = flows.some((f) => uiContexts.includes(f.from));\n\n if (hasUIFlow) {\n // Start with user interaction\n const firstFlow = flows.find((f) => uiContexts.includes(f.from));\n if (firstFlow) {\n const action = this.getUserAction(domain);\n parts.push(` user -> extension.${firstFlow.from} \"${action}\"`);\n }\n }\n\n // Generate message flows\n for (const flow of flows) {\n const messageDesc = this.getMessageDescription(flow.messageType);\n\n for (const to of flow.to) {\n parts.push(` extension.${flow.from} -> extension.${to} \"${messageDesc}\"`);\n }\n }\n\n parts.push(\" autoLayout lr\");\n parts.push(\" }\");\n\n return parts.join(\"\\n\");\n }\n\n /**\n * Get description for dynamic view based on domain\n */\n private getDynamicViewDescription(domain: string): string {\n const descriptions: Record<string, string> = {\n authentication: \"User authentication and session management\",\n todo: \"Todo item creation, updates, and retrieval\",\n state: \"Application state synchronization\",\n general: \"Message flow through the system\",\n };\n return descriptions[domain] || descriptions.general;\n }\n\n /**\n * Get user action description for domain\n */\n private getUserAction(domain: string): string {\n const actions: Record<string, string> = {\n authentication: \"Initiates login\",\n todo: \"Manages todo items\",\n state: \"Requests state\",\n general: \"Interacts\",\n };\n return actions[domain] || actions.general;\n }\n\n /**\n * Get message description based on type\n */\n private getMessageDescription(messageType: string): string {\n const type = messageType.toLowerCase();\n\n if (type.includes(\"login\")) return \"Authenticate user\";\n if (type.includes(\"logout\")) return \"End session\";\n if (type.includes(\"add\") || type.includes(\"create\")) return \"Create item\";\n if (type.includes(\"remove\") || type.includes(\"delete\")) return \"Delete item\";\n if (type.includes(\"update\") || type.includes(\"toggle\")) return \"Update item\";\n if (type.includes(\"get\") || type.includes(\"fetch\")) return \"Retrieve data\";\n if (type.includes(\"clear\")) return \"Clear items\";\n\n return messageType;\n }\n\n /**\n * Generate styles\n */\n private generateStyles(): string {\n const parts: string[] = [];\n\n // Skip theme directive - causes issues with Structurizr CLI export\n // The inline styles are sufficient for diagram generation\n parts.push(\" styles {\");\n\n // Default styles for containers (contexts)\n const contextStyles: Record<string, string> = {\n background: \"#2E7D32\",\n content: \"#F57C00\",\n popup: \"#1976D2\",\n devtools: \"#7B1FA2\",\n options: \"#0288D1\",\n ...this.options.styles,\n };\n\n for (const [context, color] of Object.entries(contextStyles)) {\n if (this.analysis.contexts[context]) {\n parts.push(` element \"extension.${context}\" {`);\n parts.push(` background ${color}`);\n parts.push(` color #ffffff`);\n parts.push(\" }\");\n }\n }\n\n parts.push(\" }\");\n\n return parts.join(\"\\n\");\n }\n\n /**\n * Get technology label for context\n */\n private getContextTechnology(contextType: string): string {\n const technologies: Record<string, string> = {\n background: \"Service Worker / Background Script\",\n content: \"Content Script\",\n popup: \"Browser Action Popup\",\n devtools: \"DevTools Panel\",\n options: \"Options Page\",\n offscreen: \"Offscreen Document\",\n };\n\n return technologies[contextType] || \"Extension Context\";\n }\n\n /**\n * Convert message type to component name\n */\n private toComponentName(messageType: string): string {\n return (\n messageType\n .split(\"_\")\n .map((part) => this.capitalize(part.toLowerCase()))\n .join(\" \") + \" Handler\"\n );\n }\n\n /**\n * Convert name to identifier\n */\n private toId(name: string): string {\n return name\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"_\")\n .replace(/^_|_$/g, \"\");\n }\n\n /**\n * Convert flow name to view name\n */\n private toViewName(flowName: string): string {\n return flowName\n .split(/[_-]/)\n .map((part) => this.capitalize(part))\n .join(\" \");\n }\n\n /**\n * Capitalize first letter\n */\n private capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n\n /**\n * Escape string for DSL\n */\n private escape(str: string): string {\n return str.replace(/\"/g, '\\\\\"');\n }\n}\n\n/**\n * Generate Structurizr DSL from architecture analysis\n */\nexport function generateStructurizrDSL(\n analysis: ArchitectureAnalysis,\n options?: StructurizrDSLOptions\n): string {\n const generator = new StructurizrDSLGenerator(analysis, options);\n return generator.generate();\n}\n",
15
15
  "// Export static site using Structurizr CLI\n// Uses Docker to run Structurizr CLI for generating a static HTML site\n\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { spawn } from \"node:child_process\";\n\nexport interface ExportOptions {\n /** DSL file path */\n dslPath: string;\n\n /** Output directory for static site */\n outputDir: string;\n\n /** Timeout in milliseconds */\n timeout?: number;\n\n /** Callback for progress updates */\n onProgress?: (message: string) => void;\n}\n\nexport interface ExportResult {\n success: boolean;\n siteDir: string;\n error?: string;\n}\n\nexport class DiagramExporter {\n private static readonly DOCKER_IMAGE = \"structurizr/cli:latest\";\n private static readonly DEFAULT_TIMEOUT = 120000; // 2 minutes\n\n /**\n * Export static site using Structurizr CLI via Docker\n */\n async export(options: ExportOptions): Promise<ExportResult> {\n const { dslPath, outputDir, timeout = DiagramExporter.DEFAULT_TIMEOUT } = options;\n\n // Validate DSL file exists\n if (!fs.existsSync(dslPath)) {\n return {\n success: false,\n siteDir: \"\",\n error: `DSL file not found: ${dslPath}`,\n };\n }\n\n // Ensure output directory exists\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true });\n }\n\n // Check if Docker is available\n const dockerAvailable = await this.isDockerAvailable();\n if (!dockerAvailable) {\n return {\n success: false,\n siteDir: \"\",\n error: \"Docker is not available. Please install Docker to export the site.\",\n };\n }\n\n // Pull image if needed\n options.onProgress?.(\"Checking Structurizr CLI image...\");\n const hasImage = await this.hasImage();\n if (!hasImage) {\n options.onProgress?.(\"Pulling Structurizr CLI image (this may take a moment)...\");\n await this.pullImage((line) => options.onProgress?.(line));\n }\n\n // Export static site\n options.onProgress?.(\"Generating static site...\");\n\n try {\n await this.exportStaticSite(dslPath, outputDir, timeout);\n options.onProgress?.(\"✓ Static site generated successfully\");\n\n return {\n success: true,\n siteDir: outputDir,\n };\n } catch (error) {\n return {\n success: false,\n siteDir: \"\",\n error: `Failed to export static site: ${error}`,\n };\n }\n }\n\n /**\n * Export static HTML site using Structurizr CLI\n */\n private async exportStaticSite(\n dslPath: string,\n outputDir: string,\n timeout: number\n ): Promise<void> {\n const dslDir = path.dirname(dslPath);\n const dslFileName = path.basename(dslPath);\n\n // Docker volume mounts\n const workspaceMount = `${dslDir}:/usr/local/structurizr`;\n const outputMount = `${outputDir}:/output`;\n\n // Structurizr CLI command for static site export\n const args = [\n \"run\",\n \"--rm\",\n \"-v\",\n workspaceMount,\n \"-v\",\n outputMount,\n DiagramExporter.DOCKER_IMAGE,\n \"export\",\n \"-workspace\",\n `/usr/local/structurizr/${dslFileName}`,\n \"-format\",\n \"static\",\n \"-output\",\n \"/output\",\n ];\n\n await this.runDocker(args, timeout);\n }\n\n /**\n * Check if Docker is available\n */\n async isDockerAvailable(): Promise<boolean> {\n try {\n await this.runCommand(\"docker\", [\"--version\"], 5000);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Check if Structurizr CLI image is available\n */\n async hasImage(): Promise<boolean> {\n try {\n const output = await this.runCommand(\n \"docker\",\n [\"images\", \"-q\", DiagramExporter.DOCKER_IMAGE],\n 5000\n );\n return output.trim().length > 0;\n } catch {\n return false;\n }\n }\n\n /**\n * Pull Structurizr CLI image\n */\n async pullImage(onProgress?: (line: string) => void): Promise<void> {\n return new Promise((resolve, reject) => {\n const proc = spawn(\"docker\", [\"pull\", DiagramExporter.DOCKER_IMAGE]);\n\n proc.stdout.on(\"data\", (data) => {\n onProgress?.(data.toString().trim());\n });\n\n proc.stderr.on(\"data\", (data) => {\n onProgress?.(data.toString().trim());\n });\n\n proc.on(\"close\", (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`Failed to pull image, exit code: ${code}`));\n }\n });\n\n proc.on(\"error\", (error) => {\n reject(error);\n });\n });\n }\n\n /**\n * Run Docker command\n */\n private async runDocker(args: string[], timeout: number): Promise<string> {\n return this.runCommand(\"docker\", args, timeout);\n }\n\n /**\n * Run shell command\n */\n private async runCommand(command: string, args: string[], timeout: number): Promise<string> {\n return new Promise((resolve, reject) => {\n const proc = spawn(command, args);\n let stdout = \"\";\n let stderr = \"\";\n\n const timer = setTimeout(() => {\n proc.kill();\n reject(new Error(`Command timed out after ${timeout}ms`));\n }, timeout);\n\n proc.stdout.on(\"data\", (data) => {\n stdout += data.toString();\n });\n\n proc.stderr.on(\"data\", (data) => {\n stderr += data.toString();\n });\n\n proc.on(\"close\", (code) => {\n clearTimeout(timer);\n if (code === 0) {\n resolve(stdout);\n } else {\n reject(new Error(`Command failed with exit code ${code}: ${stderr}`));\n }\n });\n\n proc.on(\"error\", (error) => {\n clearTimeout(timer);\n reject(error);\n });\n });\n }\n}\n\n/**\n * Export diagrams\n */\nexport async function exportDiagrams(options: ExportOptions): Promise<ExportResult> {\n const exporter = new DiagramExporter();\n return exporter.export(options);\n}\n"
16
16
  ],
17
- "mappings": "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",
18
- "debugId": "0C75E6084607493864756E2164756E21",
17
+ "mappings": "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",
18
+ "debugId": "FFB153526798575464756E2164756E21",
19
19
  "names": []
20
20
  }