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