@codeyam/codeyam-cli 0.1.0-staging.323686 → 0.1.0-staging.39719f5
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 +25 -25
- package/analyzer-template/packages/ai/index.ts +7 -1
- package/analyzer-template/packages/ai/package.json +3 -3
- package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +62 -18
- package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +101 -12
- 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/completionCall.ts +114 -113
- package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +1286 -262
- package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/ParentScopeManager.ts +10 -3
- 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 +47 -9
- 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/coercePrimitivesToArraysBySchema.ts +62 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.ts +140 -14
- 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/dataStructure/helpers/stripNullableMarkers.ts +35 -0
- package/analyzer-template/packages/ai/src/lib/dataStructureChunking.ts +40 -13
- package/analyzer-template/packages/ai/src/lib/generateEntityDataStructure.ts +58 -3
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +393 -8
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarios.ts +9 -5
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +112 -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 +6 -1
- package/analyzer-template/packages/analyze/src/lib/FileAnalyzer.ts +65 -59
- package/analyzer-template/packages/analyze/src/lib/ProjectAnalyzer.ts +132 -33
- package/analyzer-template/packages/analyze/src/lib/asts/index.ts +7 -2
- package/analyzer-template/packages/analyze/src/lib/asts/nodes/getNodeType.ts +1 -0
- 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 +117 -11
- package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +32 -40
- package/analyzer-template/packages/analyze/src/lib/files/analyze/dependencyResolver.ts +0 -6
- package/analyzer-template/packages/analyze/src/lib/files/analyze/findOrCreateEntity.ts +22 -6
- package/analyzer-template/packages/analyze/src/lib/files/analyze/gatherEntityMap.ts +13 -14
- package/analyzer-template/packages/analyze/src/lib/files/analyze/trackEntityCircularDependencies.ts +21 -0
- package/analyzer-template/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.ts +82 -13
- package/analyzer-template/packages/analyze/src/lib/files/analyzeChange.ts +4 -0
- package/analyzer-template/packages/analyze/src/lib/files/analyzeInitial.ts +4 -0
- package/analyzer-template/packages/analyze/src/lib/files/analyzeNextRoute.ts +8 -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 +1352 -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 +87 -25
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +498 -28
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.ts +19 -9
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +760 -100
- 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 +10 -10
- package/analyzer-template/packages/database/index.ts +1 -0
- package/analyzer-template/packages/database/package.json +4 -4
- 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 +14 -0
- package/analyzer-template/packages/database/src/lib/kysely/tables/debugReportsTable.ts +1 -1
- package/analyzer-template/packages/database/src/lib/kysely/tables/editorScenariosTable.ts +164 -0
- package/analyzer-template/packages/database/src/lib/kysely/tables/labsRequestsTable.ts +52 -0
- package/analyzer-template/packages/database/src/lib/loadAnalysis.ts +19 -15
- package/analyzer-template/packages/database/src/lib/loadCommits.ts +31 -20
- package/analyzer-template/packages/database/src/lib/loadEntities.ts +0 -6
- package/analyzer-template/packages/database/src/lib/loadEntity.ts +19 -8
- package/analyzer-template/packages/database/src/lib/loadReadyToBeCapturedAnalyses.ts +0 -5
- 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/updateCommitMetadata.ts +94 -143
- package/analyzer-template/packages/database/src/lib/updateFreshAnalysisStatus.ts +58 -42
- package/analyzer-template/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.ts +81 -65
- package/analyzer-template/packages/database/src/lib/userScenarioToDb.ts +1 -1
- package/analyzer-template/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.ts +29 -1
- package/analyzer-template/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.ts +33 -5
- package/analyzer-template/packages/github/dist/database/index.d.ts +1 -0
- package/analyzer-template/packages/github/dist/database/index.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/index.js +1 -0
- package/analyzer-template/packages/github/dist/database/index.js.map +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 +4 -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 +8 -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/editorScenariosTable.d.ts +29 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts.map +1 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js +149 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -0
- 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/kysely/tables/scenariosTable.d.ts +5 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts.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 +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.js.map +1 -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 +23 -13
- 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.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js +0 -6
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntity.d.ts +4 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntity.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntity.js +5 -5
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntity.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js +1 -4
- package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
- 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/database/src/lib/updateCommitMetadata.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js +76 -90
- package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.js +41 -30
- package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.js +68 -57
- package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.js.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +29 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +33 -5
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.d.ts +2 -0
- package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.js +2 -0
- package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.js.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts +8 -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/Scenario.d.ts +10 -0
- package/analyzer-template/packages/github/dist/types/src/types/Scenario.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 +2 -2
- package/analyzer-template/packages/types/src/enums/ProjectFramework.ts +2 -0
- package/analyzer-template/packages/types/src/types/ProjectMetadata.ts +8 -0
- package/analyzer-template/packages/types/src/types/Scenario.ts +10 -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/ui-components/package.json +1 -1
- package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.d.ts +2 -0
- package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.js +2 -0
- package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.js.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts +8 -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/Scenario.d.ts +10 -0
- package/analyzer-template/packages/utils/dist/types/src/types/Scenario.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/packages/utils/dist/utils/src/lib/fs/rsyncCopy.d.ts +3 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js +120 -4
- package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js.map +1 -1
- package/analyzer-template/packages/utils/src/lib/fs/rsyncCopy.ts +148 -3
- package/analyzer-template/playwright/captureFromUrl.ts +89 -82
- package/analyzer-template/project/analyzeFileEntities.ts +26 -0
- package/analyzer-template/project/constructMockCode.ts +260 -60
- package/analyzer-template/project/orchestrateCapture.ts +4 -1
- package/analyzer-template/project/reconcileMockDataKeys.ts +19 -14
- package/analyzer-template/project/start.ts +3 -0
- package/analyzer-template/project/startScenarioCapture.ts +9 -0
- package/analyzer-template/project/writeClientLogRoute.ts +125 -0
- package/analyzer-template/project/writeMockDataTsx.ts +198 -8
- package/analyzer-template/project/writeScenarioComponents.ts +170 -29
- package/analyzer-template/project/writeSimpleRoot.ts +21 -11
- package/analyzer-template/tsconfig.json +13 -1
- 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/analyzeFileEntities.js +22 -0
- package/background/src/lib/virtualized/project/analyzeFileEntities.js.map +1 -1
- package/background/src/lib/virtualized/project/constructMockCode.js +220 -45
- package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
- package/background/src/lib/virtualized/project/orchestrateCapture.js +4 -1
- package/background/src/lib/virtualized/project/orchestrateCapture.js.map +1 -1
- package/background/src/lib/virtualized/project/reconcileMockDataKeys.js +17 -11
- package/background/src/lib/virtualized/project/reconcileMockDataKeys.js.map +1 -1
- package/background/src/lib/virtualized/project/start.js +2 -0
- package/background/src/lib/virtualized/project/start.js.map +1 -1
- package/background/src/lib/virtualized/project/startScenarioCapture.js +5 -0
- package/background/src/lib/virtualized/project/startScenarioCapture.js.map +1 -1
- package/background/src/lib/virtualized/project/writeClientLogRoute.js +110 -0
- package/background/src/lib/virtualized/project/writeClientLogRoute.js.map +1 -0
- package/background/src/lib/virtualized/project/writeMockDataTsx.js +174 -4
- package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
- package/background/src/lib/virtualized/project/writeScenarioComponents.js +143 -27
- 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 +386 -9
- package/codeyam-cli/scripts/apply-setup.js.map +1 -1
- package/codeyam-cli/src/__tests__/memory-scripts/filter-session.test.js +196 -0
- package/codeyam-cli/src/__tests__/memory-scripts/filter-session.test.js.map +1 -0
- package/codeyam-cli/src/__tests__/memory-scripts/read-json-field.test.js +114 -0
- package/codeyam-cli/src/__tests__/memory-scripts/read-json-field.test.js.map +1 -0
- package/codeyam-cli/src/__tests__/memory-scripts/ripgrep-fallback.test.js +149 -0
- package/codeyam-cli/src/__tests__/memory-scripts/ripgrep-fallback.test.js.map +1 -0
- package/codeyam-cli/src/cli.js +57 -24
- 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/__tests__/editor.auditNoAutoAnalysis.test.js +63 -0
- package/codeyam-cli/src/commands/__tests__/editor.auditNoAutoAnalysis.test.js.map +1 -0
- package/codeyam-cli/src/commands/__tests__/editor.isolateArgs.test.js +51 -0
- package/codeyam-cli/src/commands/__tests__/editor.isolateArgs.test.js.map +1 -0
- package/codeyam-cli/src/commands/__tests__/editor.stepDispatch.test.js +56 -0
- package/codeyam-cli/src/commands/__tests__/editor.stepDispatch.test.js.map +1 -0
- package/codeyam-cli/src/commands/__tests__/init.gitignore.test.js +101 -47
- package/codeyam-cli/src/commands/__tests__/init.gitignore.test.js.map +1 -1
- package/codeyam-cli/src/commands/analyze.js +21 -9
- 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 +44 -21
- package/codeyam-cli/src/commands/default.js.map +1 -1
- package/codeyam-cli/src/commands/editor.js +5540 -0
- package/codeyam-cli/src/commands/editor.js.map +1 -0
- package/codeyam-cli/src/commands/editorIsolateArgs.js +25 -0
- package/codeyam-cli/src/commands/editorIsolateArgs.js.map +1 -0
- package/codeyam-cli/src/commands/init.js +148 -292
- package/codeyam-cli/src/commands/init.js.map +1 -1
- package/codeyam-cli/src/commands/memory.js +97 -92
- 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/telemetry.js +37 -0
- package/codeyam-cli/src/commands/telemetry.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/data/techStacks.js +77 -0
- package/codeyam-cli/src/data/techStacks.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/analyzerFinalization.test.js +173 -0
- package/codeyam-cli/src/utils/__tests__/analyzerFinalization.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/backgroundServer.test.js +46 -0
- package/codeyam-cli/src/utils/__tests__/backgroundServer.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/devServerState.test.js +134 -0
- package/codeyam-cli/src/utils/__tests__/devServerState.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorApi.test.js +137 -0
- package/codeyam-cli/src/utils/__tests__/editorApi.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorAudit.test.js +3912 -0
- package/codeyam-cli/src/utils/__tests__/editorAudit.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorBroadcastViewport.test.js +76 -0
- package/codeyam-cli/src/utils/__tests__/editorBroadcastViewport.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorCapture.test.js +93 -0
- package/codeyam-cli/src/utils/__tests__/editorCapture.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorCaptureScenarioSeeding.test.js +137 -0
- package/codeyam-cli/src/utils/__tests__/editorCaptureScenarioSeeding.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorDeleteScenario.test.js +100 -0
- package/codeyam-cli/src/utils/__tests__/editorDeleteScenario.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js +304 -0
- package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorEntityChangeStatus.test.js +194 -0
- package/codeyam-cli/src/utils/__tests__/editorEntityChangeStatus.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorEntityHelpers.test.js +381 -0
- package/codeyam-cli/src/utils/__tests__/editorEntityHelpers.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorGuardMiddleware.test.js +67 -0
- package/codeyam-cli/src/utils/__tests__/editorGuardMiddleware.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorImageVerifier.test.js +294 -0
- package/codeyam-cli/src/utils/__tests__/editorImageVerifier.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorJournal.test.js +542 -0
- package/codeyam-cli/src/utils/__tests__/editorJournal.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorLoaderHelpers.test.js +594 -0
- package/codeyam-cli/src/utils/__tests__/editorLoaderHelpers.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorMigration.test.js +435 -0
- package/codeyam-cli/src/utils/__tests__/editorMigration.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorMockState.test.js +270 -0
- package/codeyam-cli/src/utils/__tests__/editorMockState.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js +217 -0
- package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorPreview.test.js +361 -0
- package/codeyam-cli/src/utils/__tests__/editorPreview.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorProxySession.test.js +153 -0
- package/codeyam-cli/src/utils/__tests__/editorProxySession.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarioLookup.test.js +139 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarioLookup.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarioSwitch.test.js +291 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarioSwitch.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js +1629 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js +280 -0
- package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorSeedAdapterPrismaValidation.test.js +143 -0
- package/codeyam-cli/src/utils/__tests__/editorSeedAdapterPrismaValidation.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorSessionFilter.test.js +66 -0
- package/codeyam-cli/src/utils/__tests__/editorSessionFilter.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorShouldRevalidate.test.js +53 -0
- package/codeyam-cli/src/utils/__tests__/editorShouldRevalidate.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/entityChangeStatus.test.js +2121 -0
- package/codeyam-cli/src/utils/__tests__/entityChangeStatus.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/git.editor.test.js +134 -0
- package/codeyam-cli/src/utils/__tests__/git.editor.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/glossaryAdd.test.js +177 -0
- package/codeyam-cli/src/utils/__tests__/glossaryAdd.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/journalCaptureStabilization.test.js +122 -0
- package/codeyam-cli/src/utils/__tests__/journalCaptureStabilization.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/manualEntityAnalysis.test.js +302 -0
- package/codeyam-cli/src/utils/__tests__/manualEntityAnalysis.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/npmVersionCheck.test.js +185 -0
- package/codeyam-cli/src/utils/__tests__/npmVersionCheck.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/parseRegisterArg.test.js +129 -0
- package/codeyam-cli/src/utils/__tests__/parseRegisterArg.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/pathIgnoring.test.js +9 -0
- package/codeyam-cli/src/utils/__tests__/pathIgnoring.test.js.map +1 -1
- package/codeyam-cli/src/utils/__tests__/project.test.js +65 -0
- package/codeyam-cli/src/utils/__tests__/project.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/registerScenarioResult.test.js +127 -0
- package/codeyam-cli/src/utils/__tests__/registerScenarioResult.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/routePatternMatching.test.js +118 -0
- package/codeyam-cli/src/utils/__tests__/routePatternMatching.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/scenarioCoverage.test.js +284 -0
- package/codeyam-cli/src/utils/__tests__/scenarioCoverage.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/scenarioMarkers.test.js +121 -0
- package/codeyam-cli/src/utils/__tests__/scenarioMarkers.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/scenariosManifest.test.js +672 -0
- package/codeyam-cli/src/utils/__tests__/scenariosManifest.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/screenshotHash.test.js +84 -0
- package/codeyam-cli/src/utils/__tests__/screenshotHash.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +175 -86
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
- package/codeyam-cli/src/utils/__tests__/telemetry.test.js +159 -0
- package/codeyam-cli/src/utils/__tests__/telemetry.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/templateConsistency.test.js +51 -0
- package/codeyam-cli/src/utils/__tests__/templateConsistency.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/testRunner.test.js +217 -0
- package/codeyam-cli/src/utils/__tests__/testRunner.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/webappDetection.test.js +142 -0
- package/codeyam-cli/src/utils/__tests__/webappDetection.test.js.map +1 -0
- package/codeyam-cli/src/utils/analysisRunner.js +39 -8
- package/codeyam-cli/src/utils/analysisRunner.js.map +1 -1
- package/codeyam-cli/src/utils/analyzer.js +26 -0
- package/codeyam-cli/src/utils/analyzer.js.map +1 -1
- package/codeyam-cli/src/utils/analyzerFinalization.js +100 -0
- package/codeyam-cli/src/utils/analyzerFinalization.js.map +1 -0
- package/codeyam-cli/src/utils/backgroundServer.js +193 -30
- package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
- package/codeyam-cli/src/utils/buildFlags.js +4 -0
- package/codeyam-cli/src/utils/buildFlags.js.map +1 -0
- package/codeyam-cli/src/utils/database.js +37 -2
- package/codeyam-cli/src/utils/database.js.map +1 -1
- package/codeyam-cli/src/utils/devModeEvents.js +40 -0
- package/codeyam-cli/src/utils/devModeEvents.js.map +1 -0
- package/codeyam-cli/src/utils/devServerState.js +71 -0
- package/codeyam-cli/src/utils/devServerState.js.map +1 -0
- package/codeyam-cli/src/utils/editorApi.js +79 -0
- package/codeyam-cli/src/utils/editorApi.js.map +1 -0
- package/codeyam-cli/src/utils/editorAudit.js +791 -0
- package/codeyam-cli/src/utils/editorAudit.js.map +1 -0
- package/codeyam-cli/src/utils/editorBroadcastViewport.js +26 -0
- package/codeyam-cli/src/utils/editorBroadcastViewport.js.map +1 -0
- package/codeyam-cli/src/utils/editorCapture.js +102 -0
- package/codeyam-cli/src/utils/editorCapture.js.map +1 -0
- package/codeyam-cli/src/utils/editorDeleteScenario.js +67 -0
- package/codeyam-cli/src/utils/editorDeleteScenario.js.map +1 -0
- package/codeyam-cli/src/utils/editorDevServer.js +197 -0
- package/codeyam-cli/src/utils/editorDevServer.js.map +1 -0
- package/codeyam-cli/src/utils/editorEntityChangeStatus.js +50 -0
- package/codeyam-cli/src/utils/editorEntityChangeStatus.js.map +1 -0
- package/codeyam-cli/src/utils/editorEntityHelpers.js +144 -0
- package/codeyam-cli/src/utils/editorEntityHelpers.js.map +1 -0
- package/codeyam-cli/src/utils/editorGuard.js +36 -0
- package/codeyam-cli/src/utils/editorGuard.js.map +1 -0
- package/codeyam-cli/src/utils/editorImageVerifier.js +155 -0
- package/codeyam-cli/src/utils/editorImageVerifier.js.map +1 -0
- package/codeyam-cli/src/utils/editorJournal.js +225 -0
- package/codeyam-cli/src/utils/editorJournal.js.map +1 -0
- package/codeyam-cli/src/utils/editorLoaderHelpers.js +152 -0
- package/codeyam-cli/src/utils/editorLoaderHelpers.js.map +1 -0
- package/codeyam-cli/src/utils/editorMigration.js +224 -0
- package/codeyam-cli/src/utils/editorMigration.js.map +1 -0
- package/codeyam-cli/src/utils/editorMockState.js +248 -0
- package/codeyam-cli/src/utils/editorMockState.js.map +1 -0
- package/codeyam-cli/src/utils/editorPreloadHelpers.js +135 -0
- package/codeyam-cli/src/utils/editorPreloadHelpers.js.map +1 -0
- package/codeyam-cli/src/utils/editorPreview.js +139 -0
- package/codeyam-cli/src/utils/editorPreview.js.map +1 -0
- package/codeyam-cli/src/utils/editorRecapture.js +109 -0
- package/codeyam-cli/src/utils/editorRecapture.js.map +1 -0
- package/codeyam-cli/src/utils/editorScenarioSwitch.js +134 -0
- package/codeyam-cli/src/utils/editorScenarioSwitch.js.map +1 -0
- package/codeyam-cli/src/utils/editorScenarios.js +616 -0
- package/codeyam-cli/src/utils/editorScenarios.js.map +1 -0
- package/codeyam-cli/src/utils/editorSeedAdapter.js +422 -0
- package/codeyam-cli/src/utils/editorSeedAdapter.js.map +1 -0
- package/codeyam-cli/src/utils/editorShouldRevalidate.js +21 -0
- package/codeyam-cli/src/utils/editorShouldRevalidate.js.map +1 -0
- package/codeyam-cli/src/utils/entityChangeStatus.js +394 -0
- package/codeyam-cli/src/utils/entityChangeStatus.js.map +1 -0
- package/codeyam-cli/src/utils/entityChangeStatus.server.js +212 -0
- package/codeyam-cli/src/utils/entityChangeStatus.server.js.map +1 -0
- package/codeyam-cli/src/utils/fileMetadata.js +5 -0
- package/codeyam-cli/src/utils/fileMetadata.js.map +1 -1
- package/codeyam-cli/src/utils/fileWatcher.js +63 -9
- package/codeyam-cli/src/utils/fileWatcher.js.map +1 -1
- package/codeyam-cli/src/utils/generateReport.js +2 -2
- package/codeyam-cli/src/utils/git.js +103 -0
- package/codeyam-cli/src/utils/git.js.map +1 -1
- package/codeyam-cli/src/utils/glossaryAdd.js +74 -0
- package/codeyam-cli/src/utils/glossaryAdd.js.map +1 -0
- package/codeyam-cli/src/utils/install-skills.js +128 -47
- package/codeyam-cli/src/utils/install-skills.js.map +1 -1
- package/codeyam-cli/src/utils/interactiveSyncWatcher.js +126 -0
- package/codeyam-cli/src/utils/interactiveSyncWatcher.js.map +1 -0
- package/codeyam-cli/src/utils/labsAutoCheck.js +19 -0
- package/codeyam-cli/src/utils/labsAutoCheck.js.map +1 -0
- package/codeyam-cli/src/utils/manualEntityAnalysis.js +196 -0
- package/codeyam-cli/src/utils/manualEntityAnalysis.js.map +1 -0
- package/codeyam-cli/src/utils/npmVersionCheck.js +76 -0
- package/codeyam-cli/src/utils/npmVersionCheck.js.map +1 -0
- package/codeyam-cli/src/utils/parseRegisterArg.js +31 -0
- package/codeyam-cli/src/utils/parseRegisterArg.js.map +1 -0
- package/codeyam-cli/src/utils/pathIgnoring.js +19 -7
- package/codeyam-cli/src/utils/pathIgnoring.js.map +1 -1
- package/codeyam-cli/src/utils/progress.js +8 -1
- package/codeyam-cli/src/utils/progress.js.map +1 -1
- package/codeyam-cli/src/utils/project.js +15 -5
- package/codeyam-cli/src/utils/project.js.map +1 -1
- package/codeyam-cli/src/utils/queue/__tests__/heartbeat.test.js +11 -11
- package/codeyam-cli/src/utils/queue/__tests__/heartbeat.test.js.map +1 -1
- package/codeyam-cli/src/utils/queue/__tests__/manager.test.js +22 -0
- package/codeyam-cli/src/utils/queue/__tests__/manager.test.js.map +1 -1
- package/codeyam-cli/src/utils/queue/heartbeat.js +13 -5
- package/codeyam-cli/src/utils/queue/heartbeat.js.map +1 -1
- package/codeyam-cli/src/utils/queue/job.js +100 -6
- package/codeyam-cli/src/utils/queue/job.js.map +1 -1
- package/codeyam-cli/src/utils/queue/manager.js +7 -6
- package/codeyam-cli/src/utils/queue/manager.js.map +1 -1
- package/codeyam-cli/src/utils/registerScenarioResult.js +52 -0
- package/codeyam-cli/src/utils/registerScenarioResult.js.map +1 -0
- package/codeyam-cli/src/utils/requireSimulations.js +10 -0
- package/codeyam-cli/src/utils/requireSimulations.js.map +1 -0
- package/codeyam-cli/src/utils/routePatternMatching.js +129 -0
- package/codeyam-cli/src/utils/routePatternMatching.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 +229 -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 +74 -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 +376 -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 +113 -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__/parser.test.js +83 -0
- package/codeyam-cli/src/utils/rules/__tests__/parser.test.js.map +1 -0
- package/codeyam-cli/src/utils/rules/__tests__/pathMatcher.test.js +118 -0
- package/codeyam-cli/src/utils/rules/__tests__/pathMatcher.test.js.map +1 -0
- package/codeyam-cli/src/utils/rules/__tests__/rulePlacement.test.js +72 -0
- package/codeyam-cli/src/utils/rules/__tests__/rulePlacement.test.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/__tests__/sourceFiles.test.js +76 -0
- package/codeyam-cli/src/utils/rules/__tests__/sourceFiles.test.js.map +1 -0
- package/codeyam-cli/src/utils/rules/index.js +2 -0
- package/codeyam-cli/src/utils/rules/index.js.map +1 -1
- package/codeyam-cli/src/utils/rules/parser.js +16 -29
- package/codeyam-cli/src/utils/rules/parser.js.map +1 -1
- package/codeyam-cli/src/utils/rules/pathMatcher.js +34 -3
- package/codeyam-cli/src/utils/rules/pathMatcher.js.map +1 -1
- package/codeyam-cli/src/utils/rules/rulePlacement.js +65 -0
- package/codeyam-cli/src/utils/rules/rulePlacement.js.map +1 -0
- 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/sourceFiles.js +43 -0
- package/codeyam-cli/src/utils/rules/sourceFiles.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/scenarioCoverage.js +77 -0
- package/codeyam-cli/src/utils/scenarioCoverage.js.map +1 -0
- package/codeyam-cli/src/utils/scenarioMarkers.js +134 -0
- package/codeyam-cli/src/utils/scenarioMarkers.js.map +1 -0
- package/codeyam-cli/src/utils/scenariosManifest.js +307 -0
- package/codeyam-cli/src/utils/scenariosManifest.js.map +1 -0
- package/codeyam-cli/src/utils/screenshotHash.js +26 -0
- package/codeyam-cli/src/utils/screenshotHash.js.map +1 -0
- package/codeyam-cli/src/utils/serverState.js +94 -12
- package/codeyam-cli/src/utils/serverState.js.map +1 -1
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +96 -47
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
- package/codeyam-cli/src/utils/simulationGateMiddleware.js +175 -0
- package/codeyam-cli/src/utils/simulationGateMiddleware.js.map +1 -0
- package/codeyam-cli/src/utils/slugUtils.js +25 -0
- package/codeyam-cli/src/utils/slugUtils.js.map +1 -0
- package/codeyam-cli/src/utils/syncMocksMiddleware.js +7 -26
- package/codeyam-cli/src/utils/syncMocksMiddleware.js.map +1 -1
- package/codeyam-cli/src/utils/telemetry.js +106 -0
- package/codeyam-cli/src/utils/telemetry.js.map +1 -0
- package/codeyam-cli/src/utils/telemetryMiddleware.js +22 -0
- package/codeyam-cli/src/utils/telemetryMiddleware.js.map +1 -0
- package/codeyam-cli/src/utils/testRunner.js +356 -0
- package/codeyam-cli/src/utils/testRunner.js.map +1 -0
- package/codeyam-cli/src/utils/transcriptPruning.js +67 -0
- package/codeyam-cli/src/utils/transcriptPruning.js.map +1 -0
- package/codeyam-cli/src/utils/versionInfo.js +46 -0
- package/codeyam-cli/src/utils/versionInfo.js.map +1 -1
- package/codeyam-cli/src/utils/webappDetection.js +35 -2
- package/codeyam-cli/src/utils/webappDetection.js.map +1 -1
- package/codeyam-cli/src/webserver/__tests__/buildPtyEnv.test.js +35 -0
- package/codeyam-cli/src/webserver/__tests__/buildPtyEnv.test.js.map +1 -0
- package/codeyam-cli/src/webserver/__tests__/clientErrors.test.js +107 -0
- package/codeyam-cli/src/webserver/__tests__/clientErrors.test.js.map +1 -0
- package/codeyam-cli/src/webserver/__tests__/dependency-smoke.test.js +66 -0
- package/codeyam-cli/src/webserver/__tests__/dependency-smoke.test.js.map +1 -0
- package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js +628 -0
- package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js.map +1 -0
- package/codeyam-cli/src/webserver/__tests__/idleDetector.test.js +283 -0
- package/codeyam-cli/src/webserver/__tests__/idleDetector.test.js.map +1 -0
- package/codeyam-cli/src/webserver/__tests__/stripClaudeCommand.test.js +135 -0
- package/codeyam-cli/src/webserver/__tests__/stripClaudeCommand.test.js.map +1 -0
- package/codeyam-cli/src/webserver/app/lib/clientErrors.js +86 -0
- package/codeyam-cli/src/webserver/app/lib/clientErrors.js.map +1 -0
- package/codeyam-cli/src/webserver/app/lib/database.js +56 -30
- package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
- package/codeyam-cli/src/webserver/app/lib/dbNotifier.js.map +1 -1
- package/codeyam-cli/src/webserver/app/lib/git.js +397 -0
- package/codeyam-cli/src/webserver/app/lib/git.js.map +1 -0
- package/codeyam-cli/src/webserver/app/types/editor.js +8 -0
- package/codeyam-cli/src/webserver/app/types/editor.js.map +1 -0
- package/codeyam-cli/src/webserver/backgroundServer.js +186 -37
- package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
- package/codeyam-cli/src/webserver/bootstrap.js +11 -0
- package/codeyam-cli/src/webserver/bootstrap.js.map +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/CopyButton-CLe80MMu.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{EntityItem-DsN1wKrm.js → EntityItem-Crt_KN_U.js} +5 -5
- package/codeyam-cli/src/webserver/build/client/assets/EntityTypeBadge-CQgyEGV-.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-Ba2JVPzP.js → EntityTypeIcon-CD7lGABo.js} +9 -9
- package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-CgTNOhnu.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-CKeQT5Ty.js +25 -0
- package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-D3s1MFkb.js +3 -0
- package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-B0GLXMsr.js → LoadingDots-By5zI316.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-xgeCVgSM.js → LogViewer-CM5zg40N.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/MiniClaudeChat-CQENLSrF.js +36 -0
- package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-OApQuNyq.js → ReportIssueModal-C2PLkej3.js} +5 -10
- package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-DanvyBPb.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-DzccYyI8.js → ScenarioViewer-DUMfcNVK.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/Spinner-D0LgAaSa.js +34 -0
- package/codeyam-cli/src/webserver/build/client/assets/TruncatedFilePath-CK7-NaPZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/ViewportInspectBar-BA_Ry-rs.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{_index-BwqWJOgH.js → _index-BAWd-Xjf.js} +4 -4
- package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-BwavGCpm.js → activity.(_tab)-BOARiB-g.js} +10 -15
- package/codeyam-cli/src/webserver/build/client/assets/addon-canvas-DpzMmAy5.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/addon-fit-YJmn1quW.js +12 -0
- package/codeyam-cli/src/webserver/build/client/assets/addon-web-links-CHx25PAe.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/addon-webgl-DI8QOUvO.js +58 -0
- package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-Bg3e7q4S.js +22 -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.dev-mode-events-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-audit-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-capture-scenario-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-client-errors-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-commit-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-dev-server-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-entity-status-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-file-diff-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-file-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-entry-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-image._-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-screenshot-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-update-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-load-commit-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-project-info-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-recapture-stale-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-refresh-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-register-scenario-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-rename-scenario-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-save-scenario-data-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-save-seed-state-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-coverage-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-data-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-image._-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-prompt-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenarios-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-schema-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-session-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-switch-scenario-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-test-results-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.rule-path-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-CL-lMgHh.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-Cx24_aWc.js → chevron-down-GmAjGS9-.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/chunk-JZWAC4HX-BAdwhyCx.js +43 -0
- package/codeyam-cli/src/webserver/build/client/assets/{circle-check-BOARzkeR.js → circle-check-DFcQkN5j.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/copy-C6iF61Xs.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-4ImjHTVC.js +41 -0
- package/codeyam-cli/src/webserver/build/client/assets/cy-logo-cli-Coe5NhbS.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{cy-logo-cli-CCKUIm0S.svg → cy-logo-cli-DoA97ML3.svg} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-C8y4mmyv.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/editor._tab-Gbk_i5Js.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/editor.entity.(_sha)-aIHKLB-m.js +96 -0
- package/codeyam-cli/src/webserver/build/client/assets/editorPreview-CluPkvXJ.js +41 -0
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-BJUiQqZF.js → entity._sha._-ByHz6rAQ.js} +14 -13
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.dev-CmLO432x.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-Bz9sCUF_.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-DQM8E7L4.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-CTBG2mmz.js → entity._sha_.edit._scenarioId-CAoXLsQr.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{entry.client-CS2cb_eZ.js → entry.client-SuW9syRS.js} +6 -6
- package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-Daa96Fr1.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/files-D-xGrg29.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/git-Bq_fbXP5.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/globals-oyPmV37k.css +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{index-lzqtyFU8.js → index-Bp1l4hSv.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{index-B1h680n5.js → index-CWV9XZiG.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/index-DE3jI_dv.js +15 -0
- package/codeyam-cli/src/webserver/build/client/assets/jsx-runtime-D_zvdyIk.js +9 -0
- package/codeyam-cli/src/webserver/build/client/assets/labs-B_IX45ih.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-B7B9V-bu.js → loader-circle-De-7qQ2u.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/manifest-bcbb3d49.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/memory-Cx2xEx7s.js +101 -0
- package/codeyam-cli/src/webserver/build/client/assets/pause-CFxEKL1u.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/root-D2_tktnk.js +80 -0
- package/codeyam-cli/src/webserver/build/client/assets/{search-CxXUmBSd.js → search-BdBb5aqc.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/settings-DdE-Untf.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/simulations-DSCdE99u.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/terminal-CrplD4b1.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-B6LgvRJg.js → triangle-alert-DqJ0j69l.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-DhXHbEjP.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-BNd5hYuW.js +2 -0
- package/codeyam-cli/src/webserver/build/client/assets/useReportContext-Cy5Qg_UR.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/useToast-5HR2j9ZE.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/xterm-BqvuqXEL.js +27 -0
- package/codeyam-cli/src/webserver/build/client/sound-test.html +98 -0
- package/codeyam-cli/src/webserver/build/server/assets/analysisRunner-DjF-soOH.js +16 -0
- package/codeyam-cli/src/webserver/build/server/assets/index-nAvHGWbz.js +1 -0
- package/codeyam-cli/src/webserver/build/server/assets/init-XhpIt-OT.js +10 -0
- package/codeyam-cli/src/webserver/build/server/assets/progress-CHTtrxFG.js +1 -0
- package/codeyam-cli/src/webserver/build/server/assets/server-build-DVwiibFu.js +644 -0
- package/codeyam-cli/src/webserver/build/server/index.js +1 -1
- package/codeyam-cli/src/webserver/build-info.json +5 -5
- package/codeyam-cli/src/webserver/devServer.js +39 -5
- package/codeyam-cli/src/webserver/devServer.js.map +1 -1
- package/codeyam-cli/src/webserver/editorProxy.js +976 -0
- package/codeyam-cli/src/webserver/editorProxy.js.map +1 -0
- package/codeyam-cli/src/webserver/idleDetector.js +121 -0
- package/codeyam-cli/src/webserver/idleDetector.js.map +1 -0
- package/codeyam-cli/src/webserver/mockStateEvents.js +28 -0
- package/codeyam-cli/src/webserver/mockStateEvents.js.map +1 -0
- package/codeyam-cli/src/webserver/public/sound-test.html +98 -0
- package/codeyam-cli/src/webserver/scripts/codeyam-preload.mjs +414 -0
- package/codeyam-cli/src/webserver/scripts/journalCapture.ts +283 -0
- package/codeyam-cli/src/webserver/server.js +379 -1
- package/codeyam-cli/src/webserver/server.js.map +1 -1
- package/codeyam-cli/src/webserver/terminalServer.js +951 -0
- package/codeyam-cli/src/webserver/terminalServer.js.map +1 -0
- package/codeyam-cli/templates/__tests__/editor-step-hook.prompt-capture.test.ts +118 -0
- package/codeyam-cli/templates/chrome-extension-react/EXTENSION_SETUP.md +75 -0
- package/codeyam-cli/templates/chrome-extension-react/README.md +46 -0
- package/codeyam-cli/templates/chrome-extension-react/gitignore +15 -0
- package/codeyam-cli/templates/chrome-extension-react/index.html +12 -0
- package/codeyam-cli/templates/chrome-extension-react/package.json +27 -0
- package/codeyam-cli/templates/chrome-extension-react/popup.html +12 -0
- package/codeyam-cli/templates/chrome-extension-react/public/manifest.json +15 -0
- package/codeyam-cli/templates/chrome-extension-react/src/background/service-worker.ts +7 -0
- package/codeyam-cli/templates/chrome-extension-react/src/globals.css +6 -0
- package/codeyam-cli/templates/chrome-extension-react/src/lib/storage.ts +37 -0
- package/codeyam-cli/templates/chrome-extension-react/src/popup/App.tsx +12 -0
- package/codeyam-cli/templates/chrome-extension-react/src/popup/main.tsx +10 -0
- package/codeyam-cli/templates/chrome-extension-react/tsconfig.json +24 -0
- package/codeyam-cli/templates/chrome-extension-react/vite.config.ts +41 -0
- package/codeyam-cli/templates/codeyam-editor-claude.md +149 -0
- package/codeyam-cli/templates/codeyam-editor-reference.md +214 -0
- package/codeyam-cli/templates/codeyam-memory-hook.sh +19 -20
- package/codeyam-cli/templates/commands/codeyam-diagnose.md +481 -0
- package/codeyam-cli/templates/editor-step-hook.py +368 -0
- package/codeyam-cli/templates/expo-react-native/MOBILE_SETUP.md +89 -0
- package/codeyam-cli/templates/expo-react-native/README.md +41 -0
- package/codeyam-cli/templates/expo-react-native/app/(tabs)/_layout.tsx +33 -0
- package/codeyam-cli/templates/expo-react-native/app/(tabs)/index.tsx +12 -0
- package/codeyam-cli/templates/expo-react-native/app/(tabs)/settings.tsx +12 -0
- package/codeyam-cli/templates/expo-react-native/app/_layout.tsx +12 -0
- package/codeyam-cli/templates/expo-react-native/app.json +18 -0
- package/codeyam-cli/templates/expo-react-native/babel.config.js +9 -0
- package/codeyam-cli/templates/expo-react-native/gitignore +12 -0
- package/codeyam-cli/templates/expo-react-native/global.css +3 -0
- package/codeyam-cli/templates/expo-react-native/lib/storage.ts +32 -0
- package/codeyam-cli/templates/expo-react-native/metro.config.js +6 -0
- package/codeyam-cli/templates/expo-react-native/nativewind-env.d.ts +1 -0
- package/codeyam-cli/templates/expo-react-native/package.json +38 -0
- package/codeyam-cli/templates/expo-react-native/tailwind.config.js +10 -0
- package/codeyam-cli/templates/expo-react-native/tsconfig.json +10 -0
- package/codeyam-cli/templates/hooks/staleness-check.sh +43 -0
- package/codeyam-cli/templates/isolation-route/next-app.tsx.template +80 -0
- package/codeyam-cli/templates/isolation-route/next-pages.tsx.template +79 -0
- package/codeyam-cli/templates/isolation-route/vite-react.tsx.template +78 -0
- package/codeyam-cli/templates/msw/browser-setup.ts.template +47 -0
- package/codeyam-cli/templates/msw/handler-router.ts.template +47 -0
- package/codeyam-cli/templates/msw/server-setup.ts.template +52 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/AUTH_PATTERNS.md +308 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/AUTH_UPGRADE.md +304 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/DATABASE.md +126 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/FEATURE_PATTERNS.md +37 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/README.md +53 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/api/todos/route.ts +17 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/codeyam-isolate/layout.tsx +12 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/globals.css +26 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/layout.tsx +34 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/lib/prisma.ts +24 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/page.tsx +10 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/env +4 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/eslint.config.mjs +11 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/gitignore +64 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/next.config.ts +14 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/package.json +39 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/postcss.config.mjs +7 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/schema.prisma +27 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/seed.ts +40 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma.config.ts +12 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/seed-adapter.ts +127 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/tsconfig.json +34 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/vitest.config.ts +13 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/README.md +52 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/SUPABASE_SETUP.md +104 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/app/api/todos/route.ts +17 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/app/globals.css +26 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/app/layout.tsx +34 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/app/lib/prisma.ts +20 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/app/lib/supabase.ts +12 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/app/page.tsx +10 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/env +9 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/eslint.config.mjs +11 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/gitignore +40 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/next.config.ts +11 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/package.json +37 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/postcss.config.mjs +7 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/prisma/schema.prisma +27 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/prisma/seed.ts +39 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/prisma.config.ts +12 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/tsconfig.json +34 -0
- package/codeyam-cli/templates/prompts/conversation-guidance.txt +44 -0
- package/codeyam-cli/templates/prompts/conversation-prompt.txt +28 -0
- package/codeyam-cli/templates/prompts/interruption-prompt.txt +31 -0
- package/codeyam-cli/templates/prompts/stale-rules-prompt.txt +24 -0
- package/codeyam-cli/templates/rule-notification-hook.py +83 -0
- package/codeyam-cli/templates/rule-reflection-hook.py +647 -0
- package/codeyam-cli/templates/rules-instructions.md +78 -0
- package/codeyam-cli/templates/seed-adapters/supabase.ts +282 -0
- package/codeyam-cli/templates/{codeyam:debug.md → skills/codeyam-debug/SKILL.md} +1 -1
- package/codeyam-cli/templates/skills/codeyam-dev-mode/SKILL.md +237 -0
- package/codeyam-cli/templates/skills/codeyam-editor/SKILL.md +229 -0
- package/codeyam-cli/templates/skills/codeyam-memory/SKILL.md +611 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/deprecated-prompt.md +100 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/detect-deprecated-patterns.mjs +139 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/find-exports.mjs +52 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/misleading-api-prompt.md +117 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/lib/read-json-field.mjs +61 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/lib/ripgrep-fallback.mjs +155 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/analyze-prompt.md +46 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/cleanup.mjs +13 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/filter-session.mjs +95 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/preprocess.mjs +160 -0
- package/codeyam-cli/templates/skills/codeyam-new-rule/SKILL.md +11 -0
- package/codeyam-cli/templates/{codeyam:setup.md → skills/codeyam-setup/SKILL.md} +13 -1
- package/codeyam-cli/templates/{codeyam:sim.md → skills/codeyam-sim/SKILL.md} +1 -1
- package/codeyam-cli/templates/{codeyam:test.md → skills/codeyam-test/SKILL.md} +1 -1
- package/codeyam-cli/templates/{codeyam:verify.md → skills/codeyam-verify/SKILL.md} +1 -1
- package/package.json +29 -21
- 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 +76 -12
- 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/completionCall.js +10 -7
- package/packages/ai/src/lib/completionCall.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +1023 -183
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/ParentScopeManager.js +9 -2
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/ParentScopeManager.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 +47 -7
- 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/coercePrimitivesToArraysBySchema.js +54 -0
- package/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.js.map +1 -0
- package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js +122 -12
- 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/dataStructure/helpers/stripNullableMarkers.js +34 -0
- package/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.js.map +1 -0
- package/packages/ai/src/lib/dataStructureChunking.js +30 -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 +284 -6
- 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 +96 -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 +2 -1
- 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 +109 -30
- package/packages/analyze/src/lib/ProjectAnalyzer.js.map +1 -1
- package/packages/analyze/src/lib/asts/index.js +4 -2
- package/packages/analyze/src/lib/asts/index.js.map +1 -1
- package/packages/analyze/src/lib/asts/nodes/getNodeType.js +1 -0
- package/packages/analyze/src/lib/asts/nodes/getNodeType.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 +81 -9
- package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +30 -30
- package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/dependencyResolver.js +0 -5
- package/packages/analyze/src/lib/files/analyze/dependencyResolver.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js +12 -2
- package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/gatherEntityMap.js +11 -8
- package/packages/analyze/src/lib/files/analyze/gatherEntityMap.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/trackEntityCircularDependencies.js +14 -0
- package/packages/analyze/src/lib/files/analyze/trackEntityCircularDependencies.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js +44 -14
- package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js.map +1 -1
- package/packages/analyze/src/lib/files/analyzeChange.js +1 -0
- package/packages/analyze/src/lib/files/analyzeChange.js.map +1 -1
- package/packages/analyze/src/lib/files/analyzeInitial.js +1 -0
- package/packages/analyze/src/lib/files/analyzeInitial.js.map +1 -1
- package/packages/analyze/src/lib/files/analyzeNextRoute.js +5 -1
- package/packages/analyze/src/lib/files/analyzeNextRoute.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 +907 -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 +75 -21
- package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +309 -23
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js +16 -8
- package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +632 -79
- 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/index.js +1 -0
- package/packages/database/index.js.map +1 -1
- 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 +8 -0
- package/packages/database/src/lib/kysely/db.js.map +1 -1
- package/packages/database/src/lib/kysely/tables/editorScenariosTable.js +149 -0
- package/packages/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -0
- 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/loadAnalysis.js +1 -1
- package/packages/database/src/lib/loadAnalysis.js.map +1 -1
- package/packages/database/src/lib/loadCommits.js +23 -13
- package/packages/database/src/lib/loadCommits.js.map +1 -1
- package/packages/database/src/lib/loadEntities.js +0 -6
- package/packages/database/src/lib/loadEntities.js.map +1 -1
- package/packages/database/src/lib/loadEntity.js +5 -5
- package/packages/database/src/lib/loadEntity.js.map +1 -1
- package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js +1 -4
- package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
- 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/packages/database/src/lib/updateCommitMetadata.js +76 -90
- package/packages/database/src/lib/updateCommitMetadata.js.map +1 -1
- package/packages/database/src/lib/updateFreshAnalysisStatus.js +41 -30
- package/packages/database/src/lib/updateFreshAnalysisStatus.js.map +1 -1
- package/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.js +68 -57
- package/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.js.map +1 -1
- package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +29 -1
- package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -1
- package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +33 -5
- package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
- package/packages/types/src/enums/ProjectFramework.js +2 -0
- package/packages/types/src/enums/ProjectFramework.js.map +1 -1
- package/packages/utils/src/lib/fs/rsyncCopy.js +120 -4
- package/packages/utils/src/lib/fs/rsyncCopy.js.map +1 -1
- package/scripts/npm-post-install.cjs +34 -0
- package/codeyam-cli/src/commands/detect-universal-mocks.js +0 -118
- package/codeyam-cli/src/commands/detect-universal-mocks.js.map +0 -1
- package/codeyam-cli/src/commands/list.js +0 -31
- package/codeyam-cli/src/commands/list.js.map +0 -1
- package/codeyam-cli/src/commands/webapp-info.js +0 -146
- package/codeyam-cli/src/commands/webapp-info.js.map +0 -1
- package/codeyam-cli/src/utils/universal-mocks.js +0 -152
- package/codeyam-cli/src/utils/universal-mocks.js.map +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/EntityTypeBadge-DLqD3qNt.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-C8lyxW9k.js +0 -34
- package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-aht4aafF.js +0 -25
- package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-CVtiBnY5.js +0 -3
- package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-DuDvi0jm.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/TruncatedFilePath-DyFZkK0l.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/chunk-EPOLDU6W-CXRTFQ3F.js +0 -51
- package/codeyam-cli/src/webserver/build/client/assets/copy-Bb-80kDT.js +0 -6
- package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-BdhJEx6B.js +0 -21
- package/codeyam-cli/src/webserver/build/client/assets/cy-logo-cli-DcX-ZS3p.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-BBnGWYga.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-DavjRmOY.js +0 -6
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-D1T4TGjf.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/fileTableUtils-DMJ7zii9.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/files-CJ6lTdTA.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/git-CPTZZ-JZ.js +0 -15
- 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/client/assets/simulations-DwFIBT09.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-C1v1PQzo.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-aSv48UbS.js +0 -2
- package/codeyam-cli/src/webserver/build/client/assets/useReportContext-DYxHZQuP.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/useToast-mBRpZPiu.js +0 -1
- package/codeyam-cli/src/webserver/build/server/assets/index-DVzYx8PN.js +0 -1
- package/codeyam-cli/src/webserver/build/server/assets/server-build-4Cr0uToj.js +0 -257
- package/codeyam-cli/templates/codeyam-stop-hook.sh +0 -284
- 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
- package/scripts/finalize-analyzer.cjs +0 -81
package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts
CHANGED
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
} from '~codeyam/ai';
|
|
5
5
|
import { cleanKnownObjectFunctionsFromMapping } from '~codeyam/ai';
|
|
6
6
|
import { DataStructure, Entity, ReadonlyAnalysis } from '~codeyam/types';
|
|
7
|
+
import { transformationTracer } from './TransformationTracer';
|
|
7
8
|
|
|
8
9
|
export interface DataStructureInfo {
|
|
9
10
|
signatureSchema: { [key: string]: string };
|
|
@@ -40,6 +41,79 @@ function getTypeParameter(functionName: string): string | null {
|
|
|
40
41
|
return null;
|
|
41
42
|
}
|
|
42
43
|
|
|
44
|
+
/**
|
|
45
|
+
* Check if a schema path contains a Set/Map collection method call.
|
|
46
|
+
* Paths like `.has(articleId)`, `.delete(articleId)`, `.add(articleId)` represent
|
|
47
|
+
* membership checks on Sets/Maps, not meaningful data flow for schema generation.
|
|
48
|
+
* These create massive combinatorial explosions when every filter field (filterRatings,
|
|
49
|
+
* filterPublications, filterAuthors, etc.) × every method (has, delete, add) gets
|
|
50
|
+
* tracked as a separate equivalency.
|
|
51
|
+
*/
|
|
52
|
+
const COLLECTION_METHOD_PATTERN = /\.(?:has|delete|add|clear|get|set)\(/;
|
|
53
|
+
function isCollectionMethodPath(path: string): boolean {
|
|
54
|
+
return COLLECTION_METHOD_PATTERN.test(path);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Primitive types that should not have child paths
|
|
58
|
+
const PRIMITIVE_TYPES = new Set([
|
|
59
|
+
'number',
|
|
60
|
+
'string',
|
|
61
|
+
'boolean',
|
|
62
|
+
'null',
|
|
63
|
+
'undefined',
|
|
64
|
+
]);
|
|
65
|
+
|
|
66
|
+
// Check if a type string represents a primitive type
|
|
67
|
+
// Handles union types like "string | undefined" or "number | null"
|
|
68
|
+
// Also handles string literal unions like "'suggestion' | 'warning' | 'tip'"
|
|
69
|
+
function isPrimitiveType(typeStr: string): boolean {
|
|
70
|
+
if (PRIMITIVE_TYPES.has(typeStr)) {
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
// Check union types - if ALL parts of the union are primitives, it's primitive
|
|
74
|
+
// e.g., "string | undefined" -> ["string", "undefined"] -> both are primitive -> true
|
|
75
|
+
// e.g., "object | null" -> ["object", "null"] -> object is not primitive -> false
|
|
76
|
+
// e.g., "'suggestion' | 'warning'" -> string literal union -> true
|
|
77
|
+
if (typeStr.includes('|')) {
|
|
78
|
+
const parts = typeStr.split('|').map((p) => p.trim());
|
|
79
|
+
return parts.every(
|
|
80
|
+
(part) =>
|
|
81
|
+
PRIMITIVE_TYPES.has(part) ||
|
|
82
|
+
// String literal values like 'suggestion', 'warning' are primitives
|
|
83
|
+
(part.startsWith("'") && part.endsWith("'")),
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Extract signature index from a path like "signature[0]" or "signature[0].foo"
|
|
90
|
+
// Returns the index number or undefined if not a signature path
|
|
91
|
+
function extractSignatureIndex(path: string): number | undefined {
|
|
92
|
+
const match = path.match(/^signature\[(\d+)\]/);
|
|
93
|
+
return match ? parseInt(match[1], 10) : undefined;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Check if a new schema path would go through a primitive type
|
|
97
|
+
// e.g., if schema has 'entities[].scenarioCount': 'number', then
|
|
98
|
+
// 'entities[].scenarioCount.sha' would go through a primitive and should be rejected
|
|
99
|
+
function wouldGoThroughPrimitive(
|
|
100
|
+
newPath: string,
|
|
101
|
+
schema: { [key: string]: string },
|
|
102
|
+
): boolean {
|
|
103
|
+
const pathParts = splitOutsideParenthesesAndArrays(newPath);
|
|
104
|
+
|
|
105
|
+
// Check each prefix of the path (excluding the full path itself)
|
|
106
|
+
for (let i = 1; i < pathParts.length; i++) {
|
|
107
|
+
const prefixPath = joinParenthesesAndArrays(pathParts.slice(0, i));
|
|
108
|
+
const prefixType = schema[prefixPath];
|
|
109
|
+
if (prefixType && isPrimitiveType(prefixType)) {
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
|
|
43
117
|
// Check if schemaPathPart matches or is a function call variant of pathPart
|
|
44
118
|
// e.g., 'isEntityBeingAnalyzed(entity.sha)' matches 'isEntityBeingAnalyzed'
|
|
45
119
|
function pathPartMatches(pathPart: string, schemaPathPart: string): boolean {
|
|
@@ -56,21 +130,51 @@ function pathPartMatches(pathPart: string, schemaPathPart: string): boolean {
|
|
|
56
130
|
function bestValueFromOptions(options: Array<string | undefined>) {
|
|
57
131
|
options = options.filter(Boolean) as string[];
|
|
58
132
|
|
|
59
|
-
const known = options.
|
|
60
|
-
if (known)
|
|
133
|
+
const known = options.filter((o) => !o.includes('unknown'));
|
|
134
|
+
if (known.length > 0) {
|
|
135
|
+
// Among known values, prefer string literal unions over bare primitives.
|
|
136
|
+
// e.g., "'draft' | 'inProgress' | 'paused' | 'completed'" is more specific than "string".
|
|
137
|
+
// This handles cases where a dependency schema has a bare type like "string" but the
|
|
138
|
+
// child entity's analysis has the actual literal union from TypeScript type resolution.
|
|
139
|
+
if (known.length > 1 && known.some((o) => PRIMITIVE_TYPES.has(o))) {
|
|
140
|
+
const literalUnion = known.find(
|
|
141
|
+
(o) => !PRIMITIVE_TYPES.has(o) && o.includes("'"),
|
|
142
|
+
);
|
|
143
|
+
if (literalUnion) {
|
|
144
|
+
return literalUnion;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return known[0];
|
|
148
|
+
}
|
|
61
149
|
|
|
62
150
|
const notUnknown = options.find((o) => o !== 'unknown');
|
|
63
|
-
if (notUnknown)
|
|
151
|
+
if (notUnknown) {
|
|
152
|
+
return notUnknown;
|
|
153
|
+
}
|
|
64
154
|
|
|
65
155
|
return options[0] ?? 'unknown';
|
|
66
156
|
}
|
|
67
157
|
|
|
158
|
+
/** Timeout (ms) for the merge operation. Throws DataStructureTimeoutError if exceeded.
|
|
159
|
+
* All successful merges complete in <300ms. Anything exceeding 2s is pathological. */
|
|
160
|
+
const MERGE_TIMEOUT_MS = 2_000;
|
|
161
|
+
|
|
162
|
+
export class DataStructureTimeoutError extends Error {
|
|
163
|
+
constructor(entityName: string, elapsedMs: number) {
|
|
164
|
+
super(
|
|
165
|
+
`Data structure merge timed out for ${entityName} after ${Math.round(elapsedMs / 1000)}s (limit: ${MERGE_TIMEOUT_MS / 1000}s)`,
|
|
166
|
+
);
|
|
167
|
+
this.name = 'DataStructureTimeoutError';
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
68
171
|
export default function mergeInDependentDataStructure({
|
|
69
172
|
importedExports,
|
|
70
173
|
dependentAnalyses,
|
|
71
174
|
rootScopeName,
|
|
72
175
|
dataStructure,
|
|
73
176
|
dependencySchemas,
|
|
177
|
+
timeoutMs = MERGE_TIMEOUT_MS,
|
|
74
178
|
}: {
|
|
75
179
|
importedExports: Pick<
|
|
76
180
|
Entity['metadata']['importedExports'][0],
|
|
@@ -92,7 +196,23 @@ export default function mergeInDependentDataStructure({
|
|
|
92
196
|
[name: string]: DataStructureInfo;
|
|
93
197
|
};
|
|
94
198
|
};
|
|
199
|
+
/** Override the default timeout (ms). Set to 0 to disable. */
|
|
200
|
+
timeoutMs?: number;
|
|
95
201
|
}) {
|
|
202
|
+
const mergeStartTime = Date.now();
|
|
203
|
+
const mergeDeadline = timeoutMs > 0 ? mergeStartTime + timeoutMs : 0;
|
|
204
|
+
|
|
205
|
+
/** Call in hot loops. Throws DataStructureTimeoutError if deadline exceeded.
|
|
206
|
+
* Date.now() is ~20ns — negligible vs the ms-scale string ops in each iteration. */
|
|
207
|
+
const checkDeadline = () => {
|
|
208
|
+
if (!mergeDeadline) return;
|
|
209
|
+
if (Date.now() > mergeDeadline) {
|
|
210
|
+
throw new DataStructureTimeoutError(
|
|
211
|
+
rootScopeName,
|
|
212
|
+
Date.now() - mergeStartTime,
|
|
213
|
+
);
|
|
214
|
+
}
|
|
215
|
+
};
|
|
96
216
|
const mergedDataStructure: Omit<
|
|
97
217
|
DataStructure,
|
|
98
218
|
'equivalentSignatureVariables'
|
|
@@ -152,10 +272,38 @@ export default function mergeInDependentDataStructure({
|
|
|
152
272
|
equivalentPostfixes: Record<string, string>;
|
|
153
273
|
}[] = [];
|
|
154
274
|
|
|
275
|
+
// O(1) index for findOrCreateEquivalentSchemaPathsEntry.
|
|
276
|
+
// Maps "(rootPath)::(normalizedFuncName)" → the entry containing that root.
|
|
277
|
+
// This replaces the O(E) linear search that was causing O(E²) gather performance.
|
|
278
|
+
const espIndex = new Map<string, (typeof equivalentSchemaPaths)[0]>();
|
|
279
|
+
const espIndexKey = (path: string, functionName: string | undefined) => {
|
|
280
|
+
const normalized = cleanFunctionName(functionName);
|
|
281
|
+
const funcKey =
|
|
282
|
+
normalized === rootScopeName ? '__self__' : normalized || '__self__';
|
|
283
|
+
return `${path}::${funcKey}`;
|
|
284
|
+
};
|
|
285
|
+
const updateEspIndex = (entry: (typeof equivalentSchemaPaths)[0]) => {
|
|
286
|
+
for (const root of entry.equivalentRoots) {
|
|
287
|
+
const funcName = root.function?.name ?? rootScopeName;
|
|
288
|
+
espIndex.set(espIndexKey(root.schemaRootPath, funcName), entry);
|
|
289
|
+
}
|
|
290
|
+
};
|
|
291
|
+
|
|
292
|
+
// Pre-build a lookup map from cleaned function name to dependency for O(1) lookups.
|
|
293
|
+
// This avoids O(n) linear search in findRelevantDependency which was causing O(n²) performance.
|
|
294
|
+
const dependencyByCleanedName = new Map<
|
|
295
|
+
string,
|
|
296
|
+
(typeof importedExports)[0]
|
|
297
|
+
>();
|
|
298
|
+
for (const dep of importedExports) {
|
|
299
|
+
const cleanedName = cleanFunctionName(dep.name);
|
|
300
|
+
if (!dependencyByCleanedName.has(cleanedName)) {
|
|
301
|
+
dependencyByCleanedName.set(cleanedName, dep);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
|
|
155
305
|
const findRelevantDependency = (functionName: any) => {
|
|
156
|
-
return
|
|
157
|
-
(d) => cleanFunctionName(d.name) === cleanFunctionName(functionName),
|
|
158
|
-
);
|
|
306
|
+
return dependencyByCleanedName.get(cleanFunctionName(functionName));
|
|
159
307
|
};
|
|
160
308
|
|
|
161
309
|
const findRelevantDependentDataStructure = (functionName: any) => {
|
|
@@ -192,11 +340,30 @@ export default function mergeInDependentDataStructure({
|
|
|
192
340
|
return mergedDataStructure.dependencySchemas[filePath][name];
|
|
193
341
|
};
|
|
194
342
|
|
|
195
|
-
const cleanSchema = (
|
|
196
|
-
|
|
343
|
+
const cleanSchema = (
|
|
344
|
+
schema: { [key: string]: string },
|
|
345
|
+
context?: Record<string, any>,
|
|
346
|
+
) => {
|
|
347
|
+
transformationTracer.traceSchemaTransform(
|
|
348
|
+
rootScopeName,
|
|
349
|
+
'cleanKnownObjectFunctionsFromMapping',
|
|
350
|
+
schema,
|
|
351
|
+
cleanKnownObjectFunctionsFromMapping,
|
|
352
|
+
context,
|
|
353
|
+
);
|
|
197
354
|
};
|
|
198
355
|
|
|
356
|
+
// Cache translatePath results — the same path is often translated multiple times
|
|
357
|
+
// (once per equivalency entry that references it). Avoids redundant
|
|
358
|
+
// splitOutsideParenthesesAndArrays calls on long paths.
|
|
359
|
+
const translatePathCache = new Map<string, string>();
|
|
360
|
+
|
|
199
361
|
const translatePath = (path: string, dependencyName: string) => {
|
|
362
|
+
const cacheKey = `${dependencyName}\0${path}`;
|
|
363
|
+
const cached = translatePathCache.get(cacheKey);
|
|
364
|
+
if (cached !== undefined) return cached;
|
|
365
|
+
|
|
366
|
+
let result = path;
|
|
200
367
|
if (path.startsWith(dependencyName)) {
|
|
201
368
|
const pathParts = splitOutsideParenthesesAndArrays(path);
|
|
202
369
|
if (pathParts.length > 1) {
|
|
@@ -204,33 +371,26 @@ export default function mergeInDependentDataStructure({
|
|
|
204
371
|
// Check if this function has multiple DIFFERENT type parameters.
|
|
205
372
|
// If so, DON'T normalize to returnValue - keep the full path to avoid
|
|
206
373
|
// merging different type-parameterized variants together.
|
|
207
|
-
// e.g., useFetcher<{ data: UserData }>().functionCallReturnValue.data
|
|
208
|
-
// should NOT be merged with useFetcher<{ data: ConfigData }>().functionCallReturnValue.data
|
|
209
374
|
const baseName = cleanFunctionName(pathParts[0]);
|
|
210
|
-
if (functionsWithMultipleTypeParams.has(baseName)) {
|
|
211
|
-
|
|
375
|
+
if (!functionsWithMultipleTypeParams.has(baseName)) {
|
|
376
|
+
// functionCallReturnValue immediately follows - normalize to returnValue
|
|
377
|
+
result = joinParenthesesAndArrays([
|
|
378
|
+
'returnValue',
|
|
379
|
+
...pathParts.slice(2),
|
|
380
|
+
]);
|
|
212
381
|
}
|
|
213
|
-
// functionCallReturnValue immediately follows - normalize to returnValue
|
|
214
|
-
// e.g., useAuth().functionCallReturnValue.user -> returnValue.user
|
|
215
|
-
return joinParenthesesAndArrays([
|
|
216
|
-
'returnValue',
|
|
217
|
-
...pathParts.slice(2),
|
|
218
|
-
]);
|
|
219
382
|
} else if (
|
|
220
383
|
pathParts[0].endsWith(')') &&
|
|
221
384
|
pathParts[1].startsWith('signature[')
|
|
222
385
|
) {
|
|
223
|
-
// Hook-style with signature access
|
|
224
|
-
|
|
225
|
-
return joinParenthesesAndArrays(pathParts.slice(1));
|
|
386
|
+
// Hook-style with signature access
|
|
387
|
+
result = joinParenthesesAndArrays(pathParts.slice(1));
|
|
226
388
|
}
|
|
227
|
-
// For all other cases (object-style APIs like getSupabase().auth and
|
|
228
|
-
// direct object references like supabase.from), preserve the path as-is.
|
|
229
|
-
// The prefix must be kept for proper schema lookups in constructMockCode
|
|
230
|
-
// and gatherDataForMocks.
|
|
231
389
|
}
|
|
232
390
|
}
|
|
233
|
-
|
|
391
|
+
|
|
392
|
+
translatePathCache.set(cacheKey, result);
|
|
393
|
+
return result;
|
|
234
394
|
};
|
|
235
395
|
|
|
236
396
|
const gatherAllEquivalentSchemaPaths = (
|
|
@@ -244,8 +404,58 @@ export default function mergeInDependentDataStructure({
|
|
|
244
404
|
'signatureSchema' | 'returnValueSchema'
|
|
245
405
|
>,
|
|
246
406
|
) => {
|
|
407
|
+
checkDeadline();
|
|
247
408
|
if (!sourceAndUsageEquivalencies) return;
|
|
248
409
|
|
|
410
|
+
// Pre-computed normalized schema index cache.
|
|
411
|
+
// Avoids repeated splitOutsideParenthesesAndArrays calls and function-name
|
|
412
|
+
// normalization for the same schema paths across multiple equivalency iterations.
|
|
413
|
+
// The normalization depends on `functionName` (constant per gatherAllEquivalentSchemaPaths call),
|
|
414
|
+
// so this cache is scoped to this call.
|
|
415
|
+
type NormalizedEntry = { path: string; parts: string[] };
|
|
416
|
+
const normalizedSchemaCache = new Map<
|
|
417
|
+
object,
|
|
418
|
+
{
|
|
419
|
+
byFirstPart: Map<string, NormalizedEntry[]>;
|
|
420
|
+
}
|
|
421
|
+
>();
|
|
422
|
+
const getSchemaIndex = (
|
|
423
|
+
schema: Record<string, string> | undefined,
|
|
424
|
+
): { byFirstPart: Map<string, NormalizedEntry[]> } => {
|
|
425
|
+
if (!schema) return { byFirstPart: new Map() };
|
|
426
|
+
const cached = normalizedSchemaCache.get(schema);
|
|
427
|
+
if (cached) return cached;
|
|
428
|
+
const byFirstPart = new Map<string, NormalizedEntry[]>();
|
|
429
|
+
for (const path in schema) {
|
|
430
|
+
checkDeadline();
|
|
431
|
+
let parts = splitOutsideParenthesesAndArrays(path);
|
|
432
|
+
if (parts[0].startsWith(functionName)) {
|
|
433
|
+
const baseName = cleanFunctionName(parts[0]);
|
|
434
|
+
if (!functionsWithMultipleTypeParams.has(baseName)) {
|
|
435
|
+
parts =
|
|
436
|
+
parts[1] === 'functionCallReturnValue'
|
|
437
|
+
? ['returnValue', ...parts.slice(2)]
|
|
438
|
+
: parts.slice(1);
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
const entry: NormalizedEntry = { path, parts };
|
|
442
|
+
// Index by the base of the first part (before any function call args)
|
|
443
|
+
const firstPart = parts[0] ?? '';
|
|
444
|
+
const parenIdx = firstPart.indexOf('(');
|
|
445
|
+
const firstPartBase =
|
|
446
|
+
parenIdx >= 0 ? firstPart.slice(0, parenIdx) : firstPart;
|
|
447
|
+
let bucket = byFirstPart.get(firstPartBase);
|
|
448
|
+
if (!bucket) {
|
|
449
|
+
bucket = [];
|
|
450
|
+
byFirstPart.set(firstPartBase, bucket);
|
|
451
|
+
}
|
|
452
|
+
bucket.push(entry);
|
|
453
|
+
}
|
|
454
|
+
const result = { byFirstPart };
|
|
455
|
+
normalizedSchemaCache.set(schema, result);
|
|
456
|
+
return result;
|
|
457
|
+
};
|
|
458
|
+
|
|
249
459
|
const findOrCreateEquivalentSchemaPathsEntry = (
|
|
250
460
|
allPaths: { path: string; functionName?: string }[],
|
|
251
461
|
) => {
|
|
@@ -266,41 +476,122 @@ export default function mergeInDependentDataStructure({
|
|
|
266
476
|
let equivalentSchemaPathsEntry:
|
|
267
477
|
| (typeof equivalentSchemaPaths)[0]
|
|
268
478
|
| undefined;
|
|
479
|
+
|
|
480
|
+
// Collect the signature indices from the new roots we want to add
|
|
481
|
+
const newRootSignatureIndices = new Set<number>();
|
|
482
|
+
for (const root of equivalentRoots) {
|
|
483
|
+
const idx = extractSignatureIndex(root.schemaRootPath);
|
|
484
|
+
if (idx !== undefined) {
|
|
485
|
+
newRootSignatureIndices.add(idx);
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
// Use espIndex Map for O(1) lookup instead of O(E) linear search.
|
|
490
|
+
// Falls back to linear search only when Map hit has a signature index conflict.
|
|
269
491
|
for (const pathInfo of allPaths) {
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
492
|
+
checkDeadline();
|
|
493
|
+
if (equivalentSchemaPathsEntry) break;
|
|
494
|
+
const candidate = espIndex.get(
|
|
495
|
+
espIndexKey(pathInfo.path, pathInfo.functionName),
|
|
496
|
+
);
|
|
497
|
+
if (!candidate) continue;
|
|
498
|
+
|
|
499
|
+
// Verify no signature index conflict with the candidate entry
|
|
500
|
+
if (newRootSignatureIndices.size > 0) {
|
|
501
|
+
const existingIndicesByFunction = new Map<string, Set<number>>();
|
|
502
|
+
for (const er of candidate.equivalentRoots) {
|
|
503
|
+
const funcKey = er.function
|
|
504
|
+
? `${er.function.name}::${er.function.filePath}`
|
|
505
|
+
: '__self__';
|
|
506
|
+
const idx = extractSignatureIndex(er.schemaRootPath);
|
|
507
|
+
if (idx !== undefined) {
|
|
508
|
+
if (!existingIndicesByFunction.has(funcKey)) {
|
|
509
|
+
existingIndicesByFunction.set(funcKey, new Set());
|
|
510
|
+
}
|
|
511
|
+
existingIndicesByFunction.get(funcKey)!.add(idx);
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
let hasConflict = false;
|
|
516
|
+
for (const newRoot of equivalentRoots) {
|
|
517
|
+
const funcKey = newRoot.function
|
|
518
|
+
? `${newRoot.function.name}::${newRoot.function.filePath}`
|
|
519
|
+
: '__self__';
|
|
520
|
+
const newIdx = extractSignatureIndex(newRoot.schemaRootPath);
|
|
521
|
+
if (newIdx !== undefined) {
|
|
522
|
+
const existingIndices = existingIndicesByFunction.get(funcKey);
|
|
523
|
+
if (existingIndices && existingIndices.size > 0) {
|
|
524
|
+
if (!existingIndices.has(newIdx)) {
|
|
525
|
+
hasConflict = true;
|
|
526
|
+
break;
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
if (hasConflict) continue;
|
|
282
533
|
}
|
|
534
|
+
|
|
535
|
+
equivalentSchemaPathsEntry = candidate;
|
|
283
536
|
}
|
|
284
537
|
|
|
285
538
|
if (!equivalentSchemaPathsEntry) {
|
|
539
|
+
// Before creating a new entry, filter out roots that have conflicting
|
|
540
|
+
// signature indices from the same function. An entry should never contain
|
|
541
|
+
// roots with different signature indices from the same function.
|
|
542
|
+
// This prevents the bug where signature[1], signature[2], signature[4]
|
|
543
|
+
// all get merged together due to incorrect sourceEquivalencies.
|
|
544
|
+
let filteredRoots = equivalentRoots;
|
|
545
|
+
if (newRootSignatureIndices.size > 1) {
|
|
546
|
+
// There are multiple signature indices - we need to filter to keep only
|
|
547
|
+
// one consistent set. We'll keep the roots that match the PRIMARY index
|
|
548
|
+
// (the first signature index we encounter from self, or the lowest index).
|
|
549
|
+
|
|
550
|
+
// First, determine the primary index - prefer the self root's index
|
|
551
|
+
let primaryIndex: number | undefined;
|
|
552
|
+
for (const root of equivalentRoots) {
|
|
553
|
+
if (!root.function) {
|
|
554
|
+
// This is a self root
|
|
555
|
+
const idx = extractSignatureIndex(root.schemaRootPath);
|
|
556
|
+
if (idx !== undefined) {
|
|
557
|
+
primaryIndex = idx;
|
|
558
|
+
break;
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
// If no self root has a signature index, use the lowest index
|
|
563
|
+
if (primaryIndex === undefined) {
|
|
564
|
+
primaryIndex = Math.min(...newRootSignatureIndices);
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
// Filter roots: keep if no signature index OR signature index matches primary
|
|
568
|
+
filteredRoots = equivalentRoots.filter((root) => {
|
|
569
|
+
const idx = extractSignatureIndex(root.schemaRootPath);
|
|
570
|
+
return idx === undefined || idx === primaryIndex;
|
|
571
|
+
});
|
|
572
|
+
}
|
|
573
|
+
|
|
286
574
|
equivalentSchemaPathsEntry = {
|
|
287
|
-
equivalentRoots,
|
|
575
|
+
equivalentRoots: filteredRoots,
|
|
288
576
|
equivalentPostfixes: {},
|
|
289
577
|
};
|
|
290
578
|
equivalentSchemaPaths.push(equivalentSchemaPathsEntry);
|
|
291
579
|
} else {
|
|
292
580
|
equivalentSchemaPathsEntry.equivalentRoots.push(...equivalentRoots);
|
|
293
581
|
}
|
|
582
|
+
|
|
583
|
+
// Deduplicate roots using a Set for O(n) instead of O(n²)
|
|
584
|
+
const seenRoots = new Set<string>();
|
|
294
585
|
equivalentSchemaPathsEntry.equivalentRoots =
|
|
295
|
-
equivalentSchemaPathsEntry.equivalentRoots.filter(
|
|
296
|
-
(er
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
586
|
+
equivalentSchemaPathsEntry.equivalentRoots.filter((er) => {
|
|
587
|
+
const key = er.schemaRootPath + '::' + (er.function?.name ?? '');
|
|
588
|
+
if (seenRoots.has(key)) return false;
|
|
589
|
+
seenRoots.add(key);
|
|
590
|
+
return true;
|
|
591
|
+
});
|
|
592
|
+
|
|
593
|
+
// Keep the espIndex in sync after adding/deduplicating roots
|
|
594
|
+
updateEspIndex(equivalentSchemaPathsEntry);
|
|
304
595
|
|
|
305
596
|
return equivalentSchemaPathsEntry;
|
|
306
597
|
};
|
|
@@ -330,20 +621,43 @@ export default function mergeInDependentDataStructure({
|
|
|
330
621
|
for (const equivalencies of allEquivalencies) {
|
|
331
622
|
const schemaPathEntries = Object.entries(equivalencies);
|
|
332
623
|
for (const [schemaPath, usages] of schemaPathEntries) {
|
|
624
|
+
checkDeadline();
|
|
625
|
+
|
|
626
|
+
// Skip equivalency entries whose source path is a Set/Map membership operation.
|
|
627
|
+
// Patterns like `.has(articleId)`, `.delete(articleId)`, `.add(articleId)` on
|
|
628
|
+
// Sets/Maps represent membership checks, not meaningful data flow for schema generation.
|
|
629
|
+
// In the Margo LibraryPage case, these account for 74% of all equivalency targets
|
|
630
|
+
// (19,444 of 26,340) and cause a combinatorial explosion in the merge.
|
|
631
|
+
if (isCollectionMethodPath(schemaPath)) continue;
|
|
632
|
+
|
|
333
633
|
// First, check if the raw schemaPath starts with a function call to a dependency.
|
|
334
634
|
// If so, use that dependency name for translation (so translatePath can strip the prefix).
|
|
335
635
|
const extractedFuncName = extractFunctionNameFromPath(schemaPath);
|
|
336
636
|
const effectiveFunctionName = extractedFuncName || functionName;
|
|
337
637
|
const translatedPath = translatePath(schemaPath, effectiveFunctionName);
|
|
338
638
|
|
|
339
|
-
const
|
|
639
|
+
const allPathsRaw: { path: string; functionName?: string }[] = [
|
|
340
640
|
{ path: translatedPath, functionName: effectiveFunctionName },
|
|
341
|
-
...usages
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
641
|
+
...usages
|
|
642
|
+
.filter((u) => !isCollectionMethodPath(u.schemaPath))
|
|
643
|
+
.map((u) => ({
|
|
644
|
+
path: translatePath(u.schemaPath, u.scopeNodeName),
|
|
645
|
+
functionName: u.scopeNodeName,
|
|
646
|
+
})),
|
|
345
647
|
].filter((pathInfo) => !pathInfo.path.includes('.map('));
|
|
346
648
|
|
|
649
|
+
// Deduplicate by translated path + function name.
|
|
650
|
+
// Multiple call variants (e.g., loadView(viewKey(null,null)) vs loadView(viewKey(newTag,newCol)))
|
|
651
|
+
// translate to the same path after stripping arguments. Processing duplicates
|
|
652
|
+
// creates O(n²) work in the schema matching loops below.
|
|
653
|
+
const seenPathKeys = new Set<string>();
|
|
654
|
+
const allPaths = allPathsRaw.filter((p) => {
|
|
655
|
+
const key = `${p.functionName ?? ''}::${p.path}`;
|
|
656
|
+
if (seenPathKeys.has(key)) return false;
|
|
657
|
+
seenPathKeys.add(key);
|
|
658
|
+
return true;
|
|
659
|
+
});
|
|
660
|
+
|
|
347
661
|
// Fix 38: Derive base paths from property access paths.
|
|
348
662
|
// When we have equivalent paths like:
|
|
349
663
|
// Parent: signature[0].scenarios[].name
|
|
@@ -370,9 +684,12 @@ export default function mergeInDependentDataStructure({
|
|
|
370
684
|
);
|
|
371
685
|
|
|
372
686
|
const derivedBasePaths: { path: string; functionName?: string }[] = [];
|
|
687
|
+
const allPathSet = new Set(allPaths.map((p) => p.path));
|
|
688
|
+
const derivedBasePathSet = new Set<string>();
|
|
373
689
|
|
|
374
690
|
// For each child path, find its equivalent parent path and derive bases
|
|
375
691
|
for (const childPathInfo of childPaths) {
|
|
692
|
+
checkDeadline();
|
|
376
693
|
const childParts = splitOutsideParenthesesAndArrays(
|
|
377
694
|
childPathInfo.path,
|
|
378
695
|
);
|
|
@@ -446,26 +763,28 @@ export default function mergeInDependentDataStructure({
|
|
|
446
763
|
!childHasArrayIterator &&
|
|
447
764
|
!childBaseIsGenericSignature
|
|
448
765
|
) {
|
|
449
|
-
// Add child base if not already present
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
766
|
+
// Add child base if not already present (O(1) Set lookup)
|
|
767
|
+
if (
|
|
768
|
+
!allPathSet.has(childBase) &&
|
|
769
|
+
!derivedBasePathSet.has(childBase)
|
|
770
|
+
) {
|
|
454
771
|
derivedBasePaths.push({
|
|
455
772
|
path: childBase,
|
|
456
773
|
functionName: childPathInfo.functionName,
|
|
457
774
|
});
|
|
775
|
+
derivedBasePathSet.add(childBase);
|
|
458
776
|
}
|
|
459
777
|
|
|
460
|
-
// Add parent base if not already present
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
778
|
+
// Add parent base if not already present (O(1) Set lookup)
|
|
779
|
+
if (
|
|
780
|
+
!allPathSet.has(parentBase) &&
|
|
781
|
+
!derivedBasePathSet.has(parentBase)
|
|
782
|
+
) {
|
|
465
783
|
derivedBasePaths.push({
|
|
466
784
|
path: parentBase,
|
|
467
785
|
functionName: parentPathInfo.functionName,
|
|
468
786
|
});
|
|
787
|
+
derivedBasePathSet.add(parentBase);
|
|
469
788
|
}
|
|
470
789
|
}
|
|
471
790
|
}
|
|
@@ -476,7 +795,28 @@ export default function mergeInDependentDataStructure({
|
|
|
476
795
|
allPaths.push(...derivedBasePaths);
|
|
477
796
|
|
|
478
797
|
const entry = findOrCreateEquivalentSchemaPathsEntry(allPaths);
|
|
798
|
+
|
|
799
|
+
// Trace equivalency gathering - helps debug why paths may not be connected
|
|
800
|
+
if (allPaths.length > 1) {
|
|
801
|
+
transformationTracer.operation(rootScopeName, {
|
|
802
|
+
operation: 'gatherEquivalency',
|
|
803
|
+
stage: 'gathering',
|
|
804
|
+
path: translatedPath,
|
|
805
|
+
context: {
|
|
806
|
+
sourceFunction: functionName,
|
|
807
|
+
equivalentPaths: allPaths.map((p) => ({
|
|
808
|
+
path: p.path,
|
|
809
|
+
function: p.functionName,
|
|
810
|
+
})),
|
|
811
|
+
equivalentRoots: entry.equivalentRoots.map((r) => ({
|
|
812
|
+
path: r.schemaRootPath,
|
|
813
|
+
function: r.function?.name,
|
|
814
|
+
})),
|
|
815
|
+
},
|
|
816
|
+
});
|
|
817
|
+
}
|
|
479
818
|
for (const equivalentRoot of entry.equivalentRoots) {
|
|
819
|
+
checkDeadline();
|
|
480
820
|
const dataStructures =
|
|
481
821
|
equivalentRoot.function &&
|
|
482
822
|
equivalentRoot.function.name !== rootScopeName
|
|
@@ -523,21 +863,21 @@ export default function mergeInDependentDataStructure({
|
|
|
523
863
|
}
|
|
524
864
|
|
|
525
865
|
for (const schema of schemas) {
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
866
|
+
// Use pre-computed index to only iterate schema entries whose
|
|
867
|
+
// normalized first part matches pathParts[0], instead of all entries.
|
|
868
|
+
const schemaIndex = getSchemaIndex(schema);
|
|
869
|
+
const lookupPart = pathParts[0] ?? '';
|
|
870
|
+
const lookupParenIdx = lookupPart.indexOf('(');
|
|
871
|
+
const lookupBase =
|
|
872
|
+
lookupParenIdx >= 0
|
|
873
|
+
? lookupPart.slice(0, lookupParenIdx)
|
|
874
|
+
: lookupPart;
|
|
875
|
+
const candidates = schemaIndex.byFirstPart.get(lookupBase) || [];
|
|
876
|
+
for (const {
|
|
877
|
+
path: schemaPath,
|
|
878
|
+
parts: schemaPathParts,
|
|
879
|
+
} of candidates) {
|
|
880
|
+
checkDeadline();
|
|
541
881
|
if (schemaPathParts.length < pathParts.length) continue;
|
|
542
882
|
|
|
543
883
|
// Check if all path parts match (allowing function call variants)
|
|
@@ -606,13 +946,29 @@ export default function mergeInDependentDataStructure({
|
|
|
606
946
|
schemaPathParts.slice(matchedUpToIndex),
|
|
607
947
|
);
|
|
608
948
|
|
|
609
|
-
entry.equivalentPostfixes[postfix]
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
949
|
+
const previousValue = entry.equivalentPostfixes[postfix];
|
|
950
|
+
const newValue = schema[schemaPath];
|
|
951
|
+
entry.equivalentPostfixes[postfix] = previousValue
|
|
952
|
+
? bestValueFromOptions([previousValue, newValue])
|
|
953
|
+
: newValue;
|
|
954
|
+
|
|
955
|
+
// Trace postfix gathering - shows where type info comes from
|
|
956
|
+
if (entry.equivalentPostfixes[postfix] !== previousValue) {
|
|
957
|
+
transformationTracer.operation(rootScopeName, {
|
|
958
|
+
operation: 'gatherPostfix',
|
|
959
|
+
stage: 'gathering',
|
|
960
|
+
path: postfix || '(root)',
|
|
961
|
+
before: previousValue,
|
|
962
|
+
after: entry.equivalentPostfixes[postfix],
|
|
963
|
+
context: {
|
|
964
|
+
sourceSchemaPath: schemaPath,
|
|
965
|
+
sourceFunction:
|
|
966
|
+
equivalentRoot.function?.name || rootScopeName,
|
|
967
|
+
equivalentRootPath: equivalentRoot.schemaRootPath,
|
|
968
|
+
rawValue: newValue,
|
|
969
|
+
},
|
|
970
|
+
});
|
|
971
|
+
}
|
|
616
972
|
}
|
|
617
973
|
}
|
|
618
974
|
}
|
|
@@ -629,6 +985,7 @@ export default function mergeInDependentDataStructure({
|
|
|
629
985
|
// where we want both X().functionCallReturnValue and Y().functionCallReturnValue as bases
|
|
630
986
|
const allBasePaths = new Set<string>();
|
|
631
987
|
for (const path of Object.keys(dataStructure.returnValueSchema)) {
|
|
988
|
+
checkDeadline();
|
|
632
989
|
const parts = splitOutsideParenthesesAndArrays(path);
|
|
633
990
|
// Find all positions of functionCallReturnValue and create base paths for each
|
|
634
991
|
for (let i = 0; i < parts.length; i++) {
|
|
@@ -649,13 +1006,21 @@ export default function mergeInDependentDataStructure({
|
|
|
649
1006
|
const entry = findOrCreateEquivalentSchemaPathsEntry([
|
|
650
1007
|
{ path: translatedBasePath, functionName: functionName },
|
|
651
1008
|
]);
|
|
652
|
-
|
|
1009
|
+
const newRoot = {
|
|
653
1010
|
schemaRootPath: translatedBasePath,
|
|
654
1011
|
function: findRelevantDependency(functionName),
|
|
655
|
-
}
|
|
1012
|
+
};
|
|
1013
|
+
entry.equivalentRoots.push(newRoot);
|
|
1014
|
+
// Update index for the newly added root
|
|
1015
|
+
const newRootFuncName = newRoot.function?.name ?? rootScopeName;
|
|
1016
|
+
espIndex.set(
|
|
1017
|
+
espIndexKey(newRoot.schemaRootPath, newRootFuncName),
|
|
1018
|
+
entry,
|
|
1019
|
+
);
|
|
656
1020
|
|
|
657
1021
|
const basePathParts = splitOutsideParenthesesAndArrays(basePath);
|
|
658
1022
|
for (const schemaPath in dataStructure.returnValueSchema) {
|
|
1023
|
+
checkDeadline();
|
|
659
1024
|
const schemaPathParts = splitOutsideParenthesesAndArrays(schemaPath);
|
|
660
1025
|
if (schemaPathParts.length < basePathParts.length) continue;
|
|
661
1026
|
|
|
@@ -672,14 +1037,14 @@ export default function mergeInDependentDataStructure({
|
|
|
672
1037
|
const postfix = joinParenthesesAndArrays(
|
|
673
1038
|
schemaPathParts.slice(basePathParts.length),
|
|
674
1039
|
);
|
|
675
|
-
|
|
676
|
-
postfix
|
|
677
|
-
]
|
|
1040
|
+
const newValue = entry.equivalentPostfixes[postfix]
|
|
678
1041
|
? bestValueFromOptions([
|
|
679
1042
|
entry.equivalentPostfixes[postfix],
|
|
680
1043
|
dataStructure.returnValueSchema[schemaPath],
|
|
681
1044
|
])
|
|
682
1045
|
: dataStructure.returnValueSchema[schemaPath];
|
|
1046
|
+
|
|
1047
|
+
entry.equivalentPostfixes[postfix] = newValue;
|
|
683
1048
|
}
|
|
684
1049
|
}
|
|
685
1050
|
}
|
|
@@ -696,6 +1061,7 @@ export default function mergeInDependentDataStructure({
|
|
|
696
1061
|
// We do this before the main merge to ensure the connection happens regardless
|
|
697
1062
|
// of processing order.
|
|
698
1063
|
for (const esp of equivalentSchemaPaths) {
|
|
1064
|
+
checkDeadline();
|
|
699
1065
|
for (const root of esp.equivalentRoots) {
|
|
700
1066
|
if (root.schemaRootPath.endsWith('[]')) {
|
|
701
1067
|
// Find a matching parent entry with the base array path
|
|
@@ -716,6 +1082,7 @@ export default function mergeInDependentDataStructure({
|
|
|
716
1082
|
for (const [postfixPath, postfixValue] of Object.entries(
|
|
717
1083
|
esp.equivalentPostfixes,
|
|
718
1084
|
)) {
|
|
1085
|
+
checkDeadline();
|
|
719
1086
|
const transformedPostfix = joinParenthesesAndArrays(
|
|
720
1087
|
['[]', postfixPath].filter(Boolean),
|
|
721
1088
|
);
|
|
@@ -734,6 +1101,10 @@ export default function mergeInDependentDataStructure({
|
|
|
734
1101
|
equivalentRootFunction: (typeof equivalentSchemaPaths)[0]['equivalentRoots'][0]['function'],
|
|
735
1102
|
) => {
|
|
736
1103
|
let postfix: string | undefined;
|
|
1104
|
+
|
|
1105
|
+
// Get the signature index we're looking for (if any)
|
|
1106
|
+
const lookingForSignatureIndex = extractSignatureIndex(schemaSubPath);
|
|
1107
|
+
|
|
737
1108
|
const equivalentEntry = mergedEquivalentSchemaPaths.find((esp) =>
|
|
738
1109
|
esp.equivalentRoots.some((er) => {
|
|
739
1110
|
if (
|
|
@@ -746,6 +1117,35 @@ export default function mergeInDependentDataStructure({
|
|
|
746
1117
|
}
|
|
747
1118
|
|
|
748
1119
|
if (schemaSubPath === er.schemaRootPath) {
|
|
1120
|
+
// Additional check: if we're looking for a signature path, make sure
|
|
1121
|
+
// the entry doesn't already have DIFFERENT signature indices.
|
|
1122
|
+
// This prevents entries with signature[1], signature[2], signature[4]
|
|
1123
|
+
// from all being merged together.
|
|
1124
|
+
if (lookingForSignatureIndex !== undefined) {
|
|
1125
|
+
const hasConflictingSignatureIndex = esp.equivalentRoots.some(
|
|
1126
|
+
(otherRoot) => {
|
|
1127
|
+
// Only check roots from the same function
|
|
1128
|
+
if (
|
|
1129
|
+
otherRoot.function?.name !== equivalentRootFunction?.name ||
|
|
1130
|
+
otherRoot.function?.filePath !==
|
|
1131
|
+
equivalentRootFunction?.filePath
|
|
1132
|
+
) {
|
|
1133
|
+
return false;
|
|
1134
|
+
}
|
|
1135
|
+
const otherIndex = extractSignatureIndex(
|
|
1136
|
+
otherRoot.schemaRootPath,
|
|
1137
|
+
);
|
|
1138
|
+
return (
|
|
1139
|
+
otherIndex !== undefined &&
|
|
1140
|
+
otherIndex !== lookingForSignatureIndex
|
|
1141
|
+
);
|
|
1142
|
+
},
|
|
1143
|
+
);
|
|
1144
|
+
if (hasConflictingSignatureIndex) {
|
|
1145
|
+
return false;
|
|
1146
|
+
}
|
|
1147
|
+
}
|
|
1148
|
+
|
|
749
1149
|
postfix = er.postfix;
|
|
750
1150
|
return true;
|
|
751
1151
|
}
|
|
@@ -772,6 +1172,7 @@ export default function mergeInDependentDataStructure({
|
|
|
772
1172
|
);
|
|
773
1173
|
|
|
774
1174
|
for (const esp of sortedEquivalentSchemaPaths) {
|
|
1175
|
+
checkDeadline();
|
|
775
1176
|
if (esp.equivalentRoots.length === 0) continue;
|
|
776
1177
|
let bestCandidateLength: number | undefined;
|
|
777
1178
|
let bestCandidate: (typeof equivalentSchemaPaths)[0] | undefined;
|
|
@@ -853,6 +1254,7 @@ export default function mergeInDependentDataStructure({
|
|
|
853
1254
|
// dependencySchemas contains usage information (how dependencies are called),
|
|
854
1255
|
// not internal implementation, so we want this for mocked dependencies too
|
|
855
1256
|
for (const dependency of importedExports) {
|
|
1257
|
+
checkDeadline();
|
|
856
1258
|
const dependentDataStructure =
|
|
857
1259
|
dependencySchemas?.[dependency.filePath]?.[dependency.name];
|
|
858
1260
|
if (!dependentDataStructure) continue;
|
|
@@ -877,10 +1279,75 @@ export default function mergeInDependentDataStructure({
|
|
|
877
1279
|
}
|
|
878
1280
|
}
|
|
879
1281
|
|
|
1282
|
+
const gatherElapsed = Date.now() - mergeStartTime;
|
|
1283
|
+
|
|
880
1284
|
equivalentSchemaPaths = mergeAllEquivalentSchemaPaths();
|
|
881
1285
|
|
|
1286
|
+
const mergeEspElapsed = Date.now() - mergeStartTime;
|
|
1287
|
+
|
|
1288
|
+
// Collect schemas that need cleaning — batch the calls for the end instead of
|
|
1289
|
+
// calling cleanSchema inside the inner root loop (which was O(roots * schemaSize)).
|
|
1290
|
+
const schemasToClean = new Set<{ [key: string]: string }>();
|
|
1291
|
+
|
|
882
1292
|
for (const esp of equivalentSchemaPaths) {
|
|
883
|
-
|
|
1293
|
+
checkDeadline();
|
|
1294
|
+
// Pre-compute which postfixes have children to avoid O(n²) lookups in the inner loop.
|
|
1295
|
+
// A postfix "has children" if there are other postfixes that extend it.
|
|
1296
|
+
const postfixesWithChildren = new Set<string>();
|
|
1297
|
+
const postfixKeys = Object.keys(esp.equivalentPostfixes);
|
|
1298
|
+
|
|
1299
|
+
// Pre-parse ALL postfix paths once. These parsed parts are reused in:
|
|
1300
|
+
// 1. The children detection loop below
|
|
1301
|
+
// 2. The inner postfix application loop (lines that split postfixPath and equivalentRoot.postfix)
|
|
1302
|
+
// This eliminates thousands of redundant splitOutsideParenthesesAndArrays calls.
|
|
1303
|
+
const postfixPartsCache = new Map<string, string[]>();
|
|
1304
|
+
for (const postfixPath of postfixKeys) {
|
|
1305
|
+
if (!postfixPath) continue;
|
|
1306
|
+
postfixPartsCache.set(
|
|
1307
|
+
postfixPath,
|
|
1308
|
+
splitOutsideParenthesesAndArrays(postfixPath),
|
|
1309
|
+
);
|
|
1310
|
+
}
|
|
1311
|
+
|
|
1312
|
+
// Check for empty postfix having children (any other postfixes exist)
|
|
1313
|
+
if (postfixKeys.length > 1 && '' in esp.equivalentPostfixes) {
|
|
1314
|
+
postfixesWithChildren.add('');
|
|
1315
|
+
}
|
|
1316
|
+
|
|
1317
|
+
// Check for array element postfixes having children using a prefix set.
|
|
1318
|
+
// This avoids O(n²) scans across large postfix lists.
|
|
1319
|
+
// e.g., 'currentEntities[]' has children if a path like 'currentEntities[].sha' exists.
|
|
1320
|
+
const postfixPrefixSet = new Set<string>();
|
|
1321
|
+
for (const postfixPath of postfixKeys) {
|
|
1322
|
+
if (!postfixPath) continue;
|
|
1323
|
+
const parts = postfixPartsCache.get(postfixPath)!;
|
|
1324
|
+
for (let i = 1; i < parts.length; i++) {
|
|
1325
|
+
postfixPrefixSet.add(joinParenthesesAndArrays(parts.slice(0, i)));
|
|
1326
|
+
}
|
|
1327
|
+
}
|
|
1328
|
+
for (const postfixPath of postfixKeys) {
|
|
1329
|
+
if (postfixPath.endsWith('[]') && postfixPrefixSet.has(postfixPath)) {
|
|
1330
|
+
postfixesWithChildren.add(postfixPath);
|
|
1331
|
+
}
|
|
1332
|
+
}
|
|
1333
|
+
|
|
1334
|
+
// Deduplicate equivalentRoots that would write to the same schema paths.
|
|
1335
|
+
// Roots with the same (function, schemaRootPath, postfix) are redundant.
|
|
1336
|
+
const seenRootKeys = new Set<string>();
|
|
1337
|
+
const uniqueRoots = esp.equivalentRoots.filter((root) => {
|
|
1338
|
+
const key = `${root.function?.filePath ?? ''}::${root.function?.name ?? ''}::${root.schemaRootPath}::${root.postfix ?? ''}`;
|
|
1339
|
+
if (seenRootKeys.has(key)) return false;
|
|
1340
|
+
seenRootKeys.add(key);
|
|
1341
|
+
return true;
|
|
1342
|
+
});
|
|
1343
|
+
|
|
1344
|
+
// Cap schema size to prevent combinatorial explosion.
|
|
1345
|
+
// Successful merges produce <3K ret keys. Beyond 5K, further postfixes
|
|
1346
|
+
// add noise but no useful data — they're cross-products of unrelated equivalencies.
|
|
1347
|
+
const SCHEMA_KEY_CAP = 5_000;
|
|
1348
|
+
|
|
1349
|
+
for (const equivalentRoot of uniqueRoots) {
|
|
1350
|
+
checkDeadline();
|
|
884
1351
|
let merged:
|
|
885
1352
|
| {
|
|
886
1353
|
signatureSchema: { [key: string]: string };
|
|
@@ -900,20 +1367,44 @@ export default function mergeInDependentDataStructure({
|
|
|
900
1367
|
? merged.signatureSchema
|
|
901
1368
|
: merged.returnValueSchema;
|
|
902
1369
|
|
|
1370
|
+
// Skip if this schema has already grown past the cap
|
|
1371
|
+
if (Object.keys(schema).length > SCHEMA_KEY_CAP) continue;
|
|
1372
|
+
|
|
903
1373
|
for (const [postfixPath, postfixValue] of Object.entries(
|
|
904
1374
|
esp.equivalentPostfixes,
|
|
905
1375
|
)) {
|
|
1376
|
+
checkDeadline();
|
|
906
1377
|
let relevantPostfix = postfixPath;
|
|
907
1378
|
if (equivalentRoot.postfix) {
|
|
1379
|
+
// Check if postfixPath starts with equivalentRoot.postfix at a path boundary.
|
|
1380
|
+
// Must ensure exact path part match - "entityCode" should NOT match "entity" prefix.
|
|
1381
|
+
// Valid: "entity.foo" starts with "entity" (boundary at '.')
|
|
1382
|
+
// Valid: "entity[0]" starts with "entity" (boundary at '[')
|
|
1383
|
+
// Invalid: "entityCode" starts with "entity" (no boundary, different property)
|
|
908
1384
|
if (!postfixPath.startsWith(equivalentRoot.postfix)) {
|
|
909
1385
|
continue;
|
|
910
1386
|
}
|
|
1387
|
+
// Additional check: ensure the match is at a path boundary
|
|
1388
|
+
const nextChar = postfixPath[equivalentRoot.postfix.length];
|
|
1389
|
+
if (nextChar !== undefined && nextChar !== '.' && nextChar !== '[') {
|
|
1390
|
+
// The postfixPath continues with more characters that aren't a path separator.
|
|
1391
|
+
// This means "entity" matched "entityCode" which is wrong - they're different properties.
|
|
1392
|
+
continue;
|
|
1393
|
+
}
|
|
911
1394
|
|
|
912
1395
|
const postFixPathParts =
|
|
1396
|
+
postfixPartsCache.get(postfixPath) ??
|
|
913
1397
|
splitOutsideParenthesesAndArrays(postfixPath);
|
|
914
|
-
|
|
1398
|
+
// Cache equivalentRoot.postfix parts — same root reused across all postfixes
|
|
1399
|
+
if (!postfixPartsCache.has(equivalentRoot.postfix)) {
|
|
1400
|
+
postfixPartsCache.set(
|
|
1401
|
+
equivalentRoot.postfix,
|
|
1402
|
+
splitOutsideParenthesesAndArrays(equivalentRoot.postfix),
|
|
1403
|
+
);
|
|
1404
|
+
}
|
|
1405
|
+
const equivalentRootPostFixParts = postfixPartsCache.get(
|
|
915
1406
|
equivalentRoot.postfix,
|
|
916
|
-
)
|
|
1407
|
+
)!;
|
|
917
1408
|
relevantPostfix = joinParenthesesAndArrays(
|
|
918
1409
|
postFixPathParts.slice(equivalentRootPostFixParts.length),
|
|
919
1410
|
);
|
|
@@ -924,13 +1415,102 @@ export default function mergeInDependentDataStructure({
|
|
|
924
1415
|
relevantPostfix,
|
|
925
1416
|
]);
|
|
926
1417
|
|
|
1418
|
+
// Skip paths that would go through a primitive type
|
|
1419
|
+
// e.g., if schema has 'entities[].scenarioCount': 'number', skip 'entities[].scenarioCount.sha'
|
|
1420
|
+
if (wouldGoThroughPrimitive(newSchemaPath, schema)) {
|
|
1421
|
+
transformationTracer.operation(rootScopeName, {
|
|
1422
|
+
operation: 'skipPrimitivePath',
|
|
1423
|
+
stage: 'merged',
|
|
1424
|
+
path: newSchemaPath,
|
|
1425
|
+
context: {
|
|
1426
|
+
reason: 'would go through primitive type',
|
|
1427
|
+
postfixValue,
|
|
1428
|
+
},
|
|
1429
|
+
});
|
|
1430
|
+
continue;
|
|
1431
|
+
}
|
|
1432
|
+
|
|
1433
|
+
// Skip setting primitive type when there are child postfixes that indicate structure.
|
|
1434
|
+
// This prevents downgrading an object/array element to a primitive type.
|
|
1435
|
+
// Uses pre-computed postfixesWithChildren Set for O(1) lookup instead of O(n) iteration.
|
|
1436
|
+
const hasChildPostfixes =
|
|
1437
|
+
(relevantPostfix === '' || relevantPostfix.endsWith('[]')) &&
|
|
1438
|
+
postfixesWithChildren.has(postfixPath);
|
|
1439
|
+
if (PRIMITIVE_TYPES.has(postfixValue) && hasChildPostfixes) {
|
|
1440
|
+
continue;
|
|
1441
|
+
}
|
|
1442
|
+
|
|
1443
|
+
// Don't overwrite a more specific type with a less specific one
|
|
1444
|
+
// This can happen when nested roots share entries with their parent roots
|
|
1445
|
+
const existingType = schema[newSchemaPath];
|
|
1446
|
+
if (existingType) {
|
|
1447
|
+
// Don't overwrite a primitive type with 'object' or 'array'
|
|
1448
|
+
// e.g., if schema has 'entities[].scenarioCount': 'number', don't overwrite with 'object'
|
|
1449
|
+
if (
|
|
1450
|
+
PRIMITIVE_TYPES.has(existingType) &&
|
|
1451
|
+
(postfixValue === 'object' || postfixValue === 'array')
|
|
1452
|
+
) {
|
|
1453
|
+
transformationTracer.operation(rootScopeName, {
|
|
1454
|
+
operation: 'skipTypeDowngrade',
|
|
1455
|
+
stage: 'merged',
|
|
1456
|
+
path: newSchemaPath,
|
|
1457
|
+
context: {
|
|
1458
|
+
reason: 'would overwrite primitive with object/array',
|
|
1459
|
+
existingType,
|
|
1460
|
+
newType: postfixValue,
|
|
1461
|
+
},
|
|
1462
|
+
});
|
|
1463
|
+
continue;
|
|
1464
|
+
}
|
|
1465
|
+
// Don't overwrite a complex/union type with a primitive
|
|
1466
|
+
// e.g., if schema has 'scenarios[]': 'Scenario | null', don't overwrite with 'string'
|
|
1467
|
+
if (
|
|
1468
|
+
!PRIMITIVE_TYPES.has(existingType) &&
|
|
1469
|
+
PRIMITIVE_TYPES.has(postfixValue)
|
|
1470
|
+
) {
|
|
1471
|
+
transformationTracer.operation(rootScopeName, {
|
|
1472
|
+
operation: 'skipTypeDowngrade',
|
|
1473
|
+
stage: 'merged',
|
|
1474
|
+
path: newSchemaPath,
|
|
1475
|
+
context: {
|
|
1476
|
+
reason: 'would overwrite complex type with primitive',
|
|
1477
|
+
existingType,
|
|
1478
|
+
newType: postfixValue,
|
|
1479
|
+
},
|
|
1480
|
+
});
|
|
1481
|
+
continue;
|
|
1482
|
+
}
|
|
1483
|
+
}
|
|
1484
|
+
|
|
1485
|
+
// Log the successful postfix merge
|
|
1486
|
+
transformationTracer.operation(rootScopeName, {
|
|
1487
|
+
operation: 'mergePostfix',
|
|
1488
|
+
stage: 'merged',
|
|
1489
|
+
path: newSchemaPath,
|
|
1490
|
+
before: existingType,
|
|
1491
|
+
after: postfixValue,
|
|
1492
|
+
context: {
|
|
1493
|
+
schemaRootPath: equivalentRoot.schemaRootPath,
|
|
1494
|
+
postfix: relevantPostfix,
|
|
1495
|
+
dependency: equivalentRoot.function?.name,
|
|
1496
|
+
},
|
|
1497
|
+
});
|
|
927
1498
|
schema[newSchemaPath] = postfixValue;
|
|
928
1499
|
}
|
|
929
1500
|
|
|
930
|
-
|
|
1501
|
+
schemasToClean.add(schema);
|
|
931
1502
|
}
|
|
932
1503
|
}
|
|
933
1504
|
|
|
1505
|
+
const postfixElapsed = Date.now() - mergeStartTime;
|
|
1506
|
+
|
|
1507
|
+
// Batch-clean all modified schemas once (instead of once per root per ESP entry)
|
|
1508
|
+
for (const schema of schemasToClean) {
|
|
1509
|
+
cleanSchema(schema, { stage: 'afterMergePostfix' });
|
|
1510
|
+
}
|
|
1511
|
+
|
|
1512
|
+
const cleanElapsed = Date.now() - mergeStartTime;
|
|
1513
|
+
|
|
934
1514
|
// Propagate equivalency-derived attributes to generic function call variants.
|
|
935
1515
|
// When attributes are traced via equivalencies (e.g., fileComparisons from buildDataMap.signature[2]),
|
|
936
1516
|
// they get written to non-generic paths (returnValue.data.x or funcName().functionCallReturnValue.data.x).
|
|
@@ -956,6 +1536,7 @@ export default function mergeInDependentDataStructure({
|
|
|
956
1536
|
);
|
|
957
1537
|
|
|
958
1538
|
for (const path in schemaToSearchForGenericVariants) {
|
|
1539
|
+
checkDeadline();
|
|
959
1540
|
const match = path.match(genericRegex);
|
|
960
1541
|
if (match) {
|
|
961
1542
|
genericVariants.add(match[0]);
|
|
@@ -969,6 +1550,7 @@ export default function mergeInDependentDataStructure({
|
|
|
969
1550
|
const pathsToAdd: [string, string][] = [];
|
|
970
1551
|
|
|
971
1552
|
for (const path in returnValueSchema) {
|
|
1553
|
+
checkDeadline();
|
|
972
1554
|
const value = returnValueSchema[path];
|
|
973
1555
|
|
|
974
1556
|
// Handle returnValue. paths
|
|
@@ -1022,6 +1604,7 @@ export default function mergeInDependentDataStructure({
|
|
|
1022
1604
|
// This includes both returnValue. (dot) and returnValue[ (array) paths.
|
|
1023
1605
|
const pathsToNormalize: [string, string][] = [];
|
|
1024
1606
|
for (const path in depSchema.returnValueSchema) {
|
|
1607
|
+
checkDeadline();
|
|
1025
1608
|
if (
|
|
1026
1609
|
path === 'returnValue' ||
|
|
1027
1610
|
path.startsWith('returnValue.') ||
|
|
@@ -1049,11 +1632,20 @@ export default function mergeInDependentDataStructure({
|
|
|
1049
1632
|
`${dependency.name}().functionCallReturnValue`,
|
|
1050
1633
|
);
|
|
1051
1634
|
}
|
|
1635
|
+
transformationTracer.operation(rootScopeName, {
|
|
1636
|
+
operation: 'normalizeReturnValuePath',
|
|
1637
|
+
stage: 'merged',
|
|
1638
|
+
path: normalizedPath,
|
|
1639
|
+
before: path,
|
|
1640
|
+
after: normalizedPath,
|
|
1641
|
+
context: { dependency: dependency.name, value },
|
|
1642
|
+
});
|
|
1052
1643
|
depSchema.returnValueSchema[normalizedPath] = value;
|
|
1053
1644
|
}
|
|
1054
1645
|
|
|
1055
1646
|
// Now copy paths from the source schema (dependencySchemas)
|
|
1056
1647
|
for (const path in srcSchema.returnValueSchema) {
|
|
1648
|
+
checkDeadline();
|
|
1057
1649
|
const value = srcSchema.returnValueSchema[path];
|
|
1058
1650
|
|
|
1059
1651
|
// Normalize paths starting with 'returnValue' to use the standard format:
|
|
@@ -1133,7 +1725,10 @@ export default function mergeInDependentDataStructure({
|
|
|
1133
1725
|
}
|
|
1134
1726
|
}
|
|
1135
1727
|
|
|
1136
|
-
cleanSchema(depSchema.returnValueSchema
|
|
1728
|
+
cleanSchema(depSchema.returnValueSchema, {
|
|
1729
|
+
stage: 'afterMockedDependencyMerge',
|
|
1730
|
+
dependency: dependency.name,
|
|
1731
|
+
});
|
|
1137
1732
|
|
|
1138
1733
|
// Pull signature requirements from downstream functions into the mocked return value.
|
|
1139
1734
|
// When a mocked function's return flows into another function's signature (via usageEquivalencies),
|
|
@@ -1210,7 +1805,10 @@ export default function mergeInDependentDataStructure({
|
|
|
1210
1805
|
}
|
|
1211
1806
|
}
|
|
1212
1807
|
|
|
1213
|
-
cleanSchema(depSchema.returnValueSchema
|
|
1808
|
+
cleanSchema(depSchema.returnValueSchema, {
|
|
1809
|
+
stage: 'afterSignatureRequirementsMerge',
|
|
1810
|
+
dependency: dependency.name,
|
|
1811
|
+
});
|
|
1214
1812
|
}
|
|
1215
1813
|
|
|
1216
1814
|
// Process the input dependencySchemas FIRST (before child dependentAnalyses).
|
|
@@ -1241,9 +1839,11 @@ export default function mergeInDependentDataStructure({
|
|
|
1241
1839
|
if (!existingSchema) {
|
|
1242
1840
|
const depSchema = findOrCreateDependentSchemas({ filePath, name });
|
|
1243
1841
|
for (const path in srcSchema.returnValueSchema) {
|
|
1842
|
+
checkDeadline();
|
|
1244
1843
|
depSchema.returnValueSchema[path] = srcSchema.returnValueSchema[path];
|
|
1245
1844
|
}
|
|
1246
1845
|
for (const path in srcSchema.signatureSchema) {
|
|
1846
|
+
checkDeadline();
|
|
1247
1847
|
depSchema.signatureSchema[path] = srcSchema.signatureSchema[path];
|
|
1248
1848
|
}
|
|
1249
1849
|
|
|
@@ -1251,7 +1851,46 @@ export default function mergeInDependentDataStructure({
|
|
|
1251
1851
|
// from the copied schema. Without this, method call paths on primitives like
|
|
1252
1852
|
// "projectSlug.replace(...)" would cause convertDotNotation to create nested
|
|
1253
1853
|
// object structures instead of preserving the primitive type.
|
|
1254
|
-
cleanSchema(depSchema.returnValueSchema
|
|
1854
|
+
cleanSchema(depSchema.returnValueSchema, {
|
|
1855
|
+
stage: 'afterDependencySchemaCopy',
|
|
1856
|
+
filePath,
|
|
1857
|
+
dependency: name,
|
|
1858
|
+
});
|
|
1859
|
+
}
|
|
1860
|
+
|
|
1861
|
+
// TYPE REFINEMENT: Check if dependentAnalyses has a more specific type for this dependency.
|
|
1862
|
+
// When a parent passes `entity.filePath` (string | undefined) to a child component
|
|
1863
|
+
// that requires `filePath: string`, we should use the child's more specific type.
|
|
1864
|
+
// This prevents mock data from having undefined values for required props.
|
|
1865
|
+
//
|
|
1866
|
+
// This runs REGARDLESS of whether equivalencies already processed the schema,
|
|
1867
|
+
// because equivalencies copy the parent's type (string | undefined), not the child's
|
|
1868
|
+
// required type (string).
|
|
1869
|
+
const depSchema = findOrCreateDependentSchemas({ filePath, name });
|
|
1870
|
+
const childAnalysis = dependentAnalyses[filePath]?.[name];
|
|
1871
|
+
const childSignatureSchema =
|
|
1872
|
+
childAnalysis?.metadata?.mergedDataStructure?.signatureSchema;
|
|
1873
|
+
|
|
1874
|
+
if (childSignatureSchema) {
|
|
1875
|
+
for (const path in depSchema.signatureSchema) {
|
|
1876
|
+
checkDeadline();
|
|
1877
|
+
const parentType = depSchema.signatureSchema[path];
|
|
1878
|
+
const childType = childSignatureSchema[path];
|
|
1879
|
+
|
|
1880
|
+
if (parentType && childType) {
|
|
1881
|
+
// Check if parent has optional type and child has required type
|
|
1882
|
+
const parentIsOptional =
|
|
1883
|
+
parentType.includes('| undefined') ||
|
|
1884
|
+
parentType.includes('| null');
|
|
1885
|
+
const childIsOptional =
|
|
1886
|
+
childType.includes('| undefined') || childType.includes('| null');
|
|
1887
|
+
|
|
1888
|
+
// If child requires a more specific type (not optional), use it
|
|
1889
|
+
if (parentIsOptional && !childIsOptional) {
|
|
1890
|
+
depSchema.signatureSchema[path] = childType;
|
|
1891
|
+
}
|
|
1892
|
+
}
|
|
1893
|
+
}
|
|
1255
1894
|
}
|
|
1256
1895
|
|
|
1257
1896
|
// For functions with multiple different type parameters, also create separate entries
|
|
@@ -1283,12 +1922,18 @@ export default function mergeInDependentDataStructure({
|
|
|
1283
1922
|
|
|
1284
1923
|
// Copy only paths that belong to this variant
|
|
1285
1924
|
for (const path in srcSchema.returnValueSchema) {
|
|
1925
|
+
checkDeadline();
|
|
1286
1926
|
if (path.startsWith(variant)) {
|
|
1287
1927
|
variantSchema.returnValueSchema[path] =
|
|
1288
1928
|
srcSchema.returnValueSchema[path];
|
|
1289
1929
|
}
|
|
1290
1930
|
}
|
|
1291
|
-
cleanSchema(variantSchema.returnValueSchema
|
|
1931
|
+
cleanSchema(variantSchema.returnValueSchema, {
|
|
1932
|
+
stage: 'afterTypeVariantCopy',
|
|
1933
|
+
filePath,
|
|
1934
|
+
dependency: name,
|
|
1935
|
+
variant,
|
|
1936
|
+
});
|
|
1292
1937
|
}
|
|
1293
1938
|
}
|
|
1294
1939
|
}
|
|
@@ -1300,6 +1945,7 @@ export default function mergeInDependentDataStructure({
|
|
|
1300
1945
|
// EXCEPT: Skip mocked dependencies - we don't want their internal implementation details.
|
|
1301
1946
|
for (const filePath in dependentAnalyses) {
|
|
1302
1947
|
for (const name in dependentAnalyses[filePath]) {
|
|
1948
|
+
checkDeadline();
|
|
1303
1949
|
const dependentMergedDataStructure =
|
|
1304
1950
|
dependentAnalyses[filePath][name].metadata?.mergedDataStructure;
|
|
1305
1951
|
|
|
@@ -1316,6 +1962,7 @@ export default function mergeInDependentDataStructure({
|
|
|
1316
1962
|
// Copy over all paths from the dependent's returnValueSchema
|
|
1317
1963
|
// Only add paths that don't already exist (don't overwrite values set by equivalencies)
|
|
1318
1964
|
for (const path in dependentMergedDataStructure.returnValueSchema) {
|
|
1965
|
+
checkDeadline();
|
|
1319
1966
|
const translatedPath = translatePath(path, name);
|
|
1320
1967
|
if (!(translatedPath in depSchema.returnValueSchema)) {
|
|
1321
1968
|
depSchema.returnValueSchema[translatedPath] =
|
|
@@ -1325,6 +1972,7 @@ export default function mergeInDependentDataStructure({
|
|
|
1325
1972
|
|
|
1326
1973
|
// Copy over signature schema as well
|
|
1327
1974
|
for (const path in dependentMergedDataStructure.signatureSchema) {
|
|
1975
|
+
checkDeadline();
|
|
1328
1976
|
const translatedPath = translatePath(path, name);
|
|
1329
1977
|
if (!(translatedPath in depSchema.signatureSchema)) {
|
|
1330
1978
|
depSchema.signatureSchema[translatedPath] =
|
|
@@ -1351,13 +1999,15 @@ export default function mergeInDependentDataStructure({
|
|
|
1351
1999
|
|
|
1352
2000
|
// Merge in the nested dependency schemas
|
|
1353
2001
|
for (const path in nestedDepSchema.returnValueSchema) {
|
|
2002
|
+
checkDeadline();
|
|
1354
2003
|
if (!(path in targetDepSchema.returnValueSchema)) {
|
|
1355
|
-
|
|
1356
|
-
|
|
2004
|
+
const value = nestedDepSchema.returnValueSchema[path];
|
|
2005
|
+
targetDepSchema.returnValueSchema[path] = value;
|
|
1357
2006
|
}
|
|
1358
2007
|
}
|
|
1359
2008
|
|
|
1360
2009
|
for (const path in nestedDepSchema.signatureSchema) {
|
|
2010
|
+
checkDeadline();
|
|
1361
2011
|
if (!(path in targetDepSchema.signatureSchema)) {
|
|
1362
2012
|
targetDepSchema.signatureSchema[path] =
|
|
1363
2013
|
nestedDepSchema.signatureSchema[path];
|
|
@@ -1369,5 +2019,15 @@ export default function mergeInDependentDataStructure({
|
|
|
1369
2019
|
}
|
|
1370
2020
|
}
|
|
1371
2021
|
|
|
2022
|
+
const totalElapsed = Date.now() - mergeStartTime;
|
|
2023
|
+
const retKeys = Object.keys(mergedDataStructure.returnValueSchema).length;
|
|
2024
|
+
|
|
2025
|
+
// Only log phase breakdown for slow merges (>2s)
|
|
2026
|
+
if (totalElapsed > 2000) {
|
|
2027
|
+
console.log(
|
|
2028
|
+
`CodeYam Log Level 2: ${rootScopeName} merge phases: gather=${gatherElapsed}ms mergeESP=${mergeEspElapsed - gatherElapsed}ms postfix=${postfixElapsed - mergeEspElapsed}ms clean=${cleanElapsed - postfixElapsed}ms depCopy=${totalElapsed - cleanElapsed}ms total=${totalElapsed}ms ret=${retKeys}`,
|
|
2029
|
+
);
|
|
2030
|
+
}
|
|
2031
|
+
|
|
1372
2032
|
return mergedDataStructure;
|
|
1373
2033
|
}
|