( sceneNode: ReadonlyArray<SceneNode>, settings: PluginSettings, )
| 69 | }`; |
| 70 | |
| 71 | export const composeMain = ( |
| 72 | sceneNode: ReadonlyArray<SceneNode>, |
| 73 | settings: PluginSettings, |
| 74 | ): string => { |
| 75 | localSettings = settings; |
| 76 | previousExecutionCache = []; |
| 77 | |
| 78 | // Handle empty input |
| 79 | if (!sceneNode || sceneNode.length === 0) { |
| 80 | return "// No nodes to convert"; |
| 81 | } |
| 82 | |
| 83 | let result = composeWidgetGenerator(sceneNode); |
| 84 | |
| 85 | // Handle empty result |
| 86 | if (!result || result.trim() === "") { |
| 87 | result = "// No visible content generated"; |
| 88 | } |
| 89 | |
| 90 | switch (localSettings.composeGenerationMode) { |
| 91 | case "snippet": |
| 92 | return result; |
| 93 | case "composable": |
| 94 | if (!result.startsWith("Column") && !result.startsWith("//")) { |
| 95 | result = generateComposeWidget("Column", { content: [result] }); |
| 96 | } |
| 97 | return getComposableTemplate( |
| 98 | stringToClassName(sceneNode[0]?.name || "Component"), |
| 99 | result, |
| 100 | ); |
| 101 | case "screen": |
| 102 | if (!result.startsWith("Column") && !result.startsWith("//")) { |
| 103 | result = generateComposeWidget("Column", { content: [result] }); |
| 104 | } |
| 105 | return getFullScreenTemplate( |
| 106 | stringToClassName(sceneNode[0]?.name || "Component"), |
| 107 | result, |
| 108 | ); |
| 109 | default: |
| 110 | return result; |
| 111 | } |
| 112 | }; |
| 113 | |
| 114 | const generateComposeWidget = ( |
| 115 | widget: string, |
no test coverage detected