@codeyam/codeyam-cli 0.1.0-staging.8e7b1bd → 0.1.0-staging.b8a55ba

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (385) hide show
  1. package/analyzer-template/.build-info.json +7 -7
  2. package/analyzer-template/log.txt +3 -3
  3. package/analyzer-template/package.json +7 -6
  4. package/analyzer-template/packages/ai/package.json +1 -1
  5. package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +2 -0
  6. package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +22 -0
  7. package/analyzer-template/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.ts +23 -1
  8. package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +401 -106
  9. package/analyzer-template/packages/ai/src/lib/astScopes/types.ts +60 -0
  10. package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +661 -50
  11. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.ts +14 -2
  12. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.ts +715 -0
  13. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.ts +123 -1
  14. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.ts +19 -1
  15. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.ts +23 -1
  16. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.ts +23 -0
  17. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.ts +34 -1
  18. package/analyzer-template/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.ts +236 -24
  19. package/analyzer-template/packages/ai/src/lib/generateChangesEntityKeyAttributes.ts +18 -1
  20. package/analyzer-template/packages/ai/src/lib/generateChangesEntityScenarios.ts +37 -4
  21. package/analyzer-template/packages/ai/src/lib/generateEntityDataStructure.ts +5 -0
  22. package/analyzer-template/packages/ai/src/lib/generateEntityKeyAttributes.ts +213 -12
  23. package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +11 -15
  24. package/analyzer-template/packages/ai/src/lib/generateEntityScenarios.ts +114 -11
  25. package/analyzer-template/packages/ai/src/lib/getConditionalUsagesFromCode.ts +143 -31
  26. package/analyzer-template/packages/ai/src/lib/guessScenarioDataFromDescription.ts +8 -2
  27. package/analyzer-template/packages/ai/src/lib/promptGenerators/gatherAttributesMap.ts +7 -0
  28. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.ts +42 -2
  29. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.ts +38 -2
  30. package/analyzer-template/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.ts +28 -2
  31. package/analyzer-template/packages/ai/src/lib/worker/SerializableDataStructure.ts +5 -0
  32. package/analyzer-template/packages/ai/src/lib/worker/analyzeScopeWorker.ts +8 -1
  33. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +339 -145
  34. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +20 -0
  35. package/analyzer-template/packages/analyze/src/lib/files/getImportedExports.ts +8 -1
  36. package/analyzer-template/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.ts +158 -0
  37. package/analyzer-template/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.ts +107 -18
  38. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateChangesScenarioData.ts +1 -1
  39. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +223 -103
  40. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.ts +10 -5
  41. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateScenarioData.ts +172 -83
  42. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateScenarios.ts +2 -5
  43. package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +97 -27
  44. package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.d.ts +15 -0
  45. package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.d.ts.map +1 -0
  46. package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.js +31 -0
  47. package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.js.map +1 -0
  48. package/analyzer-template/packages/aws/package.json +1 -1
  49. package/analyzer-template/packages/aws/s3/index.ts +1 -0
  50. package/analyzer-template/packages/aws/src/lib/s3/checkS3ObjectExists.ts +47 -0
  51. package/analyzer-template/packages/database/src/lib/kysely/db.ts +4 -4
  52. package/analyzer-template/packages/database/src/lib/kysely/tableRelations.ts +2 -2
  53. package/analyzer-template/packages/database/src/lib/kysely/tables/debugReportsTable.ts +20 -9
  54. package/analyzer-template/packages/database/src/lib/loadReadyToBeCapturedAnalyses.ts +3 -2
  55. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.ts +9 -4
  56. package/analyzer-template/packages/generate/src/lib/deepMerge.ts +26 -1
  57. package/analyzer-template/packages/generate/src/lib/getComponentScenarioPath.ts +8 -3
  58. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts +2 -2
  59. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js +2 -2
  60. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tableRelations.d.ts +2 -2
  61. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/analysesTable.d.ts +8 -1
  62. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/analysesTable.d.ts.map +1 -1
  63. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.d.ts +14 -7
  64. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.d.ts.map +1 -1
  65. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.js +9 -3
  66. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.js.map +1 -1
  67. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts +1 -1
  68. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts.map +1 -1
  69. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.d.ts.map +1 -1
  70. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js +4 -2
  71. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
  72. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.d.ts.map +1 -1
  73. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +8 -4
  74. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
  75. package/analyzer-template/packages/github/dist/generate/src/lib/deepMerge.d.ts.map +1 -1
  76. package/analyzer-template/packages/github/dist/generate/src/lib/deepMerge.js +27 -1
  77. package/analyzer-template/packages/github/dist/generate/src/lib/deepMerge.js.map +1 -1
  78. package/analyzer-template/packages/github/dist/generate/src/lib/getComponentScenarioPath.d.ts.map +1 -1
  79. package/analyzer-template/packages/github/dist/generate/src/lib/getComponentScenarioPath.js +7 -3
  80. package/analyzer-template/packages/github/dist/generate/src/lib/getComponentScenarioPath.js.map +1 -1
  81. package/analyzer-template/packages/github/dist/types/index.d.ts +4 -3
  82. package/analyzer-template/packages/github/dist/types/index.d.ts.map +1 -1
  83. package/analyzer-template/packages/github/dist/types/index.js +1 -0
  84. package/analyzer-template/packages/github/dist/types/index.js.map +1 -1
  85. package/analyzer-template/packages/github/dist/types/src/types/Analysis.d.ts +31 -1
  86. package/analyzer-template/packages/github/dist/types/src/types/Analysis.d.ts.map +1 -1
  87. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts +51 -1
  88. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts.map +1 -1
  89. package/analyzer-template/packages/github/dist/types/src/types/Scenario.js +21 -1
  90. package/analyzer-template/packages/github/dist/types/src/types/Scenario.js.map +1 -1
  91. package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.d.ts +48 -0
  92. package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.d.ts.map +1 -1
  93. package/analyzer-template/packages/github/dist/utils/src/lib/applyUniversalMocks.d.ts.map +1 -1
  94. package/analyzer-template/packages/github/dist/utils/src/lib/applyUniversalMocks.js +26 -2
  95. package/analyzer-template/packages/github/dist/utils/src/lib/applyUniversalMocks.js.map +1 -1
  96. package/analyzer-template/packages/github/dist/utils/src/lib/lightweightEntityExtractor.d.ts.map +1 -1
  97. package/analyzer-template/packages/github/dist/utils/src/lib/lightweightEntityExtractor.js +25 -0
  98. package/analyzer-template/packages/github/dist/utils/src/lib/lightweightEntityExtractor.js.map +1 -1
  99. package/analyzer-template/packages/types/index.ts +8 -0
  100. package/analyzer-template/packages/types/src/types/Analysis.ts +32 -1
  101. package/analyzer-template/packages/types/src/types/Scenario.ts +75 -6
  102. package/analyzer-template/packages/types/src/types/ScenariosDataStructure.ts +49 -0
  103. package/analyzer-template/packages/ui-components/package.json +4 -4
  104. package/analyzer-template/packages/ui-components/src/components/ScenarioDetailInteractiveView.tsx +23 -7
  105. package/analyzer-template/packages/utils/dist/types/index.d.ts +4 -3
  106. package/analyzer-template/packages/utils/dist/types/index.d.ts.map +1 -1
  107. package/analyzer-template/packages/utils/dist/types/index.js +1 -0
  108. package/analyzer-template/packages/utils/dist/types/index.js.map +1 -1
  109. package/analyzer-template/packages/utils/dist/types/src/types/Analysis.d.ts +31 -1
  110. package/analyzer-template/packages/utils/dist/types/src/types/Analysis.d.ts.map +1 -1
  111. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts +51 -1
  112. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts.map +1 -1
  113. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.js +21 -1
  114. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.js.map +1 -1
  115. package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.d.ts +48 -0
  116. package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.d.ts.map +1 -1
  117. package/analyzer-template/packages/utils/dist/utils/src/lib/applyUniversalMocks.d.ts.map +1 -1
  118. package/analyzer-template/packages/utils/dist/utils/src/lib/applyUniversalMocks.js +26 -2
  119. package/analyzer-template/packages/utils/dist/utils/src/lib/applyUniversalMocks.js.map +1 -1
  120. package/analyzer-template/packages/utils/dist/utils/src/lib/lightweightEntityExtractor.d.ts.map +1 -1
  121. package/analyzer-template/packages/utils/dist/utils/src/lib/lightweightEntityExtractor.js +25 -0
  122. package/analyzer-template/packages/utils/dist/utils/src/lib/lightweightEntityExtractor.js.map +1 -1
  123. package/analyzer-template/packages/utils/src/lib/applyUniversalMocks.ts +28 -2
  124. package/analyzer-template/packages/utils/src/lib/lightweightEntityExtractor.ts +27 -0
  125. package/analyzer-template/playwright/takeElementScreenshot.ts +26 -11
  126. package/analyzer-template/playwright/takeScreenshot.ts +9 -7
  127. package/analyzer-template/project/TESTING.md +83 -0
  128. package/analyzer-template/project/constructMockCode.ts +151 -30
  129. package/analyzer-template/project/loadReadyToBeCaptured.ts +17 -1
  130. package/analyzer-template/project/orchestrateCapture/KyselyAnalysisLoader.ts +16 -9
  131. package/analyzer-template/project/orchestrateCapture/SequentialCaptureTaskRunner.ts +77 -37
  132. package/analyzer-template/project/reconcileMockDataKeys.ts +104 -3
  133. package/analyzer-template/project/runMultiScenarioServer.ts +11 -10
  134. package/analyzer-template/project/serverOnlyModules.ts +288 -0
  135. package/analyzer-template/project/start.ts +10 -0
  136. package/analyzer-template/project/startScenarioCapture.ts +73 -41
  137. package/analyzer-template/project/writeMockDataTsx.ts +103 -40
  138. package/analyzer-template/project/writeScenarioComponents.ts +1162 -203
  139. package/analyzer-template/project/writeSimpleRoot.ts +26 -4
  140. package/analyzer-template/project/writeUniversalMocks.ts +32 -11
  141. package/background/src/lib/virtualized/project/constructMockCode.js +132 -25
  142. package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
  143. package/background/src/lib/virtualized/project/loadReadyToBeCaptured.js +15 -1
  144. package/background/src/lib/virtualized/project/loadReadyToBeCaptured.js.map +1 -1
  145. package/background/src/lib/virtualized/project/orchestrateCapture/KyselyAnalysisLoader.js +11 -6
  146. package/background/src/lib/virtualized/project/orchestrateCapture/KyselyAnalysisLoader.js.map +1 -1
  147. package/background/src/lib/virtualized/project/orchestrateCapture/SequentialCaptureTaskRunner.js +67 -32
  148. package/background/src/lib/virtualized/project/orchestrateCapture/SequentialCaptureTaskRunner.js.map +1 -1
  149. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js +65 -4
  150. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js.map +1 -1
  151. package/background/src/lib/virtualized/project/runMultiScenarioServer.js +11 -9
  152. package/background/src/lib/virtualized/project/runMultiScenarioServer.js.map +1 -1
  153. package/background/src/lib/virtualized/project/serverOnlyModules.js +235 -0
  154. package/background/src/lib/virtualized/project/serverOnlyModules.js.map +1 -0
  155. package/background/src/lib/virtualized/project/start.js +6 -0
  156. package/background/src/lib/virtualized/project/start.js.map +1 -1
  157. package/background/src/lib/virtualized/project/startScenarioCapture.js +54 -31
  158. package/background/src/lib/virtualized/project/startScenarioCapture.js.map +1 -1
  159. package/background/src/lib/virtualized/project/writeMockDataTsx.js +87 -34
  160. package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
  161. package/background/src/lib/virtualized/project/writeScenarioComponents.js +852 -133
  162. package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
  163. package/background/src/lib/virtualized/project/writeSimpleRoot.js +25 -2
  164. package/background/src/lib/virtualized/project/writeSimpleRoot.js.map +1 -1
  165. package/background/src/lib/virtualized/project/writeUniversalMocks.js +27 -12
  166. package/background/src/lib/virtualized/project/writeUniversalMocks.js.map +1 -1
  167. package/codeyam-cli/scripts/fixtures/formbricks/universal-mocks/apps/web/lib/instance/service.js +7 -0
  168. package/codeyam-cli/scripts/fixtures/formbricks/universal-mocks/apps/web/lib/instance/service.js.map +1 -0
  169. package/codeyam-cli/src/cli.js +2 -0
  170. package/codeyam-cli/src/cli.js.map +1 -1
  171. package/codeyam-cli/src/commands/debug.js +14 -2
  172. package/codeyam-cli/src/commands/debug.js.map +1 -1
  173. package/codeyam-cli/src/commands/recapture.js +215 -0
  174. package/codeyam-cli/src/commands/recapture.js.map +1 -0
  175. package/codeyam-cli/src/commands/report.js +26 -23
  176. package/codeyam-cli/src/commands/report.js.map +1 -1
  177. package/codeyam-cli/src/utils/backgroundServer.js +2 -2
  178. package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
  179. package/codeyam-cli/src/utils/generateReport.js +252 -106
  180. package/codeyam-cli/src/utils/generateReport.js.map +1 -1
  181. package/codeyam-cli/src/utils/install-skills.js +2 -7
  182. package/codeyam-cli/src/utils/install-skills.js.map +1 -1
  183. package/codeyam-cli/src/utils/queue/__tests__/manager.test.js +38 -0
  184. package/codeyam-cli/src/utils/queue/__tests__/manager.test.js.map +1 -1
  185. package/codeyam-cli/src/utils/queue/job.js +140 -16
  186. package/codeyam-cli/src/utils/queue/job.js.map +1 -1
  187. package/codeyam-cli/src/utils/queue/manager.js +19 -7
  188. package/codeyam-cli/src/utils/queue/manager.js.map +1 -1
  189. package/codeyam-cli/src/utils/queue/persistence.js.map +1 -1
  190. package/codeyam-cli/src/webserver/app/lib/database.js +47 -0
  191. package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
  192. package/codeyam-cli/src/webserver/app/lib/dbNotifier.js.map +1 -1
  193. package/codeyam-cli/src/webserver/backgroundServer.js +5 -10
  194. package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
  195. package/codeyam-cli/src/webserver/bootstrap.js +9 -0
  196. package/codeyam-cli/src/webserver/bootstrap.js.map +1 -0
  197. package/codeyam-cli/src/webserver/build/client/assets/EntityItem-wXL1Z2Aq.js +1 -0
  198. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-DQeyk25_.js → EntityTypeBadge-CzGX-miz.js} +1 -1
  199. package/codeyam-cli/src/webserver/build/client/assets/EntityTypeIcon-CXFKsCOD.js +41 -0
  200. package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-D-9pXIaY.js +25 -0
  201. package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-CBQPrpT0.js +3 -0
  202. package/codeyam-cli/src/webserver/build/client/assets/LoadingDots-D1CdlbrV.js +6 -0
  203. package/codeyam-cli/src/webserver/build/client/assets/LogViewer-wDPcZNKx.js +3 -0
  204. package/codeyam-cli/src/webserver/build/client/assets/ReportIssueModal-4lcOlid-.js +11 -0
  205. package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-BfmDgXxG.js +1 -0
  206. package/codeyam-cli/src/webserver/build/client/assets/ScenarioViewer-CUxUNEEC.js +15 -0
  207. package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-ayCJdUAc.js → TruncatedFilePath-6J7zDUD5.js} +1 -1
  208. package/codeyam-cli/src/webserver/build/client/assets/_index-DHImXdXq.js +11 -0
  209. package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-2mG6mjVb.js +32 -0
  210. package/codeyam-cli/src/webserver/build/client/assets/api.link-scenario-value-l0sNRNKZ.js +1 -0
  211. package/codeyam-cli/src/webserver/build/client/assets/api.update-key-attributes-l0sNRNKZ.js +1 -0
  212. package/codeyam-cli/src/webserver/build/client/assets/api.update-valid-values-l0sNRNKZ.js +1 -0
  213. package/codeyam-cli/src/webserver/build/client/assets/chevron-down-BYimnrHg.js +6 -0
  214. package/codeyam-cli/src/webserver/build/client/assets/chunk-JMJ3UQ3L-BambyYE_.js +51 -0
  215. package/codeyam-cli/src/webserver/build/client/assets/circle-check-CaVsIRxt.js +6 -0
  216. package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-CgUsG7ib.js +21 -0
  217. package/codeyam-cli/src/webserver/build/client/assets/cy-logo-cli-CKnwPCDr.js +1 -0
  218. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-DW_hdGUc.js +1 -0
  219. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-FHOVOgFN.js → entity._sha._-zUEpfPsu.js} +22 -15
  220. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-DyB90fWk.js +1 -0
  221. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-D_3ero5o.js +1 -0
  222. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.edit._scenarioId-CfLCUi9S.js +5 -0
  223. package/codeyam-cli/src/webserver/build/client/assets/entry.client-DKJyZfAY.js +29 -0
  224. package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-DAtOlaWE.js +1 -0
  225. package/codeyam-cli/src/webserver/build/client/assets/files-ClR0d32A.js +1 -0
  226. package/codeyam-cli/src/webserver/build/client/assets/git-D62Lxxmv.js +15 -0
  227. package/codeyam-cli/src/webserver/build/client/assets/globals-C6vQASxy.css +1 -0
  228. package/codeyam-cli/src/webserver/build/client/assets/html2canvas-pro.esm-fmIEn3Bc.js +9 -0
  229. package/codeyam-cli/src/webserver/build/client/assets/index-BosqDOlH.js +3 -0
  230. package/codeyam-cli/src/webserver/build/client/assets/index-CzNNiTkw.js +9 -0
  231. package/codeyam-cli/src/webserver/build/client/assets/keyAttributeCoverage-CTlFMihX.js +1 -0
  232. package/codeyam-cli/src/webserver/build/client/assets/loader-circle-CNp9QFCX.js +6 -0
  233. package/codeyam-cli/src/webserver/build/client/assets/manifest-09d684be.js +1 -0
  234. package/codeyam-cli/src/webserver/build/client/assets/preload-helper-ckwbz45p.js +1 -0
  235. package/codeyam-cli/src/webserver/build/client/assets/root-BxJUvKau.js +56 -0
  236. package/codeyam-cli/src/webserver/build/client/assets/scenarioStatus-B_8jpV3e.js +1 -0
  237. package/codeyam-cli/src/webserver/build/client/assets/search-DDGjYAMJ.js +6 -0
  238. package/codeyam-cli/src/webserver/build/client/assets/settings-DgTyB-Wg.js +1 -0
  239. package/codeyam-cli/src/webserver/build/client/assets/simulations-CoNWGt0K.js +1 -0
  240. package/codeyam-cli/src/webserver/build/client/assets/triangle-alert-CBc5dE1s.js +6 -0
  241. package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-BMIGFP-m.js +1 -0
  242. package/codeyam-cli/src/webserver/build/client/assets/useInteractiveMode-Dk_FQqWJ.js +1 -0
  243. package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-DOGXmJcI.js → useLastLogLine-BqPPNjAl.js} +1 -1
  244. package/codeyam-cli/src/webserver/build/client/assets/useReportContext-DsJbgMY9.js +1 -0
  245. package/codeyam-cli/src/webserver/build/client/assets/{useToast-C07gRg7Z.js → useToast-DWHcCcl1.js} +1 -1
  246. package/codeyam-cli/src/webserver/build/server/assets/index-CV6i1S1A.js +1 -0
  247. package/codeyam-cli/src/webserver/build/server/assets/server-build-BDlyhfrv.js +175 -0
  248. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  249. package/codeyam-cli/src/webserver/build-info.json +5 -5
  250. package/codeyam-cli/src/webserver/devServer.js +1 -3
  251. package/codeyam-cli/src/webserver/devServer.js.map +1 -1
  252. package/codeyam-cli/templates/debug-codeyam.md +620 -0
  253. package/package.json +14 -14
  254. package/packages/ai/src/lib/analyzeScope.js +2 -0
  255. package/packages/ai/src/lib/analyzeScope.js.map +1 -1
  256. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +16 -0
  257. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js.map +1 -1
  258. package/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.js +16 -0
  259. package/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.js.map +1 -1
  260. package/packages/ai/src/lib/astScopes/processExpression.js +305 -88
  261. package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
  262. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +523 -42
  263. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
  264. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js +12 -2
  265. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js.map +1 -1
  266. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.js +454 -0
  267. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.js.map +1 -0
  268. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js +103 -1
  269. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js.map +1 -1
  270. package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js +16 -1
  271. package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js.map +1 -1
  272. package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js +19 -1
  273. package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js.map +1 -1
  274. package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js +20 -0
  275. package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js.map +1 -1
  276. package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js +28 -2
  277. package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js.map +1 -1
  278. package/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.js +179 -17
  279. package/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.js.map +1 -1
  280. package/packages/ai/src/lib/generateChangesEntityKeyAttributes.js +6 -0
  281. package/packages/ai/src/lib/generateChangesEntityKeyAttributes.js.map +1 -1
  282. package/packages/ai/src/lib/generateChangesEntityScenarios.js +37 -4
  283. package/packages/ai/src/lib/generateChangesEntityScenarios.js.map +1 -1
  284. package/packages/ai/src/lib/generateEntityDataStructure.js +4 -0
  285. package/packages/ai/src/lib/generateEntityDataStructure.js.map +1 -1
  286. package/packages/ai/src/lib/generateEntityKeyAttributes.js +176 -9
  287. package/packages/ai/src/lib/generateEntityKeyAttributes.js.map +1 -1
  288. package/packages/ai/src/lib/generateEntityScenarioData.js +11 -15
  289. package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
  290. package/packages/ai/src/lib/generateEntityScenarios.js +105 -9
  291. package/packages/ai/src/lib/generateEntityScenarios.js.map +1 -1
  292. package/packages/ai/src/lib/getConditionalUsagesFromCode.js +84 -14
  293. package/packages/ai/src/lib/getConditionalUsagesFromCode.js.map +1 -1
  294. package/packages/ai/src/lib/guessScenarioDataFromDescription.js +2 -1
  295. package/packages/ai/src/lib/guessScenarioDataFromDescription.js.map +1 -1
  296. package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js +6 -0
  297. package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js.map +1 -1
  298. package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.js +38 -2
  299. package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.js.map +1 -1
  300. package/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.js +38 -2
  301. package/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.js.map +1 -1
  302. package/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.js +16 -3
  303. package/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.js.map +1 -1
  304. package/packages/ai/src/lib/worker/SerializableDataStructure.js.map +1 -1
  305. package/packages/ai/src/lib/worker/analyzeScopeWorker.js +4 -0
  306. package/packages/ai/src/lib/worker/analyzeScopeWorker.js.map +1 -1
  307. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js +258 -110
  308. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
  309. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +18 -0
  310. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
  311. package/packages/analyze/src/lib/files/getImportedExports.js +6 -1
  312. package/packages/analyze/src/lib/files/getImportedExports.js.map +1 -1
  313. package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js +125 -0
  314. package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js.map +1 -0
  315. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js +74 -19
  316. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js.map +1 -1
  317. package/packages/analyze/src/lib/files/scenarios/generateChangesScenarioData.js +1 -1
  318. package/packages/analyze/src/lib/files/scenarios/generateChangesScenarioData.js.map +1 -1
  319. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +175 -58
  320. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
  321. package/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.js +10 -5
  322. package/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.js.map +1 -1
  323. package/packages/analyze/src/lib/files/scenarios/generateScenarioData.js +127 -69
  324. package/packages/analyze/src/lib/files/scenarios/generateScenarioData.js.map +1 -1
  325. package/packages/analyze/src/lib/files/scenarios/generateScenarios.js +2 -5
  326. package/packages/analyze/src/lib/files/scenarios/generateScenarios.js.map +1 -1
  327. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +74 -23
  328. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
  329. package/packages/database/src/lib/kysely/db.js +2 -2
  330. package/packages/database/src/lib/kysely/tables/debugReportsTable.js +9 -3
  331. package/packages/database/src/lib/kysely/tables/debugReportsTable.js.map +1 -1
  332. package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js +4 -2
  333. package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
  334. package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +8 -4
  335. package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
  336. package/packages/generate/src/lib/deepMerge.js +27 -1
  337. package/packages/generate/src/lib/deepMerge.js.map +1 -1
  338. package/packages/generate/src/lib/getComponentScenarioPath.js +7 -3
  339. package/packages/generate/src/lib/getComponentScenarioPath.js.map +1 -1
  340. package/packages/types/index.js +1 -0
  341. package/packages/types/index.js.map +1 -1
  342. package/packages/types/src/types/Scenario.js +21 -1
  343. package/packages/types/src/types/Scenario.js.map +1 -1
  344. package/packages/utils/src/lib/applyUniversalMocks.js +26 -2
  345. package/packages/utils/src/lib/applyUniversalMocks.js.map +1 -1
  346. package/packages/utils/src/lib/lightweightEntityExtractor.js +25 -0
  347. package/packages/utils/src/lib/lightweightEntityExtractor.js.map +1 -1
  348. package/scripts/finalize-analyzer.cjs +3 -1
  349. package/codeyam-cli/src/webserver/build/client/assets/EntityItem-CWKV2GEz.js +0 -1
  350. package/codeyam-cli/src/webserver/build/client/assets/EntityTypeIcon-D2hFeDeg.js +0 -1
  351. package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-C8K-4kKP.js +0 -26
  352. package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-DgXLv61M.js +0 -3
  353. package/codeyam-cli/src/webserver/build/client/assets/LogViewer-DFdLQbPS.js +0 -3
  354. package/codeyam-cli/src/webserver/build/client/assets/ReportIssueModal-DlRDjT4h.js +0 -1
  355. package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-7UkVL-UI.js +0 -1
  356. package/codeyam-cli/src/webserver/build/client/assets/ScenarioViewer-XjtsGuPo.js +0 -5
  357. package/codeyam-cli/src/webserver/build/client/assets/_index-D2eJjWLf.js +0 -1
  358. package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-w6sbwlOd.js +0 -7
  359. package/codeyam-cli/src/webserver/build/client/assets/chevron-down-BBNQ8hup.js +0 -1
  360. package/codeyam-cli/src/webserver/build/client/assets/chunk-WWGJGFF6-Bex4RrGs.js +0 -26
  361. package/codeyam-cli/src/webserver/build/client/assets/circle-check-cdhjVtom.js +0 -1
  362. package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-DkgmwwRC.js +0 -1
  363. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-CwLmCS0J.js +0 -1
  364. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-YZ-kM3ZG.js +0 -1
  365. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.edit._scenarioId-BeQlz94_.js +0 -5
  366. package/codeyam-cli/src/webserver/build/client/assets/entry.client-DN2XXM7Z.js +0 -5
  367. package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-CUeAIQNI.js +0 -1
  368. package/codeyam-cli/src/webserver/build/client/assets/files-ccMQfhGf.js +0 -1
  369. package/codeyam-cli/src/webserver/build/client/assets/git-JmESAHx5.js +0 -12
  370. package/codeyam-cli/src/webserver/build/client/assets/globals-CO-U8Bpo.css +0 -1
  371. package/codeyam-cli/src/webserver/build/client/assets/html2canvas-pro.esm-XQCGvadH.js +0 -5
  372. package/codeyam-cli/src/webserver/build/client/assets/index-DsL9BiOc.js +0 -8
  373. package/codeyam-cli/src/webserver/build/client/assets/loader-circle-COYCR2oZ.js +0 -1
  374. package/codeyam-cli/src/webserver/build/client/assets/manifest-90adba57.js +0 -1
  375. package/codeyam-cli/src/webserver/build/client/assets/root-DfbVEEjF.js +0 -16
  376. package/codeyam-cli/src/webserver/build/client/assets/search-DvK9iMBu.js +0 -1
  377. package/codeyam-cli/src/webserver/build/client/assets/server-build-CMKNK2uU.css +0 -1
  378. package/codeyam-cli/src/webserver/build/client/assets/settings-9LTbit4Z.js +0 -1
  379. package/codeyam-cli/src/webserver/build/client/assets/simulations-BrxN5ZtV.js +0 -1
  380. package/codeyam-cli/src/webserver/build/client/assets/triangle-alert-Iv0p8T-1.js +0 -1
  381. package/codeyam-cli/src/webserver/build/client/assets/useReportContext-BWmSRPH6.js +0 -1
  382. package/codeyam-cli/src/webserver/build/server/assets/index-CE_1qXCG.js +0 -1
  383. package/codeyam-cli/src/webserver/build/server/assets/server-build-BY_VDhiD.js +0 -166
  384. package/codeyam-cli/templates/debug-command.md +0 -141
  385. /package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-CMKNK2uU.css → styles-CMKNK2uU.css} +0 -0
