@codeyam/codeyam-cli 0.1.0-staging.b8a55ba → 0.1.0-staging.d0ad4ae

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 (340) hide show
  1. package/analyzer-template/.build-info.json +7 -7
  2. package/analyzer-template/common/execAsync.ts +1 -1
  3. package/analyzer-template/log.txt +3 -3
  4. package/analyzer-template/package.json +7 -4
  5. package/analyzer-template/packages/ai/package.json +1 -1
  6. package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +14 -1
  7. package/analyzer-template/packages/ai/src/lib/checkAllAttributes.ts +29 -10
  8. package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +120 -19
  9. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.ts +2 -1
  10. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.ts +91 -35
  11. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.ts +110 -74
  12. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.ts +11 -0
  13. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.ts +98 -0
  14. package/analyzer-template/packages/ai/src/lib/deepEqual.ts +30 -0
  15. package/analyzer-template/packages/ai/src/lib/findMatchingAttribute.ts +24 -17
  16. package/analyzer-template/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.ts +214 -39
  17. package/analyzer-template/packages/ai/src/lib/generateChangesEntityKeyAttributes.ts +54 -1
  18. package/analyzer-template/packages/ai/src/lib/generateChangesEntityScenarioData.ts +72 -6
  19. package/analyzer-template/packages/ai/src/lib/generateChangesEntityScenarios.ts +12 -5
  20. package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +39 -23
  21. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.ts +32 -0
  22. package/analyzer-template/packages/analyze/src/lib/FileAnalyzer.ts +14 -0
  23. package/analyzer-template/packages/analyze/src/lib/asts/nodes/index.ts +1 -0
  24. package/analyzer-template/packages/analyze/src/lib/asts/nodes/isAsyncFunction.ts +67 -0
  25. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +73 -69
  26. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +6 -0
  27. package/analyzer-template/packages/analyze/src/lib/files/analyze/findOrCreateEntity.ts +3 -0
  28. package/analyzer-template/packages/analyze/src/lib/files/analyzeChange.ts +22 -6
  29. package/analyzer-template/packages/analyze/src/lib/files/analyzeEntity.ts +9 -5
  30. package/analyzer-template/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.ts +49 -11
  31. package/analyzer-template/packages/analyze/src/lib/files/scenarios/enrichUnknownTypesFromSourceEquivalencies.ts +102 -0
  32. package/analyzer-template/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.ts +399 -52
  33. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateChangesScenarios.ts +128 -2
  34. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +114 -70
  35. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateScenarioData.ts +34 -129
  36. package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +155 -79
  37. package/analyzer-template/packages/aws/codebuild/index.ts +1 -0
  38. package/analyzer-template/packages/aws/dist/src/lib/codebuild/waitForBuild.d.ts +11 -1
  39. package/analyzer-template/packages/aws/dist/src/lib/codebuild/waitForBuild.d.ts.map +1 -1
  40. package/analyzer-template/packages/aws/dist/src/lib/codebuild/waitForBuild.js +29 -18
  41. package/analyzer-template/packages/aws/dist/src/lib/codebuild/waitForBuild.js.map +1 -1
  42. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsDefineContainer.d.ts +2 -2
  43. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsDefineContainer.d.ts.map +1 -1
  44. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsDefineContainer.js +2 -2
  45. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsDefineContainer.js.map +1 -1
  46. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsTaskFactory.d.ts +8 -18
  47. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsTaskFactory.d.ts.map +1 -1
  48. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsTaskFactory.js +17 -61
  49. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsTaskFactory.js.map +1 -1
  50. package/analyzer-template/packages/aws/dist/src/lib/s3/uploadFileToS3.d.ts.map +1 -1
  51. package/analyzer-template/packages/aws/dist/src/lib/s3/uploadFileToS3.js +8 -1
  52. package/analyzer-template/packages/aws/dist/src/lib/s3/uploadFileToS3.js.map +1 -1
  53. package/analyzer-template/packages/aws/package.json +1 -1
  54. package/analyzer-template/packages/aws/src/lib/codebuild/waitForBuild.ts +43 -19
  55. package/analyzer-template/packages/aws/src/lib/ecs/ecsDefineContainer.ts +3 -3
  56. package/analyzer-template/packages/aws/src/lib/ecs/ecsTaskFactory.ts +17 -69
  57. package/analyzer-template/packages/aws/src/lib/s3/uploadFileToS3.ts +8 -1
  58. package/analyzer-template/packages/generate/index.ts +3 -0
  59. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/componentScenarioPageNext.ts +17 -1
  60. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.ts +193 -0
  61. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.ts +73 -0
  62. package/analyzer-template/packages/generate/src/lib/scenarioComponentForServer.ts +114 -0
  63. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/entitiesTable.d.ts +1 -0
  64. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/entitiesTable.d.ts.map +1 -1
  65. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts +1 -0
  66. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts.map +1 -1
  67. package/analyzer-template/packages/github/dist/generate/index.d.ts +3 -0
  68. package/analyzer-template/packages/github/dist/generate/index.d.ts.map +1 -1
  69. package/analyzer-template/packages/github/dist/generate/index.js +3 -0
  70. package/analyzer-template/packages/github/dist/generate/index.js.map +1 -1
  71. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageNext.d.ts.map +1 -1
  72. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js +16 -1
  73. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js.map +1 -1
  74. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.d.ts +9 -0
  75. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.d.ts.map +1 -0
  76. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +189 -0
  77. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -0
  78. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.d.ts +20 -0
  79. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.d.ts.map +1 -0
  80. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.js +53 -0
  81. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.js.map +1 -0
  82. package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponentForServer.d.ts +8 -0
  83. package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponentForServer.d.ts.map +1 -0
  84. package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponentForServer.js +89 -0
  85. package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponentForServer.js.map +1 -0
  86. package/analyzer-template/packages/github/dist/github/src/lib/loadOrCreateCommit.d.ts.map +1 -1
  87. package/analyzer-template/packages/github/dist/github/src/lib/loadOrCreateCommit.js +10 -0
  88. package/analyzer-template/packages/github/dist/github/src/lib/loadOrCreateCommit.js.map +1 -1
  89. package/analyzer-template/packages/github/dist/github/src/lib/syncPrimaryBranch.d.ts.map +1 -1
  90. package/analyzer-template/packages/github/dist/github/src/lib/syncPrimaryBranch.js +3 -0
  91. package/analyzer-template/packages/github/dist/github/src/lib/syncPrimaryBranch.js.map +1 -1
  92. package/analyzer-template/packages/github/dist/types/src/types/Entity.d.ts +2 -0
  93. package/analyzer-template/packages/github/dist/types/src/types/Entity.d.ts.map +1 -1
  94. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts +6 -0
  95. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts.map +1 -1
  96. package/analyzer-template/packages/github/src/lib/loadOrCreateCommit.ts +14 -0
  97. package/analyzer-template/packages/github/src/lib/syncPrimaryBranch.ts +2 -0
  98. package/analyzer-template/packages/process/index.ts +2 -0
  99. package/analyzer-template/packages/process/package.json +12 -0
  100. package/analyzer-template/packages/process/tsconfig.json +8 -0
  101. package/analyzer-template/packages/types/src/types/Entity.ts +2 -0
  102. package/analyzer-template/packages/types/src/types/Scenario.ts +6 -0
  103. package/analyzer-template/packages/utils/dist/types/src/types/Entity.d.ts +2 -0
  104. package/analyzer-template/packages/utils/dist/types/src/types/Entity.d.ts.map +1 -1
  105. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts +6 -0
  106. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts.map +1 -1
  107. package/analyzer-template/playwright/capture.ts +37 -18
  108. package/analyzer-template/playwright/waitForServer.ts +21 -6
  109. package/analyzer-template/project/constructMockCode.ts +781 -140
  110. package/analyzer-template/project/orchestrateCapture/KyselyAnalysisLoader.ts +3 -6
  111. package/analyzer-template/project/orchestrateCapture.ts +10 -3
  112. package/analyzer-template/project/reconcileMockDataKeys.ts +28 -100
  113. package/analyzer-template/project/runAnalysis.ts +5 -0
  114. package/analyzer-template/project/serverOnlyModules.ts +127 -2
  115. package/analyzer-template/project/start.ts +5 -3
  116. package/analyzer-template/project/startScenarioCapture.ts +6 -0
  117. package/analyzer-template/project/writeMockDataTsx.ts +50 -22
  118. package/analyzer-template/project/writeScenarioClientWrapper.ts +21 -0
  119. package/analyzer-template/project/writeScenarioComponents.ts +162 -100
  120. package/analyzer-template/project/writeScenarioFiles.ts +26 -0
  121. package/analyzer-template/project/writeSimpleRoot.ts +11 -35
  122. package/analyzer-template/scripts/comboWorkerLoop.cjs +1 -0
  123. package/analyzer-template/scripts/defaultCmd.sh +9 -0
  124. package/background/src/lib/local/createLocalAnalyzer.js +1 -29
  125. package/background/src/lib/local/createLocalAnalyzer.js.map +1 -1
  126. package/background/src/lib/local/execAsync.js +1 -1
  127. package/background/src/lib/local/execAsync.js.map +1 -1
  128. package/background/src/lib/virtualized/common/execAsync.js +1 -1
  129. package/background/src/lib/virtualized/common/execAsync.js.map +1 -1
  130. package/background/src/lib/virtualized/project/constructMockCode.js +718 -127
  131. package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
  132. package/background/src/lib/virtualized/project/orchestrateCapture/KyselyAnalysisLoader.js +3 -2
  133. package/background/src/lib/virtualized/project/orchestrateCapture/KyselyAnalysisLoader.js.map +1 -1
  134. package/background/src/lib/virtualized/project/orchestrateCapture.js +7 -4
  135. package/background/src/lib/virtualized/project/orchestrateCapture.js.map +1 -1
  136. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js +25 -61
  137. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js.map +1 -1
  138. package/background/src/lib/virtualized/project/runAnalysis.js +4 -0
  139. package/background/src/lib/virtualized/project/runAnalysis.js.map +1 -1
  140. package/background/src/lib/virtualized/project/serverOnlyModules.js +106 -3
  141. package/background/src/lib/virtualized/project/serverOnlyModules.js.map +1 -1
  142. package/background/src/lib/virtualized/project/start.js +5 -3
  143. package/background/src/lib/virtualized/project/start.js.map +1 -1
  144. package/background/src/lib/virtualized/project/startScenarioCapture.js +7 -0
  145. package/background/src/lib/virtualized/project/startScenarioCapture.js.map +1 -1
  146. package/background/src/lib/virtualized/project/writeMockDataTsx.js +52 -23
  147. package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
  148. package/background/src/lib/virtualized/project/writeScenarioClientWrapper.js +15 -0
  149. package/background/src/lib/virtualized/project/writeScenarioClientWrapper.js.map +1 -0
  150. package/background/src/lib/virtualized/project/writeScenarioComponents.js +136 -83
  151. package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
  152. package/background/src/lib/virtualized/project/writeScenarioFiles.js +19 -0
  153. package/background/src/lib/virtualized/project/writeScenarioFiles.js.map +1 -1
  154. package/background/src/lib/virtualized/project/writeSimpleRoot.js +11 -34
  155. package/background/src/lib/virtualized/project/writeSimpleRoot.js.map +1 -1
  156. package/codeyam-cli/src/cli.js +5 -1
  157. package/codeyam-cli/src/cli.js.map +1 -1
  158. package/codeyam-cli/src/commands/analyze.js +1 -1
  159. package/codeyam-cli/src/commands/analyze.js.map +1 -1
  160. package/codeyam-cli/src/commands/baseline.js +177 -0
  161. package/codeyam-cli/src/commands/baseline.js.map +1 -0
  162. package/codeyam-cli/src/commands/status.js +23 -1
  163. package/codeyam-cli/src/commands/status.js.map +1 -1
  164. package/codeyam-cli/src/commands/test-startup.js +1 -1
  165. package/codeyam-cli/src/commands/test-startup.js.map +1 -1
  166. package/codeyam-cli/src/commands/wipe.js +108 -0
  167. package/codeyam-cli/src/commands/wipe.js.map +1 -0
  168. package/codeyam-cli/src/utils/database.js +91 -5
  169. package/codeyam-cli/src/utils/database.js.map +1 -1
  170. package/codeyam-cli/src/utils/git.js +79 -0
  171. package/codeyam-cli/src/utils/git.js.map +1 -0
  172. package/codeyam-cli/src/utils/queue/job.js +104 -0
  173. package/codeyam-cli/src/utils/queue/job.js.map +1 -1
  174. package/codeyam-cli/src/utils/queue/persistence.js.map +1 -1
  175. package/codeyam-cli/src/utils/wipe.js +128 -0
  176. package/codeyam-cli/src/utils/wipe.js.map +1 -0
  177. package/codeyam-cli/src/webserver/app/lib/database.js +66 -17
  178. package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
  179. package/codeyam-cli/src/webserver/build/client/assets/{EntityItem-wXL1Z2Aq.js → EntityItem-Cmysw5OP.js} +1 -1
  180. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-CzGX-miz.js → EntityTypeBadge-DLqD3qNt.js} +1 -1
  181. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-CXFKsCOD.js → EntityTypeIcon-CAneekK2.js} +1 -1
  182. package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-D-9pXIaY.js → InteractivePreview-Cu16OUmx.js} +2 -2
  183. package/codeyam-cli/src/webserver/build/client/assets/{LibraryFunctionPreview-CBQPrpT0.js → LibraryFunctionPreview-CVtiBnY5.js} +1 -1
  184. package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-D1CdlbrV.js → LoadingDots-B0GLXMsr.js} +1 -1
  185. package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-wDPcZNKx.js → LogViewer-xgeCVgSM.js} +1 -1
  186. package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-4lcOlid-.js → ReportIssueModal-DcAUIpD_.js} +1 -1
  187. package/codeyam-cli/src/webserver/build/client/assets/{SafeScreenshot-BfmDgXxG.js → SafeScreenshot-DuDvi0jm.js} +1 -1
  188. package/codeyam-cli/src/webserver/build/client/assets/ScenarioViewer-BMKg0SAF.js +15 -0
  189. package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-6J7zDUD5.js → TruncatedFilePath-DyFZkK0l.js} +1 -1
  190. package/codeyam-cli/src/webserver/build/client/assets/_index-DSmTpjmK.js +11 -0
  191. package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-BF_aK4y6.js +32 -0
  192. package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-BYimnrHg.js → chevron-down-Cx24_aWc.js} +1 -1
  193. package/codeyam-cli/src/webserver/build/client/assets/chunk-EPOLDU6W-CXRTFQ3F.js +51 -0
  194. package/codeyam-cli/src/webserver/build/client/assets/{circle-check-CaVsIRxt.js → circle-check-BOARzkeR.js} +1 -1
  195. package/codeyam-cli/src/webserver/build/client/assets/{createLucideIcon-CgUsG7ib.js → createLucideIcon-BdhJEx6B.js} +1 -1
  196. package/codeyam-cli/src/webserver/build/client/assets/{dev.empty-DW_hdGUc.js → dev.empty-RJCf3Tvw.js} +1 -1
  197. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-zUEpfPsu.js → entity._sha._-D0-YwkBh.js} +12 -12
  198. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-EylcgScH.js +1 -0
  199. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.create-scenario-D_3ero5o.js → entity._sha_.create-scenario-DMe7kvgo.js} +1 -1
  200. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-CfLCUi9S.js → entity._sha_.edit._scenarioId-C1H_a_Y3.js} +1 -1
  201. package/codeyam-cli/src/webserver/build/client/assets/{entry.client-DKJyZfAY.js → entry.client-CS2cb_eZ.js} +6 -6
  202. package/codeyam-cli/src/webserver/build/client/assets/{fileTableUtils-DAtOlaWE.js → fileTableUtils-DMJ7zii9.js} +1 -1
  203. package/codeyam-cli/src/webserver/build/client/assets/{files-ClR0d32A.js → files-BW7Cyeyi.js} +1 -1
  204. package/codeyam-cli/src/webserver/build/client/assets/{git-D62Lxxmv.js → git-CZu4fif0.js} +2 -2
  205. package/codeyam-cli/src/webserver/build/client/assets/globals-wHVy_II5.css +1 -0
  206. package/codeyam-cli/src/webserver/build/client/assets/{index-CzNNiTkw.js → index-B1h680n5.js} +1 -1
  207. package/codeyam-cli/src/webserver/build/client/assets/{index-BosqDOlH.js → index-lzqtyFU8.js} +1 -1
  208. package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-CNp9QFCX.js → loader-circle-B7B9V-bu.js} +1 -1
  209. package/codeyam-cli/src/webserver/build/client/assets/{manifest-09d684be.js → manifest-2d191949.js} +1 -1
  210. package/codeyam-cli/src/webserver/build/client/assets/root-FHgpM6gc.js +56 -0
  211. package/codeyam-cli/src/webserver/build/client/assets/{search-DDGjYAMJ.js → search-CxXUmBSd.js} +1 -1
  212. package/codeyam-cli/src/webserver/build/client/assets/{settings-DgTyB-Wg.js → settings-6D8k8Jp5.js} +1 -1
  213. package/codeyam-cli/src/webserver/build/client/assets/simulations-CDJZnWhN.js +1 -0
  214. package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-CBc5dE1s.js → triangle-alert-B6LgvRJg.js} +1 -1
  215. package/codeyam-cli/src/webserver/build/client/assets/{useCustomSizes-BMIGFP-m.js → useCustomSizes-Dv18q8LD.js} +1 -1
  216. package/codeyam-cli/src/webserver/build/client/assets/{useInteractiveMode-Dk_FQqWJ.js → useInteractiveMode-0ToGk4K3.js} +1 -1
  217. package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-BqPPNjAl.js → useLastLogLine-aSv48UbS.js} +1 -1
  218. package/codeyam-cli/src/webserver/build/client/assets/{useReportContext-DsJbgMY9.js → useReportContext-1BX144Eg.js} +1 -1
  219. package/codeyam-cli/src/webserver/build/client/assets/{useToast-DWHcCcl1.js → useToast-mBRpZPiu.js} +1 -1
  220. package/codeyam-cli/src/webserver/build/server/assets/{index-CV6i1S1A.js → index-pU0o5t1o.js} +1 -1
  221. package/codeyam-cli/src/webserver/build/server/assets/server-build-YzfkRwdn.js +178 -0
  222. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  223. package/codeyam-cli/src/webserver/build-info.json +5 -5
  224. package/codeyam-cli/templates/codeyam-setup-skill.md +138 -3
  225. package/codeyam-cli/templates/debug-codeyam.md +7 -2
  226. package/package.json +5 -5
  227. package/packages/ai/src/lib/astScopes/processExpression.js +13 -1
  228. package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
  229. package/packages/ai/src/lib/checkAllAttributes.js +24 -9
  230. package/packages/ai/src/lib/checkAllAttributes.js.map +1 -1
  231. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +94 -18
  232. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
  233. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js +2 -1
  234. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js.map +1 -1
  235. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.js +51 -23
  236. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.js.map +1 -1
  237. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js +70 -54
  238. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js.map +1 -1
  239. package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js +11 -0
  240. package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js.map +1 -1
  241. package/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.js +86 -0
  242. package/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.js.map +1 -0
  243. package/packages/ai/src/lib/deepEqual.js +32 -0
  244. package/packages/ai/src/lib/deepEqual.js.map +1 -0
  245. package/packages/ai/src/lib/findMatchingAttribute.js +20 -16
  246. package/packages/ai/src/lib/findMatchingAttribute.js.map +1 -1
  247. package/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.js +168 -41
  248. package/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.js.map +1 -1
  249. package/packages/ai/src/lib/generateChangesEntityKeyAttributes.js +42 -1
  250. package/packages/ai/src/lib/generateChangesEntityKeyAttributes.js.map +1 -1
  251. package/packages/ai/src/lib/generateChangesEntityScenarioData.js +59 -3
  252. package/packages/ai/src/lib/generateChangesEntityScenarioData.js.map +1 -1
  253. package/packages/ai/src/lib/generateChangesEntityScenarios.js +6 -6
  254. package/packages/ai/src/lib/generateChangesEntityScenarios.js.map +1 -1
  255. package/packages/ai/src/lib/generateEntityScenarioData.js +32 -23
  256. package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
  257. package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.js +20 -1
  258. package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.js.map +1 -1
  259. package/packages/analyze/src/lib/FileAnalyzer.js +15 -0
  260. package/packages/analyze/src/lib/FileAnalyzer.js.map +1 -1
  261. package/packages/analyze/src/lib/asts/nodes/index.js +1 -0
  262. package/packages/analyze/src/lib/asts/nodes/index.js.map +1 -1
  263. package/packages/analyze/src/lib/asts/nodes/isAsyncFunction.js +52 -0
  264. package/packages/analyze/src/lib/asts/nodes/isAsyncFunction.js.map +1 -0
  265. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js +59 -50
  266. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
  267. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +6 -0
  268. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
  269. package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js +2 -0
  270. package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js.map +1 -1
  271. package/packages/analyze/src/lib/files/analyzeChange.js +14 -4
  272. package/packages/analyze/src/lib/files/analyzeChange.js.map +1 -1
  273. package/packages/analyze/src/lib/files/analyzeEntity.js +7 -6
  274. package/packages/analyze/src/lib/files/analyzeEntity.js.map +1 -1
  275. package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js +44 -10
  276. package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js.map +1 -1
  277. package/packages/analyze/src/lib/files/scenarios/enrichUnknownTypesFromSourceEquivalencies.js +85 -0
  278. package/packages/analyze/src/lib/files/scenarios/enrichUnknownTypesFromSourceEquivalencies.js.map +1 -0
  279. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js +314 -52
  280. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js.map +1 -1
  281. package/packages/analyze/src/lib/files/scenarios/generateChangesScenarios.js +97 -2
  282. package/packages/analyze/src/lib/files/scenarios/generateChangesScenarios.js.map +1 -1
  283. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +88 -52
  284. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
  285. package/packages/analyze/src/lib/files/scenarios/generateScenarioData.js +26 -98
  286. package/packages/analyze/src/lib/files/scenarios/generateScenarioData.js.map +1 -1
  287. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +141 -75
  288. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
  289. package/packages/aws/src/lib/ecs/ecsDefineContainer.js +2 -2
  290. package/packages/aws/src/lib/ecs/ecsDefineContainer.js.map +1 -1
  291. package/packages/aws/src/lib/ecs/ecsTaskFactory.js +17 -61
  292. package/packages/aws/src/lib/ecs/ecsTaskFactory.js.map +1 -1
  293. package/packages/generate/index.js +3 -0
  294. package/packages/generate/index.js.map +1 -1
  295. package/packages/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js +16 -1
  296. package/packages/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js.map +1 -1
  297. package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +189 -0
  298. package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -0
  299. package/packages/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.js +53 -0
  300. package/packages/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.js.map +1 -0
  301. package/packages/generate/src/lib/scenarioComponentForServer.js +89 -0
  302. package/packages/generate/src/lib/scenarioComponentForServer.js.map +1 -0
  303. package/packages/github/src/lib/loadOrCreateCommit.js +10 -0
  304. package/packages/github/src/lib/loadOrCreateCommit.js.map +1 -1
  305. package/packages/github/src/lib/syncPrimaryBranch.js +3 -0
  306. package/packages/github/src/lib/syncPrimaryBranch.js.map +1 -1
  307. package/packages/process/index.js +3 -0
  308. package/packages/process/index.js.map +1 -0
  309. package/packages/process/src/GlobalProcessManager.js.map +1 -0
  310. package/{background/src/lib/process → packages/process/src}/ProcessManager.js +1 -1
  311. package/packages/process/src/ProcessManager.js.map +1 -0
  312. package/packages/process/src/index.js.map +1 -0
  313. package/packages/process/src/managedExecAsync.js.map +1 -0
  314. package/analyzer-template/process/INTEGRATION_COMPLETE.md +0 -333
  315. package/analyzer-template/process/INTEGRATION_EXAMPLE.md +0 -525
  316. package/analyzer-template/process/README.md +0 -507
  317. package/background/src/lib/process/GlobalProcessManager.js.map +0 -1
  318. package/background/src/lib/process/ProcessManager.js.map +0 -1
  319. package/background/src/lib/process/index.js.map +0 -1
  320. package/background/src/lib/process/managedExecAsync.js.map +0 -1
  321. package/codeyam-cli/scripts/fixtures/cal.com/universal-mocks/packages/prisma/index.js +0 -238
  322. package/codeyam-cli/scripts/fixtures/cal.com/universal-mocks/packages/prisma/index.js.map +0 -1
  323. package/codeyam-cli/scripts/fixtures/formbricks/universal-mocks/apps/web/lib/instance/service.js +0 -7
  324. package/codeyam-cli/scripts/fixtures/formbricks/universal-mocks/apps/web/lib/instance/service.js.map +0 -1
  325. package/codeyam-cli/src/webserver/build/client/assets/ScenarioViewer-CUxUNEEC.js +0 -15
  326. package/codeyam-cli/src/webserver/build/client/assets/_index-DHImXdXq.js +0 -11
  327. package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-2mG6mjVb.js +0 -32
  328. package/codeyam-cli/src/webserver/build/client/assets/chunk-JMJ3UQ3L-BambyYE_.js +0 -51
  329. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-DyB90fWk.js +0 -1
  330. package/codeyam-cli/src/webserver/build/client/assets/globals-C6vQASxy.css +0 -1
  331. package/codeyam-cli/src/webserver/build/client/assets/root-BxJUvKau.js +0 -56
  332. package/codeyam-cli/src/webserver/build/client/assets/simulations-CoNWGt0K.js +0 -1
  333. package/codeyam-cli/src/webserver/build/server/assets/server-build-BDlyhfrv.js +0 -175
  334. /package/analyzer-template/{process → packages/process/src}/GlobalProcessManager.ts +0 -0
  335. /package/analyzer-template/{process → packages/process/src}/ProcessManager.ts +0 -0
  336. /package/analyzer-template/{process → packages/process/src}/index.ts +0 -0
  337. /package/analyzer-template/{process → packages/process/src}/managedExecAsync.ts +0 -0
  338. /package/{background/src/lib/process → packages/process/src}/GlobalProcessManager.js +0 -0
  339. /package/{background/src/lib/process → packages/process/src}/index.js +0 -0
  340. /package/{background/src/lib/process → packages/process/src}/managedExecAsync.js +0 -0
