@codeyam/codeyam-cli 0.1.0-staging.323686 → 0.1.0-staging.4813bf3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/analyzer-template/.build-info.json +7 -7
- package/analyzer-template/log.txt +3 -3
- package/analyzer-template/package.json +5 -5
- package/analyzer-template/packages/ai/index.ts +7 -1
- package/analyzer-template/packages/ai/package.json +2 -2
- package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +62 -18
- package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +67 -9
- package/analyzer-template/packages/ai/src/lib/astScopes/patterns/forInStatementHandler.ts +10 -17
- package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +409 -50
- package/analyzer-template/packages/ai/src/lib/astScopes/sharedPatterns.ts +28 -0
- package/analyzer-template/packages/ai/src/lib/astScopes/types.ts +21 -6
- package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +992 -249
- package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.ts +5 -1
- 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 +31 -3
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.ts +37 -15
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/coerceObjectsToPrimitivesBySchema.ts +70 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.ts +126 -11
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertTypeAnnotationsToValues.ts +179 -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 +367 -96
- package/analyzer-template/packages/ai/src/lib/dataStructureChunking.ts +33 -15
- package/analyzer-template/packages/ai/src/lib/generateEntityDataStructure.ts +58 -3
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +315 -6
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarios.ts +9 -5
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +49 -5
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionalEffects.ts +1 -1
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionals.ts +649 -142
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromJsxUsages.ts +1 -1
- package/analyzer-template/packages/ai/src/lib/isolateScopes.ts +51 -3
- package/analyzer-template/packages/ai/src/lib/mergeJsonTypeDefinitions.ts +5 -0
- package/analyzer-template/packages/ai/src/lib/mergeStatements.ts +90 -96
- package/analyzer-template/packages/ai/src/lib/promptGenerators/collapseNullableObjects.ts +118 -0
- package/analyzer-template/packages/ai/src/lib/promptGenerators/gatherAttributesMap.ts +10 -7
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.ts +24 -4
- package/analyzer-template/packages/ai/src/lib/resolvePathToControllable.ts +25 -13
- package/analyzer-template/packages/ai/src/lib/worker/SerializableDataStructure.ts +4 -3
- package/analyzer-template/packages/analyze/index.ts +2 -0
- 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/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 +89 -9
- package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +19 -4
- package/analyzer-template/packages/analyze/src/lib/files/analyze/gatherEntityMap.ts +4 -2
- package/analyzer-template/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.ts +0 -3
- 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/TransformationTracer.ts +1315 -0
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.ts +61 -13
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.ts +37 -0
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +229 -19
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.ts +117 -9
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +459 -39
- 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/index.ts +1 -0
- package/analyzer-template/packages/analyze/src/lib/utils/getFileByPath.ts +19 -0
- package/analyzer-template/packages/aws/package.json +1 -1
- package/analyzer-template/packages/database/package.json +1 -1
- package/analyzer-template/packages/database/src/lib/analysisBranchToDb.ts +1 -1
- package/analyzer-template/packages/database/src/lib/analysisToDb.ts +1 -1
- package/analyzer-template/packages/database/src/lib/branchToDb.ts +1 -1
- package/analyzer-template/packages/database/src/lib/commitBranchToDb.ts +1 -1
- package/analyzer-template/packages/database/src/lib/commitToDb.ts +1 -1
- package/analyzer-template/packages/database/src/lib/fileToDb.ts +1 -1
- package/analyzer-template/packages/database/src/lib/kysely/db.ts +6 -0
- package/analyzer-template/packages/database/src/lib/kysely/tables/debugReportsTable.ts +1 -1
- package/analyzer-template/packages/database/src/lib/kysely/tables/labsRequestsTable.ts +52 -0
- package/analyzer-template/packages/database/src/lib/projectToDb.ts +1 -1
- package/analyzer-template/packages/database/src/lib/saveFiles.ts +1 -1
- package/analyzer-template/packages/database/src/lib/scenarioToDb.ts +1 -1
- package/analyzer-template/packages/database/src/lib/userScenarioToDb.ts +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/analysisBranchToDb.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/analysisBranchToDb.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/analysisToDb.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/analysisToDb.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/branchToDb.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/branchToDb.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/commitBranchToDb.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/commitBranchToDb.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/commitToDb.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/commitToDb.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/fileToDb.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/fileToDb.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts +2 -0
- 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 +3 -0
- 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/debugReportsTable.d.ts +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.d.ts +23 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.d.ts.map +1 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.js +35 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.js.map +1 -0
- package/analyzer-template/packages/github/dist/database/src/lib/projectToDb.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/projectToDb.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/saveFiles.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/saveFiles.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/scenarioToDb.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/scenarioToDb.js.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts +7 -0
- package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.d.ts +5 -5
- 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/package.json +1 -1
- package/analyzer-template/packages/types/src/types/ProjectMetadata.ts +7 -0
- package/analyzer-template/packages/types/src/types/ScenariosDataStructure.ts +6 -5
- package/analyzer-template/packages/types/src/types/ScopeAnalysis.ts +6 -1
- package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts +7 -0
- package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.d.ts +5 -5
- 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/project/constructMockCode.ts +90 -10
- package/analyzer-template/project/writeMockDataTsx.ts +181 -8
- package/analyzer-template/project/writeScenarioComponents.ts +60 -12
- package/analyzer-template/project/writeSimpleRoot.ts +21 -11
- package/background/src/lib/local/createLocalAnalyzer.js +1 -1
- package/background/src/lib/local/createLocalAnalyzer.js.map +1 -1
- package/background/src/lib/virtualized/project/constructMockCode.js +75 -4
- package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
- package/background/src/lib/virtualized/project/writeMockDataTsx.js +162 -4
- package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
- package/background/src/lib/virtualized/project/writeScenarioComponents.js +60 -15
- package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
- package/background/src/lib/virtualized/project/writeSimpleRoot.js +21 -11
- package/background/src/lib/virtualized/project/writeSimpleRoot.js.map +1 -1
- package/codeyam-cli/scripts/apply-setup.js +180 -0
- package/codeyam-cli/scripts/apply-setup.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/codeyam-cli.js +18 -2
- package/codeyam-cli/src/codeyam-cli.js.map +1 -1
- package/codeyam-cli/src/commands/analyze.js +4 -2
- package/codeyam-cli/src/commands/analyze.js.map +1 -1
- package/codeyam-cli/src/commands/baseline.js +2 -0
- package/codeyam-cli/src/commands/baseline.js.map +1 -1
- package/codeyam-cli/src/commands/debug.js +9 -5
- package/codeyam-cli/src/commands/debug.js.map +1 -1
- package/codeyam-cli/src/commands/default.js +31 -20
- package/codeyam-cli/src/commands/default.js.map +1 -1
- package/codeyam-cli/src/commands/detect-universal-mocks.js +2 -0
- package/codeyam-cli/src/commands/detect-universal-mocks.js.map +1 -1
- package/codeyam-cli/src/commands/init.js +49 -257
- package/codeyam-cli/src/commands/init.js.map +1 -1
- package/codeyam-cli/src/commands/memory.js +17 -26
- package/codeyam-cli/src/commands/memory.js.map +1 -1
- package/codeyam-cli/src/commands/recapture.js +2 -0
- package/codeyam-cli/src/commands/recapture.js.map +1 -1
- package/codeyam-cli/src/commands/setup-sandbox.js +2 -0
- package/codeyam-cli/src/commands/setup-sandbox.js.map +1 -1
- package/codeyam-cli/src/commands/setup-simulations.js +284 -0
- package/codeyam-cli/src/commands/setup-simulations.js.map +1 -0
- package/codeyam-cli/src/commands/test-startup.js +2 -0
- package/codeyam-cli/src/commands/test-startup.js.map +1 -1
- package/codeyam-cli/src/commands/verify.js +14 -2
- package/codeyam-cli/src/commands/verify.js.map +1 -1
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +128 -86
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
- package/codeyam-cli/src/utils/analyzer.js +7 -0
- package/codeyam-cli/src/utils/analyzer.js.map +1 -1
- package/codeyam-cli/src/utils/backgroundServer.js +5 -0
- package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
- package/codeyam-cli/src/utils/generateReport.js +2 -2
- package/codeyam-cli/src/utils/install-skills.js +70 -45
- package/codeyam-cli/src/utils/install-skills.js.map +1 -1
- package/codeyam-cli/src/utils/labsAutoCheck.js +19 -0
- package/codeyam-cli/src/utils/labsAutoCheck.js.map +1 -0
- package/codeyam-cli/src/utils/progress.js +7 -0
- package/codeyam-cli/src/utils/progress.js.map +1 -1
- package/codeyam-cli/src/utils/queue/job.js +4 -0
- package/codeyam-cli/src/utils/queue/job.js.map +1 -1
- package/codeyam-cli/src/utils/requireSimulations.js +10 -0
- package/codeyam-cli/src/utils/requireSimulations.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/confusionDetector.test.js +82 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/confusionDetector.test.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js +230 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/assertRules.js +67 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/assertRules.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/captureFixture.js +105 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/captureFixture.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/loadCapturedFixture.js +34 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/loadCapturedFixture.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/runClaude.js +162 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/runClaude.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/setupTempProject.js +75 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/setupTempProject.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js +378 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js +115 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/transcriptParser.test.js +127 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/transcriptParser.test.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/confusionDetector.js +50 -0
- package/codeyam-cli/src/utils/ruleReflection/confusionDetector.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/contextBuilder.js +116 -0
- package/codeyam-cli/src/utils/ruleReflection/contextBuilder.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/index.js +5 -0
- package/codeyam-cli/src/utils/ruleReflection/index.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/promptBuilder.js +44 -0
- package/codeyam-cli/src/utils/ruleReflection/promptBuilder.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/transcriptParser.js +85 -0
- package/codeyam-cli/src/utils/ruleReflection/transcriptParser.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/types.js +5 -0
- package/codeyam-cli/src/utils/ruleReflection/types.js.map +1 -0
- package/codeyam-cli/src/utils/rules/__tests__/ruleState.test.js +293 -0
- package/codeyam-cli/src/utils/rules/__tests__/ruleState.test.js.map +1 -0
- package/codeyam-cli/src/utils/rules/index.js +1 -0
- package/codeyam-cli/src/utils/rules/index.js.map +1 -1
- package/codeyam-cli/src/utils/rules/parser.js +2 -25
- package/codeyam-cli/src/utils/rules/parser.js.map +1 -1
- package/codeyam-cli/src/utils/rules/ruleState.js +150 -0
- package/codeyam-cli/src/utils/rules/ruleState.js.map +1 -0
- package/codeyam-cli/src/utils/rules/staleness.js +16 -11
- package/codeyam-cli/src/utils/rules/staleness.js.map +1 -1
- package/codeyam-cli/src/utils/serverState.js +37 -10
- package/codeyam-cli/src/utils/serverState.js.map +1 -1
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +21 -44
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
- package/codeyam-cli/src/webserver/app/lib/database.js +15 -3
- package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
- package/codeyam-cli/src/webserver/backgroundServer.js +24 -0
- package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/CopyButton-CA3JxPb7.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{EntityItem-DsN1wKrm.js → EntityItem-B86KKU7e.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-DLqD3qNt.js → EntityTypeBadge-B5ctlSYt.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-Ba2JVPzP.js → EntityTypeIcon-BqY8gDAW.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{InlineSpinner-C8lyxW9k.js → InlineSpinner-ClaLpuOo.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-aht4aafF.js → InteractivePreview-BDhPilK7.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{LibraryFunctionPreview-CVtiBnY5.js → LibraryFunctionPreview-VeqEBv9v.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-B0GLXMsr.js → LoadingDots-Bs7Nn1Jr.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-xgeCVgSM.js → LogViewer-Bm3PmcCz.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-OApQuNyq.js → ReportIssueModal-CgMEzchJ.js} +3 -8
- package/codeyam-cli/src/webserver/build/client/assets/{SafeScreenshot-DuDvi0jm.js → SafeScreenshot-Gq3Ocjo6.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-DzccYyI8.js → ScenarioViewer-CBui0id_.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-DyFZkK0l.js → TruncatedFilePath-CiwXDxLh.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{_index-BwqWJOgH.js → _index-B3TDXxnk.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-BwavGCpm.js → activity.(_tab)-BtBFH820.js} +6 -11
- package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-CN61MOMa.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.agent-transcripts-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.labs-unlock-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.save-fixture-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/book-open-PttOB2SF.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-Cx24_aWc.js → chevron-down-TJp6ofnp.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{chunk-EPOLDU6W-CXRTFQ3F.js → chunk-JZWAC4HX-JE9ZIoBl.js} +12 -12
- package/codeyam-cli/src/webserver/build/client/assets/{circle-check-BOARzkeR.js → circle-check-CXhHQYrI.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/copy-6y9ALfGT.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/{createLucideIcon-BdhJEx6B.js → createLucideIcon-Ca9fAY46.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{dev.empty-BBnGWYga.js → dev.empty-C0epRiVn.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-BJUiQqZF.js → entity._sha._-BVnB8a9L.js} +10 -10
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha.scenarios._scenarioId.fullscreen-DavjRmOY.js → entity._sha.scenarios._scenarioId.fullscreen-CBoafmVs.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.create-scenario-D1T4TGjf.js → entity._sha_.create-scenario-DGgZjdFg.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-CTBG2mmz.js → entity._sha_.edit._scenarioId-38yPijoD.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{entry.client-CS2cb_eZ.js → entry.client-BSHEfydn.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{fileTableUtils-DMJ7zii9.js → fileTableUtils-DCPhhSMo.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{files-CJ6lTdTA.js → files-0N0YJQv7.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{git-CPTZZ-JZ.js → git-DXnyr8uP.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/globals-CKT08Djd.css +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{index-lzqtyFU8.js → index-CcsFv748.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{index-B1h680n5.js → index-ChN9-fAY.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/labs-BLJ7HxOC.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-B7B9V-bu.js → loader-circle-CTqLEAGU.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-b171b9d3.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/memory-CCQd4aZA.js +78 -0
- package/codeyam-cli/src/webserver/build/client/assets/pause-D6vreykR.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/root-CHhiHoo_.js +62 -0
- package/codeyam-cli/src/webserver/build/client/assets/{search-CxXUmBSd.js → search-B8VUL8nl.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/settings-BejnUJ6R.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{simulations-DwFIBT09.js → simulations-CPoAg7Zo.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/terminal-BrCP7uQo.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-B6LgvRJg.js → triangle-alert-BZz2NjYa.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useCustomSizes-C1v1PQzo.js → useCustomSizes-DNwUduNu.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-aSv48UbS.js → useLastLogLine-COky1GVF.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useReportContext-DYxHZQuP.js → useReportContext-CpZgwliL.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useToast-mBRpZPiu.js → useToast-Bv9JFvUO.js} +1 -1
- package/codeyam-cli/src/webserver/build/server/assets/{index-DVzYx8PN.js → index-8Fv-lH1-.js} +1 -1
- package/codeyam-cli/src/webserver/build/server/assets/server-build-Akn3iYFP.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:debug.md → codeyam-debug.md} +1 -1
- package/codeyam-cli/templates/codeyam-diagnose.md +481 -0
- package/codeyam-cli/templates/codeyam-memory-hook.sh +19 -20
- package/codeyam-cli/templates/codeyam-memory.md +392 -0
- package/codeyam-cli/templates/codeyam-new-rule.md +13 -0
- package/codeyam-cli/templates/{codeyam:setup.md → codeyam-setup.md} +13 -1
- package/codeyam-cli/templates/{codeyam:sim.md → codeyam-sim.md} +1 -1
- package/codeyam-cli/templates/{codeyam:test.md → codeyam-test.md} +1 -1
- package/codeyam-cli/templates/{codeyam:verify.md → codeyam-verify.md} +1 -1
- package/codeyam-cli/templates/rule-notification-hook.py +56 -0
- package/codeyam-cli/templates/rule-reflection-hook.py +627 -0
- package/codeyam-cli/templates/rules-instructions.md +132 -0
- package/package.json +2 -2
- package/packages/ai/index.js +3 -2
- package/packages/ai/index.js.map +1 -1
- package/packages/ai/src/lib/analyzeScope.js +50 -13
- package/packages/ai/src/lib/analyzeScope.js.map +1 -1
- package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +54 -8
- package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js.map +1 -1
- package/packages/ai/src/lib/astScopes/patterns/forInStatementHandler.js +10 -14
- package/packages/ai/src/lib/astScopes/patterns/forInStatementHandler.js.map +1 -1
- package/packages/ai/src/lib/astScopes/processExpression.js +317 -44
- package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
- package/packages/ai/src/lib/astScopes/sharedPatterns.js +25 -0
- package/packages/ai/src/lib/astScopes/sharedPatterns.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +763 -171
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js +5 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.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 +33 -3
- package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js +36 -11
- package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/coerceObjectsToPrimitivesBySchema.js +63 -0
- package/packages/ai/src/lib/dataStructure/helpers/coerceObjectsToPrimitivesBySchema.js.map +1 -0
- package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js +113 -11
- package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/convertTypeAnnotationsToValues.js +173 -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 +309 -84
- package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js.map +1 -1
- package/packages/ai/src/lib/dataStructureChunking.js +26 -11
- package/packages/ai/src/lib/dataStructureChunking.js.map +1 -1
- package/packages/ai/src/lib/generateEntityDataStructure.js +46 -2
- package/packages/ai/src/lib/generateEntityDataStructure.js.map +1 -1
- package/packages/ai/src/lib/generateEntityScenarioData.js +227 -4
- package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
- package/packages/ai/src/lib/generateEntityScenarios.js +7 -1
- package/packages/ai/src/lib/generateEntityScenarios.js.map +1 -1
- package/packages/ai/src/lib/generateExecutionFlows.js +26 -4
- package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -1
- package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js +447 -80
- package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js.map +1 -1
- package/packages/ai/src/lib/isolateScopes.js +39 -3
- package/packages/ai/src/lib/isolateScopes.js.map +1 -1
- package/packages/ai/src/lib/mergeJsonTypeDefinitions.js +5 -0
- package/packages/ai/src/lib/mergeJsonTypeDefinitions.js.map +1 -1
- 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/collapseNullableObjects.js +97 -0
- package/packages/ai/src/lib/promptGenerators/collapseNullableObjects.js.map +1 -0
- 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/generateEntityScenarioDataGenerator.js +17 -2
- package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js.map +1 -1
- package/packages/ai/src/lib/resolvePathToControllable.js +24 -14
- package/packages/ai/src/lib/resolvePathToControllable.js.map +1 -1
- package/packages/ai/src/lib/worker/SerializableDataStructure.js.map +1 -1
- package/packages/analyze/index.js +1 -0
- package/packages/analyze/index.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/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 +65 -7
- package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +17 -4
- package/packages/analyze/src/lib/files/analyze/analyzeEntities.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 +0 -3
- 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/TransformationTracer.js +880 -0
- package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js.map +1 -0
- package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js +56 -10
- package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js +33 -8
- package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +150 -17
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js +56 -8
- package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +399 -31
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.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/index.js +1 -0
- package/packages/analyze/src/lib/index.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/analysisBranchToDb.js +1 -1
- package/packages/database/src/lib/analysisBranchToDb.js.map +1 -1
- package/packages/database/src/lib/analysisToDb.js +1 -1
- package/packages/database/src/lib/analysisToDb.js.map +1 -1
- package/packages/database/src/lib/branchToDb.js +1 -1
- package/packages/database/src/lib/branchToDb.js.map +1 -1
- package/packages/database/src/lib/commitBranchToDb.js +1 -1
- package/packages/database/src/lib/commitBranchToDb.js.map +1 -1
- package/packages/database/src/lib/commitToDb.js +1 -1
- package/packages/database/src/lib/commitToDb.js.map +1 -1
- package/packages/database/src/lib/fileToDb.js +1 -1
- package/packages/database/src/lib/fileToDb.js.map +1 -1
- package/packages/database/src/lib/kysely/db.js +3 -0
- package/packages/database/src/lib/kysely/db.js.map +1 -1
- package/packages/database/src/lib/kysely/tables/labsRequestsTable.js +35 -0
- package/packages/database/src/lib/kysely/tables/labsRequestsTable.js.map +1 -0
- package/packages/database/src/lib/projectToDb.js +1 -1
- package/packages/database/src/lib/projectToDb.js.map +1 -1
- package/packages/database/src/lib/saveFiles.js +1 -1
- package/packages/database/src/lib/saveFiles.js.map +1 -1
- package/packages/database/src/lib/scenarioToDb.js +1 -1
- package/packages/database/src/lib/scenarioToDb.js.map +1 -1
- package/scripts/finalize-analyzer.cjs +8 -76
- package/codeyam-cli/src/webserver/build/client/assets/copy-Bb-80kDT.js +0 -6
- package/codeyam-cli/src/webserver/build/client/assets/file-code-Dhef1kWN.js +0 -6
- package/codeyam-cli/src/webserver/build/client/assets/globals-D3yhhV8x.css +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-7522edd4.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/memory-yxFcrxBX.js +0 -92
- package/codeyam-cli/src/webserver/build/client/assets/root-eVAaavTS.js +0 -62
- package/codeyam-cli/src/webserver/build/client/assets/settings-CS5f3WzT.js +0 -1
- package/codeyam-cli/src/webserver/build/server/assets/server-build-4Cr0uToj.js +0 -257
- package/codeyam-cli/templates/codeyam:diagnose.md +0 -803
- package/codeyam-cli/templates/codeyam:memory.md +0 -462
- package/codeyam-cli/templates/codeyam:new-rule.md +0 -13
|
@@ -101,27 +101,47 @@ export default function enrichArrayTypesFromChildSignatures(
|
|
|
101
101
|
): void => {
|
|
102
102
|
// Group by prop name (e.g., signature[0].survey.id, signature[0].survey.name -> "survey")
|
|
103
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> = {};
|
|
104
106
|
|
|
105
107
|
for (const [path, type] of Object.entries(schema)) {
|
|
106
108
|
// Match signature[0].propName.field or signature[0].propName[].field patterns
|
|
107
109
|
// The (?:\[\])? makes array props optional, handling both:
|
|
108
110
|
// - signature[0].survey.updatedAt (object prop)
|
|
109
111
|
// - signature[0].questionAnswers[].question.questionText (array prop)
|
|
110
|
-
const
|
|
111
|
-
if (
|
|
112
|
-
const [, propName, fieldPath] =
|
|
112
|
+
const nestedMatch = path.match(/^signature\[0\]\.(\w+)(?:\[\])?\.(.+)$/);
|
|
113
|
+
if (nestedMatch) {
|
|
114
|
+
const [, propName, fieldPath] = nestedMatch;
|
|
113
115
|
propGroups[propName] ||= {};
|
|
114
116
|
propGroups[propName][fieldPath] = type;
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
|
|
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;
|
|
115
126
|
}
|
|
116
127
|
}
|
|
117
128
|
|
|
118
|
-
// Store with the full signature path as key
|
|
129
|
+
// Store nested prop groups with the full signature path as key
|
|
119
130
|
for (const [propName, fields] of Object.entries(propGroups)) {
|
|
120
131
|
if (Object.keys(fields).length > 0) {
|
|
121
132
|
const signaturePath = `${entityName}().signature[0].${propName}`;
|
|
122
133
|
childSignatureFieldsByPath.set(signaturePath, { propName, fields });
|
|
123
134
|
}
|
|
124
135
|
}
|
|
136
|
+
|
|
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,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
125
145
|
};
|
|
126
146
|
|
|
127
147
|
// Process all schemas in dependencySchemas
|
|
@@ -187,15 +207,20 @@ export default function enrichArrayTypesFromChildSignatures(
|
|
|
187
207
|
for (const { filePath, entityName, arrayPath } of mockedArrayPaths) {
|
|
188
208
|
const schema = dependencySchemas[filePath][entityName].returnValueSchema;
|
|
189
209
|
|
|
190
|
-
// Check if this array already has element type definitions
|
|
210
|
+
// Check if this array already has INDEXED element type definitions (e.g., [0]: null)
|
|
191
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
|
|
192
213
|
const elementPathPrefix = `${arrayPath}[`;
|
|
193
|
-
const
|
|
194
|
-
path.startsWith(elementPathPrefix)
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
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
|
+
});
|
|
221
|
+
|
|
222
|
+
if (hasIndexedElementType) {
|
|
223
|
+
// Array already has indexed element type info (e.g., useAutoAnimate()[0]: null)
|
|
199
224
|
// Don't override it with child signature fields
|
|
200
225
|
continue;
|
|
201
226
|
}
|
|
@@ -218,7 +243,17 @@ export default function enrichArrayTypesFromChildSignatures(
|
|
|
218
243
|
|
|
219
244
|
// Check if this local variable could have come from this mocked function
|
|
220
245
|
// Use heuristics: name matching (getSurveys -> surveys, getUsers -> users)
|
|
221
|
-
if
|
|
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
|
+
// Full-path usageEquivalencies (e.g., from same-file child components) use
|
|
250
|
+
// the complete call path as the local var name, which matches arrayPath exactly
|
|
251
|
+
const exactPathMatch = localVarName === arrayPath;
|
|
252
|
+
if (
|
|
253
|
+
!exactPathMatch &&
|
|
254
|
+
!couldBeDerivedFrom(localVarName, entityName) &&
|
|
255
|
+
!arrayEndsWithLocalVar
|
|
256
|
+
) {
|
|
222
257
|
continue;
|
|
223
258
|
}
|
|
224
259
|
|
|
@@ -257,8 +292,21 @@ export default function enrichArrayTypesFromChildSignatures(
|
|
|
257
292
|
|
|
258
293
|
for (const [fieldPath, type] of Object.entries(matchedFields)) {
|
|
259
294
|
const fullPath = `${elementPath}.${fieldPath}`;
|
|
260
|
-
|
|
295
|
+
const existingType = schema[fullPath];
|
|
296
|
+
if (!existingType) {
|
|
261
297
|
schema[fullPath] = type;
|
|
298
|
+
} else {
|
|
299
|
+
// Prefer the more specific (narrower) type
|
|
300
|
+
const existingIsOptional =
|
|
301
|
+
existingType.includes('| undefined') ||
|
|
302
|
+
existingType.includes('| null');
|
|
303
|
+
const newIsOptional =
|
|
304
|
+
type.includes('| undefined') || type.includes('| null');
|
|
305
|
+
if (existingIsOptional && !newIsOptional) {
|
|
306
|
+
// Use the new type - it's more specific
|
|
307
|
+
schema[fullPath] = type;
|
|
308
|
+
}
|
|
309
|
+
// Otherwise keep existing (same specificity or existing is more specific)
|
|
262
310
|
}
|
|
263
311
|
}
|
|
264
312
|
}
|
|
@@ -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,33 @@ 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
|
+
//
|
|
578
|
+
// IMPORTANT: We must preprocess schemas BEFORE building indexes!
|
|
579
|
+
// The schemas contain .functionCallReturnValue paths that get stripped during processing.
|
|
580
|
+
// If we build indexes from original paths, lookups with preprocessed paths will fail.
|
|
581
|
+
// Example: 'hook().functionCallReturnValue.x.length' → index maps 'hook().functionCallReturnValue.x' → ['length']
|
|
582
|
+
// But preprocessed path 'hook().x.length' looks for 'hook().x' which doesn't exist in the index.
|
|
583
|
+
const allSchemaKeys: Record<string, string> = {};
|
|
584
|
+
if (dependencySchemas) {
|
|
585
|
+
for (const filePath in dependencySchemas) {
|
|
586
|
+
for (const entityName in dependencySchemas[filePath]) {
|
|
587
|
+
const schema =
|
|
588
|
+
dependencySchemas[filePath][entityName]?.returnValueSchema;
|
|
589
|
+
if (schema) {
|
|
590
|
+
// Preprocess each schema to remove .functionCallReturnValue before collecting
|
|
591
|
+
const preprocessed = preprocessSchemaForMocks(schema);
|
|
592
|
+
Object.assign(allSchemaKeys, preprocessed);
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
const prebuiltIndexes =
|
|
598
|
+
Object.keys(allSchemaKeys).length > 0
|
|
599
|
+
? buildSchemaIndexes(allSchemaKeys)
|
|
600
|
+
: undefined;
|
|
601
|
+
|
|
571
602
|
// Track the global index for each hook name across all imports
|
|
572
603
|
// This enables canonical keys like EntityName::useLoaderData::0, EntityName::useFetcher::0, etc.
|
|
573
604
|
const hookCallIndices: Record<string, number> = {};
|
|
@@ -653,6 +684,7 @@ export default function gatherDataForMocks(
|
|
|
653
684
|
undefined,
|
|
654
685
|
options,
|
|
655
686
|
hookCallIndex,
|
|
687
|
+
prebuiltIndexes,
|
|
656
688
|
);
|
|
657
689
|
|
|
658
690
|
if (processResult) {
|
|
@@ -717,6 +749,7 @@ export default function gatherDataForMocks(
|
|
|
717
749
|
occurrence,
|
|
718
750
|
options,
|
|
719
751
|
hookCallIndex,
|
|
752
|
+
prebuiltIndexes,
|
|
720
753
|
);
|
|
721
754
|
if (processResult) {
|
|
722
755
|
addResultToAccumulator(acc, processResult.key, processResult.value);
|
|
@@ -749,6 +782,7 @@ export default function gatherDataForMocks(
|
|
|
749
782
|
undefined,
|
|
750
783
|
options,
|
|
751
784
|
hookCallIndex,
|
|
785
|
+
prebuiltIndexes,
|
|
752
786
|
);
|
|
753
787
|
|
|
754
788
|
if (processResult) {
|
|
@@ -769,6 +803,7 @@ export default function gatherDataForMocks(
|
|
|
769
803
|
undefined,
|
|
770
804
|
options,
|
|
771
805
|
hookCallIndex,
|
|
806
|
+
prebuiltIndexes,
|
|
772
807
|
);
|
|
773
808
|
|
|
774
809
|
// Check if we got a meaningful result (not empty object or null)
|
|
@@ -813,6 +848,7 @@ export default function gatherDataForMocks(
|
|
|
813
848
|
0, // Use 0 to trigger variable-qualified lookup
|
|
814
849
|
options,
|
|
815
850
|
hookCallIndex,
|
|
851
|
+
prebuiltIndexes,
|
|
816
852
|
);
|
|
817
853
|
if (varQualifiedResult && varQualifiedResult.value) {
|
|
818
854
|
mergedValue = mergeJsonTypeDefinitions(
|
|
@@ -849,6 +885,7 @@ export default function gatherDataForMocks(
|
|
|
849
885
|
0, // Use 0 to trigger variable-qualified lookup
|
|
850
886
|
options,
|
|
851
887
|
hookCallIndex,
|
|
888
|
+
prebuiltIndexes,
|
|
852
889
|
);
|
|
853
890
|
if (varQualifiedResult && varQualifiedResult.value) {
|
|
854
891
|
// Deep merge the value into the accumulated result
|
|
@@ -16,6 +16,8 @@ import { awsLog } from '~codeyam/utils';
|
|
|
16
16
|
import gatherDataForMocks from './gatherDataForMocks';
|
|
17
17
|
import enrichArrayTypesFromChildSignatures from './enrichArrayTypesFromChildSignatures';
|
|
18
18
|
import enrichUnknownTypesFromSourceEquivalencies from './enrichUnknownTypesFromSourceEquivalencies';
|
|
19
|
+
import { transformationTracer } from './TransformationTracer';
|
|
20
|
+
// import propagateArrayItemSchemas from './propagateArrayItemSchemas';
|
|
19
21
|
export interface GenerateDataStructureArgs {
|
|
20
22
|
entity: Entity;
|
|
21
23
|
dependentAnalyses: ReadonlyAnalysisMap;
|
|
@@ -162,6 +164,25 @@ export default function generateDataStructure({
|
|
|
162
164
|
return acc;
|
|
163
165
|
}, {} as ReadonlyAnalysisMap);
|
|
164
166
|
|
|
167
|
+
// Include same-file child components in nonMockedDependentAnalyses.
|
|
168
|
+
// Same-file components (e.g., AgentCard defined in the same file as AgentTranscriptsPage)
|
|
169
|
+
// are NOT in importedExports, so the reduce above never includes them.
|
|
170
|
+
// But they ARE in dependentAnalyses and their full signatureSchema (with all prop fields)
|
|
171
|
+
// needs to be merged into the parent's dependencySchemas for array enrichment to work.
|
|
172
|
+
|
|
173
|
+
const sameFileAnalyses = dependentAnalyses[entity.filePath];
|
|
174
|
+
if (sameFileAnalyses) {
|
|
175
|
+
for (const name in sameFileAnalyses) {
|
|
176
|
+
if (name === entity.name) continue;
|
|
177
|
+
if (nonMockedDependentAnalyses[entity.filePath]?.[name]) continue;
|
|
178
|
+
const childAnalysis = sameFileAnalyses[name];
|
|
179
|
+
if (childAnalysis?.entityType === 'visual') {
|
|
180
|
+
nonMockedDependentAnalyses[entity.filePath] ||= {};
|
|
181
|
+
nonMockedDependentAnalyses[entity.filePath][name] = childAnalysis;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
165
186
|
// For non-mocked child components (like visual components), include their mocked
|
|
166
187
|
// dependencies in allImportedExports. This ensures that when a parent component
|
|
167
188
|
// renders a child that uses the same hook with different destructure patterns,
|
|
@@ -440,6 +461,18 @@ export default function generateDataStructure({
|
|
|
440
461
|
|
|
441
462
|
const { isolatedDataStructure } = entity.metadata;
|
|
442
463
|
|
|
464
|
+
// Transformation tracing: start entity and capture isolated data structure
|
|
465
|
+
transformationTracer.startEntity({
|
|
466
|
+
name: entity.name,
|
|
467
|
+
entityType: entity.entityType,
|
|
468
|
+
filePath: entity.filePath,
|
|
469
|
+
});
|
|
470
|
+
transformationTracer.snapshot(entity.name, 'isolated', {
|
|
471
|
+
signatureSchema: isolatedDataStructure.signatureSchema,
|
|
472
|
+
returnValueSchema: isolatedDataStructure.returnValueSchema,
|
|
473
|
+
dependencySchemas: isolatedDataStructure.dependencySchemas,
|
|
474
|
+
});
|
|
475
|
+
|
|
443
476
|
const mergedDataStructure = mergeInDependentDataStructure({
|
|
444
477
|
importedExports: allImportedExports,
|
|
445
478
|
dependentAnalyses: nonMockedDependentAnalyses,
|
|
@@ -457,6 +490,13 @@ export default function generateDataStructure({
|
|
|
457
490
|
mergedDataStructure.environmentVariables =
|
|
458
491
|
isolatedDataStructure.environmentVariables || [];
|
|
459
492
|
|
|
493
|
+
// Transformation tracing: capture merged data structure
|
|
494
|
+
transformationTracer.snapshot(entity.name, 'merged', {
|
|
495
|
+
signatureSchema: mergedDataStructure.signatureSchema,
|
|
496
|
+
returnValueSchema: mergedDataStructure.returnValueSchema,
|
|
497
|
+
dependencySchemas: mergedDataStructure.dependencySchemas,
|
|
498
|
+
});
|
|
499
|
+
|
|
460
500
|
// Merge collected child dependency schemas into mergedDataStructure.
|
|
461
501
|
// This ensures that when gatherDataForMocks looks up schemas for child imports,
|
|
462
502
|
// the child's schemas are available.
|
|
@@ -469,11 +509,34 @@ export default function generateDataStructure({
|
|
|
469
509
|
|
|
470
510
|
if (existingSchema) {
|
|
471
511
|
// Merge schemas - child schemas add to parent schemas
|
|
512
|
+
// But prefer more specific types (without | undefined) when both exist
|
|
513
|
+
const mergedSignatureSchema = { ...existingSchema.signatureSchema };
|
|
514
|
+
for (const path in childSchema.signatureSchema) {
|
|
515
|
+
const existingType = mergedSignatureSchema[path];
|
|
516
|
+
const childType = childSchema.signatureSchema[path];
|
|
517
|
+
if (!existingType) {
|
|
518
|
+
mergedSignatureSchema[path] = childType;
|
|
519
|
+
} else {
|
|
520
|
+
// Prefer the more specific (narrower) type
|
|
521
|
+
const existingIsOptional =
|
|
522
|
+
existingType.includes('| undefined') ||
|
|
523
|
+
existingType.includes('| null');
|
|
524
|
+
const childIsOptional =
|
|
525
|
+
childType.includes('| undefined') ||
|
|
526
|
+
childType.includes('| null');
|
|
527
|
+
if (childIsOptional && !existingIsOptional) {
|
|
528
|
+
// Keep existing - it's more specific
|
|
529
|
+
} else if (!childIsOptional && existingIsOptional) {
|
|
530
|
+
// Use child - it's more specific
|
|
531
|
+
mergedSignatureSchema[path] = childType;
|
|
532
|
+
} else {
|
|
533
|
+
// Same specificity - use child (original behavior)
|
|
534
|
+
mergedSignatureSchema[path] = childType;
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
}
|
|
472
538
|
mergedDataStructure.dependencySchemas[schemaFilePath][schemaName] = {
|
|
473
|
-
signatureSchema:
|
|
474
|
-
...existingSchema.signatureSchema,
|
|
475
|
-
...childSchema.signatureSchema,
|
|
476
|
-
},
|
|
539
|
+
signatureSchema: mergedSignatureSchema,
|
|
477
540
|
returnValueSchema: mergeJsonTypeDefinitions(
|
|
478
541
|
existingSchema.returnValueSchema as Record<string, unknown>,
|
|
479
542
|
childSchema.returnValueSchema as Record<string, unknown>,
|
|
@@ -487,6 +550,13 @@ export default function generateDataStructure({
|
|
|
487
550
|
}
|
|
488
551
|
}
|
|
489
552
|
|
|
553
|
+
// Transformation tracing: capture after child schemas merged
|
|
554
|
+
transformationTracer.snapshot(entity.name, 'childSchemasMerged', {
|
|
555
|
+
signatureSchema: mergedDataStructure.signatureSchema,
|
|
556
|
+
returnValueSchema: mergedDataStructure.returnValueSchema,
|
|
557
|
+
dependencySchemas: mergedDataStructure.dependencySchemas,
|
|
558
|
+
});
|
|
559
|
+
|
|
490
560
|
// console.info(
|
|
491
561
|
// 'CODEYAM DEBUG: end merge',
|
|
492
562
|
// JSON.stringify(
|
|
@@ -509,32 +579,111 @@ export default function generateDataStructure({
|
|
|
509
579
|
|
|
510
580
|
// Deduplicate function schemas in the merged data structure
|
|
511
581
|
// The merge process might introduce duplicates even if individual schemas were clean
|
|
582
|
+
// Trace deduplication of signatureSchema
|
|
583
|
+
const sigBefore = { ...mergedDataStructure.signatureSchema };
|
|
512
584
|
mergedDataStructure.signatureSchema = deduplicateFunctionSchemas(
|
|
513
585
|
mergedDataStructure.signatureSchema,
|
|
514
586
|
);
|
|
587
|
+
transformationTracer.traceSchemaTransformResult(
|
|
588
|
+
entity.name,
|
|
589
|
+
'deduplicateFunctionSchemas',
|
|
590
|
+
sigBefore,
|
|
591
|
+
mergedDataStructure.signatureSchema,
|
|
592
|
+
{ schemaType: 'signature' },
|
|
593
|
+
);
|
|
594
|
+
|
|
595
|
+
// Trace deduplication of returnValueSchema
|
|
596
|
+
const rvBefore = { ...mergedDataStructure.returnValueSchema };
|
|
515
597
|
mergedDataStructure.returnValueSchema = deduplicateFunctionSchemas(
|
|
516
598
|
mergedDataStructure.returnValueSchema,
|
|
517
599
|
);
|
|
600
|
+
transformationTracer.traceSchemaTransformResult(
|
|
601
|
+
entity.name,
|
|
602
|
+
'deduplicateFunctionSchemas',
|
|
603
|
+
rvBefore,
|
|
604
|
+
mergedDataStructure.returnValueSchema,
|
|
605
|
+
{ schemaType: 'returnValue' },
|
|
606
|
+
);
|
|
518
607
|
|
|
519
|
-
// Also deduplicate dependency schemas
|
|
608
|
+
// Also deduplicate dependency schemas and clear known attributes
|
|
520
609
|
for (const filePath in mergedDataStructure.dependencySchemas) {
|
|
521
|
-
for (const
|
|
610
|
+
for (const depEntityName in mergedDataStructure.dependencySchemas[
|
|
522
611
|
filePath
|
|
523
612
|
]) {
|
|
524
613
|
const depSchema =
|
|
525
|
-
mergedDataStructure.dependencySchemas[filePath][
|
|
614
|
+
mergedDataStructure.dependencySchemas[filePath][depEntityName];
|
|
615
|
+
|
|
616
|
+
// Trace deduplication of dependency signatureSchema
|
|
617
|
+
const depSigBefore = { ...depSchema.signatureSchema };
|
|
526
618
|
depSchema.signatureSchema = deduplicateFunctionSchemas(
|
|
527
619
|
depSchema.signatureSchema,
|
|
528
620
|
);
|
|
621
|
+
transformationTracer.traceSchemaTransformResult(
|
|
622
|
+
entity.name,
|
|
623
|
+
'deduplicateFunctionSchemas',
|
|
624
|
+
depSigBefore,
|
|
625
|
+
depSchema.signatureSchema,
|
|
626
|
+
{ filePath, dependencyName: depEntityName, schemaType: 'signature' },
|
|
627
|
+
);
|
|
628
|
+
|
|
629
|
+
// Trace deduplication of dependency returnValueSchema
|
|
630
|
+
const depRvBefore = { ...depSchema.returnValueSchema };
|
|
529
631
|
depSchema.returnValueSchema = deduplicateFunctionSchemas(
|
|
530
632
|
depSchema.returnValueSchema,
|
|
531
633
|
);
|
|
634
|
+
transformationTracer.traceSchemaTransformResult(
|
|
635
|
+
entity.name,
|
|
636
|
+
'deduplicateFunctionSchemas',
|
|
637
|
+
depRvBefore,
|
|
638
|
+
depSchema.returnValueSchema,
|
|
639
|
+
{
|
|
640
|
+
filePath,
|
|
641
|
+
dependencyName: depEntityName,
|
|
642
|
+
schemaType: 'returnValue',
|
|
643
|
+
},
|
|
644
|
+
);
|
|
532
645
|
|
|
533
|
-
|
|
534
|
-
|
|
646
|
+
// Fill in type gaps BEFORE clearing attributes, so evidence like .includes()
|
|
647
|
+
// is used for type inference before being deleted
|
|
648
|
+
|
|
649
|
+
depSchema.signatureSchema = fillInDirectSchemaGapsAndUnknowns({
|
|
650
|
+
schema: depSchema.signatureSchema,
|
|
651
|
+
});
|
|
652
|
+
|
|
653
|
+
depSchema.returnValueSchema = fillInDirectSchemaGapsAndUnknowns({
|
|
654
|
+
schema: depSchema.returnValueSchema,
|
|
655
|
+
});
|
|
656
|
+
|
|
657
|
+
// Trace clearAttributesFromMapping on dependency schemas
|
|
658
|
+
transformationTracer.traceSchemaTransform(
|
|
659
|
+
entity.name,
|
|
660
|
+
'clearAttributesFromMapping',
|
|
661
|
+
depSchema.signatureSchema,
|
|
662
|
+
clearAttributesFromMapping,
|
|
663
|
+
{ filePath, dependencyName: depEntityName, schemaType: 'signature' },
|
|
664
|
+
);
|
|
665
|
+
|
|
666
|
+
transformationTracer.traceSchemaTransform(
|
|
667
|
+
entity.name,
|
|
668
|
+
'clearAttributesFromMapping',
|
|
669
|
+
depSchema.returnValueSchema,
|
|
670
|
+
clearAttributesFromMapping,
|
|
671
|
+
{
|
|
672
|
+
filePath,
|
|
673
|
+
dependencyName: depEntityName,
|
|
674
|
+
schemaType: 'returnValue',
|
|
675
|
+
},
|
|
676
|
+
);
|
|
535
677
|
}
|
|
536
678
|
}
|
|
537
679
|
|
|
680
|
+
// Transformation tracing: capture after deduplication
|
|
681
|
+
transformationTracer.snapshot(entity.name, 'deduplicated', {
|
|
682
|
+
signatureSchema: mergedDataStructure.signatureSchema,
|
|
683
|
+
returnValueSchema: mergedDataStructure.returnValueSchema,
|
|
684
|
+
dependencySchemas: mergedDataStructure.dependencySchemas,
|
|
685
|
+
});
|
|
686
|
+
|
|
538
687
|
analysis.metadata ||= {};
|
|
539
688
|
analysis.metadata.mergedDataStructure = mergedDataStructure;
|
|
540
689
|
|
|
@@ -543,29 +692,70 @@ export default function generateDataStructure({
|
|
|
543
692
|
// expects survey.updatedAt, the array element type includes updatedAt.
|
|
544
693
|
// Uses usageEquivalencies to trace data flow and only enrich arrays with fields
|
|
545
694
|
// from children that actually receive elements from that specific array.
|
|
546
|
-
|
|
547
|
-
|
|
695
|
+
transformationTracer.traceDependencySchemaChanges(
|
|
696
|
+
entity.name,
|
|
697
|
+
'enrichArrayTypesFromChildSignatures',
|
|
548
698
|
mergedDataStructure.dependencySchemas,
|
|
549
|
-
|
|
699
|
+
() =>
|
|
700
|
+
enrichArrayTypesFromChildSignatures(
|
|
701
|
+
allImportedExports,
|
|
702
|
+
mergedDataStructure.dependencySchemas,
|
|
703
|
+
mergedDataStructure.usageEquivalencies,
|
|
704
|
+
),
|
|
550
705
|
);
|
|
551
706
|
|
|
707
|
+
// Transformation tracing: capture after array types enriched
|
|
708
|
+
transformationTracer.snapshot(entity.name, 'arrayTypesEnriched', {
|
|
709
|
+
signatureSchema: mergedDataStructure.signatureSchema,
|
|
710
|
+
returnValueSchema: mergedDataStructure.returnValueSchema,
|
|
711
|
+
dependencySchemas: mergedDataStructure.dependencySchemas,
|
|
712
|
+
});
|
|
713
|
+
|
|
552
714
|
// Enrich mocked dependency unknown types using sourceEquivalencies
|
|
553
715
|
// When a mocked dependency returns unknown, but that data flows to a child component
|
|
554
716
|
// with a known type, propagate the type back to the mocked dependency.
|
|
555
717
|
// This prevents fillInDirectSchemaGapsAndUnknowns from guessing incorrectly
|
|
556
718
|
// (e.g., 'data' becoming 'number' because pluralize thinks it's plural)
|
|
557
|
-
|
|
558
|
-
|
|
719
|
+
transformationTracer.traceDependencySchemaChanges(
|
|
720
|
+
entity.name,
|
|
721
|
+
'enrichUnknownTypesFromSourceEquivalencies',
|
|
559
722
|
mergedDataStructure.dependencySchemas,
|
|
560
|
-
|
|
723
|
+
() =>
|
|
724
|
+
enrichUnknownTypesFromSourceEquivalencies(
|
|
725
|
+
isolatedDataStructure.dependencySchemas || {},
|
|
726
|
+
mergedDataStructure.dependencySchemas,
|
|
727
|
+
allImportedExports,
|
|
728
|
+
),
|
|
561
729
|
);
|
|
562
730
|
|
|
731
|
+
// Transformation tracing: capture after unknown types enriched
|
|
732
|
+
transformationTracer.snapshot(entity.name, 'unknownTypesEnriched', {
|
|
733
|
+
signatureSchema: mergedDataStructure.signatureSchema,
|
|
734
|
+
returnValueSchema: mergedDataStructure.returnValueSchema,
|
|
735
|
+
dependencySchemas: mergedDataStructure.dependencySchemas,
|
|
736
|
+
});
|
|
737
|
+
|
|
738
|
+
// DISABLED: Testing if ternary fix eliminates the need for this heuristic
|
|
739
|
+
// Propagate array item schemas between arrays that likely have the same type.
|
|
740
|
+
// When one array (e.g., entities) has item schema traced but another similar array
|
|
741
|
+
// (e.g., currentEntities) doesn't (because it's only used in an OR expression fallback),
|
|
742
|
+
// copy the item schema from the rich array to the empty one.
|
|
743
|
+
// propagateArrayItemSchemas(mergedDataStructure.dependencySchemas);
|
|
744
|
+
|
|
563
745
|
let dataForMocks = gatherDataForMocks(
|
|
564
746
|
allImportedExports,
|
|
565
747
|
mergedDataStructure.dependencySchemas,
|
|
566
748
|
{ entityName: entity.name },
|
|
567
749
|
);
|
|
568
750
|
|
|
751
|
+
// Transformation tracing: capture after dataForMocks gathered
|
|
752
|
+
transformationTracer.snapshot(entity.name, 'dataForMocksGathered', {
|
|
753
|
+
signatureSchema: mergedDataStructure.signatureSchema,
|
|
754
|
+
returnValueSchema: mergedDataStructure.returnValueSchema,
|
|
755
|
+
dependencySchemas: mergedDataStructure.dependencySchemas,
|
|
756
|
+
dataForMocks,
|
|
757
|
+
});
|
|
758
|
+
|
|
569
759
|
// Merge dataForMocks from non-mocked child analyses to include transitive dependency data.
|
|
570
760
|
// This handles cases where grandchild trpc calls aren't in allImportedExports because
|
|
571
761
|
// the grandchild's analysis wasn't in dependentAnalyses.
|
|
@@ -587,11 +777,25 @@ export default function generateDataStructure({
|
|
|
587
777
|
}
|
|
588
778
|
}
|
|
589
779
|
|
|
590
|
-
const finalizedArgumentsSchema =
|
|
591
|
-
schema: { ...mergedDataStructure.signatureSchema },
|
|
592
|
-
});
|
|
780
|
+
const finalizedArgumentsSchema = { ...mergedDataStructure.signatureSchema };
|
|
593
781
|
|
|
594
|
-
|
|
782
|
+
// Trace fillInDirectSchemaGapsAndUnknowns
|
|
783
|
+
transformationTracer.traceSchemaTransform(
|
|
784
|
+
entity.name,
|
|
785
|
+
'fillInDirectSchemaGapsAndUnknowns',
|
|
786
|
+
finalizedArgumentsSchema,
|
|
787
|
+
(schema) => fillInDirectSchemaGapsAndUnknowns({ schema }),
|
|
788
|
+
{ stage: 'finalization' },
|
|
789
|
+
);
|
|
790
|
+
|
|
791
|
+
// Trace clearAttributesFromMapping
|
|
792
|
+
transformationTracer.traceSchemaTransform(
|
|
793
|
+
entity.name,
|
|
794
|
+
'clearAttributesFromMapping',
|
|
795
|
+
finalizedArgumentsSchema,
|
|
796
|
+
clearAttributesFromMapping,
|
|
797
|
+
{ stage: 'finalization' },
|
|
798
|
+
);
|
|
595
799
|
|
|
596
800
|
const argumentsSchema = convertDotNotation(finalizedArgumentsSchema)
|
|
597
801
|
.signature as JsonTypeDefinition[];
|
|
@@ -601,6 +805,12 @@ export default function generateDataStructure({
|
|
|
601
805
|
dataForMocks,
|
|
602
806
|
};
|
|
603
807
|
|
|
808
|
+
// Transformation tracing: capture final scenariosDataStructure
|
|
809
|
+
transformationTracer.snapshot(entity.name, 'finalized', {
|
|
810
|
+
signatureSchema: finalizedArgumentsSchema,
|
|
811
|
+
dataForMocks,
|
|
812
|
+
});
|
|
813
|
+
|
|
604
814
|
return analysis;
|
|
605
815
|
} catch (e) {
|
|
606
816
|
awsLog('CodeYam Error: Error generating data structure', {
|