@codeyam/codeyam-cli 0.1.0-staging.1669d45 → 0.1.0-staging.2a88920
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 +8 -8
- package/analyzer-template/log.txt +3 -3
- package/analyzer-template/package.json +5 -5
- package/analyzer-template/packages/ai/index.ts +15 -2
- package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +87 -51
- package/analyzer-template/packages/ai/src/lib/astScopes/arrayDerivationDetector.ts +199 -0
- package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +98 -9
- package/analyzer-template/packages/ai/src/lib/astScopes/methodSemantics.ts +139 -23
- package/analyzer-template/packages/ai/src/lib/astScopes/patterns/variableDeclarationHandler.ts +6 -126
- package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +555 -28
- package/analyzer-template/packages/ai/src/lib/astScopes/types.ts +88 -7
- package/analyzer-template/packages/ai/src/lib/completionCall.ts +198 -34
- package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +772 -243
- package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.ts +205 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.ts +10 -2
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/BatchSchemaProcessor.ts +16 -3
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/ScopeTreeManager.ts +6 -4
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.ts +43 -1
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.ts +122 -15
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertTypeAnnotationsToValues.ts +160 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/deduplicateFunctionSchemas.ts +40 -30
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.ts +319 -88
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fixNullIdsBySchema.ts +129 -0
- package/analyzer-template/packages/ai/src/lib/dataStructureChunking.ts +156 -0
- package/analyzer-template/packages/ai/src/lib/e2eDataTracking.ts +334 -0
- package/analyzer-template/packages/ai/src/lib/extractCriticalDataKeys.ts +120 -0
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +642 -7
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarios.ts +35 -6
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +383 -6
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionalEffects.ts +1 -1
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionals.ts +1299 -51
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromJsxUsages.ts +239 -0
- package/analyzer-template/packages/ai/src/lib/mergeStatements.ts +90 -96
- package/analyzer-template/packages/ai/src/lib/promptGenerators/gatherAttributesMap.ts +10 -7
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChunkPrompt.ts +82 -0
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateCriticalKeysPrompt.ts +103 -0
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.ts +23 -6
- package/analyzer-template/packages/ai/src/lib/promptGenerators/simplifyKeysForLLM.ts +391 -0
- package/analyzer-template/packages/ai/src/lib/resolvePathToControllable.ts +179 -45
- package/analyzer-template/packages/ai/src/lib/worker/SerializableDataStructure.ts +26 -4
- package/analyzer-template/packages/ai/src/lib/worker/analyzeScopeWorker.ts +114 -2
- package/analyzer-template/packages/analyze/src/lib/FileAnalyzer.ts +65 -59
- package/analyzer-template/packages/analyze/src/lib/ProjectAnalyzer.ts +113 -26
- package/analyzer-template/packages/analyze/src/lib/analysisContext.ts +44 -4
- package/analyzer-template/packages/analyze/src/lib/asts/sourceFiles/getAllDeclaredEntityNodes.ts +19 -0
- package/analyzer-template/packages/analyze/src/lib/asts/sourceFiles/getAllEntityNodes.ts +19 -0
- package/analyzer-template/packages/analyze/src/lib/asts/sourceFiles/getAllExports.ts +11 -0
- package/analyzer-template/packages/analyze/src/lib/asts/sourceFiles/getImportsAnalysis.ts +8 -0
- package/analyzer-template/packages/analyze/src/lib/asts/sourceFiles/getResolvedModule.ts +49 -1
- package/analyzer-template/packages/analyze/src/lib/asts/sourceFiles/getSourceFilesForAllImports.ts +2 -1
- package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +30 -19
- package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +14 -4
- package/analyzer-template/packages/analyze/src/lib/files/analyze/dependencyResolver.ts +6 -0
- package/analyzer-template/packages/analyze/src/lib/files/analyze/gatherEntityMap.ts +4 -2
- package/analyzer-template/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.ts +33 -10
- package/analyzer-template/packages/analyze/src/lib/files/analyzeRemixRoute.ts +4 -5
- package/analyzer-template/packages/analyze/src/lib/files/getImportedExports.ts +14 -12
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.ts +189 -76
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.ts +29 -0
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +77 -9
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.ts +118 -10
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +276 -17
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeValidatedDataStructures.ts +56 -11
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/propagateArrayItemSchemas.ts +474 -0
- package/analyzer-template/packages/analyze/src/lib/files/setImportedExports.ts +2 -1
- package/analyzer-template/packages/analyze/src/lib/utils/getFileByPath.ts +19 -0
- package/analyzer-template/packages/aws/package.json +2 -2
- package/analyzer-template/packages/database/src/lib/kysely/db.ts +8 -1
- package/analyzer-template/packages/database/src/lib/kysely/tables/commitsTable.ts +6 -0
- package/analyzer-template/packages/database/src/lib/loadAnalyses.ts +58 -1
- package/analyzer-template/packages/database/src/lib/loadAnalysis.ts +13 -0
- package/analyzer-template/packages/database/src/lib/loadBranch.ts +16 -1
- package/analyzer-template/packages/database/src/lib/loadCommit.ts +11 -0
- package/analyzer-template/packages/database/src/lib/loadCommits.ts +28 -0
- package/analyzer-template/packages/database/src/lib/loadEntities.ts +26 -3
- package/analyzer-template/packages/database/src/lib/loadEntityBranches.ts +12 -0
- package/analyzer-template/packages/database/src/lib/updateCommitMetadata.ts +7 -14
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js +8 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js.map +1 -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/commitsTable.d.ts +1 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/commitsTable.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/commitsTable.js +3 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/commitsTable.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalyses.d.ts +2 -0
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalyses.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalyses.js +45 -2
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalyses.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.js +8 -0
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadBranch.js +11 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadBranch.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommit.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommit.js +7 -0
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommit.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.d.ts +3 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js +22 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.d.ts +3 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js +23 -4
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntityBranches.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntityBranches.js +9 -0
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntityBranches.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.d.ts +2 -2
- package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js +5 -4
- package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js.map +1 -1
- package/analyzer-template/packages/github/dist/types/index.d.ts +1 -1
- package/analyzer-template/packages/github/dist/types/index.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/types/index.js.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/Analysis.d.ts +25 -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/Commit.d.ts +2 -0
- package/analyzer-template/packages/github/dist/types/src/types/Commit.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.d.ts +56 -6
- package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/ScopeAnalysis.d.ts +6 -1
- package/analyzer-template/packages/github/dist/types/src/types/ScopeAnalysis.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/safeFileName.d.ts +9 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/safeFileName.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/safeFileName.js +29 -3
- package/analyzer-template/packages/github/dist/utils/src/lib/safeFileName.js.map +1 -1
- package/analyzer-template/packages/github/package.json +1 -1
- package/analyzer-template/packages/types/index.ts +1 -0
- package/analyzer-template/packages/types/src/types/Analysis.ts +25 -0
- package/analyzer-template/packages/types/src/types/Commit.ts +2 -0
- package/analyzer-template/packages/types/src/types/ScenariosDataStructure.ts +70 -6
- package/analyzer-template/packages/types/src/types/ScopeAnalysis.ts +6 -1
- package/analyzer-template/packages/utils/dist/types/index.d.ts +1 -1
- package/analyzer-template/packages/utils/dist/types/index.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/types/index.js.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/types/Analysis.d.ts +25 -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/Commit.d.ts +2 -0
- package/analyzer-template/packages/utils/dist/types/src/types/Commit.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.d.ts +56 -6
- package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/types/ScopeAnalysis.d.ts +6 -1
- package/analyzer-template/packages/utils/dist/types/src/types/ScopeAnalysis.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/safeFileName.d.ts +9 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/safeFileName.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/safeFileName.js +29 -3
- package/analyzer-template/packages/utils/dist/utils/src/lib/safeFileName.js.map +1 -1
- package/analyzer-template/packages/utils/src/lib/safeFileName.ts +48 -3
- package/analyzer-template/playwright/capture.ts +20 -8
- package/analyzer-template/playwright/captureStatic.ts +1 -1
- package/analyzer-template/project/analyzeBaselineCommit.ts +5 -0
- package/analyzer-template/project/analyzeRegularCommit.ts +5 -0
- package/analyzer-template/project/captureLibraryFunctionDirect.ts +29 -26
- package/analyzer-template/project/constructMockCode.ts +367 -37
- package/analyzer-template/project/createEntitiesAndSortFiles.ts +83 -0
- package/analyzer-template/project/loadReadyToBeCaptured.ts +65 -41
- package/analyzer-template/project/orchestrateCapture/AwsCaptureTaskRunner.ts +12 -4
- package/analyzer-template/project/orchestrateCapture/SequentialCaptureTaskRunner.ts +18 -7
- package/analyzer-template/project/orchestrateCapture/taskRunner.ts +4 -2
- package/analyzer-template/project/orchestrateCapture.ts +71 -6
- package/analyzer-template/project/reconcileMockDataKeys.ts +152 -9
- package/analyzer-template/project/runAnalysis.ts +4 -0
- package/analyzer-template/project/start.ts +35 -11
- package/analyzer-template/project/writeMockDataTsx.ts +127 -4
- package/analyzer-template/project/writeScenarioComponents.ts +101 -8
- package/analyzer-template/scripts/comboWorkerLoop.cjs +98 -50
- package/background/src/lib/virtualized/project/analyzeBaselineCommit.js +5 -0
- package/background/src/lib/virtualized/project/analyzeBaselineCommit.js.map +1 -1
- package/background/src/lib/virtualized/project/analyzeRegularCommit.js +5 -0
- package/background/src/lib/virtualized/project/analyzeRegularCommit.js.map +1 -1
- package/background/src/lib/virtualized/project/captureLibraryFunctionDirect.js +3 -3
- package/background/src/lib/virtualized/project/captureLibraryFunctionDirect.js.map +1 -1
- package/background/src/lib/virtualized/project/constructMockCode.js +300 -7
- package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
- package/background/src/lib/virtualized/project/createEntitiesAndSortFiles.js +73 -1
- package/background/src/lib/virtualized/project/createEntitiesAndSortFiles.js.map +1 -1
- package/background/src/lib/virtualized/project/loadReadyToBeCaptured.js +19 -8
- package/background/src/lib/virtualized/project/loadReadyToBeCaptured.js.map +1 -1
- package/background/src/lib/virtualized/project/orchestrateCapture/AwsCaptureTaskRunner.js +2 -2
- package/background/src/lib/virtualized/project/orchestrateCapture/AwsCaptureTaskRunner.js.map +1 -1
- package/background/src/lib/virtualized/project/orchestrateCapture/SequentialCaptureTaskRunner.js +7 -5
- package/background/src/lib/virtualized/project/orchestrateCapture/SequentialCaptureTaskRunner.js.map +1 -1
- package/background/src/lib/virtualized/project/orchestrateCapture.js +58 -6
- package/background/src/lib/virtualized/project/orchestrateCapture.js.map +1 -1
- package/background/src/lib/virtualized/project/reconcileMockDataKeys.js +126 -9
- package/background/src/lib/virtualized/project/reconcileMockDataKeys.js.map +1 -1
- package/background/src/lib/virtualized/project/runAnalysis.js +3 -0
- package/background/src/lib/virtualized/project/runAnalysis.js.map +1 -1
- package/background/src/lib/virtualized/project/start.js +32 -11
- package/background/src/lib/virtualized/project/start.js.map +1 -1
- package/background/src/lib/virtualized/project/writeMockDataTsx.js +101 -4
- package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
- package/background/src/lib/virtualized/project/writeScenarioComponents.js +57 -8
- package/background/src/lib/virtualized/project/writeScenarioComponents.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 +7 -5
- package/codeyam-cli/src/commands/debug.js.map +1 -1
- package/codeyam-cli/src/commands/memory.js +273 -0
- package/codeyam-cli/src/commands/memory.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +4 -0
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
- package/codeyam-cli/src/utils/analysisRunner.js +21 -2
- package/codeyam-cli/src/utils/analysisRunner.js.map +1 -1
- package/codeyam-cli/src/utils/install-skills.js +42 -6
- package/codeyam-cli/src/utils/install-skills.js.map +1 -1
- package/codeyam-cli/src/utils/queue/job.js +1 -0
- package/codeyam-cli/src/utils/queue/job.js.map +1 -1
- package/codeyam-cli/src/utils/queue/manager.js +6 -0
- package/codeyam-cli/src/utils/queue/manager.js.map +1 -1
- package/codeyam-cli/src/utils/rules/index.js +5 -0
- package/codeyam-cli/src/utils/rules/index.js.map +1 -0
- package/codeyam-cli/src/utils/rules/parser.js +106 -0
- package/codeyam-cli/src/utils/rules/parser.js.map +1 -0
- package/codeyam-cli/src/utils/rules/pathMatcher.js +18 -0
- package/codeyam-cli/src/utils/rules/pathMatcher.js.map +1 -0
- package/codeyam-cli/src/utils/rules/staleness.js +132 -0
- package/codeyam-cli/src/utils/rules/staleness.js.map +1 -0
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +2 -0
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
- package/codeyam-cli/src/webserver/app/lib/database.js +7 -3
- package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
- package/codeyam-cli/src/webserver/bootstrap.js +40 -0
- package/codeyam-cli/src/webserver/bootstrap.js.map +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/EntityItem-DsN1wKrm.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-COi5OvsN.js → EntityTypeBadge-DLqD3qNt.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-BwdQv49w.js → EntityTypeIcon-Ba2JVPzP.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{InlineSpinner-CEleMv_j.js → InlineSpinner-C8lyxW9k.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-D68KarMg.js → InteractivePreview-aht4aafF.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{LibraryFunctionPreview-L75Wvqgw.js → LibraryFunctionPreview-CVtiBnY5.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-C53WM8qn.js → LoadingDots-B0GLXMsr.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-CrNkmy4i.js → LogViewer-xgeCVgSM.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/ReportIssueModal-OApQuNyq.js +16 -0
- package/codeyam-cli/src/webserver/build/client/assets/{SafeScreenshot-CQifa1n-.js → SafeScreenshot-DuDvi0jm.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-CyaBFX7l.js → ScenarioViewer-DzccYyI8.js} +3 -13
- package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-D36O1rzU.js → TruncatedFilePath-DyFZkK0l.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/_index-BwqWJOgH.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-BwavGCpm.js +32 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.health-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.memory-profile-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.restart-server-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-DgTPh8H-.js → chevron-down-Cx24_aWc.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{chunk-EPOLDU6W-DdQKK6on.js → chunk-EPOLDU6W-CXRTFQ3F.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{circle-check-Dmr2bb1R.js → circle-check-BOARzkeR.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/copy-Bb-80kDT.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/{createLucideIcon-Do4ZLUYa.js → createLucideIcon-BdhJEx6B.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-BBnGWYga.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-CbdFyxZh.js → entity._sha._-BJUiQqZF.js} +12 -12
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha.scenarios._scenarioId.fullscreen-B4iCfs5M.js → entity._sha.scenarios._scenarioId.fullscreen-DavjRmOY.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.create-scenario-wDWZZO1W.js → entity._sha_.create-scenario-D1T4TGjf.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-BMbl7MeQ.js → entity._sha_.edit._scenarioId-CTBG2mmz.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{entry.client-5wRKRIH9.js → entry.client-CS2cb_eZ.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/file-code-Dhef1kWN.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/{fileTableUtils-DD3SDH7t.js → fileTableUtils-DMJ7zii9.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/files-CJ6lTdTA.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{git-zXjT7J0G.js → git-CPTZZ-JZ.js} +8 -8
- package/codeyam-cli/src/webserver/build/client/assets/globals-D3yhhV8x.css +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{index-DLbXwndH.js → index-B1h680n5.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{index-gPZ-lad1.js → index-lzqtyFU8.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-BsPXJ81F.js → loader-circle-B7B9V-bu.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-a78b90a2.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/memory--GCbFsBE.js +92 -0
- package/codeyam-cli/src/webserver/build/client/assets/root-eVAaavTS.js +62 -0
- package/codeyam-cli/src/webserver/build/client/assets/{search-P2FKIUql.js → search-CxXUmBSd.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{settings-B2eDuBj8.js → settings-CS5f3WzT.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{simulations-L18M6-kN.js → simulations-DwFIBT09.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-BDz7kbVA.js → triangle-alert-B6LgvRJg.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useCustomSizes-29dDmbH8.js → useCustomSizes-C1v1PQzo.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-BUm0UVJm.js → useLastLogLine-aSv48UbS.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useReportContext-CkIOKTrZ.js → useReportContext-DYxHZQuP.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useToast-KKw5kTn-.js → useToast-mBRpZPiu.js} +1 -1
- package/codeyam-cli/src/webserver/build/server/assets/index-BM6TDT1Y.js +1 -0
- package/codeyam-cli/src/webserver/build/server/assets/server-build-dYC34MHw.js +257 -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-memory-hook.sh +200 -0
- package/codeyam-cli/templates/codeyam:debug.md +47 -3
- package/codeyam-cli/templates/codeyam:diagnose.md +203 -25
- package/codeyam-cli/templates/codeyam:memory.md +341 -0
- package/codeyam-cli/templates/codeyam:new-rule.md +13 -0
- package/codeyam-cli/templates/rule-reflection-hook.py +160 -0
- package/codeyam-cli/templates/rules-instructions.md +93 -0
- package/package.json +8 -5
- package/packages/ai/index.js +7 -3
- package/packages/ai/index.js.map +1 -1
- package/packages/ai/src/lib/analyzeScope.js +70 -29
- package/packages/ai/src/lib/analyzeScope.js.map +1 -1
- package/packages/ai/src/lib/astScopes/arrayDerivationDetector.js +150 -0
- package/packages/ai/src/lib/astScopes/arrayDerivationDetector.js.map +1 -0
- package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +78 -8
- package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js.map +1 -1
- package/packages/ai/src/lib/astScopes/methodSemantics.js +109 -23
- package/packages/ai/src/lib/astScopes/methodSemantics.js.map +1 -1
- package/packages/ai/src/lib/astScopes/patterns/variableDeclarationHandler.js +1 -102
- package/packages/ai/src/lib/astScopes/patterns/variableDeclarationHandler.js.map +1 -1
- package/packages/ai/src/lib/astScopes/processExpression.js +440 -27
- package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
- package/packages/ai/src/lib/completionCall.js +161 -30
- package/packages/ai/src/lib/completionCall.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +589 -166
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.js +179 -0
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js +7 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/BatchSchemaProcessor.js +13 -3
- package/packages/ai/src/lib/dataStructure/helpers/BatchSchemaProcessor.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/ScopeTreeManager.js +6 -4
- package/packages/ai/src/lib/dataStructure/helpers/ScopeTreeManager.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js +41 -1
- package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js +104 -11
- package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/convertTypeAnnotationsToValues.js +159 -0
- package/packages/ai/src/lib/dataStructure/helpers/convertTypeAnnotationsToValues.js.map +1 -0
- package/packages/ai/src/lib/dataStructure/helpers/deduplicateFunctionSchemas.js +37 -20
- package/packages/ai/src/lib/dataStructure/helpers/deduplicateFunctionSchemas.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js +265 -79
- package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/fixNullIdsBySchema.js +107 -0
- package/packages/ai/src/lib/dataStructure/helpers/fixNullIdsBySchema.js.map +1 -0
- package/packages/ai/src/lib/dataStructureChunking.js +111 -0
- package/packages/ai/src/lib/dataStructureChunking.js.map +1 -0
- package/packages/ai/src/lib/e2eDataTracking.js +241 -0
- package/packages/ai/src/lib/e2eDataTracking.js.map +1 -0
- package/packages/ai/src/lib/extractCriticalDataKeys.js +96 -0
- package/packages/ai/src/lib/extractCriticalDataKeys.js.map +1 -0
- package/packages/ai/src/lib/generateEntityScenarioData.js +525 -8
- package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
- package/packages/ai/src/lib/generateEntityScenarios.js +26 -2
- package/packages/ai/src/lib/generateEntityScenarios.js.map +1 -1
- package/packages/ai/src/lib/generateExecutionFlows.js +281 -4
- package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -1
- package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js +946 -42
- package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js.map +1 -1
- package/packages/ai/src/lib/generateExecutionFlowsFromJsxUsages.js +194 -0
- package/packages/ai/src/lib/generateExecutionFlowsFromJsxUsages.js.map +1 -0
- package/packages/ai/src/lib/mergeStatements.js +70 -51
- package/packages/ai/src/lib/mergeStatements.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js +10 -4
- package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/generateChunkPrompt.js +54 -0
- package/packages/ai/src/lib/promptGenerators/generateChunkPrompt.js.map +1 -0
- package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js +15 -7
- package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/simplifyKeysForLLM.js +335 -0
- package/packages/ai/src/lib/promptGenerators/simplifyKeysForLLM.js.map +1 -0
- package/packages/ai/src/lib/resolvePathToControllable.js +155 -41
- package/packages/ai/src/lib/resolvePathToControllable.js.map +1 -1
- package/packages/ai/src/lib/worker/SerializableDataStructure.js +7 -0
- package/packages/ai/src/lib/worker/SerializableDataStructure.js.map +1 -1
- package/packages/ai/src/lib/worker/analyzeScopeWorker.js +94 -1
- package/packages/ai/src/lib/worker/analyzeScopeWorker.js.map +1 -1
- package/packages/analyze/src/lib/FileAnalyzer.js +60 -36
- package/packages/analyze/src/lib/FileAnalyzer.js.map +1 -1
- package/packages/analyze/src/lib/ProjectAnalyzer.js +96 -26
- package/packages/analyze/src/lib/ProjectAnalyzer.js.map +1 -1
- package/packages/analyze/src/lib/analysisContext.js +30 -5
- package/packages/analyze/src/lib/analysisContext.js.map +1 -1
- package/packages/analyze/src/lib/asts/sourceFiles/getAllDeclaredEntityNodes.js +14 -0
- package/packages/analyze/src/lib/asts/sourceFiles/getAllDeclaredEntityNodes.js.map +1 -1
- package/packages/analyze/src/lib/asts/sourceFiles/getAllEntityNodes.js +14 -0
- package/packages/analyze/src/lib/asts/sourceFiles/getAllEntityNodes.js.map +1 -1
- package/packages/analyze/src/lib/asts/sourceFiles/getAllExports.js +6 -0
- package/packages/analyze/src/lib/asts/sourceFiles/getAllExports.js.map +1 -1
- package/packages/analyze/src/lib/asts/sourceFiles/getImportsAnalysis.js +6 -0
- package/packages/analyze/src/lib/asts/sourceFiles/getImportsAnalysis.js.map +1 -1
- package/packages/analyze/src/lib/asts/sourceFiles/getResolvedModule.js +39 -1
- package/packages/analyze/src/lib/asts/sourceFiles/getResolvedModule.js.map +1 -1
- package/packages/analyze/src/lib/asts/sourceFiles/getSourceFilesForAllImports.js +2 -1
- package/packages/analyze/src/lib/asts/sourceFiles/getSourceFilesForAllImports.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js +21 -9
- package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +14 -4
- package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/dependencyResolver.js +5 -0
- package/packages/analyze/src/lib/files/analyze/dependencyResolver.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/gatherEntityMap.js +2 -1
- package/packages/analyze/src/lib/files/analyze/gatherEntityMap.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js +31 -10
- package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js.map +1 -1
- package/packages/analyze/src/lib/files/analyzeRemixRoute.js +3 -2
- package/packages/analyze/src/lib/files/analyzeRemixRoute.js.map +1 -1
- package/packages/analyze/src/lib/files/getImportedExports.js +11 -7
- package/packages/analyze/src/lib/files/getImportedExports.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js +160 -68
- package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js +25 -8
- package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +71 -9
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js +57 -9
- package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +233 -9
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/mergeValidatedDataStructures.js +46 -9
- package/packages/analyze/src/lib/files/scenarios/mergeValidatedDataStructures.js.map +1 -1
- package/packages/analyze/src/lib/files/setImportedExports.js +2 -1
- package/packages/analyze/src/lib/files/setImportedExports.js.map +1 -1
- package/packages/analyze/src/lib/utils/getFileByPath.js +12 -0
- package/packages/analyze/src/lib/utils/getFileByPath.js.map +1 -0
- package/packages/database/src/lib/kysely/db.js +8 -1
- package/packages/database/src/lib/kysely/db.js.map +1 -1
- package/packages/database/src/lib/kysely/tables/commitsTable.js +3 -0
- package/packages/database/src/lib/kysely/tables/commitsTable.js.map +1 -1
- package/packages/database/src/lib/loadAnalyses.js +45 -2
- package/packages/database/src/lib/loadAnalyses.js.map +1 -1
- package/packages/database/src/lib/loadAnalysis.js +8 -0
- package/packages/database/src/lib/loadAnalysis.js.map +1 -1
- package/packages/database/src/lib/loadBranch.js +11 -1
- package/packages/database/src/lib/loadBranch.js.map +1 -1
- package/packages/database/src/lib/loadCommit.js +7 -0
- package/packages/database/src/lib/loadCommit.js.map +1 -1
- package/packages/database/src/lib/loadCommits.js +22 -1
- package/packages/database/src/lib/loadCommits.js.map +1 -1
- package/packages/database/src/lib/loadEntities.js +23 -4
- package/packages/database/src/lib/loadEntities.js.map +1 -1
- package/packages/database/src/lib/loadEntityBranches.js +9 -0
- package/packages/database/src/lib/loadEntityBranches.js.map +1 -1
- package/packages/database/src/lib/updateCommitMetadata.js +5 -4
- package/packages/database/src/lib/updateCommitMetadata.js.map +1 -1
- package/packages/types/index.js.map +1 -1
- package/packages/utils/src/lib/safeFileName.js +29 -3
- package/packages/utils/src/lib/safeFileName.js.map +1 -1
- package/scripts/finalize-analyzer.cjs +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/EntityItem-vauWK972.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/ReportIssueModal-DzJRkCkr.js +0 -11
- package/codeyam-cli/src/webserver/build/client/assets/_index-Be83mo_j.js +0 -11
- package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-BN6wu6Y-.js +0 -37
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-Bn6aCAy_.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/files-DKyMFI90.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/globals-DTTQ3gY7.css +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-22590fcf.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/root-BsAarjAM.js +0 -57
- package/codeyam-cli/src/webserver/build/server/assets/index-BND5I5fv.js +0 -1
- package/codeyam-cli/src/webserver/build/server/assets/server-build-CFXnd7MG.js +0 -228
|
@@ -9,8 +9,12 @@ import { DataStructure } from '~codeyam/types';
|
|
|
9
9
|
* enriches the mocked dependency's returnValueSchema so the LLM knows what fields
|
|
10
10
|
* to generate for array elements.
|
|
11
11
|
*
|
|
12
|
+
* Uses usageEquivalencies to trace data flow and ONLY enrich arrays with fields
|
|
13
|
+
* from children that actually receive elements from that array.
|
|
14
|
+
*
|
|
12
15
|
* Example:
|
|
13
16
|
* - getSurveysAction returns { data: array }
|
|
17
|
+
* - usageEquivalencies shows: surveys[] -> SurveyCard().signature[0].survey
|
|
14
18
|
* - SurveyCard expects signature[0].survey.updatedAt: date
|
|
15
19
|
* - After enrichment: getSurveysAction().data[]: object, data[].updatedAt: date
|
|
16
20
|
*/
|
|
@@ -21,6 +25,7 @@ export default function enrichArrayTypesFromChildSignatures(
|
|
|
21
25
|
isMocked?: boolean;
|
|
22
26
|
}[],
|
|
23
27
|
dependencySchemas: DataStructure['dependencySchemas'],
|
|
28
|
+
usageEquivalencies?: DataStructure['usageEquivalencies'],
|
|
24
29
|
): void {
|
|
25
30
|
// Find all mocked dependencies with array return types
|
|
26
31
|
const mockedArrayPaths: {
|
|
@@ -43,7 +48,8 @@ export default function enrichArrayTypesFromChildSignatures(
|
|
|
43
48
|
// - wrapThrows().data.createdBy (deeply nested)
|
|
44
49
|
// - getStatusOptions().functionCallReturnValue (direct array return - usually options/primitives)
|
|
45
50
|
for (const [path, type] of Object.entries(schema)) {
|
|
46
|
-
if
|
|
51
|
+
// Check if type is array (including nullable/optional variants like 'array | undefined')
|
|
52
|
+
if (!type.startsWith('array')) continue;
|
|
47
53
|
|
|
48
54
|
// Skip paths with computed property patterns like [key], [i], [0], etc.
|
|
49
55
|
// These represent dynamic access patterns, not simple data arrays
|
|
@@ -81,115 +87,222 @@ export default function enrichArrayTypesFromChildSignatures(
|
|
|
81
87
|
|
|
82
88
|
if (mockedArrayPaths.length === 0) return;
|
|
83
89
|
|
|
84
|
-
//
|
|
85
|
-
//
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
entityName: string;
|
|
91
|
-
// Map of prop paths to types, e.g., { "survey.id": "string", "survey.updatedAt": "date" }
|
|
92
|
-
propFields: Record<string, string>;
|
|
93
|
-
}[] = [];
|
|
90
|
+
// Build a map from child component signature paths to their prop fields
|
|
91
|
+
// e.g., "SurveyCard().signature[0].survey" -> { "id": "string", "updatedAt": "date" }
|
|
92
|
+
const childSignatureFieldsByPath: Map<
|
|
93
|
+
string,
|
|
94
|
+
{ propName: string; fields: Record<string, string> }
|
|
95
|
+
> = new Map();
|
|
94
96
|
|
|
95
|
-
// Helper to extract prop fields from a signature schema
|
|
96
|
-
const
|
|
97
|
+
// Helper to extract prop name and fields from a signature schema
|
|
98
|
+
const extractSignatureInfo = (
|
|
99
|
+
entityName: string,
|
|
97
100
|
schema: Record<string, string>,
|
|
98
|
-
):
|
|
99
|
-
|
|
101
|
+
): void => {
|
|
102
|
+
// Group by prop name (e.g., signature[0].survey.id, signature[0].survey.name -> "survey")
|
|
103
|
+
const propGroups: Record<string, Record<string, string>> = {};
|
|
104
|
+
// Also collect direct fields on signature[0] (e.g., signature[0].filePath -> "filePath")
|
|
105
|
+
const directFields: Record<string, string> = {};
|
|
106
|
+
|
|
100
107
|
for (const [path, type] of Object.entries(schema)) {
|
|
101
|
-
// Match signature[0].propName.field patterns
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
+
// Match signature[0].propName.field or signature[0].propName[].field patterns
|
|
109
|
+
// The (?:\[\])? makes array props optional, handling both:
|
|
110
|
+
// - signature[0].survey.updatedAt (object prop)
|
|
111
|
+
// - signature[0].questionAnswers[].question.questionText (array prop)
|
|
112
|
+
const nestedMatch = path.match(/^signature\[0\]\.(\w+)(?:\[\])?\.(.+)$/);
|
|
113
|
+
if (nestedMatch) {
|
|
114
|
+
const [, propName, fieldPath] = nestedMatch;
|
|
115
|
+
propGroups[propName] ||= {};
|
|
116
|
+
propGroups[propName][fieldPath] = type;
|
|
117
|
+
continue;
|
|
108
118
|
}
|
|
109
|
-
}
|
|
110
|
-
return propFields;
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
// First, check direct imports (non-mocked)
|
|
114
|
-
const processedSchemas = new Set<string>();
|
|
115
|
-
for (const importedExport of importedExports) {
|
|
116
|
-
// Skip mocked dependencies - we want child components
|
|
117
|
-
if (importedExport.isMocked || !importedExport.filePath) continue;
|
|
118
119
|
|
|
119
|
-
|
|
120
|
-
|
|
120
|
+
// Also match direct fields: signature[0].fieldName (single level, no nested path)
|
|
121
|
+
// This handles cases like TruncatedFilePath where filePath is passed directly
|
|
122
|
+
const directMatch = path.match(/^signature\[0\]\.(\w+)$/);
|
|
123
|
+
if (directMatch) {
|
|
124
|
+
const [, fieldName] = directMatch;
|
|
125
|
+
directFields[fieldName] = type;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
121
128
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
129
|
+
// Store nested prop groups with the full signature path as key
|
|
130
|
+
for (const [propName, fields] of Object.entries(propGroups)) {
|
|
131
|
+
if (Object.keys(fields).length > 0) {
|
|
132
|
+
const signaturePath = `${entityName}().signature[0].${propName}`;
|
|
133
|
+
childSignatureFieldsByPath.set(signaturePath, { propName, fields });
|
|
134
|
+
}
|
|
135
|
+
}
|
|
126
136
|
|
|
127
|
-
|
|
128
|
-
if (Object.keys(
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
137
|
+
// Store direct fields with signature[0] as key (for when entire object is passed)
|
|
138
|
+
if (Object.keys(directFields).length > 0) {
|
|
139
|
+
const signaturePath = `${entityName}().signature[0]`;
|
|
140
|
+
childSignatureFieldsByPath.set(signaturePath, {
|
|
141
|
+
propName: '',
|
|
142
|
+
fields: directFields,
|
|
133
143
|
});
|
|
134
144
|
}
|
|
135
|
-
}
|
|
145
|
+
};
|
|
136
146
|
|
|
137
|
-
//
|
|
138
|
-
// that may not be in importedExports but have signature schemas with prop fields
|
|
147
|
+
// Process all schemas in dependencySchemas
|
|
139
148
|
if (dependencySchemas) {
|
|
140
|
-
for (const [
|
|
149
|
+
for (const [, entities] of Object.entries(dependencySchemas)) {
|
|
141
150
|
for (const [entityName, schemas] of Object.entries(entities)) {
|
|
142
|
-
const schemaKey = `${filePath}::${entityName}`;
|
|
143
|
-
// Skip already processed schemas
|
|
144
|
-
if (processedSchemas.has(schemaKey)) continue;
|
|
145
|
-
|
|
146
151
|
const signatureSchema = schemas?.signatureSchema;
|
|
147
|
-
if (
|
|
148
|
-
|
|
149
|
-
const propFields = extractPropFields(signatureSchema);
|
|
150
|
-
if (Object.keys(propFields).length > 0) {
|
|
151
|
-
childSignatureFields.push({
|
|
152
|
-
filePath,
|
|
153
|
-
entityName,
|
|
154
|
-
propFields,
|
|
155
|
-
});
|
|
152
|
+
if (signatureSchema) {
|
|
153
|
+
extractSignatureInfo(entityName, signatureSchema);
|
|
156
154
|
}
|
|
157
155
|
}
|
|
158
156
|
}
|
|
159
157
|
}
|
|
160
158
|
|
|
161
|
-
if (
|
|
159
|
+
if (childSignatureFieldsByPath.size === 0) return;
|
|
160
|
+
|
|
161
|
+
// Helper to check if a local variable name could be derived from a mocked function name
|
|
162
|
+
// e.g., "getSurveys" -> "surveys", "fetchUsers" -> "users", "loadData" -> "data"
|
|
163
|
+
// e.g., "getSurveysAction" -> "surveys" (removes "Action" suffix too)
|
|
164
|
+
const couldBeDerivedFrom = (
|
|
165
|
+
localVarName: string,
|
|
166
|
+
mockedFunctionName: string,
|
|
167
|
+
): boolean => {
|
|
168
|
+
const normalizedVar = localVarName.toLowerCase().replace(/\[\]$/, '');
|
|
169
|
+
let normalizedFunc = mockedFunctionName.toLowerCase();
|
|
162
170
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
171
|
+
// Direct match (e.g., "surveys" from function "surveys")
|
|
172
|
+
if (normalizedFunc === normalizedVar) return true;
|
|
173
|
+
|
|
174
|
+
// Remove common prefixes like "get", "fetch", "load", "use"
|
|
175
|
+
const prefixPattern = /^(get|fetch|load|use)/i;
|
|
176
|
+
normalizedFunc = normalizedFunc.replace(prefixPattern, '');
|
|
177
|
+
|
|
178
|
+
// Remove common suffixes like "Action", "Query", "Mutation", "Handler"
|
|
179
|
+
const suffixPattern = /(action|query|mutation|handler)$/i;
|
|
180
|
+
normalizedFunc = normalizedFunc.replace(suffixPattern, '');
|
|
181
|
+
|
|
182
|
+
// Check if function name (without prefix/suffix) matches the variable name
|
|
183
|
+
if (normalizedFunc === normalizedVar) return true;
|
|
184
|
+
|
|
185
|
+
// Check for singular/plural relationship
|
|
186
|
+
// e.g., "survey" from "getSurveys" or "surveys" from "getSurvey"
|
|
187
|
+
if (
|
|
188
|
+
normalizedFunc.endsWith('s') &&
|
|
189
|
+
normalizedFunc.slice(0, -1) === normalizedVar
|
|
190
|
+
)
|
|
191
|
+
return true;
|
|
192
|
+
if (
|
|
193
|
+
normalizedVar.endsWith('s') &&
|
|
194
|
+
normalizedVar.slice(0, -1) === normalizedFunc
|
|
195
|
+
)
|
|
196
|
+
return true;
|
|
197
|
+
|
|
198
|
+
// Check if the array property name (like "data") is in the variable
|
|
199
|
+
// This handles cases like "const { data: surveys } = getSurveys()" where
|
|
200
|
+
// the local var might be the renamed destructured property
|
|
201
|
+
// Skip this for now as it's too loose
|
|
202
|
+
|
|
203
|
+
return false;
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
// For each mocked array, find which child signatures it flows to via usageEquivalencies
|
|
166
207
|
for (const { filePath, entityName, arrayPath } of mockedArrayPaths) {
|
|
167
208
|
const schema = dependencySchemas[filePath][entityName].returnValueSchema;
|
|
168
209
|
|
|
169
|
-
// Check if this array already has element type definitions
|
|
210
|
+
// Check if this array already has INDEXED element type definitions (e.g., [0]: null)
|
|
170
211
|
// If so, skip it - it's likely a specialized array like [null] for refs
|
|
212
|
+
// But DON'T skip if it only has general [] element types - those can be enriched
|
|
171
213
|
const elementPathPrefix = `${arrayPath}[`;
|
|
172
|
-
const
|
|
173
|
-
path.startsWith(elementPathPrefix)
|
|
174
|
-
|
|
214
|
+
const hasIndexedElementType = Object.keys(schema).some((path) => {
|
|
215
|
+
if (!path.startsWith(elementPathPrefix)) return false;
|
|
216
|
+
// Check if it's an indexed type like [0], [1], etc. vs general []
|
|
217
|
+
const afterPrefix = path.slice(elementPathPrefix.length);
|
|
218
|
+
// Indexed types start with a digit: [0], [1], etc.
|
|
219
|
+
return /^\d/.test(afterPrefix);
|
|
220
|
+
});
|
|
175
221
|
|
|
176
|
-
if (
|
|
177
|
-
// Array already has element type info (e.g., useAutoAnimate()[0]: null)
|
|
222
|
+
if (hasIndexedElementType) {
|
|
223
|
+
// Array already has indexed element type info (e.g., useAutoAnimate()[0]: null)
|
|
178
224
|
// Don't override it with child signature fields
|
|
179
225
|
continue;
|
|
180
226
|
}
|
|
181
227
|
|
|
182
|
-
//
|
|
228
|
+
// Find matching child signatures via usageEquivalencies
|
|
229
|
+
// Look for equivalencies where this array (or local variables derived from it)
|
|
230
|
+
// flows to a child component's signature
|
|
231
|
+
const matchedFields: Record<string, string> = {};
|
|
232
|
+
|
|
233
|
+
if (usageEquivalencies) {
|
|
234
|
+
// Check all equivalency entries for paths that could be derived from this array
|
|
235
|
+
for (const [sourcePath, targets] of Object.entries(usageEquivalencies)) {
|
|
236
|
+
// Check if this source path relates to our mocked array
|
|
237
|
+
// Direct match: "getSurveysAction().functionCallReturnValue.data[]"
|
|
238
|
+
// Indirect match: local variable like "surveys[]" that comes from the array
|
|
239
|
+
if (!sourcePath.endsWith('[]')) continue;
|
|
240
|
+
|
|
241
|
+
// Get the local variable name from the source path (e.g., "surveys[]" -> "surveys")
|
|
242
|
+
const localVarName = sourcePath.replace(/\[\]$/, '');
|
|
243
|
+
|
|
244
|
+
// Check if this local variable could have come from this mocked function
|
|
245
|
+
// Use heuristics: name matching (getSurveys -> surveys, getUsers -> users)
|
|
246
|
+
// Also check if the array path ends with the local variable name
|
|
247
|
+
// e.g., useLoaderData().functionCallReturnValue.entities ends with .entities
|
|
248
|
+
const arrayEndsWithLocalVar = arrayPath.endsWith(`.${localVarName}`);
|
|
249
|
+
if (
|
|
250
|
+
!couldBeDerivedFrom(localVarName, entityName) &&
|
|
251
|
+
!arrayEndsWithLocalVar
|
|
252
|
+
) {
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
for (const target of targets) {
|
|
257
|
+
// Target should be something like "SurveyCard().signature[0].survey"
|
|
258
|
+
// or "SurveyCard().signature[0].surveys[]"
|
|
259
|
+
const { schemaPath } = target;
|
|
260
|
+
|
|
261
|
+
// Look for signature fields that match this target
|
|
262
|
+
// Handle both singular (survey) and plural (surveys[]) forms
|
|
263
|
+
const normalizedTarget = schemaPath.replace(/\[\]$/, '');
|
|
264
|
+
|
|
265
|
+
for (const [signaturePath, info] of childSignatureFieldsByPath) {
|
|
266
|
+
if (normalizedTarget === signaturePath) {
|
|
267
|
+
// Found a match! Add all fields from this child signature
|
|
268
|
+
for (const [fieldPath, type] of Object.entries(info.fields)) {
|
|
269
|
+
if (!matchedFields[fieldPath]) {
|
|
270
|
+
matchedFields[fieldPath] = type;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
// If no equivalencies matched, skip this array entirely
|
|
280
|
+
// This prevents the bug where ALL child signatures get merged into ALL arrays
|
|
281
|
+
if (Object.keys(matchedFields).length === 0) {
|
|
282
|
+
continue;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
// Add array element type and matched fields
|
|
183
286
|
const elementPath = `${arrayPath}[]`;
|
|
184
287
|
schema[elementPath] = 'object';
|
|
185
288
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
289
|
+
for (const [fieldPath, type] of Object.entries(matchedFields)) {
|
|
290
|
+
const fullPath = `${elementPath}.${fieldPath}`;
|
|
291
|
+
const existingType = schema[fullPath];
|
|
292
|
+
if (!existingType) {
|
|
293
|
+
schema[fullPath] = type;
|
|
294
|
+
} else {
|
|
295
|
+
// Prefer the more specific (narrower) type
|
|
296
|
+
const existingIsOptional =
|
|
297
|
+
existingType.includes('| undefined') ||
|
|
298
|
+
existingType.includes('| null');
|
|
299
|
+
const newIsOptional =
|
|
300
|
+
type.includes('| undefined') || type.includes('| null');
|
|
301
|
+
if (existingIsOptional && !newIsOptional) {
|
|
302
|
+
// Use the new type - it's more specific
|
|
191
303
|
schema[fullPath] = type;
|
|
192
304
|
}
|
|
305
|
+
// Otherwise keep existing (same specificity or existing is more specific)
|
|
193
306
|
}
|
|
194
307
|
}
|
|
195
308
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
convertDotNotation,
|
|
3
3
|
fillInDirectSchemaGapsAndUnknowns,
|
|
4
|
+
buildSchemaIndexes,
|
|
5
|
+
type SchemaIndexes,
|
|
4
6
|
joinParenthesesAndArrays,
|
|
5
7
|
mergeJsonTypeDefinitions,
|
|
6
8
|
splitOutsideParenthesesAndArrays,
|
|
@@ -165,6 +167,7 @@ function processCall(
|
|
|
165
167
|
variableNameOccurrence: number | undefined,
|
|
166
168
|
options: GatherDataForMocksOptions | undefined,
|
|
167
169
|
hookCallIndex: number,
|
|
170
|
+
prebuiltIndexes?: SchemaIndexes,
|
|
168
171
|
): { key: string; value: JsonTypeDefinition } | null {
|
|
169
172
|
const callName = importedExport.calls?.[callIndex] ?? importedExport.name;
|
|
170
173
|
|
|
@@ -465,6 +468,7 @@ function processCall(
|
|
|
465
468
|
const filledSchema = fillInDirectSchemaGapsAndUnknowns({
|
|
466
469
|
scopeName: importedExport.name,
|
|
467
470
|
schema: relevantMergedDependencySchema,
|
|
471
|
+
prebuiltIndexes,
|
|
468
472
|
});
|
|
469
473
|
|
|
470
474
|
const schema = convertDotNotation(filledSchema);
|
|
@@ -568,6 +572,25 @@ export default function gatherDataForMocks(
|
|
|
568
572
|
dependencySchemas: DataStructure['dependencySchemas'],
|
|
569
573
|
options?: GatherDataForMocksOptions,
|
|
570
574
|
) {
|
|
575
|
+
// Build schema indexes ONCE from all dependency schemas combined.
|
|
576
|
+
// This avoids rebuilding indexes (~1-2 seconds for 18k keys) for each processCall.
|
|
577
|
+
const allSchemaKeys: Record<string, string> = {};
|
|
578
|
+
if (dependencySchemas) {
|
|
579
|
+
for (const filePath in dependencySchemas) {
|
|
580
|
+
for (const entityName in dependencySchemas[filePath]) {
|
|
581
|
+
const schema =
|
|
582
|
+
dependencySchemas[filePath][entityName]?.returnValueSchema;
|
|
583
|
+
if (schema) {
|
|
584
|
+
Object.assign(allSchemaKeys, schema);
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
const prebuiltIndexes =
|
|
590
|
+
Object.keys(allSchemaKeys).length > 0
|
|
591
|
+
? buildSchemaIndexes(allSchemaKeys)
|
|
592
|
+
: undefined;
|
|
593
|
+
|
|
571
594
|
// Track the global index for each hook name across all imports
|
|
572
595
|
// This enables canonical keys like EntityName::useLoaderData::0, EntityName::useFetcher::0, etc.
|
|
573
596
|
const hookCallIndices: Record<string, number> = {};
|
|
@@ -653,6 +676,7 @@ export default function gatherDataForMocks(
|
|
|
653
676
|
undefined,
|
|
654
677
|
options,
|
|
655
678
|
hookCallIndex,
|
|
679
|
+
prebuiltIndexes,
|
|
656
680
|
);
|
|
657
681
|
|
|
658
682
|
if (processResult) {
|
|
@@ -717,6 +741,7 @@ export default function gatherDataForMocks(
|
|
|
717
741
|
occurrence,
|
|
718
742
|
options,
|
|
719
743
|
hookCallIndex,
|
|
744
|
+
prebuiltIndexes,
|
|
720
745
|
);
|
|
721
746
|
if (processResult) {
|
|
722
747
|
addResultToAccumulator(acc, processResult.key, processResult.value);
|
|
@@ -749,6 +774,7 @@ export default function gatherDataForMocks(
|
|
|
749
774
|
undefined,
|
|
750
775
|
options,
|
|
751
776
|
hookCallIndex,
|
|
777
|
+
prebuiltIndexes,
|
|
752
778
|
);
|
|
753
779
|
|
|
754
780
|
if (processResult) {
|
|
@@ -769,6 +795,7 @@ export default function gatherDataForMocks(
|
|
|
769
795
|
undefined,
|
|
770
796
|
options,
|
|
771
797
|
hookCallIndex,
|
|
798
|
+
prebuiltIndexes,
|
|
772
799
|
);
|
|
773
800
|
|
|
774
801
|
// Check if we got a meaningful result (not empty object or null)
|
|
@@ -813,6 +840,7 @@ export default function gatherDataForMocks(
|
|
|
813
840
|
0, // Use 0 to trigger variable-qualified lookup
|
|
814
841
|
options,
|
|
815
842
|
hookCallIndex,
|
|
843
|
+
prebuiltIndexes,
|
|
816
844
|
);
|
|
817
845
|
if (varQualifiedResult && varQualifiedResult.value) {
|
|
818
846
|
mergedValue = mergeJsonTypeDefinitions(
|
|
@@ -849,6 +877,7 @@ export default function gatherDataForMocks(
|
|
|
849
877
|
0, // Use 0 to trigger variable-qualified lookup
|
|
850
878
|
options,
|
|
851
879
|
hookCallIndex,
|
|
880
|
+
prebuiltIndexes,
|
|
852
881
|
);
|
|
853
882
|
if (varQualifiedResult && varQualifiedResult.value) {
|
|
854
883
|
// Deep merge the value into the accumulated result
|
|
@@ -16,7 +16,7 @@ import { awsLog } from '~codeyam/utils';
|
|
|
16
16
|
import gatherDataForMocks from './gatherDataForMocks';
|
|
17
17
|
import enrichArrayTypesFromChildSignatures from './enrichArrayTypesFromChildSignatures';
|
|
18
18
|
import enrichUnknownTypesFromSourceEquivalencies from './enrichUnknownTypesFromSourceEquivalencies';
|
|
19
|
-
|
|
19
|
+
// import propagateArrayItemSchemas from './propagateArrayItemSchemas';
|
|
20
20
|
export interface GenerateDataStructureArgs {
|
|
21
21
|
entity: Entity;
|
|
22
22
|
dependentAnalyses: ReadonlyAnalysisMap;
|
|
@@ -256,8 +256,10 @@ export default function generateDataStructure({
|
|
|
256
256
|
);
|
|
257
257
|
|
|
258
258
|
if (existingImport) {
|
|
259
|
-
// Merge
|
|
260
|
-
|
|
259
|
+
// Merge calls from child into existing import
|
|
260
|
+
// Note: Check length > 0 because empty array [] is truthy but has no variable names
|
|
261
|
+
if (imported.callVariableNames?.length && imported.calls) {
|
|
262
|
+
// Case 1: Both calls and callVariableNames are set - merge as pairs
|
|
261
263
|
existingImport.calls = existingImport.calls || [];
|
|
262
264
|
existingImport.callVariableNames =
|
|
263
265
|
existingImport.callVariableNames || [];
|
|
@@ -274,6 +276,18 @@ export default function generateDataStructure({
|
|
|
274
276
|
existingImport.callVariableNames.push(varName);
|
|
275
277
|
}
|
|
276
278
|
}
|
|
279
|
+
} else if (imported.calls) {
|
|
280
|
+
// Case 2: Only calls are set (no callVariableNames) - common with tRPC
|
|
281
|
+
// where destructuring like `const { data, isLoading } = trpc.xxx.useQuery()`
|
|
282
|
+
// doesn't create a variable name for the hook call itself
|
|
283
|
+
existingImport.calls = existingImport.calls || [];
|
|
284
|
+
|
|
285
|
+
// Add each call that doesn't already exist
|
|
286
|
+
for (const call of imported.calls) {
|
|
287
|
+
if (!existingImport.calls.includes(call)) {
|
|
288
|
+
existingImport.calls.push(call);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
277
291
|
}
|
|
278
292
|
} else {
|
|
279
293
|
// Add new import
|
|
@@ -456,11 +470,34 @@ export default function generateDataStructure({
|
|
|
456
470
|
|
|
457
471
|
if (existingSchema) {
|
|
458
472
|
// Merge schemas - child schemas add to parent schemas
|
|
473
|
+
// But prefer more specific types (without | undefined) when both exist
|
|
474
|
+
const mergedSignatureSchema = { ...existingSchema.signatureSchema };
|
|
475
|
+
for (const path in childSchema.signatureSchema) {
|
|
476
|
+
const existingType = mergedSignatureSchema[path];
|
|
477
|
+
const childType = childSchema.signatureSchema[path];
|
|
478
|
+
if (!existingType) {
|
|
479
|
+
mergedSignatureSchema[path] = childType;
|
|
480
|
+
} else {
|
|
481
|
+
// Prefer the more specific (narrower) type
|
|
482
|
+
const existingIsOptional =
|
|
483
|
+
existingType.includes('| undefined') ||
|
|
484
|
+
existingType.includes('| null');
|
|
485
|
+
const childIsOptional =
|
|
486
|
+
childType.includes('| undefined') ||
|
|
487
|
+
childType.includes('| null');
|
|
488
|
+
if (childIsOptional && !existingIsOptional) {
|
|
489
|
+
// Keep existing - it's more specific
|
|
490
|
+
} else if (!childIsOptional && existingIsOptional) {
|
|
491
|
+
// Use child - it's more specific
|
|
492
|
+
mergedSignatureSchema[path] = childType;
|
|
493
|
+
} else {
|
|
494
|
+
// Same specificity - use child (original behavior)
|
|
495
|
+
mergedSignatureSchema[path] = childType;
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
}
|
|
459
499
|
mergedDataStructure.dependencySchemas[schemaFilePath][schemaName] = {
|
|
460
|
-
signatureSchema:
|
|
461
|
-
...existingSchema.signatureSchema,
|
|
462
|
-
...childSchema.signatureSchema,
|
|
463
|
-
},
|
|
500
|
+
signatureSchema: mergedSignatureSchema,
|
|
464
501
|
returnValueSchema: mergeJsonTypeDefinitions(
|
|
465
502
|
existingSchema.returnValueSchema as Record<string, unknown>,
|
|
466
503
|
childSchema.returnValueSchema as Record<string, unknown>,
|
|
@@ -527,10 +564,13 @@ export default function generateDataStructure({
|
|
|
527
564
|
|
|
528
565
|
// Enrich mocked dependency array types with fields from child component signatures
|
|
529
566
|
// This ensures that when getSurveysAction returns { data: array }, and SurveyCard
|
|
530
|
-
// expects survey.updatedAt, the array element type includes updatedAt
|
|
567
|
+
// expects survey.updatedAt, the array element type includes updatedAt.
|
|
568
|
+
// Uses usageEquivalencies to trace data flow and only enrich arrays with fields
|
|
569
|
+
// from children that actually receive elements from that specific array.
|
|
531
570
|
enrichArrayTypesFromChildSignatures(
|
|
532
571
|
allImportedExports,
|
|
533
572
|
mergedDataStructure.dependencySchemas,
|
|
573
|
+
mergedDataStructure.usageEquivalencies,
|
|
534
574
|
);
|
|
535
575
|
|
|
536
576
|
// Enrich mocked dependency unknown types using sourceEquivalencies
|
|
@@ -544,12 +584,40 @@ export default function generateDataStructure({
|
|
|
544
584
|
allImportedExports,
|
|
545
585
|
);
|
|
546
586
|
|
|
547
|
-
|
|
587
|
+
// DISABLED: Testing if ternary fix eliminates the need for this heuristic
|
|
588
|
+
// Propagate array item schemas between arrays that likely have the same type.
|
|
589
|
+
// When one array (e.g., entities) has item schema traced but another similar array
|
|
590
|
+
// (e.g., currentEntities) doesn't (because it's only used in an OR expression fallback),
|
|
591
|
+
// copy the item schema from the rich array to the empty one.
|
|
592
|
+
// propagateArrayItemSchemas(mergedDataStructure.dependencySchemas);
|
|
593
|
+
|
|
594
|
+
let dataForMocks = gatherDataForMocks(
|
|
548
595
|
allImportedExports,
|
|
549
596
|
mergedDataStructure.dependencySchemas,
|
|
550
597
|
{ entityName: entity.name },
|
|
551
598
|
);
|
|
552
599
|
|
|
600
|
+
// Merge dataForMocks from non-mocked child analyses to include transitive dependency data.
|
|
601
|
+
// This handles cases where grandchild trpc calls aren't in allImportedExports because
|
|
602
|
+
// the grandchild's analysis wasn't in dependentAnalyses.
|
|
603
|
+
//
|
|
604
|
+
// Issue 19 fix: The child's dataForMocks already contains merged data from its
|
|
605
|
+
// dependencies (including grandchildren). By merging the child's dataForMocks,
|
|
606
|
+
// we transitively include all nested dependency data.
|
|
607
|
+
for (const filePath in nonMockedDependentAnalyses) {
|
|
608
|
+
for (const name in nonMockedDependentAnalyses[filePath]) {
|
|
609
|
+
const childAnalysis = nonMockedDependentAnalyses[filePath][name];
|
|
610
|
+
const childDataForMocks =
|
|
611
|
+
childAnalysis?.metadata?.scenariosDataStructure?.dataForMocks;
|
|
612
|
+
if (childDataForMocks && Object.keys(childDataForMocks).length > 0) {
|
|
613
|
+
dataForMocks = mergeJsonTypeDefinitions(
|
|
614
|
+
dataForMocks as Record<string, unknown>,
|
|
615
|
+
childDataForMocks as Record<string, unknown>,
|
|
616
|
+
) as { [importAlias: string]: JsonTypeDefinition };
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
|
|
553
621
|
const finalizedArgumentsSchema = fillInDirectSchemaGapsAndUnknowns({
|
|
554
622
|
schema: { ...mergedDataStructure.signatureSchema },
|
|
555
623
|
});
|