@@ -13,6 +13,7 @@ import {
13
13
  import mergeInDependentDataStructure from './mergeInDependentDataStructure';
14
14
  import { awsLog } from '~codeyam/utils';
15
15
  import gatherDataForMocks from './gatherDataForMocks';
16
+ import enrichArrayTypesFromChildSignatures from './enrichArrayTypesFromChildSignatures';
16
17
 
17
18
  export interface GenerateDataStructureArgs {
18
19
  entity: Entity;
@@ -109,55 +110,6 @@ export default function generateDataStructure({
109
110
  const relevantDependencyAnalysis =
110
111
  dependentAnalyses[lookupPath]?.[importedExport.name];
111
112
 
112
- // DEBUG: Track buildBranchFileMap and fileComparisons
113
- if (
114
- importedExport.name === 'buildBranchFileMap' ||
115
- entity.name === 'GitView'
116
- ) {
117
- console.log('🔍 DEBUG generateDataStructure:', {
118
- entityName: entity.name,
119
- importedExportName: importedExport.name,
120
- lookupPath,
121
- hasAnalysis: !!relevantDependencyAnalysis,
122
- signatureSchema:
123
- relevantDependencyAnalysis?.metadata?.mergedDataStructure
124
- ?.signatureSchema,
125
- dependencySchemas: relevantDependencyAnalysis?.metadata
126
- ?.mergedDataStructure?.dependencySchemas
127
- ? Object.keys(
128
- relevantDependencyAnalysis.metadata.mergedDataStructure
129
- .dependencySchemas,
130
- )
131
- : null,
132
- });
133
- if (
134
- relevantDependencyAnalysis?.metadata?.mergedDataStructure
135
- ?.signatureSchema
136
- ) {
137
- const sig =
138
- relevantDependencyAnalysis.metadata.mergedDataStructure
139
- .signatureSchema;
140
- console.log(
141
- '🔍 DEBUG buildBranchFileMap signature keys:',
142
- Object.keys(sig),
143
- );
144
- // Look for fileComparisons in the signature
145
- for (const key of Object.keys(sig)) {
146
- if (
147
- key.includes('fileComparisons') ||
148
- key.includes('entityDiff')
149
- ) {
150
- console.log(
151
- '🔍 DEBUG Found relevant key:',
152
- key,
153
- '=',
154
- JSON.stringify(sig[key], null, 2),
155
- );
156
- }
157
- }
158
- }
159
- }
160
-
161
113
  if (!relevantDependencyAnalysis) {
162
114
  // console.info(
163
115
  // 'CodeYam Warn: No relevant dependency analysis found for importedExport',
@@ -207,6 +159,179 @@ export default function generateDataStructure({
207
159
  return acc;
208
160
  }, {} as ReadonlyAnalysisMap);
209
161
 
162
+ // For non-mocked child components (like visual components), include their mocked
163
+ // dependencies in allImportedExports. This ensures that when a parent component
164
+ // renders a child that uses the same hook with different destructure patterns,
165
+ // both patterns get separate mock data keys.
166
+ //
167
+ // Example: DashboardPage uses QuotesTableCompact (child, not mocked).
168
+ // Both use useFlags hook but destructure different properties:
169
+ // - DashboardPage: const { enableNewAdminDashboard } = useFlags()
170
+ // - QuotesTableCompact: const { flagShowReferenceIdOnQuoteTable } = useFlags()
171
+ // We need mock data keys for BOTH destructure patterns.
172
+ //
173
+ // We need to traverse the ENTIRE dependency tree recursively because nested
174
+ // child components (e.g., QuotesTableCompact inside AdminDashboard inside
175
+ // DashboardPage) also have mocked dependencies that need mock data keys.
176
+
177
+ // Helper function to add mocked imports from an entity to allImportedExports
178
+ const addMockedImportsFromEntity = (childEntity: Entity | undefined) => {
179
+ if (!childEntity?.metadata) return;
180
+
181
+ // Add child's mocked nodeModuleImports
182
+ const childNodeModuleImports = childEntity.metadata.nodeModuleImports;
183
+ if (childNodeModuleImports) {
184
+ for (const moduleName of Object.keys(childNodeModuleImports)) {
185
+ const moduleImports = childNodeModuleImports[moduleName] || [];
186
+ for (const imported of moduleImports) {
187
+ if (!imported.isMocked) continue;
188
+
189
+ // Check if this import already exists in allImportedExports
190
+ const existingImport = allImportedExports.find(
191
+ (existing) =>
192
+ existing.filePath === moduleName &&
193
+ existing.name === imported.name,
194
+ );
195
+
196
+ if (existingImport) {
197
+ // Merge callVariableNames if the same dependency exists with different patterns
198
+ if (imported.callVariableNames && imported.calls) {
199
+ existingImport.calls = existingImport.calls || [];
200
+ existingImport.callVariableNames =
201
+ existingImport.callVariableNames || [];
202
+
203
+ // Add each call/variable pair that doesn't already exist
204
+ for (let i = 0; i < imported.calls.length; i++) {
205
+ const call = imported.calls[i];
206
+ const varName = imported.callVariableNames[i];
207
+ if (!varName) continue;
208
+
209
+ // Check if this specific callVariableName already exists
210
+ if (!existingImport.callVariableNames.includes(varName)) {
211
+ existingImport.calls.push(call);
212
+ existingImport.callVariableNames.push(varName);
213
+ }
214
+ }
215
+ }
216
+ } else {
217
+ // Add new import
218
+ allImportedExports.push({
219
+ filePath: moduleName,
220
+ name: imported.name,
221
+ isDefault: imported.isDefault,
222
+ isMocked: imported.isMocked,
223
+ calls: imported.calls ? [...imported.calls] : undefined,
224
+ callVariableNames: imported.callVariableNames
225
+ ? [...imported.callVariableNames]
226
+ : undefined,
227
+ });
228
+ }
229
+ }
230
+ }
231
+ }
232
+
233
+ // Add child's mocked importedExports
234
+ const childImportedExports = childEntity.metadata.importedExports;
235
+ if (childImportedExports) {
236
+ for (const imported of childImportedExports) {
237
+ if (!imported.isMocked) continue;
238
+
239
+ // Check if this import already exists in allImportedExports
240
+ const existingImport = allImportedExports.find(
241
+ (existing) =>
242
+ existing.filePath === imported.filePath &&
243
+ existing.name === imported.name,
244
+ );
245
+
246
+ if (existingImport) {
247
+ // Merge callVariableNames if the same dependency exists with different patterns
248
+ if (imported.callVariableNames && imported.calls) {
249
+ existingImport.calls = existingImport.calls || [];
250
+ existingImport.callVariableNames =
251
+ existingImport.callVariableNames || [];
252
+
253
+ // Add each call/variable pair that doesn't already exist
254
+ for (let i = 0; i < imported.calls.length; i++) {
255
+ const call = imported.calls[i];
256
+ const varName = imported.callVariableNames[i];
257
+ if (!varName) continue;
258
+
259
+ // Check if this specific callVariableName already exists
260
+ if (!existingImport.callVariableNames.includes(varName)) {
261
+ existingImport.calls.push(call);
262
+ existingImport.callVariableNames.push(varName);
263
+ }
264
+ }
265
+ }
266
+ } else {
267
+ // Add new import
268
+ allImportedExports.push({
269
+ filePath: imported.filePath,
270
+ name: imported.name,
271
+ isDefault: imported.isDefault,
272
+ isMocked: imported.isMocked,
273
+ calls: imported.calls ? [...imported.calls] : undefined,
274
+ callVariableNames: imported.callVariableNames
275
+ ? [...imported.callVariableNames]
276
+ : undefined,
277
+ });
278
+ }
279
+ }
280
+ }
281
+ };
282
+
283
+ // Recursive function to traverse the dependency tree
284
+ const processedAnalyses = new Set<string>();
285
+ const traverseDependencyTree = (analyses: ReadonlyAnalysisMap) => {
286
+ for (const filePath in analyses) {
287
+ for (const name in analyses[filePath]) {
288
+ const analysisKey = `${filePath}:${name}`;
289
+ if (processedAnalyses.has(analysisKey)) continue;
290
+ processedAnalyses.add(analysisKey);
291
+
292
+ const childAnalysis = analyses[filePath][name];
293
+ const childEntity = childAnalysis?.entity;
294
+
295
+ // Add mocked imports from this child entity
296
+ addMockedImportsFromEntity(childEntity as Entity | undefined);
297
+
298
+ // Recursively process this child's non-mocked children
299
+ // via their mergedDataStructure's nested dependentAnalyses
300
+ const childMergedDataStructure =
301
+ childAnalysis?.metadata?.mergedDataStructure;
302
+ if (childMergedDataStructure?.dependencySchemas) {
303
+ // We need to find non-mocked child components in the dependency tree
304
+ // These would be in the child's importedExports that are NOT mocked
305
+ const childImportedExports =
306
+ childEntity?.metadata?.importedExports ?? [];
307
+ const nonMockedChildDeps: ReadonlyAnalysisMap = {};
308
+
309
+ for (const dep of childImportedExports) {
310
+ if (dep.isMocked) continue;
311
+ if (dep.entityType !== 'visual') continue;
312
+
313
+ // Try to find this dependency in dependentAnalyses
314
+ const depFilePath = dep.resolvedFilePath ?? dep.filePath;
315
+ const depName = dep.resolvedName ?? dep.name;
316
+
317
+ if (dependentAnalyses[depFilePath]?.[depName]) {
318
+ nonMockedChildDeps[depFilePath] ||= {};
319
+ nonMockedChildDeps[depFilePath][depName] =
320
+ dependentAnalyses[depFilePath][depName];
321
+ }
322
+ }
323
+
324
+ if (Object.keys(nonMockedChildDeps).length > 0) {
325
+ traverseDependencyTree(nonMockedChildDeps);
326
+ }
327
+ }
328
+ }
329
+ }
330
+ };
331
+
332
+ // Start traversal from direct non-mocked children
333
+ traverseDependencyTree(nonMockedDependentAnalyses);
334
+
210
335
  // console.info(
211
336
  // 'CODEYAM DEBUG: start merge',
212
337
  // JSON.stringify(
@@ -239,39 +364,6 @@ export default function generateDataStructure({
239
364
  dependencySchemas: isolatedDataStructure?.dependencySchemas || {},
240
365
  });
241
366
 
242
- // DEBUG: Check merged result for GitView
243
- if (entity.name === 'GitView') {
244
- console.log(
245
- '🔍 DEBUG GitView mergedDataStructure dependency schemas:',
246
- Object.keys(mergedDataStructure.dependencySchemas || {}),
247
- );
248
- for (const filePath of Object.keys(
249
- mergedDataStructure.dependencySchemas || {},
250
- )) {
251
- for (const depName of Object.keys(
252
- mergedDataStructure.dependencySchemas[filePath] || {},
253
- )) {
254
- const depSchema =
255
- mergedDataStructure.dependencySchemas[filePath][depName];
256
- console.log(
257
- `🔍 DEBUG Merged dep ${filePath}/${depName} signature keys:`,
258
- Object.keys(depSchema.signatureSchema || {}),
259
- );
260
- // Look for fileComparisons
261
- for (const key of Object.keys(depSchema.signatureSchema || {})) {
262
- if (key.includes('fileComparisons') || key.includes('entityDiff')) {
263
- console.log(
264
- '🔍 DEBUG MERGED Found relevant key:',
265
- key,
266
- '=',
267
- JSON.stringify(depSchema.signatureSchema[key], null, 2),
268
- );
269
- }
270
- }
271
- }
272
- }
273
- }
274
-
275
367
  mergedDataStructure.environmentVariables =
276
368
  isolatedDataStructure.environmentVariables || [];
277
369
 
@@ -326,32 +418,60 @@ export default function generateDataStructure({
326
418
  analysis.metadata ||= {};
327
419
  analysis.metadata.mergedDataStructure = mergedDataStructure;
328
420
 
421
+ // Enrich mocked dependency array types with fields from child component signatures
422
+ // This ensures that when getSurveysAction returns { data: array }, and SurveyCard
423
+ // expects survey.updatedAt, the array element type includes updatedAt
424
+ enrichArrayTypesFromChildSignatures(
425
+ allImportedExports,
426
+ mergedDataStructure.dependencySchemas,
427
+ );
428
+
429
+ // DEBUG: Log nodeModuleImports with isMocked status
430
+ const nodeModuleImportsFlattened = Object.entries(
431
+ entity.metadata.nodeModuleImports ?? {},
432
+ ).flatMap(([moduleName, imports]) =>
433
+ imports.map((i) => ({ moduleName, name: i.name, isMocked: i.isMocked })),
434
+ );
435
+ console.log(
436
+ 'CodeYam DEBUG generateDataStructure:',
437
+ JSON.stringify(
438
+ {
439
+ entityName: entity.name,
440
+ nodeModuleImportsFlattened,
441
+ dependencySchemasKeys: Object.keys(
442
+ mergedDataStructure.dependencySchemas ?? {},
443
+ ),
444
+ dependencySchemasForRemix: mergedDataStructure.dependencySchemas?.[
445
+ '@remix-run/react'
446
+ ]
447
+ ? Object.keys(
448
+ mergedDataStructure.dependencySchemas['@remix-run/react'],
449
+ )
450
+ : null,
451
+ },
452
+ null,
453
+ 2,
454
+ ),
455
+ );
456
+
329
457
  const dataForMocks = gatherDataForMocks(
330
458
  allImportedExports,
331
459
  mergedDataStructure.dependencySchemas,
460
+ { entityName: entity.name },
332
461
  );
333
462
 
334
- // DEBUG: Check dataForMocks for GitView
335
- if (entity.name === 'GitView') {
336
- console.log(
337
- '🔍 DEBUG GitView dataForMocks keys:',
338
- Object.keys(dataForMocks),
339
- );
340
- for (const key of Object.keys(dataForMocks)) {
341
- if (
342
- key.includes('buildBranchFileMap') ||
343
- key.includes('fileComparisons') ||
344
- key.includes('entityDiff')
345
- ) {
346
- console.log(
347
- '🔍 DEBUG dataForMocks relevant key:',
348
- key,
349
- '=',
350
- JSON.stringify(dataForMocks[key], null, 2),
351
- );
352
- }
353
- }
354
- }
463
+ // DEBUG: Log the resulting dataForMocks
464
+ console.log(
465
+ 'CodeYam DEBUG generateDataStructure dataForMocks result:',
466
+ JSON.stringify(
467
+ {
468
+ entityName: entity.name,
469
+ dataForMocksKeys: Object.keys(dataForMocks),
470
+ },
471
+ null,
472
+ 2,
473
+ ),
474
+ );
355
475
 
356
476
  // console.info(
357
477
  // 'CODEYAM DEBUG: dataForMocks',
@@ -29,13 +29,10 @@ export default async function generateKeyAttributes({
29
29
  }: GenerateEntityKeyAttributesArgs): Promise<void> {
30
30
  if (!['visual', 'library'].includes(entity.entityType)) return;
31
31
 
32
- // Merge direct dataForMocks with recursively gathered data from dependencies
32
+ // Gather all mock data, consolidated under the root entity name
33
33
  const structure = {
34
34
  arguments: analysis.metadata.scenariosDataStructure?.arguments ?? [],
35
- dataForMocks: {
36
- ...(analysis.metadata.scenariosDataStructure?.dataForMocks ?? {}),
37
- ...gatherDataForMocks(analysis, dependentAnalyses),
38
- },
35
+ dataForMocks: gatherDataForMocks(analysis, dependentAnalyses, entity.name),
39
36
  };
40
37
 
41
38
  awsLog(`🔮 Generating ${error ? 'error ' : ''}scenarios for`, {
@@ -98,6 +95,14 @@ export default async function generateKeyAttributes({
98
95
  ...(ka.dependencies && {
99
96
  dependencies: ka.dependencies.map((dep) => ({ ...dep })),
100
97
  }),
98
+ // Convert readonly sourceLocations array to mutable if present
99
+ ...(ka.sourceLocations && {
100
+ sourceLocations: ka.sourceLocations.map((loc) => ({ ...loc })),
101
+ }),
102
+ // Convert readonly compoundConditionalIds array to mutable if present
103
+ ...(ka.compoundConditionalIds && {
104
+ compoundConditionalIds: [...ka.compoundConditionalIds],
105
+ }),
101
106
  })),
102
107
  ].filter(
103
108
  (ka, index, self) =>
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  Analysis,
3
3
  Entity,
4
+ JsonTypeDefinition,
4
5
  ReadonlyAnalysis,
5
6
  ReadonlyAnalysisMap,
6
7
  } from '~codeyam/types';
@@ -21,17 +22,186 @@ export interface GenerateScenarioDataArgs {
21
22
  updateProgress?: (detail: string) => void;
22
23
  }
23
24
 
25
+ /**
26
+ * Extract the hook/function name from any mock data key format.
27
+ * Supports:
28
+ * - Canonical: "EntityName::hookName::index" -> "hookName"
29
+ * - Variable-qualified: "varName <- funcName" -> "funcName"
30
+ * - Simple with parens: "funcName()" -> "funcName"
31
+ * - Simple: "funcName" -> "funcName"
32
+ */
33
+ function extractHookName(key: string): string | null {
34
+ // Canonical: "EntityName::hookName::index"
35
+ const canonicalMatch = key.match(/^[^:]+::([^:]+)::\d+$/);
36
+ if (canonicalMatch) return canonicalMatch[1];
37
+
38
+ // Variable-qualified: "varName <- funcName"
39
+ const varQualMatch = key.match(/<- (\w+)$/);
40
+ if (varQualMatch) return varQualMatch[1];
41
+
42
+ // Simple with parens: "funcName()" -> "funcName"
43
+ const simpleParensMatch = key.match(/^(\w+)\(\)$/);
44
+ if (simpleParensMatch) return simpleParensMatch[1];
45
+
46
+ // Simple: "funcName" (alphanumeric only)
47
+ const simpleMatch = key.match(/^(\w+)$/);
48
+ if (simpleMatch) return simpleMatch[1];
49
+
50
+ return null;
51
+ }
52
+
53
+ /**
54
+ * Check if two schemas are structurally equivalent (same shape).
55
+ * Uses JSON.stringify for deep comparison.
56
+ */
57
+ function schemasMatch(a: unknown, b: unknown): boolean {
58
+ return JSON.stringify(a) === JSON.stringify(b);
59
+ }
60
+
24
61
  export function gatherDataForMocks(
25
62
  analysis: ReadonlyAnalysis,
26
63
  dependentAnalyses: ReadonlyAnalysisMap,
64
+ rootEntityName?: string,
27
65
  ): Analysis['metadata']['scenariosDataStructure']['dataForMocks'] {
28
- const dataForMocks = {};
66
+ const dataForMocks: Analysis['metadata']['scenariosDataStructure']['dataForMocks'] =
67
+ {};
29
68
  const analysesGathered = new Set<string>();
30
69
 
70
+ // Track hook indices for assigning new indices when schemas differ
71
+ const hookIndices: Record<string, number> = {};
72
+
73
+ /**
74
+ * Find an existing key in dataForMocks that has the same hook name
75
+ * and matching schema. Returns the key if found, null otherwise.
76
+ */
77
+ const findMatchingKey = (
78
+ hookName: string,
79
+ schema: unknown,
80
+ ): string | null => {
81
+ for (const existingKey of Object.keys(dataForMocks)) {
82
+ const existingHook = extractHookName(existingKey);
83
+ if (
84
+ existingHook === hookName &&
85
+ schemasMatch(dataForMocks[existingKey], schema)
86
+ ) {
87
+ return existingKey;
88
+ }
89
+ }
90
+ return null;
91
+ };
92
+
93
+ /**
94
+ * Add mock data, consolidating by hook name and schema when rootEntityName is provided.
95
+ * - Same hook + same schema = merge into existing key
96
+ * - Same hook + different schema = new key with incremented index
97
+ * - All keys normalized to "RootEntity::hookName::index" format when rootEntityName provided
98
+ */
99
+ const addMockData = (
100
+ originalKey: string,
101
+ schema: JsonTypeDefinition[keyof JsonTypeDefinition],
102
+ ): void => {
103
+ // Skip if schema is empty object
104
+ if (
105
+ typeof schema === 'object' &&
106
+ schema !== null &&
107
+ !Array.isArray(schema) &&
108
+ Object.keys(schema).length === 0
109
+ ) {
110
+ return;
111
+ }
112
+
113
+ // Skip null/undefined
114
+ if (schema === null || schema === undefined) {
115
+ return;
116
+ }
117
+
118
+ const typedSchema = schema as
119
+ | JsonTypeDefinition
120
+ | string
121
+ | string[]
122
+ | JsonTypeDefinition[];
123
+
124
+ // Helper to merge schemas (only works for objects, otherwise just returns new value)
125
+ const mergeSchemas = (
126
+ existing: JsonTypeDefinition[keyof JsonTypeDefinition],
127
+ incoming: typeof typedSchema,
128
+ ): JsonTypeDefinition[keyof JsonTypeDefinition] => {
129
+ // Only merge if both are objects (not arrays, not primitives)
130
+ if (
131
+ typeof existing === 'object' &&
132
+ existing !== null &&
133
+ !Array.isArray(existing) &&
134
+ typeof incoming === 'object' &&
135
+ incoming !== null &&
136
+ !Array.isArray(incoming)
137
+ ) {
138
+ return mergeJsonTypeDefinitions(
139
+ existing as JsonTypeDefinition,
140
+ incoming as JsonTypeDefinition,
141
+ );
142
+ }
143
+ // For primitives/arrays, just use the incoming value
144
+ return incoming;
145
+ };
146
+
147
+ // If no rootEntityName, use legacy behavior (preserve original key)
148
+ if (!rootEntityName) {
149
+ if (dataForMocks?.[originalKey]) {
150
+ dataForMocks[originalKey] = mergeSchemas(
151
+ dataForMocks[originalKey],
152
+ typedSchema,
153
+ );
154
+ } else if (dataForMocks) {
155
+ dataForMocks[originalKey] = typedSchema;
156
+ }
157
+ return;
158
+ }
159
+
160
+ // Extract hook name for consolidation
161
+ const hookName = extractHookName(originalKey);
162
+ if (!hookName) {
163
+ // Can't parse - preserve original key
164
+ if (dataForMocks?.[originalKey]) {
165
+ dataForMocks[originalKey] = mergeSchemas(
166
+ dataForMocks[originalKey],
167
+ typedSchema,
168
+ );
169
+ } else if (dataForMocks) {
170
+ dataForMocks[originalKey] = typedSchema;
171
+ }
172
+ return;
173
+ }
174
+
175
+ // Look for existing key with same hook and matching schema
176
+ const matchingKey = findMatchingKey(hookName, typedSchema);
177
+ if (matchingKey && dataForMocks) {
178
+ // Same hook + same schema - merge into existing key
179
+ dataForMocks[matchingKey] = mergeSchemas(
180
+ dataForMocks[matchingKey],
181
+ typedSchema,
182
+ );
183
+ } else if (dataForMocks) {
184
+ // Different schema or first occurrence - create new canonical key
185
+ const index = hookIndices[hookName] ?? 0;
186
+ hookIndices[hookName] = index + 1;
187
+ const targetKey = `${rootEntityName}::${hookName}::${index}`;
188
+ dataForMocks[targetKey] = typedSchema;
189
+ }
190
+ };
191
+
31
192
  // inner recursive function to gather data for mocks
32
193
  const gatherDataForMocksRecursive = (
33
194
  activeAnalysis: ReadonlyAnalysis,
34
195
  ): void => {
196
+ // First, process ALL keys from this analysis's dataForMocks
197
+ const localDataForMocks =
198
+ activeAnalysis.metadata?.scenariosDataStructure?.dataForMocks ?? {};
199
+
200
+ for (const [key, schema] of Object.entries(localDataForMocks)) {
201
+ addMockData(key, schema as JsonTypeDefinition[keyof JsonTypeDefinition]);
202
+ }
203
+
204
+ // Then, recurse into dependent analyses based on imports
35
205
  const allImportedExports = [
36
206
  ...(activeAnalysis.entity?.metadata.importedExports ?? []),
37
207
  ...Object.keys(
@@ -46,68 +216,7 @@ export function gatherDataForMocks(
46
216
  ),
47
217
  ];
48
218
 
49
- // console.info('CODEYAM DEBUG: gatherDataForMocksRecursive START', {
50
- // filePath: activeAnalysis.filePath,
51
- // analysisEntityName: activeAnalysis.entityName,
52
- // analysisId: activeAnalysis.id,
53
- // entity: !!activeAnalysis.entity,
54
- // entityName: activeAnalysis.entity?.name,
55
- // allImportedExports: allImportedExports.map((ie) => ({
56
- // filePath: ie.filePath,
57
- // name: ie.name,
58
- // })),
59
- // });
60
-
61
219
  for (const importedExport of allImportedExports) {
62
- const localDataForMocks =
63
- activeAnalysis.metadata?.scenariosDataStructure?.dataForMocks ?? {};
64
- // Find relevant keys - handle both old format (starts with name)
65
- // and new variable-qualified format ("varName <- functionName")
66
- const relevantKeys = Object.keys(localDataForMocks).filter(
67
- (key) =>
68
- key.startsWith(importedExport.name) ||
69
- key.endsWith(` <- ${importedExport.name}`),
70
- );
71
-
72
- // console.info('CODEYAM DEBUG: Processing import', {
73
- // importedExportName: importedExport.name,
74
- // importedExportFilePath: importedExport.filePath,
75
- // relevantKeys,
76
- // hasLocalDataForMocks: Object.keys(localDataForMocks).length > 0,
77
- // localDataForMocksKeys: Object.keys(localDataForMocks),
78
- // });
79
-
80
- // First, if we have local data for this mock, add it
81
- for (const relevantKey of relevantKeys) {
82
- const localDataForMock = localDataForMocks[relevantKey];
83
-
84
- // console.info('CODEYAM DEBUG: Found relevantKey', {
85
- // relevantKey,
86
- // localDataForMockType: typeof localDataForMock,
87
- // localDataForMockValue: localDataForMock,
88
- // isObject: typeof localDataForMock === 'object',
89
- // objectKeysLength:
90
- // typeof localDataForMock === 'object' && localDataForMock !== null
91
- // ? Object.keys(localDataForMock).length
92
- // : 'N/A',
93
- // });
94
-
95
- if (Object.keys(localDataForMock).length > 0) {
96
- if ((dataForMocks as any)[relevantKey]) {
97
- (dataForMocks as any)[relevantKey] = mergeJsonTypeDefinitions(
98
- (dataForMocks as any)[relevantKey],
99
- localDataForMock,
100
- );
101
- } else {
102
- (dataForMocks as any)[relevantKey] = localDataForMock;
103
- }
104
- }
105
- }
106
-
107
- // ALWAYS check for dependent analysis to gather nested dependencies,
108
- // regardless of whether we found a relevantKey above.
109
- // This ensures transitive dependencies are included.
110
- // For example: Activity -> CurrentActivityTab -> useLastLogLine
111
220
  // Use resolvedFilePath when available (for re-exports from index files)
112
221
  const lookupPath =
113
222
  ('resolvedFilePath' in importedExport &&
@@ -121,30 +230,10 @@ export function gatherDataForMocks(
121
230
  gatherDataForMocksRecursive(dependentAnalysis);
122
231
  }
123
232
  }
124
-
125
- // console.info('CODEYAM DEBUG: gatherDataForMocksRecursive END', {
126
- // filePath: activeAnalysis.filePath,
127
- // entityName: activeAnalysis.entityName,
128
- // currentDataForMocksKeys: Object.keys(dataForMocks),
129
- // });
130
233
  };
131
234
 
132
235
  gatherDataForMocksRecursive(analysis);
133
236
 
134
- // console.info(
135
- // 'CODEYAM DEBUG: gatherDataForMocks FINAL RESULT',
136
- // JSON.stringify(
137
- // {
138
- // filePath: analysis.filePath,
139
- // entityName: analysis.entityName,
140
- // dataForMocksKeys: Object.keys(dataForMocks),
141
- // dataForMocks,
142
- // },
143
- // null,
144
- // 2,
145
- // ),
146
- // );
147
-
148
237
  return dataForMocks;
149
238
  }
150
239
 
@@ -159,7 +248,7 @@ export default async function generateScenarioData({
159
248
 
160
249
  const structure: Analysis['metadata']['scenariosDataStructure'] = {
161
250
  arguments: analysis.metadata.scenariosDataStructure?.arguments ?? [],
162
- dataForMocks: gatherDataForMocks(analysis, dependentAnalyses),
251
+ dataForMocks: gatherDataForMocks(analysis, dependentAnalyses, entity.name),
163
252
  };
164
253
 
165
254
  const scenarios = analysis.scenarios;