@codeyam/codeyam-cli 0.1.0-staging.596f0eb → 0.1.0-staging.76566f9

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 (354) 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 +2 -1
  4. package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +2 -0
  5. package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +22 -0
  6. package/analyzer-template/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.ts +23 -1
  7. package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +401 -106
  8. package/analyzer-template/packages/ai/src/lib/astScopes/types.ts +60 -0
  9. package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +734 -45
  10. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.ts +2 -1
  11. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.ts +715 -0
  12. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.ts +233 -75
  13. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.ts +19 -1
  14. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.ts +34 -1
  15. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.ts +23 -0
  16. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.ts +98 -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/generateChangesEntityScenarioData.ts +41 -0
  21. package/analyzer-template/packages/ai/src/lib/generateChangesEntityScenarios.ts +37 -4
  22. package/analyzer-template/packages/ai/src/lib/generateEntityDataStructure.ts +5 -0
  23. package/analyzer-template/packages/ai/src/lib/generateEntityKeyAttributes.ts +213 -12
  24. package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +36 -25
  25. package/analyzer-template/packages/ai/src/lib/generateEntityScenarios.ts +114 -11
  26. package/analyzer-template/packages/ai/src/lib/getConditionalUsagesFromCode.ts +143 -31
  27. package/analyzer-template/packages/ai/src/lib/guessScenarioDataFromDescription.ts +8 -2
  28. package/analyzer-template/packages/ai/src/lib/promptGenerators/gatherAttributesMap.ts +7 -0
  29. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.ts +42 -2
  30. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.ts +38 -2
  31. package/analyzer-template/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.ts +28 -2
  32. package/analyzer-template/packages/ai/src/lib/worker/SerializableDataStructure.ts +5 -0
  33. package/analyzer-template/packages/ai/src/lib/worker/analyzeScopeWorker.ts +8 -1
  34. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +127 -43
  35. package/analyzer-template/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.ts +158 -0
  36. package/analyzer-template/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.ts +405 -45
  37. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateChangesScenarioData.ts +1 -1
  38. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +260 -133
  39. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.ts +10 -5
  40. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateScenarioData.ts +77 -83
  41. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateScenarios.ts +2 -5
  42. package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +196 -86
  43. package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.d.ts +15 -0
  44. package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.d.ts.map +1 -0
  45. package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.js +31 -0
  46. package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.js.map +1 -0
  47. package/analyzer-template/packages/aws/package.json +1 -1
  48. package/analyzer-template/packages/aws/s3/index.ts +1 -0
  49. package/analyzer-template/packages/aws/src/lib/s3/checkS3ObjectExists.ts +47 -0
  50. package/analyzer-template/packages/database/src/lib/kysely/db.ts +4 -4
  51. package/analyzer-template/packages/database/src/lib/kysely/tableRelations.ts +2 -2
  52. package/analyzer-template/packages/database/src/lib/kysely/tables/debugReportsTable.ts +20 -9
  53. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.ts +9 -4
  54. package/analyzer-template/packages/generate/src/lib/deepMerge.ts +26 -1
  55. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts +2 -2
  56. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js +2 -2
  57. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tableRelations.d.ts +2 -2
  58. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/analysesTable.d.ts +8 -1
  59. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/analysesTable.d.ts.map +1 -1
  60. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.d.ts +14 -7
  61. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.d.ts.map +1 -1
  62. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.js +9 -3
  63. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.js.map +1 -1
  64. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts +1 -1
  65. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts.map +1 -1
  66. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.d.ts.map +1 -1
  67. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +8 -4
  68. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
  69. package/analyzer-template/packages/github/dist/generate/src/lib/deepMerge.d.ts.map +1 -1
  70. package/analyzer-template/packages/github/dist/generate/src/lib/deepMerge.js +27 -1
  71. package/analyzer-template/packages/github/dist/generate/src/lib/deepMerge.js.map +1 -1
  72. package/analyzer-template/packages/github/dist/types/index.d.ts +4 -3
  73. package/analyzer-template/packages/github/dist/types/index.d.ts.map +1 -1
  74. package/analyzer-template/packages/github/dist/types/index.js +1 -0
  75. package/analyzer-template/packages/github/dist/types/index.js.map +1 -1
  76. package/analyzer-template/packages/github/dist/types/src/types/Analysis.d.ts +31 -1
  77. package/analyzer-template/packages/github/dist/types/src/types/Analysis.d.ts.map +1 -1
  78. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts +51 -1
  79. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts.map +1 -1
  80. package/analyzer-template/packages/github/dist/types/src/types/Scenario.js +21 -1
  81. package/analyzer-template/packages/github/dist/types/src/types/Scenario.js.map +1 -1
  82. package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.d.ts +48 -0
  83. package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.d.ts.map +1 -1
  84. package/analyzer-template/packages/github/dist/utils/src/lib/lightweightEntityExtractor.d.ts.map +1 -1
  85. package/analyzer-template/packages/github/dist/utils/src/lib/lightweightEntityExtractor.js +25 -0
  86. package/analyzer-template/packages/github/dist/utils/src/lib/lightweightEntityExtractor.js.map +1 -1
  87. package/analyzer-template/packages/types/index.ts +8 -0
  88. package/analyzer-template/packages/types/src/types/Analysis.ts +32 -1
  89. package/analyzer-template/packages/types/src/types/Scenario.ts +75 -6
  90. package/analyzer-template/packages/types/src/types/ScenariosDataStructure.ts +49 -0
  91. package/analyzer-template/packages/ui-components/src/components/ScenarioDetailInteractiveView.tsx +23 -7
  92. package/analyzer-template/packages/utils/dist/types/index.d.ts +4 -3
  93. package/analyzer-template/packages/utils/dist/types/index.d.ts.map +1 -1
  94. package/analyzer-template/packages/utils/dist/types/index.js +1 -0
  95. package/analyzer-template/packages/utils/dist/types/index.js.map +1 -1
  96. package/analyzer-template/packages/utils/dist/types/src/types/Analysis.d.ts +31 -1
  97. package/analyzer-template/packages/utils/dist/types/src/types/Analysis.d.ts.map +1 -1
  98. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts +51 -1
  99. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts.map +1 -1
  100. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.js +21 -1
  101. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.js.map +1 -1
  102. package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.d.ts +48 -0
  103. package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.d.ts.map +1 -1
  104. package/analyzer-template/packages/utils/dist/utils/src/lib/lightweightEntityExtractor.d.ts.map +1 -1
  105. package/analyzer-template/packages/utils/dist/utils/src/lib/lightweightEntityExtractor.js +25 -0
  106. package/analyzer-template/packages/utils/dist/utils/src/lib/lightweightEntityExtractor.js.map +1 -1
  107. package/analyzer-template/packages/utils/src/lib/lightweightEntityExtractor.ts +27 -0
  108. package/analyzer-template/playwright/takeElementScreenshot.ts +26 -11
  109. package/analyzer-template/playwright/takeScreenshot.ts +9 -7
  110. package/analyzer-template/project/constructMockCode.ts +286 -84
  111. package/analyzer-template/project/orchestrateCapture/SequentialCaptureTaskRunner.ts +77 -37
  112. package/analyzer-template/project/reconcileMockDataKeys.ts +5 -2
  113. package/analyzer-template/project/runMultiScenarioServer.ts +11 -10
  114. package/analyzer-template/project/serverOnlyModules.ts +71 -23
  115. package/analyzer-template/project/start.ts +10 -0
  116. package/analyzer-template/project/startScenarioCapture.ts +73 -41
  117. package/analyzer-template/project/writeMockDataTsx.ts +115 -54
  118. package/analyzer-template/project/writeScenarioComponents.ts +571 -162
  119. package/analyzer-template/project/writeSimpleRoot.ts +11 -13
  120. package/background/src/lib/virtualized/project/constructMockCode.js +265 -75
  121. package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
  122. package/background/src/lib/virtualized/project/orchestrateCapture/SequentialCaptureTaskRunner.js +67 -32
  123. package/background/src/lib/virtualized/project/orchestrateCapture/SequentialCaptureTaskRunner.js.map +1 -1
  124. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js +5 -2
  125. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js.map +1 -1
  126. package/background/src/lib/virtualized/project/runMultiScenarioServer.js +11 -9
  127. package/background/src/lib/virtualized/project/runMultiScenarioServer.js.map +1 -1
  128. package/background/src/lib/virtualized/project/serverOnlyModules.js +62 -25
  129. package/background/src/lib/virtualized/project/serverOnlyModules.js.map +1 -1
  130. package/background/src/lib/virtualized/project/start.js +6 -0
  131. package/background/src/lib/virtualized/project/start.js.map +1 -1
  132. package/background/src/lib/virtualized/project/startScenarioCapture.js +54 -31
  133. package/background/src/lib/virtualized/project/startScenarioCapture.js.map +1 -1
  134. package/background/src/lib/virtualized/project/writeMockDataTsx.js +106 -46
  135. package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
  136. package/background/src/lib/virtualized/project/writeScenarioComponents.js +399 -106
  137. package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
  138. package/background/src/lib/virtualized/project/writeSimpleRoot.js +11 -11
  139. package/background/src/lib/virtualized/project/writeSimpleRoot.js.map +1 -1
  140. package/codeyam-cli/src/cli.js +2 -0
  141. package/codeyam-cli/src/cli.js.map +1 -1
  142. package/codeyam-cli/src/commands/debug.js +14 -2
  143. package/codeyam-cli/src/commands/debug.js.map +1 -1
  144. package/codeyam-cli/src/commands/recapture.js +215 -0
  145. package/codeyam-cli/src/commands/recapture.js.map +1 -0
  146. package/codeyam-cli/src/commands/report.js +26 -23
  147. package/codeyam-cli/src/commands/report.js.map +1 -1
  148. package/codeyam-cli/src/utils/backgroundServer.js +2 -2
  149. package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
  150. package/codeyam-cli/src/utils/generateReport.js +252 -106
  151. package/codeyam-cli/src/utils/generateReport.js.map +1 -1
  152. package/codeyam-cli/src/utils/install-skills.js +2 -2
  153. package/codeyam-cli/src/utils/install-skills.js.map +1 -1
  154. package/codeyam-cli/src/utils/queue/__tests__/manager.test.js +38 -0
  155. package/codeyam-cli/src/utils/queue/__tests__/manager.test.js.map +1 -1
  156. package/codeyam-cli/src/utils/queue/job.js +140 -16
  157. package/codeyam-cli/src/utils/queue/job.js.map +1 -1
  158. package/codeyam-cli/src/utils/queue/manager.js +19 -7
  159. package/codeyam-cli/src/utils/queue/manager.js.map +1 -1
  160. package/codeyam-cli/src/utils/queue/persistence.js.map +1 -1
  161. package/codeyam-cli/src/webserver/app/lib/database.js +47 -0
  162. package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
  163. package/codeyam-cli/src/webserver/app/lib/dbNotifier.js.map +1 -1
  164. package/codeyam-cli/src/webserver/backgroundServer.js +5 -10
  165. package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
  166. package/codeyam-cli/src/webserver/bootstrap.js +9 -0
  167. package/codeyam-cli/src/webserver/bootstrap.js.map +1 -0
  168. package/codeyam-cli/src/webserver/build/client/assets/EntityItem-wXL1Z2Aq.js +1 -0
  169. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-efWKDYMr.js → EntityTypeBadge-CzGX-miz.js} +1 -1
  170. package/codeyam-cli/src/webserver/build/client/assets/EntityTypeIcon-CXFKsCOD.js +41 -0
  171. package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-D-9pXIaY.js +25 -0
  172. package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-CBQPrpT0.js +3 -0
  173. package/codeyam-cli/src/webserver/build/client/assets/LoadingDots-D1CdlbrV.js +6 -0
  174. package/codeyam-cli/src/webserver/build/client/assets/LogViewer-wDPcZNKx.js +3 -0
  175. package/codeyam-cli/src/webserver/build/client/assets/ReportIssueModal-4lcOlid-.js +11 -0
  176. package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-BfmDgXxG.js +1 -0
  177. package/codeyam-cli/src/webserver/build/client/assets/ScenarioViewer-CUxUNEEC.js +15 -0
  178. package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-COPstp9J.js → TruncatedFilePath-6J7zDUD5.js} +1 -1
  179. package/codeyam-cli/src/webserver/build/client/assets/_index-DHImXdXq.js +11 -0
  180. package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-CVP_WGQ3.js +32 -0
  181. package/codeyam-cli/src/webserver/build/client/assets/api.link-scenario-value-l0sNRNKZ.js +1 -0
  182. package/codeyam-cli/src/webserver/build/client/assets/api.update-key-attributes-l0sNRNKZ.js +1 -0
  183. package/codeyam-cli/src/webserver/build/client/assets/api.update-valid-values-l0sNRNKZ.js +1 -0
  184. package/codeyam-cli/src/webserver/build/client/assets/chevron-down-BYimnrHg.js +6 -0
  185. package/codeyam-cli/src/webserver/build/client/assets/chunk-JMJ3UQ3L-BambyYE_.js +51 -0
  186. package/codeyam-cli/src/webserver/build/client/assets/circle-check-CaVsIRxt.js +6 -0
  187. package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-CgUsG7ib.js +21 -0
  188. package/codeyam-cli/src/webserver/build/client/assets/cy-logo-cli-CKnwPCDr.js +1 -0
  189. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-DW_hdGUc.js +1 -0
  190. package/codeyam-cli/src/webserver/build/client/assets/entity._sha._-Dt-SjPsw.js +23 -0
  191. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-DyB90fWk.js +1 -0
  192. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-D_3ero5o.js +1 -0
  193. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.edit._scenarioId-CfLCUi9S.js +5 -0
  194. package/codeyam-cli/src/webserver/build/client/assets/entry.client-DKJyZfAY.js +29 -0
  195. package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-DAtOlaWE.js +1 -0
  196. package/codeyam-cli/src/webserver/build/client/assets/files-ClR0d32A.js +1 -0
  197. package/codeyam-cli/src/webserver/build/client/assets/git-D62Lxxmv.js +15 -0
  198. package/codeyam-cli/src/webserver/build/client/assets/globals-C9s7Lhdl.css +1 -0
  199. package/codeyam-cli/src/webserver/build/client/assets/html2canvas-pro.esm-fmIEn3Bc.js +9 -0
  200. package/codeyam-cli/src/webserver/build/client/assets/index-BosqDOlH.js +3 -0
  201. package/codeyam-cli/src/webserver/build/client/assets/index-CzNNiTkw.js +9 -0
  202. package/codeyam-cli/src/webserver/build/client/assets/keyAttributeCoverage-CTlFMihX.js +1 -0
  203. package/codeyam-cli/src/webserver/build/client/assets/loader-circle-CNp9QFCX.js +6 -0
  204. package/codeyam-cli/src/webserver/build/client/assets/manifest-0d27da29.js +1 -0
  205. package/codeyam-cli/src/webserver/build/client/assets/preload-helper-ckwbz45p.js +1 -0
  206. package/codeyam-cli/src/webserver/build/client/assets/root-B_wIKCIf.js +56 -0
  207. package/codeyam-cli/src/webserver/build/client/assets/scenarioStatus-B_8jpV3e.js +1 -0
  208. package/codeyam-cli/src/webserver/build/client/assets/search-DDGjYAMJ.js +6 -0
  209. package/codeyam-cli/src/webserver/build/client/assets/settings-DgTyB-Wg.js +1 -0
  210. package/codeyam-cli/src/webserver/build/client/assets/simulations-CoNWGt0K.js +1 -0
  211. package/codeyam-cli/src/webserver/build/client/assets/triangle-alert-CBc5dE1s.js +6 -0
  212. package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-BMIGFP-m.js +1 -0
  213. package/codeyam-cli/src/webserver/build/client/assets/useInteractiveMode-Dk_FQqWJ.js +1 -0
  214. package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-3pmpUQB-.js → useLastLogLine-BqPPNjAl.js} +1 -1
  215. package/codeyam-cli/src/webserver/build/client/assets/useReportContext-DsJbgMY9.js +1 -0
  216. package/codeyam-cli/src/webserver/build/client/assets/{useToast-DEyawJ8r.js → useToast-DWHcCcl1.js} +1 -1
  217. package/codeyam-cli/src/webserver/build/server/assets/index-CU58-Ttc.js +1 -0
  218. package/codeyam-cli/src/webserver/build/server/assets/server-build-D35o2uae.js +175 -0
  219. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  220. package/codeyam-cli/src/webserver/build-info.json +5 -5
  221. package/codeyam-cli/src/webserver/devServer.js +1 -3
  222. package/codeyam-cli/src/webserver/devServer.js.map +1 -1
  223. package/codeyam-cli/templates/codeyam-setup-skill.md +138 -3
  224. package/codeyam-cli/templates/debug-codeyam.md +625 -0
  225. package/package.json +14 -14
  226. package/packages/ai/src/lib/analyzeScope.js +2 -0
  227. package/packages/ai/src/lib/analyzeScope.js.map +1 -1
  228. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +16 -0
  229. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js.map +1 -1
  230. package/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.js +16 -0
  231. package/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.js.map +1 -1
  232. package/packages/ai/src/lib/astScopes/processExpression.js +305 -88
  233. package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
  234. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +582 -41
  235. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
  236. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js +2 -1
  237. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js.map +1 -1
  238. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.js +454 -0
  239. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.js.map +1 -0
  240. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js +173 -55
  241. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js.map +1 -1
  242. package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js +16 -1
  243. package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js.map +1 -1
  244. package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js +30 -1
  245. package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js.map +1 -1
  246. package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js +20 -0
  247. package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js.map +1 -1
  248. package/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.js +86 -0
  249. package/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.js.map +1 -0
  250. package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js +28 -2
  251. package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js.map +1 -1
  252. package/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.js +179 -17
  253. package/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.js.map +1 -1
  254. package/packages/ai/src/lib/generateChangesEntityKeyAttributes.js +6 -0
  255. package/packages/ai/src/lib/generateChangesEntityKeyAttributes.js.map +1 -1
  256. package/packages/ai/src/lib/generateChangesEntityScenarioData.js +41 -0
  257. package/packages/ai/src/lib/generateChangesEntityScenarioData.js.map +1 -1
  258. package/packages/ai/src/lib/generateChangesEntityScenarios.js +37 -4
  259. package/packages/ai/src/lib/generateChangesEntityScenarios.js.map +1 -1
  260. package/packages/ai/src/lib/generateEntityDataStructure.js +4 -0
  261. package/packages/ai/src/lib/generateEntityDataStructure.js.map +1 -1
  262. package/packages/ai/src/lib/generateEntityKeyAttributes.js +176 -9
  263. package/packages/ai/src/lib/generateEntityKeyAttributes.js.map +1 -1
  264. package/packages/ai/src/lib/generateEntityScenarioData.js +29 -25
  265. package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
  266. package/packages/ai/src/lib/generateEntityScenarios.js +105 -9
  267. package/packages/ai/src/lib/generateEntityScenarios.js.map +1 -1
  268. package/packages/ai/src/lib/getConditionalUsagesFromCode.js +84 -14
  269. package/packages/ai/src/lib/getConditionalUsagesFromCode.js.map +1 -1
  270. package/packages/ai/src/lib/guessScenarioDataFromDescription.js +2 -1
  271. package/packages/ai/src/lib/guessScenarioDataFromDescription.js.map +1 -1
  272. package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js +6 -0
  273. package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js.map +1 -1
  274. package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.js +38 -2
  275. package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.js.map +1 -1
  276. package/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.js +38 -2
  277. package/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.js.map +1 -1
  278. package/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.js +16 -3
  279. package/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.js.map +1 -1
  280. package/packages/ai/src/lib/worker/SerializableDataStructure.js.map +1 -1
  281. package/packages/ai/src/lib/worker/analyzeScopeWorker.js +4 -0
  282. package/packages/ai/src/lib/worker/analyzeScopeWorker.js.map +1 -1
  283. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js +100 -23
  284. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
  285. package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js +125 -0
  286. package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js.map +1 -0
  287. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js +298 -45
  288. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js.map +1 -1
  289. package/packages/analyze/src/lib/files/scenarios/generateChangesScenarioData.js +1 -1
  290. package/packages/analyze/src/lib/files/scenarios/generateChangesScenarioData.js.map +1 -1
  291. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +201 -80
  292. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
  293. package/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.js +10 -5
  294. package/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.js.map +1 -1
  295. package/packages/analyze/src/lib/files/scenarios/generateScenarioData.js +55 -69
  296. package/packages/analyze/src/lib/files/scenarios/generateScenarioData.js.map +1 -1
  297. package/packages/analyze/src/lib/files/scenarios/generateScenarios.js +2 -5
  298. package/packages/analyze/src/lib/files/scenarios/generateScenarios.js.map +1 -1
  299. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +171 -81
  300. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
  301. package/packages/database/src/lib/kysely/db.js +2 -2
  302. package/packages/database/src/lib/kysely/tables/debugReportsTable.js +9 -3
  303. package/packages/database/src/lib/kysely/tables/debugReportsTable.js.map +1 -1
  304. package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +8 -4
  305. package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
  306. package/packages/generate/src/lib/deepMerge.js +27 -1
  307. package/packages/generate/src/lib/deepMerge.js.map +1 -1
  308. package/packages/types/index.js +1 -0
  309. package/packages/types/index.js.map +1 -1
  310. package/packages/types/src/types/Scenario.js +21 -1
  311. package/packages/types/src/types/Scenario.js.map +1 -1
  312. package/packages/utils/src/lib/lightweightEntityExtractor.js +25 -0
  313. package/packages/utils/src/lib/lightweightEntityExtractor.js.map +1 -1
  314. package/scripts/finalize-analyzer.cjs +3 -1
  315. package/codeyam-cli/scripts/fixtures/cal.com/universal-mocks/packages/prisma/index.js +0 -238
  316. package/codeyam-cli/scripts/fixtures/cal.com/universal-mocks/packages/prisma/index.js.map +0 -1
  317. package/codeyam-cli/src/webserver/build/client/assets/EntityItem-CVbSvOjo.js +0 -1
  318. package/codeyam-cli/src/webserver/build/client/assets/EntityTypeIcon-DcwcHyl5.js +0 -1
  319. package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-WgwC1GfJ.js +0 -26
  320. package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-IEKom9O2.js +0 -3
  321. package/codeyam-cli/src/webserver/build/client/assets/LogViewer-BYnfxbUG.js +0 -3
  322. package/codeyam-cli/src/webserver/build/client/assets/ReportIssueModal-_lBPJCzG.js +0 -1
  323. package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-lHVhvsu_.js +0 -1
  324. package/codeyam-cli/src/webserver/build/client/assets/ScenarioViewer-d_TBk4GQ.js +0 -5
  325. package/codeyam-cli/src/webserver/build/client/assets/_index-kGT7VUqj.js +0 -1
  326. package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-DDGmhu7P.js +0 -7
  327. package/codeyam-cli/src/webserver/build/client/assets/chevron-down-n_HPRfM_.js +0 -1
  328. package/codeyam-cli/src/webserver/build/client/assets/chunk-WWGJGFF6-CbVoyx1U.js +0 -26
  329. package/codeyam-cli/src/webserver/build/client/assets/circle-check-D1VOYveA.js +0 -1
  330. package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-YR8jjAlu.js +0 -1
  331. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-B8vP3V_s.js +0 -1
  332. package/codeyam-cli/src/webserver/build/client/assets/entity._sha._-CN6aLCT1.js +0 -16
  333. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-DA5Jeu2P.js +0 -1
  334. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.edit._scenarioId-BTeitalf.js +0 -5
  335. package/codeyam-cli/src/webserver/build/client/assets/entry.client-du6UEYD-.js +0 -13
  336. package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-BpjkhMoi.js +0 -1
  337. package/codeyam-cli/src/webserver/build/client/assets/files-BQGvk4lJ.js +0 -1
  338. package/codeyam-cli/src/webserver/build/client/assets/git-DVdYRT-I.js +0 -12
  339. package/codeyam-cli/src/webserver/build/client/assets/globals-CO-U8Bpo.css +0 -1
  340. package/codeyam-cli/src/webserver/build/client/assets/html2canvas-pro.esm-XQCGvadH.js +0 -5
  341. package/codeyam-cli/src/webserver/build/client/assets/index-DCG-vks0.js +0 -1
  342. package/codeyam-cli/src/webserver/build/client/assets/loader-circle-GazdNeLl.js +0 -1
  343. package/codeyam-cli/src/webserver/build/client/assets/manifest-0b694d28.js +0 -1
  344. package/codeyam-cli/src/webserver/build/client/assets/root-D3tQP7hx.js +0 -16
  345. package/codeyam-cli/src/webserver/build/client/assets/search-CIY6XmtE.js +0 -1
  346. package/codeyam-cli/src/webserver/build/client/assets/server-build-CMKNK2uU.css +0 -1
  347. package/codeyam-cli/src/webserver/build/client/assets/settings-CoMDgElu.js +0 -1
  348. package/codeyam-cli/src/webserver/build/client/assets/simulations-agkniXp2.js +0 -1
  349. package/codeyam-cli/src/webserver/build/client/assets/triangle-alert-B2VUcygF.js +0 -1
  350. package/codeyam-cli/src/webserver/build/client/assets/useReportContext-EvdK-zXP.js +0 -1
  351. package/codeyam-cli/src/webserver/build/server/assets/index-DGVHQEXD.js +0 -1
  352. package/codeyam-cli/src/webserver/build/server/assets/server-build-CghkTkIL.js +0 -166
  353. package/codeyam-cli/templates/debug-command.md +0 -303
  354. /package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-CMKNK2uU.css → styles-CMKNK2uU.css} +0 -0
