@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.
- package/analyzer-template/.build-info.json +7 -7
- package/analyzer-template/log.txt +3 -3
- package/analyzer-template/package.json +2 -1
- package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +2 -0
- package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +22 -0
- package/analyzer-template/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.ts +23 -1
- package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +401 -106
- package/analyzer-template/packages/ai/src/lib/astScopes/types.ts +60 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +734 -45
- package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.ts +2 -1
- package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.ts +715 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.ts +233 -75
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.ts +19 -1
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.ts +34 -1
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.ts +23 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.ts +98 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.ts +34 -1
- package/analyzer-template/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.ts +236 -24
- package/analyzer-template/packages/ai/src/lib/generateChangesEntityKeyAttributes.ts +18 -1
- package/analyzer-template/packages/ai/src/lib/generateChangesEntityScenarioData.ts +41 -0
- package/analyzer-template/packages/ai/src/lib/generateChangesEntityScenarios.ts +37 -4
- package/analyzer-template/packages/ai/src/lib/generateEntityDataStructure.ts +5 -0
- package/analyzer-template/packages/ai/src/lib/generateEntityKeyAttributes.ts +213 -12
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +36 -25
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarios.ts +114 -11
- package/analyzer-template/packages/ai/src/lib/getConditionalUsagesFromCode.ts +143 -31
- package/analyzer-template/packages/ai/src/lib/guessScenarioDataFromDescription.ts +8 -2
- package/analyzer-template/packages/ai/src/lib/promptGenerators/gatherAttributesMap.ts +7 -0
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.ts +42 -2
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.ts +38 -2
- package/analyzer-template/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.ts +28 -2
- package/analyzer-template/packages/ai/src/lib/worker/SerializableDataStructure.ts +5 -0
- package/analyzer-template/packages/ai/src/lib/worker/analyzeScopeWorker.ts +8 -1
- package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +127 -43
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.ts +158 -0
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.ts +405 -45
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateChangesScenarioData.ts +1 -1
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +260 -133
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.ts +10 -5
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateScenarioData.ts +77 -83
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateScenarios.ts +2 -5
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +196 -86
- package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.d.ts +15 -0
- package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.d.ts.map +1 -0
- package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.js +31 -0
- package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.js.map +1 -0
- package/analyzer-template/packages/aws/package.json +1 -1
- package/analyzer-template/packages/aws/s3/index.ts +1 -0
- package/analyzer-template/packages/aws/src/lib/s3/checkS3ObjectExists.ts +47 -0
- package/analyzer-template/packages/database/src/lib/kysely/db.ts +4 -4
- package/analyzer-template/packages/database/src/lib/kysely/tableRelations.ts +2 -2
- package/analyzer-template/packages/database/src/lib/kysely/tables/debugReportsTable.ts +20 -9
- package/analyzer-template/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.ts +9 -4
- package/analyzer-template/packages/generate/src/lib/deepMerge.ts +26 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts +2 -2
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js +2 -2
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tableRelations.d.ts +2 -2
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/analysesTable.d.ts +8 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/analysesTable.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.d.ts +14 -7
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.js +9 -3
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +8 -4
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/deepMerge.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/deepMerge.js +27 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/deepMerge.js.map +1 -1
- package/analyzer-template/packages/github/dist/types/index.d.ts +4 -3
- package/analyzer-template/packages/github/dist/types/index.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/types/index.js +1 -0
- package/analyzer-template/packages/github/dist/types/index.js.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/Analysis.d.ts +31 -1
- package/analyzer-template/packages/github/dist/types/src/types/Analysis.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts +51 -1
- package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/Scenario.js +21 -1
- package/analyzer-template/packages/github/dist/types/src/types/Scenario.js.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.d.ts +48 -0
- package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/lightweightEntityExtractor.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/lightweightEntityExtractor.js +25 -0
- package/analyzer-template/packages/github/dist/utils/src/lib/lightweightEntityExtractor.js.map +1 -1
- package/analyzer-template/packages/types/index.ts +8 -0
- package/analyzer-template/packages/types/src/types/Analysis.ts +32 -1
- package/analyzer-template/packages/types/src/types/Scenario.ts +75 -6
- package/analyzer-template/packages/types/src/types/ScenariosDataStructure.ts +49 -0
- package/analyzer-template/packages/ui-components/src/components/ScenarioDetailInteractiveView.tsx +23 -7
- package/analyzer-template/packages/utils/dist/types/index.d.ts +4 -3
- package/analyzer-template/packages/utils/dist/types/index.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/types/index.js +1 -0
- package/analyzer-template/packages/utils/dist/types/index.js.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/types/Analysis.d.ts +31 -1
- package/analyzer-template/packages/utils/dist/types/src/types/Analysis.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts +51 -1
- package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/types/Scenario.js +21 -1
- package/analyzer-template/packages/utils/dist/types/src/types/Scenario.js.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.d.ts +48 -0
- package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/lightweightEntityExtractor.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/lightweightEntityExtractor.js +25 -0
- package/analyzer-template/packages/utils/dist/utils/src/lib/lightweightEntityExtractor.js.map +1 -1
- package/analyzer-template/packages/utils/src/lib/lightweightEntityExtractor.ts +27 -0
- package/analyzer-template/playwright/takeElementScreenshot.ts +26 -11
- package/analyzer-template/playwright/takeScreenshot.ts +9 -7
- package/analyzer-template/project/constructMockCode.ts +286 -84
- package/analyzer-template/project/orchestrateCapture/SequentialCaptureTaskRunner.ts +77 -37
- package/analyzer-template/project/reconcileMockDataKeys.ts +5 -2
- package/analyzer-template/project/runMultiScenarioServer.ts +11 -10
- package/analyzer-template/project/serverOnlyModules.ts +71 -23
- package/analyzer-template/project/start.ts +10 -0
- package/analyzer-template/project/startScenarioCapture.ts +73 -41
- package/analyzer-template/project/writeMockDataTsx.ts +115 -54
- package/analyzer-template/project/writeScenarioComponents.ts +571 -162
- package/analyzer-template/project/writeSimpleRoot.ts +11 -13
- package/background/src/lib/virtualized/project/constructMockCode.js +265 -75
- package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
- package/background/src/lib/virtualized/project/orchestrateCapture/SequentialCaptureTaskRunner.js +67 -32
- package/background/src/lib/virtualized/project/orchestrateCapture/SequentialCaptureTaskRunner.js.map +1 -1
- package/background/src/lib/virtualized/project/reconcileMockDataKeys.js +5 -2
- package/background/src/lib/virtualized/project/reconcileMockDataKeys.js.map +1 -1
- package/background/src/lib/virtualized/project/runMultiScenarioServer.js +11 -9
- package/background/src/lib/virtualized/project/runMultiScenarioServer.js.map +1 -1
- package/background/src/lib/virtualized/project/serverOnlyModules.js +62 -25
- package/background/src/lib/virtualized/project/serverOnlyModules.js.map +1 -1
- package/background/src/lib/virtualized/project/start.js +6 -0
- package/background/src/lib/virtualized/project/start.js.map +1 -1
- package/background/src/lib/virtualized/project/startScenarioCapture.js +54 -31
- package/background/src/lib/virtualized/project/startScenarioCapture.js.map +1 -1
- package/background/src/lib/virtualized/project/writeMockDataTsx.js +106 -46
- package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
- package/background/src/lib/virtualized/project/writeScenarioComponents.js +399 -106
- package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
- package/background/src/lib/virtualized/project/writeSimpleRoot.js +11 -11
- package/background/src/lib/virtualized/project/writeSimpleRoot.js.map +1 -1
- package/codeyam-cli/src/cli.js +2 -0
- package/codeyam-cli/src/cli.js.map +1 -1
- package/codeyam-cli/src/commands/debug.js +14 -2
- package/codeyam-cli/src/commands/debug.js.map +1 -1
- package/codeyam-cli/src/commands/recapture.js +215 -0
- package/codeyam-cli/src/commands/recapture.js.map +1 -0
- package/codeyam-cli/src/commands/report.js +26 -23
- package/codeyam-cli/src/commands/report.js.map +1 -1
- package/codeyam-cli/src/utils/backgroundServer.js +2 -2
- package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
- package/codeyam-cli/src/utils/generateReport.js +252 -106
- package/codeyam-cli/src/utils/generateReport.js.map +1 -1
- package/codeyam-cli/src/utils/install-skills.js +2 -2
- package/codeyam-cli/src/utils/install-skills.js.map +1 -1
- package/codeyam-cli/src/utils/queue/__tests__/manager.test.js +38 -0
- package/codeyam-cli/src/utils/queue/__tests__/manager.test.js.map +1 -1
- package/codeyam-cli/src/utils/queue/job.js +140 -16
- package/codeyam-cli/src/utils/queue/job.js.map +1 -1
- package/codeyam-cli/src/utils/queue/manager.js +19 -7
- package/codeyam-cli/src/utils/queue/manager.js.map +1 -1
- package/codeyam-cli/src/utils/queue/persistence.js.map +1 -1
- package/codeyam-cli/src/webserver/app/lib/database.js +47 -0
- package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
- package/codeyam-cli/src/webserver/app/lib/dbNotifier.js.map +1 -1
- package/codeyam-cli/src/webserver/backgroundServer.js +5 -10
- package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
- package/codeyam-cli/src/webserver/bootstrap.js +9 -0
- package/codeyam-cli/src/webserver/bootstrap.js.map +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/EntityItem-wXL1Z2Aq.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-efWKDYMr.js → EntityTypeBadge-CzGX-miz.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/EntityTypeIcon-CXFKsCOD.js +41 -0
- package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-D-9pXIaY.js +25 -0
- package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-CBQPrpT0.js +3 -0
- package/codeyam-cli/src/webserver/build/client/assets/LoadingDots-D1CdlbrV.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/LogViewer-wDPcZNKx.js +3 -0
- package/codeyam-cli/src/webserver/build/client/assets/ReportIssueModal-4lcOlid-.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-BfmDgXxG.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/ScenarioViewer-CUxUNEEC.js +15 -0
- package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-COPstp9J.js → TruncatedFilePath-6J7zDUD5.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/_index-DHImXdXq.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-CVP_WGQ3.js +32 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.link-scenario-value-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.update-key-attributes-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.update-valid-values-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/chevron-down-BYimnrHg.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/chunk-JMJ3UQ3L-BambyYE_.js +51 -0
- package/codeyam-cli/src/webserver/build/client/assets/circle-check-CaVsIRxt.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-CgUsG7ib.js +21 -0
- package/codeyam-cli/src/webserver/build/client/assets/cy-logo-cli-CKnwPCDr.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-DW_hdGUc.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha._-Dt-SjPsw.js +23 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-DyB90fWk.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-D_3ero5o.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.edit._scenarioId-CfLCUi9S.js +5 -0
- package/codeyam-cli/src/webserver/build/client/assets/entry.client-DKJyZfAY.js +29 -0
- package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-DAtOlaWE.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/files-ClR0d32A.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/git-D62Lxxmv.js +15 -0
- package/codeyam-cli/src/webserver/build/client/assets/globals-C9s7Lhdl.css +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/html2canvas-pro.esm-fmIEn3Bc.js +9 -0
- package/codeyam-cli/src/webserver/build/client/assets/index-BosqDOlH.js +3 -0
- package/codeyam-cli/src/webserver/build/client/assets/index-CzNNiTkw.js +9 -0
- package/codeyam-cli/src/webserver/build/client/assets/keyAttributeCoverage-CTlFMihX.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/loader-circle-CNp9QFCX.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/manifest-0d27da29.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/preload-helper-ckwbz45p.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/root-B_wIKCIf.js +56 -0
- package/codeyam-cli/src/webserver/build/client/assets/scenarioStatus-B_8jpV3e.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/search-DDGjYAMJ.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/settings-DgTyB-Wg.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/simulations-CoNWGt0K.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/triangle-alert-CBc5dE1s.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-BMIGFP-m.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/useInteractiveMode-Dk_FQqWJ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-3pmpUQB-.js → useLastLogLine-BqPPNjAl.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/useReportContext-DsJbgMY9.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{useToast-DEyawJ8r.js → useToast-DWHcCcl1.js} +1 -1
- package/codeyam-cli/src/webserver/build/server/assets/index-CU58-Ttc.js +1 -0
- package/codeyam-cli/src/webserver/build/server/assets/server-build-D35o2uae.js +175 -0
- package/codeyam-cli/src/webserver/build/server/index.js +1 -1
- package/codeyam-cli/src/webserver/build-info.json +5 -5
- package/codeyam-cli/src/webserver/devServer.js +1 -3
- package/codeyam-cli/src/webserver/devServer.js.map +1 -1
- package/codeyam-cli/templates/codeyam-setup-skill.md +138 -3
- package/codeyam-cli/templates/debug-codeyam.md +625 -0
- package/package.json +14 -14
- package/packages/ai/src/lib/analyzeScope.js +2 -0
- package/packages/ai/src/lib/analyzeScope.js.map +1 -1
- package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +16 -0
- package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js.map +1 -1
- package/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.js +16 -0
- package/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.js.map +1 -1
- package/packages/ai/src/lib/astScopes/processExpression.js +305 -88
- package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +582 -41
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js +2 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.js +454 -0
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.js.map +1 -0
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js +173 -55
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js +16 -1
- package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js +30 -1
- package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js +20 -0
- package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.js +86 -0
- package/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.js.map +1 -0
- package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js +28 -2
- package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js.map +1 -1
- package/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.js +179 -17
- package/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.js.map +1 -1
- package/packages/ai/src/lib/generateChangesEntityKeyAttributes.js +6 -0
- package/packages/ai/src/lib/generateChangesEntityKeyAttributes.js.map +1 -1
- package/packages/ai/src/lib/generateChangesEntityScenarioData.js +41 -0
- package/packages/ai/src/lib/generateChangesEntityScenarioData.js.map +1 -1
- package/packages/ai/src/lib/generateChangesEntityScenarios.js +37 -4
- package/packages/ai/src/lib/generateChangesEntityScenarios.js.map +1 -1
- package/packages/ai/src/lib/generateEntityDataStructure.js +4 -0
- package/packages/ai/src/lib/generateEntityDataStructure.js.map +1 -1
- package/packages/ai/src/lib/generateEntityKeyAttributes.js +176 -9
- package/packages/ai/src/lib/generateEntityKeyAttributes.js.map +1 -1
- package/packages/ai/src/lib/generateEntityScenarioData.js +29 -25
- package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
- package/packages/ai/src/lib/generateEntityScenarios.js +105 -9
- package/packages/ai/src/lib/generateEntityScenarios.js.map +1 -1
- package/packages/ai/src/lib/getConditionalUsagesFromCode.js +84 -14
- package/packages/ai/src/lib/getConditionalUsagesFromCode.js.map +1 -1
- package/packages/ai/src/lib/guessScenarioDataFromDescription.js +2 -1
- package/packages/ai/src/lib/guessScenarioDataFromDescription.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js +6 -0
- package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.js +38 -2
- package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.js +38 -2
- package/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.js +16 -3
- package/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.js.map +1 -1
- package/packages/ai/src/lib/worker/SerializableDataStructure.js.map +1 -1
- package/packages/ai/src/lib/worker/analyzeScopeWorker.js +4 -0
- package/packages/ai/src/lib/worker/analyzeScopeWorker.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js +100 -23
- package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js +125 -0
- package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js.map +1 -0
- package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js +298 -45
- package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateChangesScenarioData.js +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateChangesScenarioData.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +201 -80
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.js +10 -5
- package/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateScenarioData.js +55 -69
- package/packages/analyze/src/lib/files/scenarios/generateScenarioData.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateScenarios.js +2 -5
- package/packages/analyze/src/lib/files/scenarios/generateScenarios.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +171 -81
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
- package/packages/database/src/lib/kysely/db.js +2 -2
- package/packages/database/src/lib/kysely/tables/debugReportsTable.js +9 -3
- package/packages/database/src/lib/kysely/tables/debugReportsTable.js.map +1 -1
- package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +8 -4
- package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
- package/packages/generate/src/lib/deepMerge.js +27 -1
- package/packages/generate/src/lib/deepMerge.js.map +1 -1
- package/packages/types/index.js +1 -0
- package/packages/types/index.js.map +1 -1
- package/packages/types/src/types/Scenario.js +21 -1
- package/packages/types/src/types/Scenario.js.map +1 -1
- package/packages/utils/src/lib/lightweightEntityExtractor.js +25 -0
- package/packages/utils/src/lib/lightweightEntityExtractor.js.map +1 -1
- package/scripts/finalize-analyzer.cjs +3 -1
- package/codeyam-cli/scripts/fixtures/cal.com/universal-mocks/packages/prisma/index.js +0 -238
- package/codeyam-cli/scripts/fixtures/cal.com/universal-mocks/packages/prisma/index.js.map +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/EntityItem-CVbSvOjo.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/EntityTypeIcon-DcwcHyl5.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-WgwC1GfJ.js +0 -26
- package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-IEKom9O2.js +0 -3
- package/codeyam-cli/src/webserver/build/client/assets/LogViewer-BYnfxbUG.js +0 -3
- package/codeyam-cli/src/webserver/build/client/assets/ReportIssueModal-_lBPJCzG.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-lHVhvsu_.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/ScenarioViewer-d_TBk4GQ.js +0 -5
- package/codeyam-cli/src/webserver/build/client/assets/_index-kGT7VUqj.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-DDGmhu7P.js +0 -7
- package/codeyam-cli/src/webserver/build/client/assets/chevron-down-n_HPRfM_.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/chunk-WWGJGFF6-CbVoyx1U.js +0 -26
- package/codeyam-cli/src/webserver/build/client/assets/circle-check-D1VOYveA.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-YR8jjAlu.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-B8vP3V_s.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha._-CN6aLCT1.js +0 -16
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-DA5Jeu2P.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.edit._scenarioId-BTeitalf.js +0 -5
- package/codeyam-cli/src/webserver/build/client/assets/entry.client-du6UEYD-.js +0 -13
- package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-BpjkhMoi.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/files-BQGvk4lJ.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/git-DVdYRT-I.js +0 -12
- package/codeyam-cli/src/webserver/build/client/assets/globals-CO-U8Bpo.css +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/html2canvas-pro.esm-XQCGvadH.js +0 -5
- package/codeyam-cli/src/webserver/build/client/assets/index-DCG-vks0.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/loader-circle-GazdNeLl.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-0b694d28.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/root-D3tQP7hx.js +0 -16
- package/codeyam-cli/src/webserver/build/client/assets/search-CIY6XmtE.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/server-build-CMKNK2uU.css +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/settings-CoMDgElu.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/simulations-agkniXp2.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/triangle-alert-B2VUcygF.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/useReportContext-EvdK-zXP.js +0 -1
- package/codeyam-cli/src/webserver/build/server/assets/index-DGVHQEXD.js +0 -1
- package/codeyam-cli/src/webserver/build/server/assets/server-build-CghkTkIL.js +0 -166
- package/codeyam-cli/templates/debug-command.md +0 -303
- /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
|
-
//
|
|
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`, {
|
package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts
CHANGED
|
@@ -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
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
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.
|
|
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",
|
|
@@ -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
|
-
|
|
37
|
-
|
|
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<
|
|
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
|
|
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 {
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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<
|
|
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
|
|
37
|
-
[K in keyof typeof
|
|
44
|
+
export type DebugBundlesTable = {
|
|
45
|
+
[K in keyof typeof debugBundlesSchema]: (typeof debugBundlesSchema)[K];
|
|
38
46
|
};
|
|
39
47
|
|
|
40
|
-
export const
|
|
41
|
-
|
|
42
|
-
) as (keyof
|
|
48
|
+
export const DebugBundlesTableColumns = Object.keys(
|
|
49
|
+
debugBundlesSchema,
|
|
50
|
+
) as (keyof DebugBundlesTable)[];
|
|
43
51
|
|
|
44
|
-
export async function
|
|
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: '${
|
|
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('${
|
|
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: '${
|
|
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: '${
|
|
70
|
+
name: '${escapedScenarioName}',
|
|
66
71
|
data: {
|
|
67
72
|
log: {
|
|
68
73
|
name: "console.log",
|