@codeyam/codeyam-cli 0.1.0-staging.596f0eb → 0.1.0-staging.6e699e5
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/common/execAsync.ts +1 -1
- package/analyzer-template/log.txt +3 -3
- package/analyzer-template/package.json +10 -6
- package/analyzer-template/packages/ai/index.ts +10 -3
- package/analyzer-template/packages/ai/package.json +1 -1
- package/analyzer-template/packages/ai/src/lib/__mocks__/completionCall.ts +122 -0
- package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +128 -6
- package/analyzer-template/packages/ai/src/lib/astScopes/arrayDerivationDetector.ts +199 -0
- package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +138 -1
- package/analyzer-template/packages/ai/src/lib/astScopes/conditionalEffectsExtractor.ts +644 -0
- package/analyzer-template/packages/ai/src/lib/astScopes/methodSemantics.ts +140 -6
- package/analyzer-template/packages/ai/src/lib/astScopes/patterns/ifStatementHandler.ts +18 -0
- package/analyzer-template/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.ts +38 -1
- package/analyzer-template/packages/ai/src/lib/astScopes/patterns/variableDeclarationHandler.ts +181 -1
- package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +1239 -104
- package/analyzer-template/packages/ai/src/lib/astScopes/types.ts +304 -0
- package/analyzer-template/packages/ai/src/lib/checkAllAttributes.ts +29 -10
- package/analyzer-template/packages/ai/src/lib/completionCall.ts +216 -36
- package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +1501 -138
- package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.ts +2 -1
- package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.ts +976 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.ts +243 -77
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.ts +19 -1
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.ts +103 -6
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.ts +23 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.ts +98 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.ts +42 -2
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fixNullIdsBySchema.ts +129 -0
- package/analyzer-template/packages/ai/src/lib/dataStructureChunking.ts +156 -0
- package/analyzer-template/packages/ai/src/lib/deepEqual.ts +30 -0
- package/analyzer-template/packages/ai/src/lib/e2eDataTracking.ts +334 -0
- package/analyzer-template/packages/ai/src/lib/extractCriticalDataKeys.ts +120 -0
- package/analyzer-template/packages/ai/src/lib/generateChangesEntityScenarioData.ts +74 -7
- package/analyzer-template/packages/ai/src/lib/generateChangesEntityScenarios.ts +89 -112
- package/analyzer-template/packages/ai/src/lib/generateEntityDataStructure.ts +6 -0
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +1111 -91
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarios.ts +207 -104
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +570 -0
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionalEffects.ts +528 -0
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionals.ts +1977 -0
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromJsxUsages.ts +239 -0
- package/analyzer-template/packages/ai/src/lib/getConditionalUsagesFromCode.ts +143 -31
- package/analyzer-template/packages/ai/src/lib/guessScenarioDataFromDescription.ts +8 -2
- package/analyzer-template/packages/ai/src/lib/isolateScopes.ts +276 -3
- package/analyzer-template/packages/ai/src/lib/mergeStatements.ts +33 -3
- package/analyzer-template/packages/ai/src/lib/promptGenerators/gatherAttributesMap.ts +7 -0
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChangesEntityScenarioDataGenerator.ts +1 -1
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.ts +32 -102
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChunkPrompt.ts +82 -0
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateCriticalKeysPrompt.ts +103 -0
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.ts +90 -6
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.ts +14 -53
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateMissingKeysPrompt.ts +58 -0
- package/analyzer-template/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.ts +28 -2
- package/analyzer-template/packages/ai/src/lib/promptGenerators/simplifyKeysForLLM.ts +391 -0
- package/analyzer-template/packages/ai/src/lib/resolvePathToControllable.ts +812 -0
- package/analyzer-template/packages/ai/src/lib/splitOutsideParentheses.ts +5 -1
- package/analyzer-template/packages/ai/src/lib/validateExecutionFlowPaths.ts +531 -0
- package/analyzer-template/packages/ai/src/lib/worker/SerializableDataStructure.ts +123 -0
- package/analyzer-template/packages/ai/src/lib/worker/analyzeScopeWorker.ts +8 -1
- package/analyzer-template/packages/analyze/src/lib/FileAnalyzer.ts +14 -0
- package/analyzer-template/packages/analyze/src/lib/analysisContext.ts +44 -4
- package/analyzer-template/packages/analyze/src/lib/asts/nodes/index.ts +1 -0
- package/analyzer-template/packages/analyze/src/lib/asts/nodes/isAsyncFunction.ts +67 -0
- package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +455 -267
- package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +18 -0
- package/analyzer-template/packages/analyze/src/lib/files/analyze/findOrCreateEntity.ts +3 -0
- package/analyzer-template/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.ts +33 -7
- package/analyzer-template/packages/analyze/src/lib/files/analyzeChange.ts +31 -15
- package/analyzer-template/packages/analyze/src/lib/files/analyzeEntity.ts +11 -7
- package/analyzer-template/packages/analyze/src/lib/files/analyzeInitial.ts +11 -12
- package/analyzer-template/packages/analyze/src/lib/files/enums/steps.ts +1 -1
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.ts +265 -0
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/enrichUnknownTypesFromSourceEquivalencies.ts +102 -0
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.ts +588 -52
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateChangesScenarioData.ts +1 -1
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateChangesScenarios.ts +28 -62
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +336 -133
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.ts +156 -0
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateScenarioData.ts +78 -83
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateScenarios.ts +4 -8
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +461 -94
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeValidatedDataStructures.ts +56 -11
- package/analyzer-template/packages/aws/codebuild/index.ts +1 -0
- package/analyzer-template/packages/aws/dist/src/lib/codebuild/waitForBuild.d.ts +11 -1
- package/analyzer-template/packages/aws/dist/src/lib/codebuild/waitForBuild.d.ts.map +1 -1
- package/analyzer-template/packages/aws/dist/src/lib/codebuild/waitForBuild.js +29 -18
- package/analyzer-template/packages/aws/dist/src/lib/codebuild/waitForBuild.js.map +1 -1
- package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsDefineContainer.d.ts +2 -2
- package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsDefineContainer.d.ts.map +1 -1
- package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsDefineContainer.js +2 -2
- package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsDefineContainer.js.map +1 -1
- package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsTaskFactory.d.ts +8 -18
- package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsTaskFactory.d.ts.map +1 -1
- package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsTaskFactory.js +17 -61
- package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsTaskFactory.js.map +1 -1
- package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.d.ts +15 -0
- package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.d.ts.map +1 -0
- package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.js +31 -0
- package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.js.map +1 -0
- package/analyzer-template/packages/aws/dist/src/lib/s3/uploadFileToS3.d.ts.map +1 -1
- package/analyzer-template/packages/aws/dist/src/lib/s3/uploadFileToS3.js +8 -1
- package/analyzer-template/packages/aws/dist/src/lib/s3/uploadFileToS3.js.map +1 -1
- package/analyzer-template/packages/aws/package.json +3 -3
- package/analyzer-template/packages/aws/s3/index.ts +1 -0
- package/analyzer-template/packages/aws/src/lib/codebuild/waitForBuild.ts +43 -19
- package/analyzer-template/packages/aws/src/lib/ecs/ecsDefineContainer.ts +3 -3
- package/analyzer-template/packages/aws/src/lib/ecs/ecsTaskFactory.ts +17 -69
- package/analyzer-template/packages/aws/src/lib/s3/checkS3ObjectExists.ts +47 -0
- package/analyzer-template/packages/aws/src/lib/s3/uploadFileToS3.ts +8 -1
- package/analyzer-template/packages/database/src/lib/kysely/db.ts +4 -4
- package/analyzer-template/packages/database/src/lib/kysely/tableRelations.ts +2 -2
- package/analyzer-template/packages/database/src/lib/kysely/tables/debugReportsTable.ts +36 -9
- package/analyzer-template/packages/database/src/lib/loadReadyToBeCapturedAnalyses.ts +7 -3
- package/analyzer-template/packages/generate/index.ts +3 -0
- package/analyzer-template/packages/generate/src/lib/componentScenarioPage/componentScenarioPageNext.ts +17 -1
- package/analyzer-template/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.ts +193 -0
- package/analyzer-template/packages/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.ts +73 -0
- package/analyzer-template/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.ts +9 -4
- package/analyzer-template/packages/generate/src/lib/deepMerge.ts +26 -1
- package/analyzer-template/packages/generate/src/lib/scenarioComponentForServer.ts +114 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts +2 -2
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js +2 -2
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tableRelations.d.ts +2 -2
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/analysesTable.d.ts +1 -11
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/analysesTable.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.d.ts +30 -7
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.js +9 -3
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/entitiesTable.d.ts +1 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/entitiesTable.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts +2 -6
- 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/loadReadyToBeCapturedAnalyses.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js +7 -4
- package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
- package/analyzer-template/packages/github/dist/generate/index.d.ts +3 -0
- package/analyzer-template/packages/github/dist/generate/index.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/generate/index.js +3 -0
- package/analyzer-template/packages/github/dist/generate/index.js.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageNext.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js +16 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.d.ts +9 -0
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.d.ts.map +1 -0
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +189 -0
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -0
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.d.ts +20 -0
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.d.ts.map +1 -0
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.js +53 -0
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.js.map +1 -0
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +8 -4
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/deepMerge.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/deepMerge.js +27 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/deepMerge.js.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponentForServer.d.ts +8 -0
- package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponentForServer.d.ts.map +1 -0
- package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponentForServer.js +89 -0
- package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponentForServer.js.map +1 -0
- package/analyzer-template/packages/github/dist/github/src/lib/loadOrCreateCommit.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/github/src/lib/loadOrCreateCommit.js +10 -0
- package/analyzer-template/packages/github/dist/github/src/lib/loadOrCreateCommit.js.map +1 -1
- package/analyzer-template/packages/github/dist/github/src/lib/syncPrimaryBranch.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/github/src/lib/syncPrimaryBranch.js +3 -0
- package/analyzer-template/packages/github/dist/github/src/lib/syncPrimaryBranch.js.map +1 -1
- package/analyzer-template/packages/github/dist/types/index.d.ts +2 -2
- package/analyzer-template/packages/github/dist/types/index.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/types/index.js.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/Analysis.d.ts +87 -13
- package/analyzer-template/packages/github/dist/types/src/types/Analysis.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/Entity.d.ts +2 -0
- package/analyzer-template/packages/github/dist/types/src/types/Entity.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts +11 -6
- 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 +196 -0
- package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/StatementInfo.d.ts +2 -0
- package/analyzer-template/packages/github/dist/types/src/types/StatementInfo.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/lightweightEntityExtractor.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/lightweightEntityExtractor.js +25 -0
- package/analyzer-template/packages/github/dist/utils/src/lib/lightweightEntityExtractor.js.map +1 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/safeFileName.d.ts +9 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/safeFileName.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/safeFileName.js +29 -3
- package/analyzer-template/packages/github/dist/utils/src/lib/safeFileName.js.map +1 -1
- package/analyzer-template/packages/github/src/lib/loadOrCreateCommit.ts +14 -0
- package/analyzer-template/packages/github/src/lib/syncPrimaryBranch.ts +2 -0
- package/analyzer-template/packages/process/index.ts +2 -0
- package/analyzer-template/packages/process/package.json +12 -0
- package/analyzer-template/packages/process/tsconfig.json +8 -0
- package/analyzer-template/packages/types/index.ts +5 -0
- package/analyzer-template/packages/types/src/types/Analysis.ts +104 -13
- package/analyzer-template/packages/types/src/types/Entity.ts +2 -0
- package/analyzer-template/packages/types/src/types/Scenario.ts +11 -10
- package/analyzer-template/packages/types/src/types/ScenariosDataStructure.ts +224 -0
- package/analyzer-template/packages/types/src/types/StatementInfo.ts +2 -0
- package/analyzer-template/packages/ui-components/src/components/ScenarioDetailInteractiveView.tsx +23 -7
- package/analyzer-template/packages/utils/dist/types/index.d.ts +2 -2
- package/analyzer-template/packages/utils/dist/types/index.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/types/index.js.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/types/Analysis.d.ts +87 -13
- package/analyzer-template/packages/utils/dist/types/src/types/Analysis.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/types/Entity.d.ts +2 -0
- package/analyzer-template/packages/utils/dist/types/src/types/Entity.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts +11 -6
- 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 +196 -0
- package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/types/StatementInfo.d.ts +2 -0
- package/analyzer-template/packages/utils/dist/types/src/types/StatementInfo.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/lightweightEntityExtractor.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/lightweightEntityExtractor.js +25 -0
- package/analyzer-template/packages/utils/dist/utils/src/lib/lightweightEntityExtractor.js.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/safeFileName.d.ts +9 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/safeFileName.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/safeFileName.js +29 -3
- package/analyzer-template/packages/utils/dist/utils/src/lib/safeFileName.js.map +1 -1
- package/analyzer-template/packages/utils/src/lib/lightweightEntityExtractor.ts +27 -0
- package/analyzer-template/packages/utils/src/lib/safeFileName.ts +48 -3
- package/analyzer-template/playwright/capture.ts +37 -18
- package/analyzer-template/playwright/getCodeYamInfo.ts +12 -7
- package/analyzer-template/playwright/takeElementScreenshot.ts +26 -11
- package/analyzer-template/playwright/takeScreenshot.ts +9 -7
- package/analyzer-template/playwright/waitForServer.ts +21 -6
- package/analyzer-template/project/analyzeBaselineCommit.ts +4 -0
- package/analyzer-template/project/analyzeBranchCommit.ts +4 -0
- package/analyzer-template/project/analyzeFileEntities.ts +4 -0
- package/analyzer-template/project/analyzeRegularCommit.ts +4 -0
- package/analyzer-template/project/constructMockCode.ts +1181 -160
- package/analyzer-template/project/controller/startController.ts +16 -1
- package/analyzer-template/project/executeLibraryFunctionDirect.ts +7 -3
- package/analyzer-template/project/mocks/analyzeFileMock.ts +8 -7
- package/analyzer-template/project/orchestrateCapture/KyselyAnalysisLoader.ts +3 -6
- package/analyzer-template/project/orchestrateCapture/SequentialCaptureTaskRunner.ts +82 -36
- package/analyzer-template/project/orchestrateCapture.ts +36 -3
- package/analyzer-template/project/reconcileMockDataKeys.ts +245 -2
- package/analyzer-template/project/runAnalysis.ts +11 -0
- package/analyzer-template/project/runMultiScenarioServer.ts +11 -10
- package/analyzer-template/project/serverOnlyModules.ts +194 -21
- package/analyzer-template/project/start.ts +26 -4
- package/analyzer-template/project/startScenarioCapture.ts +79 -41
- package/analyzer-template/project/writeMockDataTsx.ts +232 -57
- package/analyzer-template/project/writeScenarioClientWrapper.ts +21 -0
- package/analyzer-template/project/writeScenarioComponents.ts +769 -181
- package/analyzer-template/project/writeScenarioFiles.ts +26 -0
- package/analyzer-template/project/writeSimpleRoot.ts +13 -15
- package/analyzer-template/scripts/comboWorkerLoop.cjs +1 -0
- package/analyzer-template/scripts/defaultCmd.sh +9 -0
- package/analyzer-template/tsconfig.json +2 -1
- package/background/src/lib/local/createLocalAnalyzer.js +1 -29
- package/background/src/lib/local/createLocalAnalyzer.js.map +1 -1
- package/background/src/lib/local/execAsync.js +1 -1
- package/background/src/lib/local/execAsync.js.map +1 -1
- package/background/src/lib/virtualized/common/execAsync.js +1 -1
- package/background/src/lib/virtualized/common/execAsync.js.map +1 -1
- package/background/src/lib/virtualized/project/analyzeBaselineCommit.js +2 -1
- package/background/src/lib/virtualized/project/analyzeBaselineCommit.js.map +1 -1
- package/background/src/lib/virtualized/project/analyzeBranchCommit.js +2 -1
- package/background/src/lib/virtualized/project/analyzeBranchCommit.js.map +1 -1
- package/background/src/lib/virtualized/project/analyzeFileEntities.js +2 -1
- package/background/src/lib/virtualized/project/analyzeFileEntities.js.map +1 -1
- package/background/src/lib/virtualized/project/analyzeRegularCommit.js +2 -1
- package/background/src/lib/virtualized/project/analyzeRegularCommit.js.map +1 -1
- package/background/src/lib/virtualized/project/constructMockCode.js +1053 -124
- package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
- package/background/src/lib/virtualized/project/controller/startController.js +11 -1
- package/background/src/lib/virtualized/project/controller/startController.js.map +1 -1
- package/background/src/lib/virtualized/project/executeLibraryFunctionDirect.js +6 -3
- package/background/src/lib/virtualized/project/executeLibraryFunctionDirect.js.map +1 -1
- package/background/src/lib/virtualized/project/mocks/analyzeFileMock.js +7 -7
- package/background/src/lib/virtualized/project/mocks/analyzeFileMock.js.map +1 -1
- package/background/src/lib/virtualized/project/orchestrateCapture/KyselyAnalysisLoader.js +3 -2
- package/background/src/lib/virtualized/project/orchestrateCapture/KyselyAnalysisLoader.js.map +1 -1
- package/background/src/lib/virtualized/project/orchestrateCapture/SequentialCaptureTaskRunner.js +69 -32
- package/background/src/lib/virtualized/project/orchestrateCapture/SequentialCaptureTaskRunner.js.map +1 -1
- package/background/src/lib/virtualized/project/orchestrateCapture.js +27 -4
- package/background/src/lib/virtualized/project/orchestrateCapture.js.map +1 -1
- package/background/src/lib/virtualized/project/reconcileMockDataKeys.js +204 -2
- package/background/src/lib/virtualized/project/reconcileMockDataKeys.js.map +1 -1
- package/background/src/lib/virtualized/project/runAnalysis.js +9 -0
- package/background/src/lib/virtualized/project/runAnalysis.js.map +1 -1
- package/background/src/lib/virtualized/project/runMultiScenarioServer.js +11 -9
- package/background/src/lib/virtualized/project/runMultiScenarioServer.js.map +1 -1
- package/background/src/lib/virtualized/project/serverOnlyModules.js +163 -23
- package/background/src/lib/virtualized/project/serverOnlyModules.js.map +1 -1
- package/background/src/lib/virtualized/project/start.js +21 -4
- package/background/src/lib/virtualized/project/start.js.map +1 -1
- package/background/src/lib/virtualized/project/startScenarioCapture.js +61 -31
- package/background/src/lib/virtualized/project/startScenarioCapture.js.map +1 -1
- package/background/src/lib/virtualized/project/writeMockDataTsx.js +199 -50
- package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
- package/background/src/lib/virtualized/project/writeScenarioClientWrapper.js +15 -0
- package/background/src/lib/virtualized/project/writeScenarioClientWrapper.js.map +1 -0
- package/background/src/lib/virtualized/project/writeScenarioComponents.js +552 -125
- package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
- package/background/src/lib/virtualized/project/writeScenarioFiles.js +19 -0
- package/background/src/lib/virtualized/project/writeScenarioFiles.js.map +1 -1
- package/background/src/lib/virtualized/project/writeSimpleRoot.js +13 -13
- package/background/src/lib/virtualized/project/writeSimpleRoot.js.map +1 -1
- package/codeyam-cli/src/cli.js +7 -1
- package/codeyam-cli/src/cli.js.map +1 -1
- package/codeyam-cli/src/commands/analyze.js +1 -1
- package/codeyam-cli/src/commands/analyze.js.map +1 -1
- package/codeyam-cli/src/commands/baseline.js +174 -0
- package/codeyam-cli/src/commands/baseline.js.map +1 -0
- package/codeyam-cli/src/commands/debug.js +40 -18
- package/codeyam-cli/src/commands/debug.js.map +1 -1
- package/codeyam-cli/src/commands/default.js +0 -15
- package/codeyam-cli/src/commands/default.js.map +1 -1
- package/codeyam-cli/src/commands/recapture.js +226 -0
- package/codeyam-cli/src/commands/recapture.js.map +1 -0
- package/codeyam-cli/src/commands/report.js +72 -24
- package/codeyam-cli/src/commands/report.js.map +1 -1
- package/codeyam-cli/src/commands/start.js +8 -12
- package/codeyam-cli/src/commands/start.js.map +1 -1
- package/codeyam-cli/src/commands/status.js +23 -1
- package/codeyam-cli/src/commands/status.js.map +1 -1
- package/codeyam-cli/src/commands/test-startup.js +1 -1
- package/codeyam-cli/src/commands/test-startup.js.map +1 -1
- package/codeyam-cli/src/commands/wipe.js +108 -0
- package/codeyam-cli/src/commands/wipe.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/serverVersionStaleness.test.js +81 -0
- package/codeyam-cli/src/utils/__tests__/serverVersionStaleness.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +31 -27
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
- package/codeyam-cli/src/utils/analysisRunner.js +8 -13
- package/codeyam-cli/src/utils/analysisRunner.js.map +1 -1
- package/codeyam-cli/src/utils/backgroundServer.js +14 -4
- package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
- package/codeyam-cli/src/utils/database.js +91 -5
- package/codeyam-cli/src/utils/database.js.map +1 -1
- package/codeyam-cli/src/utils/generateReport.js +253 -106
- package/codeyam-cli/src/utils/generateReport.js.map +1 -1
- package/codeyam-cli/src/utils/git.js +79 -0
- package/codeyam-cli/src/utils/git.js.map +1 -0
- package/codeyam-cli/src/utils/install-skills.js +31 -17
- package/codeyam-cli/src/utils/install-skills.js.map +1 -1
- package/codeyam-cli/src/utils/queue/__tests__/manager.test.js +38 -0
- package/codeyam-cli/src/utils/queue/__tests__/manager.test.js.map +1 -1
- package/codeyam-cli/src/utils/queue/job.js +245 -16
- package/codeyam-cli/src/utils/queue/job.js.map +1 -1
- package/codeyam-cli/src/utils/queue/manager.js +25 -7
- package/codeyam-cli/src/utils/queue/manager.js.map +1 -1
- package/codeyam-cli/src/utils/queue/persistence.js.map +1 -1
- package/codeyam-cli/src/utils/serverState.js.map +1 -1
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +7 -5
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
- package/codeyam-cli/src/utils/versionInfo.js +25 -19
- package/codeyam-cli/src/utils/versionInfo.js.map +1 -1
- package/codeyam-cli/src/utils/wipe.js +128 -0
- package/codeyam-cli/src/utils/wipe.js.map +1 -0
- package/codeyam-cli/src/webserver/app/lib/database.js +98 -1
- package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
- package/codeyam-cli/src/webserver/app/lib/dbNotifier.js.map +1 -1
- package/codeyam-cli/src/webserver/backgroundServer.js +5 -10
- package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
- package/codeyam-cli/src/webserver/bootstrap.js +49 -0
- package/codeyam-cli/src/webserver/bootstrap.js.map +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/EntityItem-BXhEawa3.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-efWKDYMr.js → EntityTypeBadge-DLqD3qNt.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/EntityTypeIcon-Ba2JVPzP.js +41 -0
- package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-C8lyxW9k.js +34 -0
- package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-aht4aafF.js +25 -0
- package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-CVtiBnY5.js +3 -0
- package/codeyam-cli/src/webserver/build/client/assets/LoadingDots-B0GLXMsr.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/LogViewer-xgeCVgSM.js +3 -0
- package/codeyam-cli/src/webserver/build/client/assets/ReportIssueModal-D4TZhLuw.js +21 -0
- package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-DuDvi0jm.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/ScenarioViewer-DEx02QDa.js +10 -0
- package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-COPstp9J.js → TruncatedFilePath-DyFZkK0l.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/_index-BwqWJOgH.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-DoLIqZX2.js +37 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.health-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.restart-server-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.rules-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/chevron-down-Cx24_aWc.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/chunk-EPOLDU6W-CXRTFQ3F.js +51 -0
- package/codeyam-cli/src/webserver/build/client/assets/circle-check-BOARzkeR.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-BdhJEx6B.js +21 -0
- package/codeyam-cli/src/webserver/build/client/assets/{cy-logo-cli-C1gnJVOL.svg → cy-logo-cli-CCKUIm0S.svg} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/cy-logo-cli-DcX-ZS3p.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-BRb-0kQl.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha._-C2N4Op8e.js +23 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-DavjRmOY.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-D1T4TGjf.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.edit._scenarioId-CTBG2mmz.js +5 -0
- package/codeyam-cli/src/webserver/build/client/assets/entry.client-CS2cb_eZ.js +29 -0
- package/codeyam-cli/src/webserver/build/client/assets/executionFlowCoverage-BWhdfn70.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-DMJ7zii9.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/files-Cs4MdYtv.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/git-B4RJRvYB.js +15 -0
- package/codeyam-cli/src/webserver/build/client/assets/git-commit-horizontal-CysbcZxi.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/globals-DMUaGAqV.css +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/html2canvas-pro.esm-fmIEn3Bc.js +9 -0
- package/codeyam-cli/src/webserver/build/client/assets/index-B1h680n5.js +9 -0
- package/codeyam-cli/src/webserver/build/client/assets/index-lzqtyFU8.js +3 -0
- package/codeyam-cli/src/webserver/build/client/assets/loader-circle-B7B9V-bu.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/manifest-f874c610.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/preload-helper-ckwbz45p.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/root-Bz5TunQg.js +57 -0
- package/codeyam-cli/src/webserver/build/client/assets/rules-hEkvVw2-.js +97 -0
- package/codeyam-cli/src/webserver/build/client/assets/scenarioStatus-B_8jpV3e.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/search-CxXUmBSd.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/settings-CS5f3WzT.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/simulations-DwFIBT09.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/triangle-alert-B6LgvRJg.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-C1v1PQzo.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-3pmpUQB-.js → useLastLogLine-aSv48UbS.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/useReportContext-DYxHZQuP.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{useToast-DEyawJ8r.js → useToast-mBRpZPiu.js} +1 -1
- package/codeyam-cli/src/webserver/build/server/assets/index-967OuJoF.js +1 -0
- package/codeyam-cli/src/webserver/build/server/assets/server-build-DRTmerg9.js +257 -0
- package/codeyam-cli/src/webserver/build/server/index.js +1 -1
- package/codeyam-cli/src/webserver/build-info.json +5 -5
- package/codeyam-cli/src/webserver/devServer.js +1 -3
- package/codeyam-cli/src/webserver/devServer.js.map +1 -1
- package/codeyam-cli/src/webserver/server.js +35 -25
- package/codeyam-cli/src/webserver/server.js.map +1 -1
- package/codeyam-cli/templates/codeyam-power-rules-hook.sh +200 -0
- package/codeyam-cli/templates/{codeyam-debug-skill.md → codeyam:debug.md} +48 -4
- package/codeyam-cli/templates/codeyam:diagnose.md +650 -0
- package/codeyam-cli/templates/codeyam:new-rule.md +13 -0
- package/codeyam-cli/templates/codeyam:power-rules.md +447 -0
- package/codeyam-cli/templates/{codeyam-setup-skill.md → codeyam:setup.md} +139 -4
- package/codeyam-cli/templates/{codeyam-sim-skill.md → codeyam:sim.md} +1 -1
- package/codeyam-cli/templates/{codeyam-test-skill.md → codeyam:test.md} +1 -1
- package/codeyam-cli/templates/{codeyam-verify-skill.md → codeyam:verify.md} +1 -1
- package/package.json +17 -16
- package/packages/ai/index.js +5 -4
- package/packages/ai/index.js.map +1 -1
- package/packages/ai/src/lib/analyzeScope.js +99 -0
- package/packages/ai/src/lib/analyzeScope.js.map +1 -1
- package/packages/ai/src/lib/astScopes/arrayDerivationDetector.js +150 -0
- package/packages/ai/src/lib/astScopes/arrayDerivationDetector.js.map +1 -0
- package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +100 -1
- package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js.map +1 -1
- package/packages/ai/src/lib/astScopes/conditionalEffectsExtractor.js +435 -0
- package/packages/ai/src/lib/astScopes/conditionalEffectsExtractor.js.map +1 -0
- package/packages/ai/src/lib/astScopes/methodSemantics.js +97 -6
- package/packages/ai/src/lib/astScopes/methodSemantics.js.map +1 -1
- package/packages/ai/src/lib/astScopes/patterns/ifStatementHandler.js +8 -0
- package/packages/ai/src/lib/astScopes/patterns/ifStatementHandler.js.map +1 -1
- package/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.js +23 -0
- package/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.js.map +1 -1
- package/packages/ai/src/lib/astScopes/patterns/variableDeclarationHandler.js +138 -1
- package/packages/ai/src/lib/astScopes/patterns/variableDeclarationHandler.js.map +1 -1
- package/packages/ai/src/lib/astScopes/processExpression.js +945 -87
- package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
- package/packages/ai/src/lib/checkAllAttributes.js +24 -9
- package/packages/ai/src/lib/checkAllAttributes.js.map +1 -1
- package/packages/ai/src/lib/completionCall.js +178 -31
- package/packages/ai/src/lib/completionCall.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +1198 -82
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js +2 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.js +661 -0
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.js.map +1 -0
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js +180 -56
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js +16 -1
- package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js +86 -4
- package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js +20 -0
- package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.js +86 -0
- package/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.js.map +1 -0
- package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js +34 -3
- package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/fixNullIdsBySchema.js +107 -0
- package/packages/ai/src/lib/dataStructure/helpers/fixNullIdsBySchema.js.map +1 -0
- package/packages/ai/src/lib/dataStructureChunking.js +111 -0
- package/packages/ai/src/lib/dataStructureChunking.js.map +1 -0
- package/packages/ai/src/lib/deepEqual.js +32 -0
- package/packages/ai/src/lib/deepEqual.js.map +1 -0
- package/packages/ai/src/lib/e2eDataTracking.js +241 -0
- package/packages/ai/src/lib/e2eDataTracking.js.map +1 -0
- package/packages/ai/src/lib/extractCriticalDataKeys.js +96 -0
- package/packages/ai/src/lib/extractCriticalDataKeys.js.map +1 -0
- package/packages/ai/src/lib/generateChangesEntityScenarioData.js +62 -5
- package/packages/ai/src/lib/generateChangesEntityScenarioData.js.map +1 -1
- package/packages/ai/src/lib/generateChangesEntityScenarios.js +81 -90
- package/packages/ai/src/lib/generateChangesEntityScenarios.js.map +1 -1
- package/packages/ai/src/lib/generateEntityDataStructure.js +5 -0
- package/packages/ai/src/lib/generateEntityDataStructure.js.map +1 -1
- package/packages/ai/src/lib/generateEntityScenarioData.js +904 -84
- package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
- package/packages/ai/src/lib/generateEntityScenarios.js +186 -82
- package/packages/ai/src/lib/generateEntityScenarios.js.map +1 -1
- package/packages/ai/src/lib/generateExecutionFlows.js +392 -0
- package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -0
- package/packages/ai/src/lib/generateExecutionFlowsFromConditionalEffects.js +380 -0
- package/packages/ai/src/lib/generateExecutionFlowsFromConditionalEffects.js.map +1 -0
- package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js +1440 -0
- package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js.map +1 -0
- package/packages/ai/src/lib/generateExecutionFlowsFromJsxUsages.js +194 -0
- package/packages/ai/src/lib/generateExecutionFlowsFromJsxUsages.js.map +1 -0
- package/packages/ai/src/lib/getConditionalUsagesFromCode.js +84 -14
- package/packages/ai/src/lib/getConditionalUsagesFromCode.js.map +1 -1
- package/packages/ai/src/lib/guessScenarioDataFromDescription.js +2 -1
- package/packages/ai/src/lib/guessScenarioDataFromDescription.js.map +1 -1
- package/packages/ai/src/lib/isolateScopes.js +231 -4
- package/packages/ai/src/lib/isolateScopes.js.map +1 -1
- package/packages/ai/src/lib/mergeStatements.js +26 -3
- package/packages/ai/src/lib/mergeStatements.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js +6 -0
- package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenarioDataGenerator.js +1 -1
- package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenarioDataGenerator.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.js +21 -64
- package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/generateChunkPrompt.js +54 -0
- package/packages/ai/src/lib/promptGenerators/generateChunkPrompt.js.map +1 -0
- package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js +68 -6
- package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.js +10 -34
- package/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/generateMissingKeysPrompt.js +45 -0
- package/packages/ai/src/lib/promptGenerators/generateMissingKeysPrompt.js.map +1 -0
- package/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.js +16 -3
- package/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/simplifyKeysForLLM.js +335 -0
- package/packages/ai/src/lib/promptGenerators/simplifyKeysForLLM.js.map +1 -0
- package/packages/ai/src/lib/resolvePathToControllable.js +667 -0
- package/packages/ai/src/lib/resolvePathToControllable.js.map +1 -0
- package/packages/ai/src/lib/splitOutsideParentheses.js +3 -1
- package/packages/ai/src/lib/splitOutsideParentheses.js.map +1 -1
- package/packages/ai/src/lib/worker/SerializableDataStructure.js +29 -0
- package/packages/ai/src/lib/worker/SerializableDataStructure.js.map +1 -1
- package/packages/ai/src/lib/worker/analyzeScopeWorker.js +4 -0
- package/packages/ai/src/lib/worker/analyzeScopeWorker.js.map +1 -1
- package/packages/analyze/src/lib/FileAnalyzer.js +15 -0
- package/packages/analyze/src/lib/FileAnalyzer.js.map +1 -1
- package/packages/analyze/src/lib/analysisContext.js +30 -5
- package/packages/analyze/src/lib/analysisContext.js.map +1 -1
- package/packages/analyze/src/lib/asts/nodes/index.js +1 -0
- package/packages/analyze/src/lib/asts/nodes/index.js.map +1 -1
- package/packages/analyze/src/lib/asts/nodes/isAsyncFunction.js +52 -0
- package/packages/analyze/src/lib/asts/nodes/isAsyncFunction.js.map +1 -0
- package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js +218 -50
- package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +10 -0
- package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js +2 -0
- package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js +31 -7
- package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js.map +1 -1
- package/packages/analyze/src/lib/files/analyzeChange.js +21 -11
- package/packages/analyze/src/lib/files/analyzeChange.js.map +1 -1
- package/packages/analyze/src/lib/files/analyzeEntity.js +9 -8
- package/packages/analyze/src/lib/files/analyzeEntity.js.map +1 -1
- package/packages/analyze/src/lib/files/analyzeInitial.js +9 -10
- package/packages/analyze/src/lib/files/analyzeInitial.js.map +1 -1
- package/packages/analyze/src/lib/files/enums/steps.js +1 -1
- package/packages/analyze/src/lib/files/enums/steps.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js +209 -0
- package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js.map +1 -0
- package/packages/analyze/src/lib/files/scenarios/enrichUnknownTypesFromSourceEquivalencies.js +85 -0
- package/packages/analyze/src/lib/files/scenarios/enrichUnknownTypesFromSourceEquivalencies.js.map +1 -0
- package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js +458 -48
- package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateChangesScenarioData.js +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateChangesScenarioData.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateChangesScenarios.js +29 -34
- package/packages/analyze/src/lib/files/scenarios/generateChangesScenarios.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +264 -78
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js +96 -0
- package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js.map +1 -0
- package/packages/analyze/src/lib/files/scenarios/generateScenarioData.js +56 -69
- package/packages/analyze/src/lib/files/scenarios/generateScenarioData.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateScenarios.js +4 -8
- package/packages/analyze/src/lib/files/scenarios/generateScenarios.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +372 -89
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/mergeValidatedDataStructures.js +46 -9
- package/packages/analyze/src/lib/files/scenarios/mergeValidatedDataStructures.js.map +1 -1
- package/packages/aws/src/lib/ecs/ecsDefineContainer.js +2 -2
- package/packages/aws/src/lib/ecs/ecsDefineContainer.js.map +1 -1
- package/packages/aws/src/lib/ecs/ecsTaskFactory.js +17 -61
- package/packages/aws/src/lib/ecs/ecsTaskFactory.js.map +1 -1
- package/packages/database/src/lib/kysely/db.js +2 -2
- package/packages/database/src/lib/kysely/tables/debugReportsTable.js +9 -3
- package/packages/database/src/lib/kysely/tables/debugReportsTable.js.map +1 -1
- package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js +7 -4
- package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
- package/packages/generate/index.js +3 -0
- package/packages/generate/index.js.map +1 -1
- package/packages/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js +16 -1
- package/packages/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js.map +1 -1
- package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +189 -0
- package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -0
- package/packages/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.js +53 -0
- package/packages/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.js.map +1 -0
- package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +8 -4
- package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
- package/packages/generate/src/lib/deepMerge.js +27 -1
- package/packages/generate/src/lib/deepMerge.js.map +1 -1
- package/packages/generate/src/lib/scenarioComponentForServer.js +89 -0
- package/packages/generate/src/lib/scenarioComponentForServer.js.map +1 -0
- package/packages/github/src/lib/loadOrCreateCommit.js +10 -0
- package/packages/github/src/lib/loadOrCreateCommit.js.map +1 -1
- package/packages/github/src/lib/syncPrimaryBranch.js +3 -0
- package/packages/github/src/lib/syncPrimaryBranch.js.map +1 -1
- package/packages/process/index.js +3 -0
- package/packages/process/index.js.map +1 -0
- package/packages/process/src/GlobalProcessManager.js.map +1 -0
- package/{background/src/lib/process → packages/process/src}/ProcessManager.js +1 -1
- package/packages/process/src/ProcessManager.js.map +1 -0
- package/packages/process/src/index.js.map +1 -0
- package/packages/process/src/managedExecAsync.js.map +1 -0
- package/packages/types/index.js.map +1 -1
- package/packages/utils/src/lib/lightweightEntityExtractor.js +25 -0
- package/packages/utils/src/lib/lightweightEntityExtractor.js.map +1 -1
- package/packages/utils/src/lib/safeFileName.js +29 -3
- package/packages/utils/src/lib/safeFileName.js.map +1 -1
- package/scripts/finalize-analyzer.cjs +6 -4
- package/analyzer-template/packages/ai/src/lib/findMatchingAttribute.ts +0 -102
- package/analyzer-template/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.ts +0 -197
- package/analyzer-template/packages/ai/src/lib/generateChangesEntityKeyAttributes.ts +0 -271
- package/analyzer-template/packages/ai/src/lib/generateEntityKeyAttributes.ts +0 -294
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityKeyAttributesGenerator.ts +0 -67
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.ts +0 -115
- package/analyzer-template/process/INTEGRATION_COMPLETE.md +0 -333
- package/analyzer-template/process/INTEGRATION_EXAMPLE.md +0 -525
- package/analyzer-template/process/README.md +0 -507
- package/background/src/lib/process/GlobalProcessManager.js.map +0 -1
- package/background/src/lib/process/ProcessManager.js.map +0 -1
- package/background/src/lib/process/index.js.map +0 -1
- package/background/src/lib/process/managedExecAsync.js.map +0 -1
- package/codeyam-cli/scripts/fixtures/cal.com/universal-mocks/packages/prisma/index.js +0 -238
- package/codeyam-cli/scripts/fixtures/cal.com/universal-mocks/packages/prisma/index.js.map +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/EntityItem-CVbSvOjo.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/EntityTypeIcon-DcwcHyl5.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-WgwC1GfJ.js +0 -26
- package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-IEKom9O2.js +0 -3
- package/codeyam-cli/src/webserver/build/client/assets/LogViewer-BYnfxbUG.js +0 -3
- package/codeyam-cli/src/webserver/build/client/assets/ReportIssueModal-_lBPJCzG.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-lHVhvsu_.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/ScenarioViewer-d_TBk4GQ.js +0 -5
- package/codeyam-cli/src/webserver/build/client/assets/_index-kGT7VUqj.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-DDGmhu7P.js +0 -7
- package/codeyam-cli/src/webserver/build/client/assets/chevron-down-n_HPRfM_.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/chunk-WWGJGFF6-CbVoyx1U.js +0 -26
- package/codeyam-cli/src/webserver/build/client/assets/circle-check-D1VOYveA.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-YR8jjAlu.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-B8vP3V_s.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha._-CN6aLCT1.js +0 -16
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-DA5Jeu2P.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.edit._scenarioId-BTeitalf.js +0 -5
- package/codeyam-cli/src/webserver/build/client/assets/entry.client-du6UEYD-.js +0 -13
- package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-BpjkhMoi.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/files-BQGvk4lJ.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/git-DVdYRT-I.js +0 -12
- package/codeyam-cli/src/webserver/build/client/assets/globals-CO-U8Bpo.css +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/html2canvas-pro.esm-XQCGvadH.js +0 -5
- package/codeyam-cli/src/webserver/build/client/assets/index-DCG-vks0.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/loader-circle-GazdNeLl.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-0b694d28.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/root-D3tQP7hx.js +0 -16
- package/codeyam-cli/src/webserver/build/client/assets/search-CIY6XmtE.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/server-build-CMKNK2uU.css +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/settings-CoMDgElu.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/simulations-agkniXp2.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/triangle-alert-B2VUcygF.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/useReportContext-EvdK-zXP.js +0 -1
- package/codeyam-cli/src/webserver/build/server/assets/index-DGVHQEXD.js +0 -1
- package/codeyam-cli/src/webserver/build/server/assets/server-build-CghkTkIL.js +0 -166
- package/codeyam-cli/templates/debug-command.md +0 -303
- package/packages/ai/src/lib/findMatchingAttribute.js +0 -77
- package/packages/ai/src/lib/findMatchingAttribute.js.map +0 -1
- package/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.js +0 -136
- package/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.js.map +0 -1
- package/packages/ai/src/lib/generateChangesEntityKeyAttributes.js +0 -220
- package/packages/ai/src/lib/generateChangesEntityKeyAttributes.js.map +0 -1
- package/packages/ai/src/lib/generateEntityKeyAttributes.js +0 -241
- package/packages/ai/src/lib/generateEntityKeyAttributes.js.map +0 -1
- package/packages/ai/src/lib/isFrontend.js +0 -5
- package/packages/ai/src/lib/isFrontend.js.map +0 -1
- package/packages/ai/src/lib/promptGenerators/generateEntityKeyAttributesGenerator.js +0 -40
- package/packages/ai/src/lib/promptGenerators/generateEntityKeyAttributesGenerator.js.map +0 -1
- package/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.js +0 -72
- package/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.js.map +0 -1
- /package/analyzer-template/{process → packages/process/src}/GlobalProcessManager.ts +0 -0
- /package/analyzer-template/{process → packages/process/src}/ProcessManager.ts +0 -0
- /package/analyzer-template/{process → packages/process/src}/index.ts +0 -0
- /package/analyzer-template/{process → packages/process/src}/managedExecAsync.ts +0 -0
- /package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-CMKNK2uU.css → styles-CMKNK2uU.css} +0 -0
- /package/{background/src/lib/process → packages/process/src}/GlobalProcessManager.js +0 -0
- /package/{background/src/lib/process → packages/process/src}/index.js +0 -0
- /package/{background/src/lib/process → packages/process/src}/managedExecAsync.js +0 -0
|
@@ -17,6 +17,12 @@ interface UseStateInfo {
|
|
|
17
17
|
export class ReactFrameworkManager implements EquivalencyManager {
|
|
18
18
|
private useStateInfos: UseStateInfo[] = [];
|
|
19
19
|
private useCallbackEquivalents: Record<string, string> = {};
|
|
20
|
+
// Track variables used as ref props - they should be typed as 'null'
|
|
21
|
+
// Format: { scopeNodeName -> Set of variable paths }
|
|
22
|
+
private refVariables: Map<string, Set<string>> = new Map();
|
|
23
|
+
// Track ref variable source paths for updating external function call schemas in finalize
|
|
24
|
+
// Format: { functionCallName -> Set of source paths (e.g., 'useAutoAnimate().functionCallReturnValue[]') }
|
|
25
|
+
private refVariableSources: Map<string, Set<string>> = new Map();
|
|
20
26
|
|
|
21
27
|
postProcess(scopeNode: ScopeNode, scopeDataStructure: ScopeDataStructure) {
|
|
22
28
|
this.handleUseState(scopeNode, scopeDataStructure);
|
|
@@ -139,7 +145,27 @@ export class ReactFrameworkManager implements EquivalencyManager {
|
|
|
139
145
|
'main',
|
|
140
146
|
]);
|
|
141
147
|
|
|
142
|
-
finalize(
|
|
148
|
+
finalize(scopeNode: ScopeNode, scopeDataStructure: ScopeDataStructure) {
|
|
149
|
+
// Set all tracked ref variables to 'null' type
|
|
150
|
+
// This ensures mock data generation uses null instead of placeholder strings
|
|
151
|
+
const refVarsForScope = this.refVariables.get(scopeNode.name);
|
|
152
|
+
if (refVarsForScope) {
|
|
153
|
+
for (const refVar of refVarsForScope) {
|
|
154
|
+
scopeNode.schema[refVar] = 'null';
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// Update external function call schemas with ref source paths
|
|
159
|
+
// This runs AFTER schema building is complete, so the null values won't be overwritten
|
|
160
|
+
for (const efc of scopeDataStructure.externalFunctionCalls) {
|
|
161
|
+
const refSourcePaths = this.refVariableSources.get(efc.name);
|
|
162
|
+
if (refSourcePaths) {
|
|
163
|
+
for (const sourcePath of refSourcePaths) {
|
|
164
|
+
efc.schema[sourcePath] = 'null';
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
143
169
|
|
|
144
170
|
private findUseStateInfo(useStateCall: string) {
|
|
145
171
|
return this.useStateInfos.find(
|
|
@@ -213,10 +239,18 @@ export class ReactFrameworkManager implements EquivalencyManager {
|
|
|
213
239
|
});
|
|
214
240
|
}
|
|
215
241
|
|
|
242
|
+
// Get the initial value path (what signature[0] is equivalent to)
|
|
243
|
+
const initialValuePath = equivalentValues[0].schemaPath;
|
|
244
|
+
const initialValueScopeName = equivalentValues[0].scopeNodeName;
|
|
245
|
+
|
|
246
|
+
// Note: Callback scope tracing (for useState(() => { return prop; }))
|
|
247
|
+
// is handled in getEquivalentSignatureVariables() where the full
|
|
248
|
+
// equivalency database is available for deep tracing.
|
|
249
|
+
|
|
216
250
|
scopeDataStructure.addEquivalency(
|
|
217
251
|
relevantUseStateInfo.value,
|
|
218
|
-
|
|
219
|
-
|
|
252
|
+
initialValuePath,
|
|
253
|
+
initialValueScopeName,
|
|
220
254
|
scopeNode,
|
|
221
255
|
'useState value equivalency',
|
|
222
256
|
);
|
|
@@ -382,90 +416,126 @@ export class ReactFrameworkManager implements EquivalencyManager {
|
|
|
382
416
|
let propagated = false;
|
|
383
417
|
const functionCallSignature = getFunctionCallSignature(subPathParts);
|
|
384
418
|
|
|
385
|
-
|
|
419
|
+
let relevantUseStateInfo = this.findUseStateInfo(functionCallSignature);
|
|
420
|
+
|
|
421
|
+
// If we didn't find a useState call directly, check if the function being called
|
|
422
|
+
// is a setter variable (e.g., setWorkouts from useState)
|
|
423
|
+
if (!relevantUseStateInfo && functionCallSignature) {
|
|
424
|
+
// Extract the function name from the call (e.g., "setWorkouts" from "setWorkouts(data || [])")
|
|
425
|
+
const fnName = functionCallSignature.split('(')[0];
|
|
426
|
+
relevantUseStateInfo = this.useStateInfos.find(
|
|
427
|
+
(info) => info.setter === fnName,
|
|
428
|
+
);
|
|
429
|
+
}
|
|
386
430
|
|
|
387
431
|
if (relevantUseStateInfo) {
|
|
388
432
|
const pathParts = scopeDataStructure.splitPath(path);
|
|
389
|
-
if (pathParts.length < 3) return false;
|
|
390
433
|
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
434
|
+
// Check if this is a direct setter variable call (e.g., setWorkouts(data).signature[0])
|
|
435
|
+
// rather than a useState path (e.g., useState<X>().functionCallReturnValue[1].signature[0])
|
|
436
|
+
const fnName = functionCallSignature?.split('(')[0];
|
|
437
|
+
const isDirectSetterCall = fnName === relevantUseStateInfo.setter;
|
|
438
|
+
|
|
439
|
+
if (isDirectSetterCall && pathParts.length === 2) {
|
|
440
|
+
// Handle direct setter calls like setWorkouts(data || []).signature[0] = data
|
|
441
|
+
const lastPart = pathParts[1];
|
|
442
|
+
if (lastPart === 'signature[0]') {
|
|
443
|
+
// Get the value being passed to the setter from the equivalency
|
|
444
|
+
const originScopeInfoName =
|
|
445
|
+
equivalencyValueChain[0]?.currentPath?.scopeNodeName;
|
|
446
|
+
if (!originScopeInfoName) return propagated;
|
|
447
|
+
|
|
448
|
+
const originScope =
|
|
449
|
+
scopeDataStructure.getScopeOrFunctionCallInfo(originScopeInfoName);
|
|
450
|
+
const setterCallEquiv = originScope?.equivalencies?.[path];
|
|
451
|
+
if (!setterCallEquiv || setterCallEquiv.length === 0)
|
|
452
|
+
return propagated;
|
|
453
|
+
|
|
454
|
+
const argumentPath = setterCallEquiv[0].schemaPath;
|
|
455
|
+
const argumentScopeName = setterCallEquiv[0].scopeNodeName;
|
|
456
|
+
|
|
457
|
+
// Create equivalency: useState<X>().functionCallReturnValue[0] = argumentPath
|
|
458
|
+
propagated = true;
|
|
459
|
+
const valuePath = `${relevantUseStateInfo.useStateCall}.functionCallReturnValue[0]`;
|
|
460
|
+
const useStateScopeInfo =
|
|
461
|
+
scopeDataStructure.getScopeOrFunctionCallInfo(
|
|
462
|
+
relevantUseStateInfo.scopeNodeName,
|
|
463
|
+
) as ScopeNode;
|
|
395
464
|
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
465
|
+
scopeDataStructure.addEquivalency(
|
|
466
|
+
valuePath,
|
|
467
|
+
argumentPath,
|
|
468
|
+
argumentScopeName,
|
|
469
|
+
useStateScopeInfo,
|
|
470
|
+
'useState setter call equivalency (direct)',
|
|
471
|
+
equivalencyValueChain,
|
|
472
|
+
traceId,
|
|
473
|
+
);
|
|
474
|
+
}
|
|
475
|
+
} else if (pathParts.length >= 3) {
|
|
476
|
+
// Original logic for useState path patterns
|
|
477
|
+
const basePath = scopeDataStructure.joinPathParts([
|
|
478
|
+
...pathParts.slice(0, 2),
|
|
479
|
+
pathParts[2],
|
|
480
|
+
]);
|
|
400
481
|
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
// {
|
|
406
|
-
// traceId,
|
|
407
|
-
// basePath,
|
|
408
|
-
// expectedValueBasePath,
|
|
409
|
-
// expectedSetterBasePath,
|
|
410
|
-
// },
|
|
411
|
-
// null,
|
|
412
|
-
// 2,
|
|
413
|
-
// ),
|
|
414
|
-
// );
|
|
415
|
-
// }
|
|
416
|
-
|
|
417
|
-
if (basePath === expectedSetterBasePath) {
|
|
418
|
-
const originScopeInfoName =
|
|
419
|
-
equivalencyValueChain[0].currentPath?.scopeNodeName;
|
|
420
|
-
const setterScope =
|
|
421
|
-
scopeDataStructure.getScopeOrFunctionCallInfo(originScopeInfoName);
|
|
422
|
-
const setterEquivalencyPath = Object.keys(
|
|
423
|
-
setterScope.equivalencies,
|
|
424
|
-
).find((p) => {
|
|
425
|
-
if (!p.startsWith(relevantUseStateInfo.setter)) return false;
|
|
426
|
-
const pParts = scopeDataStructure.splitPath(p);
|
|
427
|
-
|
|
428
|
-
const valid = pathParts
|
|
429
|
-
.slice(3)
|
|
430
|
-
.reverse()
|
|
431
|
-
.every((part, index) => [...pParts].reverse()[index] === part);
|
|
432
|
-
|
|
433
|
-
// if (p.includes('.title') && valid)
|
|
434
|
-
// console.info({ p, pParts, pathParts: pathParts.slice(3) });
|
|
435
|
-
|
|
436
|
-
return valid;
|
|
437
|
-
});
|
|
438
|
-
|
|
439
|
-
if (!setterEquivalencyPath) return;
|
|
440
|
-
|
|
441
|
-
const setterEquivalencyPathParts = scopeDataStructure.splitPath(
|
|
442
|
-
setterEquivalencyPath,
|
|
443
|
-
);
|
|
444
|
-
const setterEquivalentVariable =
|
|
445
|
-
setterScope.equivalencies[setterEquivalencyPath][0].schemaPath;
|
|
482
|
+
const expectedSetterBasePath = scopeDataStructure.joinPathParts([
|
|
483
|
+
functionCallSignature,
|
|
484
|
+
'functionCallReturnValue[1]',
|
|
485
|
+
]);
|
|
446
486
|
|
|
447
|
-
if (
|
|
487
|
+
if (basePath === expectedSetterBasePath) {
|
|
488
|
+
const originScopeInfoName =
|
|
489
|
+
equivalencyValueChain[0].currentPath?.scopeNodeName;
|
|
490
|
+
const setterScope =
|
|
491
|
+
scopeDataStructure.getScopeOrFunctionCallInfo(originScopeInfoName);
|
|
492
|
+
const setterEquivalencyPath = Object.keys(
|
|
493
|
+
setterScope.equivalencies,
|
|
494
|
+
).find((p) => {
|
|
495
|
+
if (!p.startsWith(relevantUseStateInfo.setter)) return false;
|
|
496
|
+
const pParts = scopeDataStructure.splitPath(p);
|
|
497
|
+
|
|
498
|
+
const valid = pathParts
|
|
499
|
+
.slice(3)
|
|
500
|
+
.reverse()
|
|
501
|
+
.every((part, index) => [...pParts].reverse()[index] === part);
|
|
502
|
+
|
|
503
|
+
return valid;
|
|
504
|
+
});
|
|
505
|
+
|
|
506
|
+
if (!setterEquivalencyPath) return propagated;
|
|
507
|
+
|
|
508
|
+
const setterEquivalencyPathParts = scopeDataStructure.splitPath(
|
|
509
|
+
setterEquivalencyPath,
|
|
510
|
+
);
|
|
511
|
+
const setterEquivalentVariable =
|
|
512
|
+
setterScope.equivalencies[setterEquivalencyPath][0].schemaPath;
|
|
448
513
|
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
const useStateScopeInfo = scopeDataStructure.getScopeOrFunctionCallInfo(
|
|
452
|
-
relevantUseStateInfo.scopeNodeName,
|
|
453
|
-
) as ScopeNode;
|
|
514
|
+
if (setterEquivalentVariable === expectedSetterBasePath)
|
|
515
|
+
return propagated;
|
|
454
516
|
|
|
455
|
-
|
|
456
|
-
valuePath
|
|
457
|
-
|
|
458
|
-
|
|
517
|
+
propagated = true;
|
|
518
|
+
const valuePath = `${functionCallSignature}.functionCallReturnValue[0]`;
|
|
519
|
+
const useStateScopeInfo =
|
|
520
|
+
scopeDataStructure.getScopeOrFunctionCallInfo(
|
|
521
|
+
relevantUseStateInfo.scopeNodeName,
|
|
522
|
+
) as ScopeNode;
|
|
523
|
+
|
|
524
|
+
const fullValuePath = scopeDataStructure.joinPathParts([
|
|
525
|
+
valuePath,
|
|
526
|
+
...setterEquivalencyPathParts.slice(2),
|
|
527
|
+
]);
|
|
459
528
|
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
529
|
+
scopeDataStructure.addEquivalency(
|
|
530
|
+
fullValuePath,
|
|
531
|
+
setterEquivalentVariable,
|
|
532
|
+
originScopeInfoName,
|
|
533
|
+
useStateScopeInfo,
|
|
534
|
+
'useState setter call equivalency',
|
|
535
|
+
equivalencyValueChain,
|
|
536
|
+
traceId,
|
|
537
|
+
);
|
|
538
|
+
}
|
|
469
539
|
}
|
|
470
540
|
}
|
|
471
541
|
|
|
@@ -564,6 +634,102 @@ export class ReactFrameworkManager implements EquivalencyManager {
|
|
|
564
634
|
for (const [equivalentPath, equivalentValues] of Object.entries(
|
|
565
635
|
scopeNode.equivalencies,
|
|
566
636
|
)) {
|
|
637
|
+
// Check if the equivalency KEY (e.g., "div().signature[0].ref") ends with .ref
|
|
638
|
+
// If so, the VALUE (e.g., "parent") should be marked as null
|
|
639
|
+
const equivalentPathParts = scopeDataStructure.splitPath(equivalentPath);
|
|
640
|
+
const pathLength = equivalentPathParts.length;
|
|
641
|
+
|
|
642
|
+
if (pathLength >= 2) {
|
|
643
|
+
const secondToLast = equivalentPathParts[pathLength - 2];
|
|
644
|
+
const last = equivalentPathParts[pathLength - 1];
|
|
645
|
+
|
|
646
|
+
if (secondToLast === 'signature[0]' && last === 'ref') {
|
|
647
|
+
// This is a ref prop usage like div().signature[0].ref -> parent
|
|
648
|
+
for (const equivalentValue of equivalentValues) {
|
|
649
|
+
propagated = true;
|
|
650
|
+
|
|
651
|
+
// Track this variable as a ref - we'll set its type to 'null' in finalize()
|
|
652
|
+
// after the schema is built (setting directly here would be overwritten)
|
|
653
|
+
// IMPORTANT: The ref variable might be defined in a parent scope, not the
|
|
654
|
+
// current scope. We need to find where the variable is actually defined by
|
|
655
|
+
// walking up the scope tree.
|
|
656
|
+
const varName = equivalentValue.schemaPath;
|
|
657
|
+
let targetScope: ScopeNode | null = scopeNode;
|
|
658
|
+
|
|
659
|
+
// Walk up the scope tree to find where this variable is defined
|
|
660
|
+
while (targetScope) {
|
|
661
|
+
// Check if this scope has the variable in its schema or equivalencies
|
|
662
|
+
const hasVariable =
|
|
663
|
+
varName in (targetScope.schema || {}) ||
|
|
664
|
+
varName in (targetScope.equivalencies || {});
|
|
665
|
+
|
|
666
|
+
if (hasVariable) {
|
|
667
|
+
if (!this.refVariables.has(targetScope.name)) {
|
|
668
|
+
this.refVariables.set(targetScope.name, new Set());
|
|
669
|
+
}
|
|
670
|
+
this.refVariables.get(targetScope.name)!.add(varName);
|
|
671
|
+
|
|
672
|
+
// IMPORTANT: Also update the source of the ref variable in the external
|
|
673
|
+
// function call's schema. This ensures dataForMocks produces [null]
|
|
674
|
+
// instead of ["string"] for hooks like useAutoAnimate.
|
|
675
|
+
const varEquivalencies = targetScope.equivalencies?.[varName];
|
|
676
|
+
if (varEquivalencies) {
|
|
677
|
+
for (const varEquivalency of varEquivalencies) {
|
|
678
|
+
const sourcePath = varEquivalency.schemaPath;
|
|
679
|
+
// Check if this comes from an external function call
|
|
680
|
+
// (contains functionCallReturnValue which indicates it's a hook/function return)
|
|
681
|
+
if (sourcePath.includes('functionCallReturnValue')) {
|
|
682
|
+
// Store the source path for later - we'll update the external function
|
|
683
|
+
// call's schema in finalize() which runs AFTER schema building is complete.
|
|
684
|
+
// Setting it here would be overwritten by later schema building.
|
|
685
|
+
for (const efc of scopeDataStructure.externalFunctionCalls) {
|
|
686
|
+
if (sourcePath.startsWith(efc.name)) {
|
|
687
|
+
if (!this.refVariableSources.has(efc.name)) {
|
|
688
|
+
this.refVariableSources.set(efc.name, new Set());
|
|
689
|
+
}
|
|
690
|
+
// Store both the specific indexed path and the generic [] path
|
|
691
|
+
this.refVariableSources
|
|
692
|
+
.get(efc.name)!
|
|
693
|
+
.add(sourcePath);
|
|
694
|
+
const genericPath = sourcePath.replace(
|
|
695
|
+
/\[\d+\]/g,
|
|
696
|
+
'[]',
|
|
697
|
+
);
|
|
698
|
+
if (genericPath !== sourcePath) {
|
|
699
|
+
this.refVariableSources
|
|
700
|
+
.get(efc.name)!
|
|
701
|
+
.add(genericPath);
|
|
702
|
+
}
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
// Move up to parent scope
|
|
711
|
+
if (targetScope.tree && targetScope.tree.length > 0) {
|
|
712
|
+
const parentScopeName =
|
|
713
|
+
targetScope.tree[targetScope.tree.length - 1];
|
|
714
|
+
targetScope = scopeDataStructure.getScopeOrFunctionCallInfo(
|
|
715
|
+
parentScopeName,
|
|
716
|
+
) as ScopeNode | null;
|
|
717
|
+
} else {
|
|
718
|
+
targetScope = null;
|
|
719
|
+
}
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
scopeDataStructure.removeEquivalency(
|
|
723
|
+
equivalentPath,
|
|
724
|
+
equivalentValue,
|
|
725
|
+
scopeNode,
|
|
726
|
+
);
|
|
727
|
+
}
|
|
728
|
+
continue;
|
|
729
|
+
}
|
|
730
|
+
}
|
|
731
|
+
|
|
732
|
+
// Original logic for checking the value side
|
|
567
733
|
for (const equivalentValue of equivalentValues) {
|
|
568
734
|
const equivalentValueParts = scopeDataStructure.splitPath(
|
|
569
735
|
equivalentValue.schemaPath,
|
package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.ts
CHANGED
|
@@ -64,6 +64,14 @@ const protoMethodSets: Record<PrimitiveKind, Set<string>> = {
|
|
|
64
64
|
),
|
|
65
65
|
};
|
|
66
66
|
|
|
67
|
+
/** Built-in properties (not methods) that should be removed from primitives.
|
|
68
|
+
* These are properties that exist on the prototype and shouldn't appear
|
|
69
|
+
* as schema entries (they cause malformed mock data structures). */
|
|
70
|
+
const protoPropertySets: Partial<Record<PrimitiveKind, Set<string>>> = {
|
|
71
|
+
array: new Set(['length']),
|
|
72
|
+
string: new Set(['length']),
|
|
73
|
+
};
|
|
74
|
+
|
|
67
75
|
/**
|
|
68
76
|
* Extract primitive kind from a type string, handling union types.
|
|
69
77
|
* E.g., "number | undefined" -> "number", "string | null" -> "string"
|
|
@@ -118,11 +126,21 @@ function scrub(
|
|
|
118
126
|
const rootKind = rootTable.get(prefix);
|
|
119
127
|
if (!rootKind) continue;
|
|
120
128
|
|
|
121
|
-
const
|
|
129
|
+
const rawToken = keyParts[cut];
|
|
130
|
+
const rawMethod = rawToken.split('(')[0];
|
|
131
|
+
|
|
132
|
+
// Check if it's a prototype method (e.g., map, filter, toString)
|
|
122
133
|
if (protoMethodSets[rootKind].has(rawMethod)) {
|
|
123
134
|
onRemove(keyPath);
|
|
124
135
|
break;
|
|
125
136
|
}
|
|
137
|
+
|
|
138
|
+
// Check if it's a built-in property (e.g., length on arrays/strings)
|
|
139
|
+
const propertySet = protoPropertySets[rootKind];
|
|
140
|
+
if (propertySet && propertySet.has(rawToken)) {
|
|
141
|
+
onRemove(keyPath);
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
126
144
|
}
|
|
127
145
|
}
|
|
128
146
|
}
|
package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.ts
CHANGED
|
@@ -41,6 +41,19 @@ const isolatingArrayMethodsSet = new Set([
|
|
|
41
41
|
// Methods that are ambiguous - used on both arrays and non-arrays (e.g., router.push, history.pop)
|
|
42
42
|
// Don't infer array type from these alone without additional evidence
|
|
43
43
|
const ambiguousArrayMethodsSet = new Set(['push', 'pop']);
|
|
44
|
+
|
|
45
|
+
// Methods that return primitives (boolean, number) - their return values are not mockable
|
|
46
|
+
// These should have their .functionCallReturnValue paths removed from the schema
|
|
47
|
+
const primitiveReturningMethodsSet = new Set([
|
|
48
|
+
'some', // Returns boolean
|
|
49
|
+
'every', // Returns boolean
|
|
50
|
+
'includes', // Returns boolean
|
|
51
|
+
'indexOf', // Returns number (index)
|
|
52
|
+
'lastIndexOf', // Returns number (index from end)
|
|
53
|
+
'findIndex', // Returns number (index)
|
|
54
|
+
'findLastIndex', // Returns number (index from end)
|
|
55
|
+
]);
|
|
56
|
+
|
|
44
57
|
export const transformingArrayMethodsSet = new Set([
|
|
45
58
|
'map',
|
|
46
59
|
'reduce',
|
|
@@ -106,6 +119,17 @@ const stringMethodsSet = new Set([
|
|
|
106
119
|
]);
|
|
107
120
|
export const allMethodsSet = new Set([...arrayMethodsSet, ...stringMethodsSet]);
|
|
108
121
|
|
|
122
|
+
// Methods that exist in both stringMethodsSet and arrayMethodsSet.
|
|
123
|
+
// When ONLY these methods are called on an object, we can't determine if it's a string or array.
|
|
124
|
+
// Don't infer 'string' type from these alone - leave as 'unknown' for other type resolution.
|
|
125
|
+
const stringArrayAmbiguousMethodsSet = new Set([
|
|
126
|
+
'includes', // exists in both String.includes() and Array.includes()
|
|
127
|
+
'indexOf', // exists in both String.indexOf() and Array.indexOf()
|
|
128
|
+
'lastIndexOf', // exists in both String.lastIndexOf() and Array.lastIndexOf()
|
|
129
|
+
'concat', // exists in both String.concat() and Array.concat()
|
|
130
|
+
'slice', // exists in both String.slice() and Array.slice()
|
|
131
|
+
]);
|
|
132
|
+
|
|
109
133
|
const signatureKeyWord = 'signature';
|
|
110
134
|
const returnValueKeyWord = 'functionCallReturnValue';
|
|
111
135
|
|
|
@@ -115,12 +139,14 @@ const signatureRegExp = new RegExp(`^${signatureKeyWord}\\[\\d+\\]$`);
|
|
|
115
139
|
|
|
116
140
|
// --- Caching splitOutsideParentheses ---
|
|
117
141
|
// Instead of splitting the same string repeatedly, we cache the result.
|
|
142
|
+
// IMPORTANT: Do NOT strip ::cyDuplicateKey:: markers - they are critical for
|
|
143
|
+
// distinguishing variable reassignments (e.g., fetcher vs fetcher::cyDuplicateKey1::).
|
|
144
|
+
// Stripping them causes schema contamination where fields from one type-parameterized
|
|
145
|
+
// call get incorrectly attributed to another.
|
|
118
146
|
const splitCache = new Map<string, string[]>();
|
|
119
147
|
function cachedSplit(str: string): string[] {
|
|
120
148
|
if (splitCache.has(str)) return splitCache.get(str)!;
|
|
121
|
-
const parts = splitOutsideParentheses(str)
|
|
122
|
-
p.replace(/::cyDuplicateKey\d+::/g, ''),
|
|
123
|
-
);
|
|
149
|
+
const parts = splitOutsideParentheses(str);
|
|
124
150
|
splitCache.set(str, parts);
|
|
125
151
|
return parts;
|
|
126
152
|
}
|
|
@@ -682,7 +708,14 @@ function handleFunctionMapping(
|
|
|
682
708
|
allProperties.every((prop) => stringMethodsSet.has(getMethodName(prop)))
|
|
683
709
|
) {
|
|
684
710
|
if (allProperties.every((prop) => isValidStringMethod(prop))) {
|
|
685
|
-
|
|
711
|
+
// Don't infer string if ALL methods are ambiguous between string and array
|
|
712
|
+
// (like includes, indexOf, concat, slice - these exist on both types)
|
|
713
|
+
const hasOnlyStringArrayAmbiguousMethods = allProperties.every(
|
|
714
|
+
(prop) => stringArrayAmbiguousMethodsSet.has(getMethodName(prop)),
|
|
715
|
+
);
|
|
716
|
+
if (!hasOnlyStringArrayAmbiguousMethods) {
|
|
717
|
+
keyMapping[previousPath] = 'string';
|
|
718
|
+
}
|
|
686
719
|
} else {
|
|
687
720
|
return false;
|
|
688
721
|
}
|
|
@@ -703,19 +736,36 @@ function handleFunctionMapping(
|
|
|
703
736
|
|
|
704
737
|
// Don't add [] element for ambiguous methods without other array evidence
|
|
705
738
|
// Also don't add [] if the path was already identified as a string type
|
|
739
|
+
// Also don't add [] if the method is ambiguous between string and array (like includes)
|
|
706
740
|
const methodName = getMethodName(lastPart);
|
|
707
741
|
const isAmbiguousMethod = ambiguousArrayMethodsSet.has(methodName);
|
|
742
|
+
const isStringArrayAmbiguous =
|
|
743
|
+
stringArrayAmbiguousMethodsSet.has(methodName);
|
|
708
744
|
const isStringType = keyMapping[previousPath] === 'string';
|
|
709
745
|
if (
|
|
710
746
|
!isValidFunctionCall(previousPart) &&
|
|
711
747
|
arrayMethodsSet.has(methodName) &&
|
|
712
748
|
!keyMapping[previousPath + '[]'] &&
|
|
713
749
|
!isAmbiguousMethod &&
|
|
750
|
+
!isStringArrayAmbiguous &&
|
|
714
751
|
!isStringType
|
|
715
752
|
) {
|
|
716
753
|
keyMapping[previousPath + '[]'] = 'unknown';
|
|
717
754
|
}
|
|
718
755
|
|
|
756
|
+
// For primitive-returning methods (like includes, indexOf, some, every),
|
|
757
|
+
// also delete the .functionCallReturnValue children since the return value
|
|
758
|
+
// is just a primitive (boolean/number) and not useful data.
|
|
759
|
+
// For other methods (like filter, map), keep children for transformation.
|
|
760
|
+
const isPrimitiveReturning = primitiveReturningMethodsSet.has(methodName);
|
|
761
|
+
if (isPrimitiveReturning) {
|
|
762
|
+
for (const otherPath of Object.keys(keyMapping)) {
|
|
763
|
+
if (otherPath.startsWith(path + '.')) {
|
|
764
|
+
delete keyMapping[otherPath];
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
}
|
|
768
|
+
|
|
719
769
|
delete keyMapping[path];
|
|
720
770
|
return true;
|
|
721
771
|
}
|
|
@@ -941,14 +991,34 @@ function clearAttributes(
|
|
|
941
991
|
}
|
|
942
992
|
}
|
|
943
993
|
|
|
994
|
+
// Track paths that have primitive-returning method calls (like includes, some, every)
|
|
995
|
+
// These need cleanup even if we can't determine the base type
|
|
996
|
+
const pathsWithPrimitiveReturningMethods = new Set<string>();
|
|
997
|
+
|
|
944
998
|
for (const key in functionCallsOnObjects) {
|
|
945
999
|
const functionCalls = functionCallsOnObjects[key];
|
|
1000
|
+
|
|
1001
|
+
// Check if any method calls are primitive-returning
|
|
1002
|
+
const hasPrimitiveReturningMethods = functionCalls.some((f) =>
|
|
1003
|
+
primitiveReturningMethodsSet.has(getMethodName(f)),
|
|
1004
|
+
);
|
|
1005
|
+
if (hasPrimitiveReturningMethods) {
|
|
1006
|
+
pathsWithPrimitiveReturningMethods.add(key);
|
|
1007
|
+
}
|
|
1008
|
+
|
|
946
1009
|
if (
|
|
947
1010
|
functionCalls.every(
|
|
948
1011
|
(f) => stringMethodsSet.has(getMethodName(f)) && isValidStringMethod(f),
|
|
949
1012
|
)
|
|
950
1013
|
) {
|
|
951
|
-
|
|
1014
|
+
// Don't infer string if ALL methods are ambiguous between string and array
|
|
1015
|
+
// (like includes, indexOf, concat, slice - these exist on both types)
|
|
1016
|
+
const hasOnlyStringArrayAmbiguousMethods = functionCalls.every((f) =>
|
|
1017
|
+
stringArrayAmbiguousMethodsSet.has(getMethodName(f)),
|
|
1018
|
+
);
|
|
1019
|
+
if (!hasOnlyStringArrayAmbiguousMethods) {
|
|
1020
|
+
mapping[key] = 'string';
|
|
1021
|
+
}
|
|
952
1022
|
} else if (
|
|
953
1023
|
functionCalls.every(
|
|
954
1024
|
(f) => arrayMethodsSet.has(getMethodName(f)) && isValidArrayMethod(f),
|
|
@@ -970,10 +1040,28 @@ function clearAttributes(
|
|
|
970
1040
|
for (const key in mapping) {
|
|
971
1041
|
const value = mapping[key];
|
|
972
1042
|
if (knownTypes.has(value)) {
|
|
1043
|
+
// Don't add string-typed array element paths (ending with []) to knownBasePaths.
|
|
1044
|
+
// When an array element is typed as 'string' but has child paths (like data[].id),
|
|
1045
|
+
// it's actually an object - the 'string' type is incorrect. The child paths
|
|
1046
|
+
// describe the array element structure and should not be deleted.
|
|
1047
|
+
//
|
|
1048
|
+
// However, array-typed [] paths (like matrix[] where matrix is array of arrays)
|
|
1049
|
+
// should still be in knownBasePaths so their method calls (filter, map, etc.)
|
|
1050
|
+
// get cleaned up properly.
|
|
1051
|
+
if (key.endsWith('[]') && value === 'string') {
|
|
1052
|
+
continue;
|
|
1053
|
+
}
|
|
973
1054
|
knownBasePaths.add(key);
|
|
974
1055
|
}
|
|
975
1056
|
}
|
|
976
1057
|
|
|
1058
|
+
// Also add paths with primitive-returning method calls (like includes, some, every)
|
|
1059
|
+
// to knownBasePaths so their method call paths get cleaned up, even if we couldn't
|
|
1060
|
+
// determine the base type (e.g., when only ambiguous methods like includes are used)
|
|
1061
|
+
for (const path of pathsWithPrimitiveReturningMethods) {
|
|
1062
|
+
knownBasePaths.add(path);
|
|
1063
|
+
}
|
|
1064
|
+
|
|
977
1065
|
for (const key in mapping) {
|
|
978
1066
|
const keyParts = cachedSplit(key);
|
|
979
1067
|
for (const basePath of knownBasePaths) {
|
|
@@ -984,11 +1072,20 @@ function clearAttributes(
|
|
|
984
1072
|
basePath
|
|
985
1073
|
)
|
|
986
1074
|
continue;
|
|
1075
|
+
// Preserve functionCallReturnValue for non-string types, UNLESS
|
|
1076
|
+
// the method is a primitive-returning method (like some, every, includes, indexOf)
|
|
1077
|
+
// whose return values are not mockable
|
|
1078
|
+
const methodPart = keyParts[basePathParts.length];
|
|
1079
|
+
const methodName = methodPart?.split('(')[0];
|
|
1080
|
+
const isPrimitiveReturning = primitiveReturningMethodsSet.has(
|
|
1081
|
+
methodName ?? '',
|
|
1082
|
+
);
|
|
987
1083
|
if (
|
|
988
1084
|
mapping[basePath] !== 'string' &&
|
|
989
1085
|
keyParts[basePathParts.length + 1]?.startsWith(
|
|
990
1086
|
'functionCallReturnValue',
|
|
991
|
-
)
|
|
1087
|
+
) &&
|
|
1088
|
+
!isPrimitiveReturning
|
|
992
1089
|
)
|
|
993
1090
|
continue;
|
|
994
1091
|
|
|
@@ -6,6 +6,14 @@ const STANDALONE_INDEX_RE = /^\[(\d+)\]$/;
|
|
|
6
6
|
const isExplicitIndex = (s?: string) => !!s && INDEXED_RE.test(s);
|
|
7
7
|
const isStandaloneIndex = (s?: string) => !!s && STANDALONE_INDEX_RE.test(s);
|
|
8
8
|
|
|
9
|
+
// Detect .length properties that come from dynamic iteration patterns
|
|
10
|
+
// These aren't useful for mock data - arrays work without explicit length,
|
|
11
|
+
// and objects shouldn't have length. We filter .length that appears:
|
|
12
|
+
// 1. After array notation: metadata[].length, items[][].length
|
|
13
|
+
// 2. On object paths that likely come from iteration: metadata.length (when metadata has other props)
|
|
14
|
+
// The regex matches any path ending with .length that has [] somewhere before it
|
|
15
|
+
const DYNAMIC_LENGTH_RE = /\[\].*\.length$/;
|
|
16
|
+
|
|
9
17
|
// Treat these as structural placeholders (don't commit them as concrete leaves)
|
|
10
18
|
function isSkippableLeafType(t: string) {
|
|
11
19
|
// 'unknown' by itself is a placeholder (but 'boolean | unknown' is not)
|
|
@@ -23,6 +31,10 @@ export default function convertDotNotation(
|
|
|
23
31
|
const result: JsonTypeDefinition = {};
|
|
24
32
|
|
|
25
33
|
for (const [rawPath, typ] of Object.entries(schema)) {
|
|
34
|
+
// Skip paths with .length after array notation from dynamic iteration
|
|
35
|
+
// e.g., metadata[].length, metadata[][].length
|
|
36
|
+
if (DYNAMIC_LENGTH_RE.test(rawPath)) continue;
|
|
37
|
+
|
|
26
38
|
const parts = splitOutsideParenthesesAndArrays(rawPath);
|
|
27
39
|
if (!parts || parts.length === 0) continue;
|
|
28
40
|
|
|
@@ -187,6 +199,17 @@ export default function convertDotNotation(
|
|
|
187
199
|
i++; // consume '[]'
|
|
188
200
|
} else {
|
|
189
201
|
// Pattern like: "items", "[]", "id" -> items: [ { id: ... } ]
|
|
202
|
+
// But if cursor[key] is already a non-array object (from paths like "metadata: object"),
|
|
203
|
+
// don't overwrite it with an array - the object type should take precedence.
|
|
204
|
+
// This handles spurious "metadata[]" paths from dynamic iteration (Object.keys, for...in).
|
|
205
|
+
if (
|
|
206
|
+
cursor[key] !== undefined &&
|
|
207
|
+
typeof cursor[key] === 'object' &&
|
|
208
|
+
!Array.isArray(cursor[key])
|
|
209
|
+
) {
|
|
210
|
+
// Skip this path - it's trying to treat an object as an array
|
|
211
|
+
break;
|
|
212
|
+
}
|
|
190
213
|
if (!Array.isArray(cursor[key])) cursor[key] = [];
|
|
191
214
|
|
|
192
215
|
// Look ahead to see what comes after '[]'
|