@@ -28,13 +28,10 @@ export default async function generateScenarios({
28
28
  }: GenerateScenariosArgs): Promise<void> {
29
29
  if (!['visual', 'library'].includes(entity.entityType)) return;
30
30
 
31
- // Merge direct dataForMocks with recursively gathered data from dependencies
31
+ // Gather all mock data, consolidated under the root entity name
32
32
  const structure = {
33
33
  arguments: analysis.metadata.scenariosDataStructure?.arguments ?? [],
34
- dataForMocks: {
35
- ...(analysis.metadata.scenariosDataStructure?.dataForMocks ?? {}),
36
- ...gatherDataForMocks(analysis, dependentAnalyses),
37
- },
34
+ dataForMocks: gatherDataForMocks(analysis, dependentAnalyses, entity.name),
38
35
  };
39
36
 
40
37
  awsLog(`🔮 Generating ${error ? 'error ' : ''}scenarios for`, {
@@ -1,4 +1,3 @@
1
- // import { writeFile } from 'node:fs/promises';
2
1
  import {
3
2
  splitOutsideParenthesesAndArrays,
4
3
  joinParenthesesAndArrays,
@@ -22,6 +21,25 @@ function cleanFunctionName(functionName: string) {
22
21
  return functionName?.split('<')[0];
23
22
  }
24
23
 
24
+ // Extract the type parameter from a function name, e.g., 'useFetcher<{ data: UserData }>()' -> '{ data: UserData }'
25
+ function getTypeParameter(functionName: string): string | null {
26
+ if (!functionName) return null;
27
+ const openBracket = functionName.indexOf('<');
28
+ if (openBracket === -1) return null;
29
+ // Find matching closing bracket, accounting for nested brackets
30
+ let depth = 0;
31
+ for (let i = openBracket; i < functionName.length; i++) {
32
+ if (functionName[i] === '<') depth++;
33
+ else if (functionName[i] === '>') {
34
+ depth--;
35
+ if (depth === 0) {
36
+ return functionName.slice(openBracket + 1, i);
37
+ }
38
+ }
39
+ }
40
+ return null;
41
+ }
42
+
25
43
  // Check if schemaPathPart matches or is a function call variant of pathPart
26
44
  // e.g., 'isEntityBeingAnalyzed(entity.sha)' matches 'isEntityBeingAnalyzed'
27
45
  function pathPartMatches(pathPart: string, schemaPathPart: string): boolean {
@@ -75,47 +93,6 @@ export default function mergeInDependentDataStructure({
75
93
  };
76
94
  };
77
95
  }) {
78
- // writeFile(
79
- // 'mergeInDependentDataStructure-debug.json',
80
- // JSON.stringify(
81
- // {
82
- // importedExports: importedExports.map((d) => ({
83
- // filePath: d.filePath,
84
- // name: d.name,
85
- // isMocked: d.isMocked,
86
- // })),
87
- // dependentAnalyses: Object.keys(dependentAnalyses).reduce(
88
- // (pathAcc: Record<string, any>, filePath) => {
89
- // pathAcc[filePath] = Object.keys(dependentAnalyses[filePath]).reduce(
90
- // (nameAcc, name) => {
91
- // nameAcc[name] = {
92
- // metadata: {
93
- // mergedDataStructure:
94
- // dependentAnalyses[filePath][name].metadata
95
- // .mergedDataStructure,
96
- // },
97
- // };
98
- // return nameAcc;
99
- // },
100
- // {} as { [name: string]: {
101
- // metadata?: {
102
- // mergedDataStructure?: ReadonlyAnalysis['metadata']['mergedDataStructure'];
103
- // };
104
- // } },
105
- // );
106
- // return pathAcc;
107
- // },
108
- // {},
109
- // ),
110
- // rootScopeName,
111
- // dataStructure,
112
- // dependencySchemas,
113
- // },
114
- // null,
115
- // 2,
116
- // ),
117
- // ).catch(() => {});
118
-
119
96
  const mergedDataStructure: Omit<
120
97
  DataStructure,
121
98
  'equivalentSignatureVariables'
@@ -128,6 +105,44 @@ export default function mergeInDependentDataStructure({
128
105
  environmentVariables: [...(dataStructure.environmentVariables || [])],
129
106
  };
130
107
 
108
+ // Build a set of functions that have multiple DIFFERENT type parameters.
109
+ // For these functions, we must NOT normalize paths to avoid merging different schemas.
110
+ // e.g., if we have both useFetcher<{ data: UserData }>() and useFetcher<{ data: ConfigData }>(),
111
+ // they must stay separate and not both become 'returnValue'.
112
+ const functionsWithMultipleTypeParams = new Set<string>();
113
+ const typeParamsByFunction: Record<string, Set<string>> = {};
114
+
115
+ // Helper to scan a schema for type parameters
116
+ const scanSchemaForTypeParams = (schema: { [key: string]: string }) => {
117
+ for (const schemaPath of Object.keys(schema ?? {})) {
118
+ const parts = splitOutsideParenthesesAndArrays(schemaPath);
119
+ if (parts.length > 0) {
120
+ const firstPart = parts[0];
121
+ const typeParam = getTypeParameter(firstPart);
122
+ if (typeParam) {
123
+ const baseName = cleanFunctionName(firstPart);
124
+ typeParamsByFunction[baseName] ||= new Set();
125
+ typeParamsByFunction[baseName].add(typeParam);
126
+ if (typeParamsByFunction[baseName].size > 1) {
127
+ functionsWithMultipleTypeParams.add(baseName);
128
+ }
129
+ }
130
+ }
131
+ }
132
+ };
133
+
134
+ // Scan the root entity's schema
135
+ scanSchemaForTypeParams(dataStructure.returnValueSchema);
136
+
137
+ // Also scan all dependency schemas for type parameters
138
+ for (const filePath of Object.keys(dependencySchemas ?? {})) {
139
+ for (const name of Object.keys(dependencySchemas[filePath] ?? {})) {
140
+ scanSchemaForTypeParams(
141
+ dependencySchemas[filePath][name]?.returnValueSchema,
142
+ );
143
+ }
144
+ }
145
+
131
146
  let equivalentSchemaPaths: {
132
147
  equivalentRoots: {
133
148
  schemaRootPath: string;
@@ -186,6 +201,15 @@ export default function mergeInDependentDataStructure({
186
201
  const pathParts = splitOutsideParenthesesAndArrays(path);
187
202
  if (pathParts.length > 1) {
188
203
  if (pathParts[1].startsWith('functionCallReturnValue')) {
204
+ // Check if this function has multiple DIFFERENT type parameters.
205
+ // If so, DON'T normalize to returnValue - keep the full path to avoid
206
+ // merging different type-parameterized variants together.
207
+ // e.g., useFetcher<{ data: UserData }>().functionCallReturnValue.data
208
+ // should NOT be merged with useFetcher<{ data: ConfigData }>().functionCallReturnValue.data
209
+ const baseName = cleanFunctionName(pathParts[0]);
210
+ if (functionsWithMultipleTypeParams.has(baseName)) {
211
+ return path; // Keep the original path with type parameters
212
+ }
189
213
  // functionCallReturnValue immediately follows - normalize to returnValue
190
214
  // e.g., useAuth().functionCallReturnValue.user -> returnValue.user
191
215
  return joinParenthesesAndArrays([
@@ -325,10 +349,14 @@ export default function mergeInDependentDataStructure({
325
349
  splitOutsideParenthesesAndArrays(schemaPath);
326
350
 
327
351
  if (schemaPathParts[0].startsWith(functionName)) {
328
- schemaPathParts =
329
- schemaPathParts[1] === 'functionCallReturnValue'
330
- ? ['returnValue', ...schemaPathParts.slice(2)]
331
- : schemaPathParts.slice(1);
352
+ // Only normalize if the function doesn't have multiple different type parameters
353
+ const baseName = cleanFunctionName(schemaPathParts[0]);
354
+ if (!functionsWithMultipleTypeParams.has(baseName)) {
355
+ schemaPathParts =
356
+ schemaPathParts[1] === 'functionCallReturnValue'
357
+ ? ['returnValue', ...schemaPathParts.slice(2)]
358
+ : schemaPathParts.slice(1);
359
+ }
332
360
  }
333
361
 
334
362
  if (schemaPathParts.length < pathParts.length) continue;
@@ -481,6 +509,47 @@ export default function mergeInDependentDataStructure({
481
509
  const mergeAllEquivalentSchemaPaths = () => {
482
510
  const mergedEquivalentSchemaPaths: typeof equivalentSchemaPaths = [];
483
511
 
512
+ // Pre-pass: Connect entries with array/array-element relationships.
513
+ // This handles cases like:
514
+ // - Entry A has root 'surveys' (array)
515
+ // - Entry B has root 'surveys[]' (array element)
516
+ // These need to be connected so Entry B's field postfixes flow to Entry A.
517
+ // We do this before the main merge to ensure the connection happens regardless
518
+ // of processing order.
519
+ for (const esp of equivalentSchemaPaths) {
520
+ for (const root of esp.equivalentRoots) {
521
+ if (root.schemaRootPath.endsWith('[]')) {
522
+ // Find a matching parent entry with the base array path
523
+ const baseArrayPath = root.schemaRootPath.slice(0, -2);
524
+ const parentEntry = equivalentSchemaPaths.find(
525
+ (other) =>
526
+ other !== esp &&
527
+ other.equivalentRoots.some(
528
+ (otherRoot) =>
529
+ otherRoot.schemaRootPath === baseArrayPath &&
530
+ otherRoot.function?.name === root.function?.name &&
531
+ otherRoot.function?.filePath === root.function?.filePath,
532
+ ),
533
+ );
534
+ if (parentEntry) {
535
+ // Add transformed postfixes from child (array element) to parent (array)
536
+ // so they can be applied with [] prefix to parent paths
537
+ for (const [postfixPath, postfixValue] of Object.entries(
538
+ esp.equivalentPostfixes,
539
+ )) {
540
+ const transformedPostfix = joinParenthesesAndArrays(
541
+ ['[]', postfixPath].filter(Boolean),
542
+ );
543
+ if (!(transformedPostfix in parentEntry.equivalentPostfixes)) {
544
+ parentEntry.equivalentPostfixes[transformedPostfix] =
545
+ postfixValue;
546
+ }
547
+ }
548
+ }
549
+ }
550
+ }
551
+ }
552
+
484
553
  const findEquivalentSchemaPathEntry = (
485
554
  schemaSubPath: string,
486
555
  equivalentRootFunction: (typeof equivalentSchemaPaths)[0]['equivalentRoots'][0]['function'],
@@ -887,6 +956,87 @@ export default function mergeInDependentDataStructure({
887
956
  cleanSchema(depSchema.returnValueSchema);
888
957
  }
889
958
 
959
+ // Process the input dependencySchemas FIRST (before child dependentAnalyses).
960
+ // This ensures the parent entity's direct usage of dependencies takes precedence.
961
+ // When both parent and child use the same dependency (e.g., useLoaderData),
962
+ // the parent's schema paths are preserved, and child's paths are merged in later.
963
+ //
964
+ // Some dependencies (like .d.ts type declaration files) may not have:
965
+ // - Equivalencies with the root scope
966
+ // - A dependent analysis (they're just type declarations)
967
+ // - Be marked as mocked
968
+ // Without this, their schemas would be lost entirely.
969
+ for (const filePath in dependencySchemas) {
970
+ for (const name in dependencySchemas[filePath]) {
971
+ const srcSchema = dependencySchemas[filePath][name];
972
+ if (!srcSchema) continue;
973
+
974
+ // Skip mocked dependencies - they were already processed above with path normalization
975
+ if (mockedDependencies.has(`${filePath}::${name}`)) {
976
+ continue;
977
+ }
978
+
979
+ // Check if this dependency was already processed by equivalencies
980
+ const existingSchema =
981
+ mergedDataStructure.dependencySchemas[filePath]?.[name];
982
+
983
+ // Only add if no existing schema (equivalencies didn't process it)
984
+ if (!existingSchema) {
985
+ const depSchema = findOrCreateDependentSchemas({ filePath, name });
986
+ for (const path in srcSchema.returnValueSchema) {
987
+ depSchema.returnValueSchema[path] = srcSchema.returnValueSchema[path];
988
+ }
989
+ for (const path in srcSchema.signatureSchema) {
990
+ depSchema.signatureSchema[path] = srcSchema.signatureSchema[path];
991
+ }
992
+
993
+ // Clean known object functions (like String.prototype.replace, Array.prototype.map)
994
+ // from the copied schema. Without this, method call paths on primitives like
995
+ // "projectSlug.replace(...)" would cause convertDotNotation to create nested
996
+ // object structures instead of preserving the primitive type.
997
+ cleanSchema(depSchema.returnValueSchema);
998
+ }
999
+
1000
+ // For functions with multiple different type parameters, also create separate entries
1001
+ // for each type-parameterized variant. This allows gatherDataForMocks to look up
1002
+ // the specific schema for each call signature.
1003
+ // This runs regardless of whether the base entry already existed, since we need
1004
+ // the separate variant entries for proper schema lookup.
1005
+ const baseName = cleanFunctionName(name);
1006
+ if (functionsWithMultipleTypeParams.has(baseName)) {
1007
+ // Find all unique type-parameterized call signatures in the schema
1008
+ const typeParamVariants = new Set<string>();
1009
+ for (const path of Object.keys(srcSchema.returnValueSchema)) {
1010
+ const parts = splitOutsideParenthesesAndArrays(path);
1011
+ if (
1012
+ parts.length > 0 &&
1013
+ parts[0].includes('<') &&
1014
+ parts[0].endsWith(')')
1015
+ ) {
1016
+ typeParamVariants.add(parts[0]);
1017
+ }
1018
+ }
1019
+
1020
+ // Create a separate entry for each type-parameterized variant
1021
+ for (const variant of typeParamVariants) {
1022
+ const variantSchema = findOrCreateDependentSchemas({
1023
+ filePath,
1024
+ name: variant,
1025
+ });
1026
+
1027
+ // Copy only paths that belong to this variant
1028
+ for (const path in srcSchema.returnValueSchema) {
1029
+ if (path.startsWith(variant)) {
1030
+ variantSchema.returnValueSchema[path] =
1031
+ srcSchema.returnValueSchema[path];
1032
+ }
1033
+ }
1034
+ cleanSchema(variantSchema.returnValueSchema);
1035
+ }
1036
+ }
1037
+ }
1038
+ }
1039
+
890
1040
  // Ensure ALL dependencies from dependentAnalyses are included in dependencySchemas,
891
1041
  // even if they have no equivalencies with the root scope.
892
1042
  // This preserves nested functionCallReturnValue paths that would otherwise be lost.
@@ -962,45 +1112,5 @@ export default function mergeInDependentDataStructure({
962
1112
  }
963
1113
  }
964
1114
 
965
- // Ensure ALL dependencies from the input dependencySchemas are preserved.
966
- // Some dependencies (like .d.ts type declaration files) may not have:
967
- // - Equivalencies with the root scope
968
- // - A dependent analysis (they're just type declarations)
969
- // - Be marked as mocked
970
- // Without this, their schemas would be lost entirely.
971
- //
972
- // IMPORTANT: Only add schemas for dependencies that weren't already processed.
973
- // If a dependency has an existing schema (even an empty one), it means the
974
- // existing processing (mocked dependencies, equivalencies, dependentAnalyses)
975
- // has already handled it and may have intentionally filtered out certain paths.
976
- for (const filePath in dependencySchemas) {
977
- for (const name in dependencySchemas[filePath]) {
978
- const srcSchema = dependencySchemas[filePath][name];
979
- if (!srcSchema) continue;
980
-
981
- // Check if this dependency was already processed by any other mechanism
982
- const existingSchema =
983
- mergedDataStructure.dependencySchemas[filePath]?.[name];
984
-
985
- // Only add if no existing schema at all - this means the dependency
986
- // wasn't processed through equivalencies, mocked dependencies, or dependentAnalyses
987
- if (!existingSchema) {
988
- const depSchema = findOrCreateDependentSchemas({ filePath, name });
989
- for (const path in srcSchema.returnValueSchema) {
990
- depSchema.returnValueSchema[path] = srcSchema.returnValueSchema[path];
991
- }
992
- for (const path in srcSchema.signatureSchema) {
993
- depSchema.signatureSchema[path] = srcSchema.signatureSchema[path];
994
- }
995
- }
996
- }
997
- }
998
-
999
- // writeFile(
1000
- // 'mergeInDependentDataStructure-debug-result.json',
1001
- // // rootScopeName,
1002
- // JSON.stringify(mergedDataStructure, null, 2),
1003
- // ).catch(() => {});
1004
-
1005
1115
  return mergedDataStructure;
1006
1116
  }
@@ -0,0 +1,15 @@
1
+ interface CheckS3ObjectExistsArgs {
2
+ bucketName: string;
3
+ key: string;
4
+ }
5
+ interface CheckS3ObjectExistsResult {
6
+ exists: boolean;
7
+ size?: number;
8
+ }
9
+ /**
10
+ * Check if an object exists in S3 using a HEAD request.
11
+ * Returns the object size if it exists.
12
+ */
13
+ export default function checkS3ObjectExists({ bucketName, key, }: CheckS3ObjectExistsArgs): Promise<CheckS3ObjectExistsResult>;
14
+ export {};
15
+ //# sourceMappingURL=checkS3ObjectExists.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkS3ObjectExists.d.ts","sourceRoot":"","sources":["../../../../src/lib/s3/checkS3ObjectExists.ts"],"names":[],"mappings":"AAEA,UAAU,uBAAuB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,UAAU,yBAAyB;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAA8B,mBAAmB,CAAC,EAChD,UAAU,EACV,GAAG,GACJ,EAAE,uBAAuB,GAAG,OAAO,CAAC,yBAAyB,CAAC,CA2B9D"}
@@ -0,0 +1,31 @@
1
+ import { S3Client, HeadObjectCommand } from '@aws-sdk/client-s3';
2
+ /**
3
+ * Check if an object exists in S3 using a HEAD request.
4
+ * Returns the object size if it exists.
5
+ */
6
+ export default async function checkS3ObjectExists({ bucketName, key, }) {
7
+ const s3Client = new S3Client({});
8
+ const command = new HeadObjectCommand({
9
+ Bucket: bucketName,
10
+ Key: key,
11
+ });
12
+ try {
13
+ const response = await s3Client.send(command);
14
+ return {
15
+ exists: true,
16
+ size: response.ContentLength,
17
+ };
18
+ }
19
+ catch (error) {
20
+ // NotFound is expected when object doesn't exist
21
+ if (error &&
22
+ typeof error === 'object' &&
23
+ 'name' in error &&
24
+ error.name === 'NotFound') {
25
+ return { exists: false };
26
+ }
27
+ // Re-throw unexpected errors
28
+ throw error;
29
+ }
30
+ }
31
+ //# sourceMappingURL=checkS3ObjectExists.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkS3ObjectExists.js","sourceRoot":"","sources":["../../../../src/lib/s3/checkS3ObjectExists.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAYjE;;;GAGG;AACH,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,mBAAmB,CAAC,EAChD,UAAU,EACV,GAAG,GACqB;IACxB,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC;IAElC,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC;QACpC,MAAM,EAAE,UAAU;QAClB,GAAG,EAAE,GAAG;KACT,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9C,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,QAAQ,CAAC,aAAa;SAC7B,CAAC;IACJ,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,iDAAiD;QACjD,IACE,KAAK;YACL,OAAO,KAAK,KAAK,QAAQ;YACzB,MAAM,IAAI,KAAK;YACf,KAAK,CAAC,IAAI,KAAK,UAAU,EACzB,CAAC;YACD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAC3B,CAAC;QACD,6BAA6B;QAC7B,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -12,7 +12,7 @@
12
12
  "license": "ISC",
13
13
  "dependencies": {
14
14
  "@aws-sdk/client-codebuild": "^3.948.0",
15
- "@aws-sdk/client-cloudwatch-logs": "^3.940.0",
15
+ "@aws-sdk/client-cloudwatch-logs": "^3.962.0",
16
16
  "@aws-sdk/client-dynamodb": "^3.956.0",
17
17
  "@aws-sdk/client-ecr": "^3.948.0",
18
18
  "@aws-sdk/client-ecs": "^3.956.0",
@@ -4,3 +4,4 @@ export {
4
4
  getPresignedUploadUrl,
5
5
  getPresignedDownloadUrl,
6
6
  } from '../src/lib/s3/getPresignedUrl';
7
+ export { default as checkS3ObjectExists } from '../src/lib/s3/checkS3ObjectExists';
@@ -0,0 +1,47 @@
1
+ import { S3Client, HeadObjectCommand } from '@aws-sdk/client-s3';
2
+
3
+ interface CheckS3ObjectExistsArgs {
4
+ bucketName: string;
5
+ key: string;
6
+ }
7
+
8
+ interface CheckS3ObjectExistsResult {
9
+ exists: boolean;
10
+ size?: number;
11
+ }
12
+
13
+ /**
14
+ * Check if an object exists in S3 using a HEAD request.
15
+ * Returns the object size if it exists.
16
+ */
17
+ export default async function checkS3ObjectExists({
18
+ bucketName,
19
+ key,
20
+ }: CheckS3ObjectExistsArgs): Promise<CheckS3ObjectExistsResult> {
21
+ const s3Client = new S3Client({});
22
+
23
+ const command = new HeadObjectCommand({
24
+ Bucket: bucketName,
25
+ Key: key,
26
+ });
27
+
28
+ try {
29
+ const response = await s3Client.send(command);
30
+ return {
31
+ exists: true,
32
+ size: response.ContentLength,
33
+ };
34
+ } catch (error: unknown) {
35
+ // NotFound is expected when object doesn't exist
36
+ if (
37
+ error &&
38
+ typeof error === 'object' &&
39
+ 'name' in error &&
40
+ error.name === 'NotFound'
41
+ ) {
42
+ return { exists: false };
43
+ }
44
+ // Re-throw unexpected errors
45
+ throw error;
46
+ }
47
+ }
@@ -33,8 +33,8 @@ import {
33
33
  } from './tables/commitBranchesTable';
34
34
  import { CommitsTable, createCommitsTable } from './tables/commitsTable';
35
35
  import {
36
- createDebugReportsTable,
37
- DebugReportsTable,
36
+ createDebugBundlesTable,
37
+ DebugBundlesTable,
38
38
  } from './tables/debugReportsTable';
39
39
  import { createEntitiesTable, EntitiesTable } from './tables/entitiesTable';
40
40
  import {
@@ -101,7 +101,7 @@ const databaseSchema = {
101
101
  branches: schemaField<BranchesTable>(),
102
102
  commit_branches: schemaField<CommitBranchesTable>(),
103
103
  commits: schemaField<CommitsTable>(),
104
- debug_reports: schemaField<DebugReportsTable>(),
104
+ debug_reports: schemaField<DebugBundlesTable>(),
105
105
  entities: schemaField<EntitiesTable>(),
106
106
  entity_branches: schemaField<EntityBranchesTable>(),
107
107
  entity_statements: schemaField<EntityStatementsTable>(),
@@ -377,7 +377,7 @@ export async function createSqliteSchema(db: Kysely<Database>): Promise<void> {
377
377
  await createBranchesTable(db);
378
378
  await createCommitBranchesTable(db);
379
379
  await createCommitsTable(db);
380
- await createDebugReportsTable(db);
380
+ await createDebugBundlesTable(db);
381
381
  await createEntitiesTable(db);
382
382
  await createEntityBranchesTable(db);
383
383
  await createEntityStatementsTable(db);
@@ -6,7 +6,7 @@ import { BackgroundJobsTable } from './tables/backgroundJobsTable';
6
6
  import { BranchesTable } from './tables/branchesTable';
7
7
  import { CommitsTable } from './tables/commitsTable';
8
8
  import { CommitBranchesTable } from './tables/commitBranchesTable';
9
- import { DebugReportsTable } from './tables/debugReportsTable';
9
+ import { DebugBundlesTable } from './tables/debugReportsTable';
10
10
  import { EntitiesTable } from './tables/entitiesTable';
11
11
  import { EntityBranchesTable } from './tables/entityBranchesTable';
12
12
  import { FilesTable } from './tables/filesTable';
@@ -105,4 +105,4 @@ export type DbUserScenario = Selectable<UserScenariosTable> & {
105
105
 
106
106
  export type DbStatement = Selectable<StatementsTable>;
107
107
 
108
- export type DbDebugReport = Selectable<DebugReportsTable>;
108
+ export type DbDebugBundle = Selectable<DebugBundlesTable>;
@@ -3,7 +3,12 @@ import type { Generated, JSONColumnType } from 'kysely';
3
3
 
4
4
  import { schemaField, defaultNow } from '../schemaHelpers';
5
5
 
6
- interface DebugReportMetadata {
6
+ /**
7
+ * Metadata for a debug bundle upload.
8
+ * Note: "bundle" refers to the tarball upload (base + delta).
9
+ * The markdown "debug report" from /debug-codeyam is stored in feedback.debugReport.
10
+ */
11
+ interface DebugBundleMetadata {
7
12
  timestamp: string;
8
13
  git: {
9
14
  sha: string;
@@ -22,26 +27,30 @@ interface DebugReportMetadata {
22
27
  };
23
28
  }
24
29
 
25
- const debugReportsSchema = {
30
+ // Table name remains 'debug_reports' in the database for backwards compatibility
31
+ const debugBundlesSchema = {
26
32
  id: schemaField<Generated<string>>(),
27
33
  project_slug: schemaField<string>(),
28
34
  s3_key: schemaField<string>(),
29
35
  file_size_bytes: schemaField<number | null>(),
30
- metadata: schemaField<JSONColumnType<DebugReportMetadata> | null>(),
36
+ metadata: schemaField<JSONColumnType<DebugBundleMetadata> | null>(),
31
37
  status: schemaField<string | null>(),
32
38
  created_at: schemaField<Generated<string>>(),
33
39
  uploaded_at: schemaField<string | null>(),
40
+ base_sha: schemaField<string | null>(),
41
+ delta_size_bytes: schemaField<number | null>(),
34
42
  } as const;
35
43
 
36
- export type DebugReportsTable = {
37
- [K in keyof typeof debugReportsSchema]: (typeof debugReportsSchema)[K];
44
+ export type DebugBundlesTable = {
45
+ [K in keyof typeof debugBundlesSchema]: (typeof debugBundlesSchema)[K];
38
46
  };
39
47
 
40
- export const DebugReportsTableColumns = Object.keys(
41
- debugReportsSchema,
42
- ) as (keyof DebugReportsTable)[];
48
+ export const DebugBundlesTableColumns = Object.keys(
49
+ debugBundlesSchema,
50
+ ) as (keyof DebugBundlesTable)[];
43
51
 
44
- export async function createDebugReportsTable(db: Kysely<any>): Promise<void> {
52
+ export async function createDebugBundlesTable(db: Kysely<any>): Promise<void> {
53
+ // Table name remains 'debug_reports' for backwards compatibility
45
54
  await db.schema
46
55
  .createTable('debug_reports')
47
56
  .addColumn('id', 'uuid', (col: ColumnDefinitionBuilder) => col.primaryKey())
@@ -56,6 +65,8 @@ export async function createDebugReportsTable(db: Kysely<any>): Promise<void> {
56
65
  .addColumn('status', 'varchar')
57
66
  .addColumn('created_at', 'datetime', defaultNow(true))
58
67
  .addColumn('uploaded_at', 'datetime')
68
+ .addColumn('base_sha', 'varchar')
69
+ .addColumn('delta_size_bytes', 'bigint')
59
70
  .ifNotExists()
60
71
  .execute();
61
72
  }
@@ -3,6 +3,11 @@ export default function getIFrameMessageListenerCode({
3
3
  }: {
4
4
  scenarioName: string;
5
5
  }): string {
6
+ // Escape backslashes first, then single quotes to produce valid JS string literals
7
+ const escapedScenarioName = scenarioName
8
+ .replace(/\\/g, '\\\\')
9
+ .replace(/'/g, "\\'");
10
+
6
11
  return `const [version, setVersion] = useState(1);
7
12
 
8
13
  function _getScenarioProps({ argumentIndex, propName }: { argumentIndex: number, propName?: string }) {
@@ -14,7 +19,7 @@ export default function getIFrameMessageListenerCode({
14
19
  try {
15
20
  window.parent.postMessage({
16
21
  type: 'codeyam-update',
17
- name: '${scenarioName}',
22
+ name: '${escapedScenarioName}',
18
23
  message,
19
24
  }, '*');
20
25
  } catch (e) {
@@ -28,7 +33,7 @@ export default function getIFrameMessageListenerCode({
28
33
  const parsedData = JSON.parse(event.data.data);
29
34
  console.log("Override data received");
30
35
  respond("Set override data to " + JSON.stringify(parsedData, null, 2));
31
- scenarios().updateData('${scenarioName}', parsedData);
36
+ scenarios().updateData('${escapedScenarioName}', parsedData);
32
37
  setVersion(prev => prev + 1);
33
38
  }
34
39
  }
@@ -44,7 +49,7 @@ export default function getIFrameMessageListenerCode({
44
49
  try {
45
50
  window.parent.postMessage({
46
51
  type: 'codeyam-log',
47
- name: '${scenarioName}',
52
+ name: '${escapedScenarioName}',
48
53
  data: {
49
54
  log: {
50
55
  name: "console.log",
@@ -62,7 +67,7 @@ export default function getIFrameMessageListenerCode({
62
67
  oldConsoleError(...args);
63
68
  window.parent.postMessage({
64
69
  type: 'codeyam-log',
65
- name: '${scenarioName}',
70
+ name: '${escapedScenarioName}',
66
71
  data: {
67
72
  log: {
68
73
  name: "console.log",