@@ -5,12 +5,12 @@ import {
5
5
  Entity,
6
6
  DEFAULT_SCENARIO_NAME,
7
7
  } from '~codeyam/types';
8
- import deepEqual from '../../utils/deepEqual';
9
8
  import measureAndReportExecutionTime from '../../utils/measureAndReportExecutionTime';
10
9
  import {
11
10
  AI,
12
11
  generateChangesEntityScenarios,
13
12
  generateChangesEntityKeyAttributes,
13
+ gatherRelevantDependentKeyAttributes,
14
14
  } from '~codeyam/ai';
15
15
  import { awsLog } from '~codeyam/utils';
16
16
  import detectChangedDataStructureFields from './detectChangedDataStructureFields';
@@ -120,7 +120,54 @@ export default async function generateChangesScenarios({
120
120
  updateProgress,
121
121
  );
122
122
 
123
- analysis.metadata.keyAttributes = keyAttributes;
123
+ // Merge in dependent key attributes (same as initial flow)
124
+ // This ensures dependent entity key attributes aren't incorrectly seen as "removed"
125
+ const relevantDependentKeyAttributes = gatherRelevantDependentKeyAttributes(
126
+ entity,
127
+ analysis.metadata.mergedDataStructure,
128
+ dependentAnalyses,
129
+ );
130
+
131
+ // Log dependent key attributes gathered
132
+ awsLog(`CodeYam: Dependent key attributes gathered for ${entity.name}`, {
133
+ dependentKeyAttributeCount: relevantDependentKeyAttributes.length,
134
+ dependentKeyAttributes: relevantDependentKeyAttributes.map((ka) => ({
135
+ internalPath: ka.internalPath,
136
+ externalPath: ka.externalPath,
137
+ dependentEntityName: (ka as any).dependentEntityName,
138
+ originalEntityName: (ka as any).originalEntityName,
139
+ filePath: (ka as any).filePath,
140
+ })),
141
+ dependentAnalysesEntities: Object.entries(dependentAnalyses).flatMap(
142
+ ([path, entities]) =>
143
+ Object.keys(entities).map((name) => ({ path, name })),
144
+ ),
145
+ });
146
+
147
+ analysis.metadata.keyAttributes = [
148
+ ...keyAttributes,
149
+ ...relevantDependentKeyAttributes.map((ka) => ({
150
+ ...ka,
151
+ // Spread to convert readonly arrays to mutable arrays (with fallback for undefined)
152
+ validValueOptions: [...(ka.validValueOptions ?? [])],
153
+ errorValueOptions: [...(ka.errorValueOptions ?? [])],
154
+ // Convert readonly dependencies array to mutable if present
155
+ ...(ka.dependencies && {
156
+ dependencies: ka.dependencies.map((dep) => ({ ...dep })),
157
+ }),
158
+ // Convert readonly sourceLocations array to mutable if present
159
+ ...(ka.sourceLocations && {
160
+ sourceLocations: ka.sourceLocations.map((loc) => ({ ...loc })),
161
+ }),
162
+ // Convert readonly compoundConditionalIds array to mutable if present
163
+ ...(ka.compoundConditionalIds && {
164
+ compoundConditionalIds: [...ka.compoundConditionalIds],
165
+ }),
166
+ })),
167
+ ].filter(
168
+ (ka, index, self) =>
169
+ self.findIndex((k) => k.internalPath === ka.internalPath) === index,
170
+ );
124
171
 
125
172
  if (keyAttributesLLMCall) {
126
173
  analysis.metadata.llmCalls ||= [];
@@ -144,6 +191,84 @@ export default async function generateChangesScenarios({
144
191
  ),
145
192
  );
146
193
 
194
+ // Log key attribute changes for debugging
195
+ awsLog(`CodeYam: Key attribute comparison for ${entity.name}`, {
196
+ previousKeyAttributePaths: previousAnalysis.metadata.keyAttributes?.map(
197
+ (ka) => ({
198
+ internalPath: ka.internalPath,
199
+ isDependentAttr: !!(ka as any).dependentEntityName,
200
+ dependentEntityName: (ka as any).dependentEntityName,
201
+ }),
202
+ ),
203
+ currentKeyAttributePaths: analysis.metadata.keyAttributes?.map((ka) => ({
204
+ internalPath: ka.internalPath,
205
+ isDependentAttr: !!(ka as any).dependentEntityName,
206
+ dependentEntityName: (ka as any).dependentEntityName,
207
+ })),
208
+ addedKeyAttributePaths: addedKeyAttributes?.map((ka) => ({
209
+ internalPath: ka.internalPath,
210
+ isDependentAttr: !!(ka as any).dependentEntityName,
211
+ dependentEntityName: (ka as any).dependentEntityName,
212
+ filePath: (ka as any).filePath,
213
+ })),
214
+ removedKeyAttributePaths: removedKeyAttributes?.map((ka) => ({
215
+ internalPath: ka.internalPath,
216
+ isDependentAttr: !!(ka as any).dependentEntityName,
217
+ dependentEntityName: (ka as any).dependentEntityName,
218
+ filePath: (ka as any).filePath,
219
+ })),
220
+ });
221
+
222
+ // Detect key attributes with NEW source locations (usages)
223
+ // These are existing attributes that gained new conditional usages in the code
224
+ const modifiedKeyAttributes = analysis.metadata.keyAttributes
225
+ ?.filter((ka) => {
226
+ // Only consider attributes that existed before (not newly added)
227
+ const previousAttr = previousAnalysis.metadata.keyAttributes?.find(
228
+ (ka2) => ka.internalPath === ka2.internalPath,
229
+ );
230
+ if (!previousAttr) return false;
231
+
232
+ // Check if there are new source locations
233
+ const previousSnippets = new Set(
234
+ previousAttr.sourceLocations?.map((loc) => loc.codeSnippet) ?? [],
235
+ );
236
+ const newSourceLocations = ka.sourceLocations?.filter(
237
+ (loc) => !previousSnippets.has(loc.codeSnippet),
238
+ );
239
+
240
+ return newSourceLocations && newSourceLocations.length > 0;
241
+ })
242
+ .map((ka) => {
243
+ const previousAttr = previousAnalysis.metadata.keyAttributes?.find(
244
+ (ka2) => ka.internalPath === ka2.internalPath,
245
+ );
246
+ const previousSnippets = new Set(
247
+ previousAttr?.sourceLocations?.map((loc) => loc.codeSnippet) ?? [],
248
+ );
249
+ const newSourceLocations = ka.sourceLocations?.filter(
250
+ (loc) => !previousSnippets.has(loc.codeSnippet),
251
+ );
252
+
253
+ return {
254
+ keyAttribute: ka,
255
+ newSourceLocations,
256
+ };
257
+ });
258
+
259
+ // Log modified key attributes
260
+ if (modifiedKeyAttributes && modifiedKeyAttributes.length > 0) {
261
+ awsLog(`CodeYam: Modified key attributes for ${entity.name}`, {
262
+ modifiedKeyAttributePaths: modifiedKeyAttributes.map((mod) => ({
263
+ internalPath: mod.keyAttribute.internalPath,
264
+ isDependentAttr: !!(mod.keyAttribute as any).dependentEntityName,
265
+ dependentEntityName: (mod.keyAttribute as any).dependentEntityName,
266
+ newUsageCount: mod.newSourceLocations?.length ?? 0,
267
+ newUsages: mod.newSourceLocations?.map((loc) => loc.codeSnippet),
268
+ })),
269
+ });
270
+ }
271
+
147
272
  // Detect which specific data structure fields changed
148
273
  const changedDataStructureFields = detectChangedDataStructureFields(
149
274
  previousAnalysis.metadata?.scenariosDataStructure,
@@ -159,6 +284,7 @@ export default async function generateChangesScenarios({
159
284
  keyAttributes: analysis.metadata.keyAttributes,
160
285
  addedKeyAttributes,
161
286
  removedKeyAttributes,
287
+ modifiedKeyAttributes,
162
288
  dependentAnalyses,
163
289
  existingScenarios,
164
290
  commitDiff,
@@ -9,11 +9,13 @@ import {
9
9
  fillInDirectSchemaGapsAndUnknowns,
10
10
  deduplicateFunctionSchemas,
11
11
  clearAttributesFromMapping,
12
+ mergeJsonTypeDefinitions,
12
13
  } from '~codeyam/ai';
13
14
  import mergeInDependentDataStructure from './mergeInDependentDataStructure';
14
15
  import { awsLog } from '~codeyam/utils';
15
16
  import gatherDataForMocks from './gatherDataForMocks';
16
17
  import enrichArrayTypesFromChildSignatures from './enrichArrayTypesFromChildSignatures';
18
+ import enrichUnknownTypesFromSourceEquivalencies from './enrichUnknownTypesFromSourceEquivalencies';
17
19
 
18
20
  export interface GenerateDataStructureArgs {
19
21
  entity: Entity;
@@ -174,6 +176,14 @@ export default function generateDataStructure({
174
176
  // child components (e.g., QuotesTableCompact inside AdminDashboard inside
175
177
  // DashboardPage) also have mocked dependencies that need mock data keys.
176
178
 
179
+ // Collect child dependency schemas to merge after mergeInDependentDataStructure
180
+ // This ensures that when we look up schemas for child imports in gatherDataForMocks,
181
+ // the child's schemas are available in mergedDataStructure.dependencySchemas.
182
+ type DependencySchemas = NonNullable<
183
+ Analysis['metadata']['mergedDataStructure']
184
+ >['dependencySchemas'];
185
+ const childDependencySchemas: DependencySchemas = {};
186
+
177
187
  // Helper function to add mocked imports from an entity to allImportedExports
178
188
  const addMockedImportsFromEntity = (childEntity: Entity | undefined) => {
179
189
  if (!childEntity?.metadata) return;
@@ -299,6 +309,71 @@ export default function generateDataStructure({
299
309
  // via their mergedDataStructure's nested dependentAnalyses
300
310
  const childMergedDataStructure =
301
311
  childAnalysis?.metadata?.mergedDataStructure;
312
+
313
+ // Collect the child's dependency schemas for merging later.
314
+ // This ensures schemas for child imports are available in gatherDataForMocks.
315
+ if (childMergedDataStructure?.dependencySchemas) {
316
+ for (const schemaFilePath in childMergedDataStructure.dependencySchemas) {
317
+ for (const schemaName in childMergedDataStructure
318
+ .dependencySchemas[schemaFilePath]) {
319
+ childDependencySchemas[schemaFilePath] ||= {};
320
+ const existingSchema =
321
+ childDependencySchemas[schemaFilePath][schemaName];
322
+ const newSchema =
323
+ childMergedDataStructure.dependencySchemas[schemaFilePath][
324
+ schemaName
325
+ ];
326
+
327
+ if (existingSchema) {
328
+ // Merge schemas if the same dependency exists from multiple children
329
+ childDependencySchemas[schemaFilePath][schemaName] = {
330
+ signatureSchema: {
331
+ ...existingSchema.signatureSchema,
332
+ ...newSchema.signatureSchema,
333
+ },
334
+ returnValueSchema: mergeJsonTypeDefinitions(
335
+ existingSchema.returnValueSchema as Record<
336
+ string,
337
+ unknown
338
+ >,
339
+ newSchema.returnValueSchema as Record<string, unknown>,
340
+ ) as Record<string, string>,
341
+ };
342
+ } else {
343
+ childDependencySchemas[schemaFilePath][schemaName] = {
344
+ signatureSchema: { ...newSchema.signatureSchema },
345
+ returnValueSchema: { ...newSchema.returnValueSchema },
346
+ };
347
+ }
348
+ }
349
+ }
350
+ }
351
+
352
+ // Also collect the child's OWN signatureSchema for enrichment.
353
+ // This allows enrichArrayTypesFromChildSignatures to find what fields
354
+ // non-mocked child components expect on their props (e.g., SurveyCard
355
+ // expecting survey.createdAt, survey.updatedAt, etc.)
356
+ if (childMergedDataStructure?.signatureSchema) {
357
+ childDependencySchemas[filePath] ||= {};
358
+ const existingSchema = childDependencySchemas[filePath][name];
359
+ if (existingSchema) {
360
+ childDependencySchemas[filePath][name] = {
361
+ signatureSchema: {
362
+ ...existingSchema.signatureSchema,
363
+ ...childMergedDataStructure.signatureSchema,
364
+ },
365
+ returnValueSchema: existingSchema.returnValueSchema,
366
+ };
367
+ } else {
368
+ childDependencySchemas[filePath][name] = {
369
+ signatureSchema: {
370
+ ...childMergedDataStructure.signatureSchema,
371
+ },
372
+ returnValueSchema: {},
373
+ };
374
+ }
375
+ }
376
+
302
377
  if (childMergedDataStructure?.dependencySchemas) {
303
378
  // We need to find non-mocked child components in the dependency tree
304
379
  // These would be in the child's importedExports that are NOT mocked
@@ -367,6 +442,36 @@ export default function generateDataStructure({
367
442
  mergedDataStructure.environmentVariables =
368
443
  isolatedDataStructure.environmentVariables || [];
369
444
 
445
+ // Merge collected child dependency schemas into mergedDataStructure.
446
+ // This ensures that when gatherDataForMocks looks up schemas for child imports,
447
+ // the child's schemas are available.
448
+ for (const schemaFilePath in childDependencySchemas) {
449
+ for (const schemaName in childDependencySchemas[schemaFilePath]) {
450
+ mergedDataStructure.dependencySchemas[schemaFilePath] ||= {};
451
+ const existingSchema =
452
+ mergedDataStructure.dependencySchemas[schemaFilePath][schemaName];
453
+ const childSchema = childDependencySchemas[schemaFilePath][schemaName];
454
+
455
+ if (existingSchema) {
456
+ // Merge schemas - child schemas add to parent schemas
457
+ mergedDataStructure.dependencySchemas[schemaFilePath][schemaName] = {
458
+ signatureSchema: {
459
+ ...existingSchema.signatureSchema,
460
+ ...childSchema.signatureSchema,
461
+ },
462
+ returnValueSchema: mergeJsonTypeDefinitions(
463
+ existingSchema.returnValueSchema as Record<string, unknown>,
464
+ childSchema.returnValueSchema as Record<string, unknown>,
465
+ ) as Record<string, string>,
466
+ };
467
+ } else {
468
+ // No existing schema - just add the child's schema
469
+ mergedDataStructure.dependencySchemas[schemaFilePath][schemaName] =
470
+ childSchema;
471
+ }
472
+ }
473
+ }
474
+
370
475
  // console.info(
371
476
  // 'CODEYAM DEBUG: end merge',
372
477
  // JSON.stringify(
@@ -426,32 +531,15 @@ export default function generateDataStructure({
426
531
  mergedDataStructure.dependencySchemas,
427
532
  );
428
533
 
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
- ),
534
+ // Enrich mocked dependency unknown types using sourceEquivalencies
535
+ // When a mocked dependency returns unknown, but that data flows to a child component
536
+ // with a known type, propagate the type back to the mocked dependency.
537
+ // This prevents fillInDirectSchemaGapsAndUnknowns from guessing incorrectly
538
+ // (e.g., 'data' becoming 'number' because pluralize thinks it's plural)
539
+ enrichUnknownTypesFromSourceEquivalencies(
540
+ isolatedDataStructure.dependencySchemas || {},
541
+ mergedDataStructure.dependencySchemas,
542
+ allImportedExports,
455
543
  );
456
544
 
457
545
  const dataForMocks = gatherDataForMocks(
@@ -460,50 +548,6 @@ export default function generateDataStructure({
460
548
  { entityName: entity.name },
461
549
  );
462
550
 
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
- );
475
-
476
- // console.info(
477
- // 'CODEYAM DEBUG: dataForMocks',
478
- // JSON.stringify(
479
- // {
480
- // filePath: entity.filePath,
481
- // entityName: entity.name,
482
- // dataForMocks,
483
- // },
484
- // null,
485
- // 2,
486
- // ),
487
- // );
488
-
489
- // Log union types in signatureSchema before processing
490
- const unionTypeEntries = Object.entries(
491
- mergedDataStructure.signatureSchema,
492
- ).filter(
493
- ([_, value]) =>
494
- typeof value === 'string' &&
495
- value.includes("'") &&
496
- value.includes(' | '),
497
- );
498
- if (unionTypeEntries.length > 0) {
499
- console.log(
500
- `[UNION-TYPE] generateDataStructure for ${entity.name}: Found union types in signatureSchema:`,
501
- );
502
- unionTypeEntries.forEach(([key, value]) => {
503
- console.log(`[UNION-TYPE] "${key}": ${value}`);
504
- });
505
- }
506
-
507
551
  const finalizedArgumentsSchema = fillInDirectSchemaGapsAndUnknowns({
508
552
  schema: { ...mergedDataStructure.signatureSchema },
509
553
  });
@@ -23,81 +23,52 @@ export interface GenerateScenarioDataArgs {
23
23
  }
24
24
 
25
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"
26
+ * Consolidates dataForMocks from the current analysis and all dependent analyses.
27
+ *
28
+ * Keys are preserved as original call signatures (e.g., 'useFetcher<UserData>()',
29
+ * 'db.select(usersQuery)'). When the same call signature appears from multiple
30
+ * analyses, schemas are merged.
32
31
  */
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
-
61
32
  export function gatherDataForMocks(
62
33
  analysis: ReadonlyAnalysis,
63
34
  dependentAnalyses: ReadonlyAnalysisMap,
64
- rootEntityName?: string,
35
+ _rootEntityName?: string, // Kept for API compatibility but no longer used for key transformation
65
36
  ): Analysis['metadata']['scenariosDataStructure']['dataForMocks'] {
66
37
  const dataForMocks: Analysis['metadata']['scenariosDataStructure']['dataForMocks'] =
67
38
  {};
68
39
  const analysesGathered = new Set<string>();
69
40
 
70
- // Track hook indices for assigning new indices when schemas differ
71
- const hookIndices: Record<string, number> = {};
72
-
73
41
  /**
74
- * Find an existing key in dataForMocks that has the same hook name
75
- * and matching schema. Returns the key if found, null otherwise.
42
+ * Helper to merge schemas (only works for objects, otherwise just returns new value)
76
43
  */
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
- }
44
+ const mergeSchemas = (
45
+ existing: JsonTypeDefinition[keyof JsonTypeDefinition],
46
+ incoming: JsonTypeDefinition[keyof JsonTypeDefinition],
47
+ ): JsonTypeDefinition[keyof JsonTypeDefinition] => {
48
+ // Only merge if both are objects (not arrays, not primitives)
49
+ if (
50
+ typeof existing === 'object' &&
51
+ existing !== null &&
52
+ !Array.isArray(existing) &&
53
+ typeof incoming === 'object' &&
54
+ incoming !== null &&
55
+ !Array.isArray(incoming)
56
+ ) {
57
+ return mergeJsonTypeDefinitions(
58
+ existing as JsonTypeDefinition,
59
+ incoming as JsonTypeDefinition,
60
+ );
89
61
  }
90
- return null;
62
+ // For primitives/arrays, just use the incoming value
63
+ return incoming;
91
64
  };
92
65
 
93
66
  /**
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
67
+ * Add mock data, preserving original call signature as key.
68
+ * Merges schemas when the same key appears from multiple sources.
98
69
  */
99
70
  const addMockData = (
100
- originalKey: string,
71
+ key: string,
101
72
  schema: JsonTypeDefinition[keyof JsonTypeDefinition],
102
73
  ): void => {
103
74
  // Skip if schema is empty object
@@ -115,77 +86,11 @@ export function gatherDataForMocks(
115
86
  return;
116
87
  }
117
88
 
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;
89
+ // Preserve original key (call signature), merge if exists
90
+ if (dataForMocks[key]) {
91
+ dataForMocks[key] = mergeSchemas(dataForMocks[key], schema);
92
+ } else {
93
+ dataForMocks[key] = schema;
189
94
  }
190
95
  };
191
96