@codeyam/codeyam-cli 0.1.0-staging.eb21b2f → 0.1.0-staging.f777668
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/analyzer-template/.build-info.json +7 -7
- package/analyzer-template/log.txt +3 -3
- package/analyzer-template/package.json +21 -21
- package/analyzer-template/packages/ai/package.json +2 -2
- package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +34 -3
- package/analyzer-template/packages/ai/src/lib/completionCall.ts +114 -113
- package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +259 -5
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.ts +62 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.ts +35 -0
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +78 -2
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +0 -33
- package/analyzer-template/packages/analyze/src/lib/ProjectAnalyzer.ts +19 -7
- 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/files/analyze/analyzeEntities.ts +9 -1
- package/analyzer-template/packages/analyze/src/lib/files/analyze/dependencyResolver.ts +0 -6
- package/analyzer-template/packages/analyze/src/lib/files/analyze/findOrCreateEntity.ts +12 -0
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/TransformationTracer.ts +65 -28
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +83 -0
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.ts +0 -98
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +23 -4
- 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 +3 -3
- package/analyzer-template/packages/database/src/lib/kysely/db.ts +8 -0
- package/analyzer-template/packages/database/src/lib/kysely/tables/editorScenariosTable.ts +68 -0
- package/analyzer-template/packages/database/src/lib/loadCommits.ts +31 -20
- package/analyzer-template/packages/database/src/lib/loadReadyToBeCapturedAnalyses.ts +0 -5
- package/analyzer-template/packages/database/src/lib/updateCommitMetadata.ts +151 -135
- 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/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/kysely/db.d.ts +2 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js +5 -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/editorScenariosTable.d.ts +22 -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 +51 -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/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/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/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/updateCommitMetadata.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js +100 -89
- 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/types/ProjectMetadata.d.ts +1 -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/package.json +1 -1
- package/analyzer-template/packages/types/src/types/ProjectMetadata.ts +1 -0
- package/analyzer-template/packages/types/src/types/Scenario.ts +10 -0
- package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts +1 -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/utils/src/lib/fs/rsyncCopy.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js +6 -2
- 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 +14 -2
- package/analyzer-template/playwright/captureFromUrl.ts +89 -82
- package/analyzer-template/project/constructMockCode.ts +168 -48
- 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 +17 -0
- package/analyzer-template/project/writeScenarioComponents.ts +96 -17
- package/analyzer-template/tsconfig.json +13 -1
- package/background/src/lib/virtualized/project/constructMockCode.js +143 -39
- 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 +12 -0
- package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
- package/background/src/lib/virtualized/project/writeScenarioComponents.js +73 -12
- package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
- package/codeyam-cli/scripts/apply-setup.js +208 -11
- 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 +32 -25
- package/codeyam-cli/src/cli.js.map +1 -1
- package/codeyam-cli/src/commands/analyze.js +17 -7
- package/codeyam-cli/src/commands/analyze.js.map +1 -1
- package/codeyam-cli/src/commands/default.js +14 -2
- package/codeyam-cli/src/commands/default.js.map +1 -1
- package/codeyam-cli/src/commands/editor.js +2607 -0
- package/codeyam-cli/src/commands/editor.js.map +1 -0
- package/codeyam-cli/src/commands/init.js +40 -11
- package/codeyam-cli/src/commands/init.js.map +1 -1
- package/codeyam-cli/src/commands/memory.js +29 -58
- package/codeyam-cli/src/commands/memory.js.map +1 -1
- 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 +127 -0
- package/codeyam-cli/src/utils/__tests__/editorApi.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorAudit.test.js +635 -0
- package/codeyam-cli/src/utils/__tests__/editorAudit.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__/editorDevServer.test.js +155 -0
- package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorEntityChangeStatus.test.js +121 -0
- package/codeyam-cli/src/utils/__tests__/editorEntityChangeStatus.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 +393 -0
- package/codeyam-cli/src/utils/__tests__/editorLoaderHelpers.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 +266 -0
- package/codeyam-cli/src/utils/__tests__/editorPreview.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 +221 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarioSwitch.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js +221 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js +213 -0
- package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/entityChangeStatus.test.js +1686 -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__/journalCaptureStabilization.test.js +107 -0
- package/codeyam-cli/src/utils/__tests__/journalCaptureStabilization.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/npmVersionCheck.test.js +6 -0
- package/codeyam-cli/src/utils/__tests__/npmVersionCheck.test.js.map +1 -1
- package/codeyam-cli/src/utils/__tests__/parseRegisterArg.test.js +101 -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__/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 +246 -0
- package/codeyam-cli/src/utils/__tests__/scenariosManifest.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +50 -4
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
- package/codeyam-cli/src/utils/__tests__/templateConsistency.test.js +50 -0
- package/codeyam-cli/src/utils/__tests__/templateConsistency.test.js.map +1 -0
- package/codeyam-cli/src/utils/backgroundServer.js +21 -5
- 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/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 +73 -0
- package/codeyam-cli/src/utils/editorApi.js.map +1 -0
- package/codeyam-cli/src/utils/editorAudit.js +159 -0
- package/codeyam-cli/src/utils/editorAudit.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/editorDevServer.js +109 -0
- package/codeyam-cli/src/utils/editorDevServer.js.map +1 -0
- package/codeyam-cli/src/utils/editorEntityChangeStatus.js +44 -0
- package/codeyam-cli/src/utils/editorEntityChangeStatus.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 +81 -0
- package/codeyam-cli/src/utils/editorLoaderHelpers.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 +106 -0
- package/codeyam-cli/src/utils/editorPreview.js.map +1 -0
- package/codeyam-cli/src/utils/editorScenarioSwitch.js +112 -0
- package/codeyam-cli/src/utils/editorScenarioSwitch.js.map +1 -0
- package/codeyam-cli/src/utils/editorScenarios.js +96 -0
- package/codeyam-cli/src/utils/editorScenarios.js.map +1 -0
- package/codeyam-cli/src/utils/editorSeedAdapter.js +173 -0
- package/codeyam-cli/src/utils/editorSeedAdapter.js.map +1 -0
- package/codeyam-cli/src/utils/entityChangeStatus.js +337 -0
- package/codeyam-cli/src/utils/entityChangeStatus.js.map +1 -0
- package/codeyam-cli/src/utils/entityChangeStatus.server.js +107 -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 +25 -9
- package/codeyam-cli/src/utils/fileWatcher.js.map +1 -1
- package/codeyam-cli/src/utils/git.js +103 -0
- package/codeyam-cli/src/utils/git.js.map +1 -1
- package/codeyam-cli/src/utils/install-skills.js +57 -15
- 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/npmVersionCheck.js +2 -2
- package/codeyam-cli/src/utils/npmVersionCheck.js.map +1 -1
- 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/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 +70 -1
- 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/requireSimulations.js +1 -1
- package/codeyam-cli/src/utils/requireSimulations.js.map +1 -1
- package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js +5 -6
- package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js.map +1 -1
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/assertRules.js +1 -1
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/assertRules.js.map +1 -1
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/setupTempProject.js +0 -1
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/setupTempProject.js.map +1 -1
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js +2 -4
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js.map +1 -1
- package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js +2 -5
- package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js.map +1 -1
- 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__/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 +1 -0
- package/codeyam-cli/src/utils/rules/index.js.map +1 -1
- package/codeyam-cli/src/utils/rules/parser.js +14 -4
- 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/sourceFiles.js +43 -0
- package/codeyam-cli/src/utils/rules/sourceFiles.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 +112 -0
- package/codeyam-cli/src/utils/scenariosManifest.js.map +1 -0
- package/codeyam-cli/src/utils/serverState.js +27 -2
- package/codeyam-cli/src/utils/serverState.js.map +1 -1
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +82 -11
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
- package/codeyam-cli/src/utils/simulationGateMiddleware.js +159 -0
- package/codeyam-cli/src/utils/simulationGateMiddleware.js.map +1 -0
- package/codeyam-cli/src/utils/syncMocksMiddleware.js +5 -24
- package/codeyam-cli/src/utils/syncMocksMiddleware.js.map +1 -1
- package/codeyam-cli/src/utils/testRunner.js +158 -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 +21 -0
- package/codeyam-cli/src/utils/versionInfo.js.map +1 -1
- package/codeyam-cli/src/utils/webappDetection.js +14 -2
- package/codeyam-cli/src/utils/webappDetection.js.map +1 -1
- package/codeyam-cli/src/webserver/app/lib/database.js +41 -27
- 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 +396 -0
- package/codeyam-cli/src/webserver/app/lib/git.js.map +1 -0
- package/codeyam-cli/src/webserver/backgroundServer.js +118 -18
- package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{CopyButton-jNYXRRNI.js → CopyButton-DmJveP3T.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{EntityItem-bwuHPyTa.js → EntityItem-C76mRRiF.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-CvzqMxcu.js → EntityTypeBadge-g3saevPb.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-BH0XDim7.js → EntityTypeIcon-CobE682z.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-Bu6c6aDe.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-yjIHlOGa.js → InteractivePreview-DYFW3lDD.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/{LibraryFunctionPreview-Cq5o8jL4.js → LibraryFunctionPreview-DLeucoVX.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-BvMu2i-g.js → LoadingDots-BU_OAEMP.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-kgBTLoJD.js → LogViewer-ceAyBX-H.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-BzPgx-xO.js → ReportIssueModal-djPLI-WV.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{SafeScreenshot-CwZrv-Ok.js → SafeScreenshot-BED4B6sP.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-BX2Ny2Qj.js → ScenarioViewer-ZlRKbhrq.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/Spinner-Bb5uFQ5V.js +34 -0
- package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-CDpEprKa.js → TruncatedFilePath-C8OKAR5x.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/ViewportInspectBar-oAf2Kqsf.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{_index-BRx8ZGZo.js → _index-C96V0n15.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-4S4yPfFw.js → activity.(_tab)-BpKzcsJz.js} +1 -1
- 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-Duc5hnl7.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-D9hemwl6.js +22 -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-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-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-scenarios-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.rule-path-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{book-open-D4IPYH_y.js → book-open-D_nMCFmP.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-CG65viiV.js → chevron-down-BH2h1Ea2.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{chunk-JZWAC4HX-DB3aFuEO.js → chunk-JZWAC4HX-C4pqxYJB.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{circle-check-igfMr5DY.js → circle-check-DyIKORY6.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{copy-Coc4o_8c.js → copy-NDbZjXao.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{createLucideIcon-D1zB-pYc.js → createLucideIcon-CMT1jU2q.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-CltMNppm.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/editor-DTEBHY7Z.js +10 -0
- package/codeyam-cli/src/webserver/build/client/assets/editorPreview-B7ztwLut.js +41 -0
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-B0h9AqE6.js → entity._sha._-DItJnD8s.js} +10 -10
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.dev-D5rYBT5x.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-CF164ouH.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-p9hhkjJM.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-PePWg17F.js → entity._sha_.edit._scenarioId-BMvVHNXU.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{entry.client-I-Wo99C_.js → entry.client-DTvKq3TY.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{fileTableUtils-9sMMAiWJ.js → fileTableUtils-cPo8LiG3.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{files-Co65J0s3.js → files-DO4CZ16O.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/git-CdN8sCqs.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/globals-JMY99HpD.css +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{index-CUM5iXwc.js → index-10oVnAAH.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{index-_417gcQW.js → index-BcvgDzbZ.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/index-yHOVb4rc.js +15 -0
- package/codeyam-cli/src/webserver/build/client/assets/labs-Zk7ryIM1.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-TzRHMVog.js → loader-circle-BAXYRVEO.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-7aab51c4.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/memory-Dg0mvYrI.js +96 -0
- package/codeyam-cli/src/webserver/build/client/assets/{pause-hjzB7t2z.js → pause-DTAcYxBt.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/root-FRztnN-P.js +67 -0
- package/codeyam-cli/src/webserver/build/client/assets/{search-DcAwD_Ln.js → search-fKo7v0Zo.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/settings-DfuTtcJP.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{simulations-DVNJVQgD.js → simulations-B3aOzpCZ.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{terminal-DbEAHMbA.js → terminal-BG4heKCG.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-CAD5b1o_.js → triangle-alert-DtSmdtM4.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-CrAK28Bc.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-C14nCb1q.js +2 -0
- package/codeyam-cli/src/webserver/build/client/assets/{useReportContext-DZlYx2c4.js → useReportContext-O-jkvSPx.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useToast-ihdMtlf6.js → useToast-9FIWuYfK.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/xterm-BqvuqXEL.js +27 -0
- package/codeyam-cli/src/webserver/build/server/assets/index-Cz751Dm2.js +1 -0
- package/codeyam-cli/src/webserver/build/server/assets/server-build-DSylnYVM.js +367 -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 +431 -0
- package/codeyam-cli/src/webserver/editorProxy.js.map +1 -0
- package/codeyam-cli/src/webserver/scripts/codeyam-preload.mjs +414 -0
- package/codeyam-cli/src/webserver/scripts/journalCapture.ts +230 -0
- package/codeyam-cli/src/webserver/server.js +258 -1
- package/codeyam-cli/src/webserver/server.js.map +1 -1
- package/codeyam-cli/src/webserver/terminalServer.js +706 -0
- package/codeyam-cli/src/webserver/terminalServer.js.map +1 -0
- package/codeyam-cli/templates/codeyam-editor-claude.md +68 -0
- package/codeyam-cli/templates/editor-step-hook.py +208 -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/PRISMA_SETUP.md +84 -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 +19 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/page.tsx +10 -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 +38 -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 +37 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma.config.ts +12 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/seed-adapter.ts +89 -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/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 +44 -17
- package/codeyam-cli/templates/rule-reflection-hook.py +24 -4
- package/codeyam-cli/templates/rules-instructions.md +34 -88
- package/codeyam-cli/templates/skills/codeyam-dev-mode/SKILL.md +237 -0
- package/codeyam-cli/templates/skills/codeyam-editor/SKILL.md +136 -0
- package/codeyam-cli/templates/{codeyam-memory.md → skills/codeyam-memory/SKILL.md} +215 -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/{codeyam-new-rule.md → skills/codeyam-new-rule/SKILL.md} +0 -2
- package/package.json +21 -14
- package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +22 -4
- package/packages/ai/src/lib/astScopes/astScopeAnalyzer.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 +234 -3
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
- 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/stripNullableMarkers.js +34 -0
- package/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.js.map +1 -0
- package/packages/ai/src/lib/generateEntityScenarioData.js +57 -2
- package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
- package/packages/ai/src/lib/generateExecutionFlows.js +0 -11
- package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -1
- package/packages/analyze/src/lib/ProjectAnalyzer.js +13 -4
- 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/files/analyze/analyzeEntities.js +8 -1
- 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 +9 -0
- package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js +54 -27
- package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +65 -0
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js +0 -40
- package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +18 -4
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
- package/packages/database/index.js +1 -0
- package/packages/database/index.js.map +1 -1
- package/packages/database/src/lib/kysely/db.js +5 -0
- package/packages/database/src/lib/kysely/db.js.map +1 -1
- package/packages/database/src/lib/kysely/tables/editorScenariosTable.js +51 -0
- package/packages/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -0
- package/packages/database/src/lib/loadCommits.js +23 -13
- package/packages/database/src/lib/loadCommits.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/updateCommitMetadata.js +100 -89
- 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/utils/src/lib/fs/rsyncCopy.js +6 -2
- 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 -120
- 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/InlineSpinner-EhOseatT.js +0 -34
- package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-DHKuQSmR.js +0 -17
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-JTAjQ54M.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-DjLxr2JB.js +0 -6
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-CtYowLOt.js +0 -6
- package/codeyam-cli/src/webserver/build/client/assets/git-BdHOxVfg.js +0 -15
- package/codeyam-cli/src/webserver/build/client/assets/globals-CCgBKWy4.css +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/labs-BK0C1H1T.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-390cb8fa.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/memory-CzZySbBE.js +0 -78
- package/codeyam-cli/src/webserver/build/client/assets/root-DnbDhvTU.js +0 -62
- package/codeyam-cli/src/webserver/build/client/assets/settings-CclxrcPK.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-BqgrAzs3.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-DAFqfEDH.js +0 -2
- package/codeyam-cli/src/webserver/build/server/assets/index-CXfuiwt3.js +0 -1
- package/codeyam-cli/src/webserver/build/server/assets/server-build-BSvme_Ao.js +0 -259
- package/codeyam-cli/templates/codeyam-stop-hook.sh +0 -284
- package/scripts/finalize-analyzer.cjs +0 -13
- /package/codeyam-cli/templates/{codeyam-diagnose.md → commands/codeyam-diagnose.md} +0 -0
- /package/codeyam-cli/templates/{codeyam-debug.md → skills/codeyam-debug/SKILL.md} +0 -0
- /package/codeyam-cli/templates/{codeyam-setup.md → skills/codeyam-setup/SKILL.md} +0 -0
- /package/codeyam-cli/templates/{codeyam-sim.md → skills/codeyam-sim/SKILL.md} +0 -0
- /package/codeyam-cli/templates/{codeyam-test.md → skills/codeyam-test/SKILL.md} +0 -0
- /package/codeyam-cli/templates/{codeyam-verify.md → skills/codeyam-verify/SKILL.md} +0 -0
|
@@ -1055,11 +1055,17 @@ function addMockToContent(
|
|
|
1055
1055
|
// use the base name (e.g., "trpc") when calling constructMockCode. This ensures
|
|
1056
1056
|
// constructMockCode generates a complete nested mock from the schema without
|
|
1057
1057
|
// referencing __cyOriginal variables.
|
|
1058
|
+
// NOTE: Only check for dots BEFORE the first open paren. Function calls with
|
|
1059
|
+
// dotted arguments like "getSurveyWithMetadata(params.surveyId)" have dots
|
|
1060
|
+
// INSIDE parens — these are NOT method chains and should keep the full signature.
|
|
1058
1061
|
const dataKeyBaseName = dataKey.split(/[.<(]/)[0];
|
|
1062
|
+
const firstParenIndex = dataKey.indexOf('(');
|
|
1063
|
+
const partBeforeFirstParen =
|
|
1064
|
+
firstParenIndex >= 0 ? dataKey.substring(0, firstParenIndex) : dataKey;
|
|
1059
1065
|
const isMethodChainDataKey =
|
|
1060
1066
|
dataKeyBaseName === importedExport.name &&
|
|
1061
1067
|
dataKey !== importedExport.name &&
|
|
1062
|
-
|
|
1068
|
+
partBeforeFirstParen.includes('.');
|
|
1063
1069
|
const mockNameToUse = isMethodChainDataKey
|
|
1064
1070
|
? importedExport.name
|
|
1065
1071
|
: dataKey;
|
|
@@ -1145,12 +1151,20 @@ function ${importedExport.name}(...args) {
|
|
|
1145
1151
|
// referencing __cyOriginal variables. The __cyOriginal pattern is only needed
|
|
1146
1152
|
// for partial mocking where we preserve some original methods, not for complete
|
|
1147
1153
|
// method-chain mocks where we provide all implementations.
|
|
1154
|
+
// NOTE: Only check for dots BEFORE the first open paren. Function calls with
|
|
1155
|
+
// dotted arguments like "getSurveyWithMetadata(params.surveyId)" have dots
|
|
1156
|
+
// INSIDE parens — these are NOT method chains and should keep the full signature.
|
|
1148
1157
|
const dataKeyBaseName = dataKey?.split(/[.<(]/)[0];
|
|
1158
|
+
const elseFirstParenIndex = dataKey?.indexOf('(') ?? -1;
|
|
1159
|
+
const elsePartBeforeFirstParen =
|
|
1160
|
+
dataKey && elseFirstParenIndex >= 0
|
|
1161
|
+
? dataKey.substring(0, elseFirstParenIndex)
|
|
1162
|
+
: dataKey;
|
|
1149
1163
|
const isMethodChainDataKey =
|
|
1150
1164
|
dataKey &&
|
|
1151
1165
|
dataKeyBaseName === importedExport.name &&
|
|
1152
1166
|
dataKey !== importedExport.name &&
|
|
1153
|
-
|
|
1167
|
+
(elsePartBeforeFirstParen?.includes('.') ?? false);
|
|
1154
1168
|
const mockNameToUse = isMethodChainDataKey
|
|
1155
1169
|
? importedExport.name
|
|
1156
1170
|
: (dataKey ?? importedExport.calls?.[0] ?? `${importedExport.name}()`);
|
|
@@ -1920,6 +1934,17 @@ export default async function writeScenarioComponents({
|
|
|
1920
1934
|
dataFileContent = stripServerOnlyImport(dataFileContent);
|
|
1921
1935
|
dataFileContent = applyServerOnlyMocks(dataFileContent);
|
|
1922
1936
|
|
|
1937
|
+
// Process transitive imports: if the data entity file imports from files
|
|
1938
|
+
// that have `import "server-only"`, rewrite those imports to transitive
|
|
1939
|
+
// copies with server-only stripped. Without this, data entity files that
|
|
1940
|
+
// end up in a client bundle (e.g., via a stripped "use server" boundary)
|
|
1941
|
+
// would pull in server-only code and cause build failures.
|
|
1942
|
+
dataFileContent = await processTransitiveImportsRecursively(
|
|
1943
|
+
dataFileContent,
|
|
1944
|
+
fileNotMocked.path,
|
|
1945
|
+
dataScenarioPath,
|
|
1946
|
+
);
|
|
1947
|
+
|
|
1923
1948
|
// Write the transformed data entity file
|
|
1924
1949
|
await writeFile(dataScenarioPath, dataFileContent);
|
|
1925
1950
|
scenarioComponentPaths.push(dataScenarioPath);
|
|
@@ -1945,9 +1970,9 @@ export default async function writeScenarioComponents({
|
|
|
1945
1970
|
importedExport.name,
|
|
1946
1971
|
);
|
|
1947
1972
|
|
|
1948
|
-
// Don't recurse - data entities don't
|
|
1949
|
-
//
|
|
1950
|
-
//
|
|
1973
|
+
// Don't recurse into full writeScenarioComponents - data entities don't
|
|
1974
|
+
// need mock generation for their dependencies. Transitive server-only
|
|
1975
|
+
// import processing is already handled above via processTransitiveImportsRecursively.
|
|
1951
1976
|
} else {
|
|
1952
1977
|
// For visual/library entities, recurse to process their dependencies
|
|
1953
1978
|
|
|
@@ -2020,20 +2045,25 @@ export default async function writeScenarioComponents({
|
|
|
2020
2045
|
// that stubbing would break (e.g., Zod schemas with .superRefine())
|
|
2021
2046
|
const isDataEntity = entityType === 'data' || entityType === 'type';
|
|
2022
2047
|
|
|
2023
|
-
//
|
|
2024
|
-
//
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
importedExport.calls?.
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
)
|
|
2032
|
-
);
|
|
2048
|
+
// If calls data shows the entity is only accessed via properties/methods
|
|
2049
|
+
// (e.g., formValidator.validate(), schema.superRefine()) and never directly
|
|
2050
|
+
// invoked (e.g., getInitialProps()), it's used as an object and should be
|
|
2051
|
+
// preserved rather than replaced with a Proxy stub.
|
|
2052
|
+
const onlyPropertyAccessed =
|
|
2053
|
+
importedExport.calls?.length > 0 &&
|
|
2054
|
+
!importedExport.calls.some((call: string) => {
|
|
2055
|
+
const afterName = call.slice(importedExport.name.length);
|
|
2056
|
+
return afterName.startsWith('(') || afterName.startsWith('<');
|
|
2057
|
+
});
|
|
2033
2058
|
|
|
2034
|
-
// Callable entities can be safely stubbed
|
|
2059
|
+
// Callable entities can be safely stubbed. Entities that are only
|
|
2060
|
+
// property-accessed should be preserved (their methods need to work).
|
|
2061
|
+
// 'other' entities are unknown types — safer to preserve than stub.
|
|
2035
2062
|
const isCallable =
|
|
2036
|
-
!isDataEntity &&
|
|
2063
|
+
!isDataEntity &&
|
|
2064
|
+
!onlyPropertyAccessed &&
|
|
2065
|
+
entityType !== undefined &&
|
|
2066
|
+
entityType !== 'other';
|
|
2037
2067
|
|
|
2038
2068
|
// Determine what action to take
|
|
2039
2069
|
const shouldStripAndReplace = hasMock;
|
|
@@ -3021,6 +3051,55 @@ ${exportKeyword}const ${functionName} = new Proxy(() => scenarios().data()?.["${
|
|
|
3021
3051
|
}
|
|
3022
3052
|
}
|
|
3023
3053
|
|
|
3054
|
+
// For route components (page.tsx, layout.tsx), the component IS the Next.js page.
|
|
3055
|
+
// There's no wrapper page to inject argumentsData as props (unlike non-route components
|
|
3056
|
+
// which get a scenarioComponent wrapper). We need to wrap the default export so that
|
|
3057
|
+
// the scenario's argumentsData is passed as props to the component.
|
|
3058
|
+
if (
|
|
3059
|
+
isFrameworkRoute(file, entity, framework, file === rootFile) &&
|
|
3060
|
+
rootAnalysis.metadata?.scenariosDataStructure?.arguments?.length > 0
|
|
3061
|
+
) {
|
|
3062
|
+
const positionalArguments =
|
|
3063
|
+
rootAnalysis.metadata.scenariosDataStructure.arguments;
|
|
3064
|
+
const hasNamedArgs =
|
|
3065
|
+
positionalArguments.length === 1 &&
|
|
3066
|
+
typeof positionalArguments[0] === 'object';
|
|
3067
|
+
|
|
3068
|
+
if (hasNamedArgs) {
|
|
3069
|
+
// Match: export default function Name(
|
|
3070
|
+
// Also: export default async function Name(
|
|
3071
|
+
const defaultExportMatch = fileContent.match(
|
|
3072
|
+
/export\s+default\s+(async\s+)?function\s+(\w+)\s*\(/,
|
|
3073
|
+
);
|
|
3074
|
+
|
|
3075
|
+
if (defaultExportMatch) {
|
|
3076
|
+
const funcName = defaultExportMatch[2];
|
|
3077
|
+
|
|
3078
|
+
// Remove "export default" from the original function declaration
|
|
3079
|
+
fileContent = fileContent.replace(
|
|
3080
|
+
/export\s+default\s+(async\s+)?function\s+(\w+)\s*\(/,
|
|
3081
|
+
'$1function $2(',
|
|
3082
|
+
);
|
|
3083
|
+
|
|
3084
|
+
// Ensure scenarios import is present
|
|
3085
|
+
const mockDataPath = `${relativeMocksDir}/MockData_${safeFileName(scenario.name)}`;
|
|
3086
|
+
if (fileContent.indexOf('import { scenarios } from') === -1) {
|
|
3087
|
+
fileContent = `import { scenarios } from "${mockDataPath}";\n\n${fileContent}`;
|
|
3088
|
+
}
|
|
3089
|
+
|
|
3090
|
+
// Add wrapper default export that injects argumentsData as props.
|
|
3091
|
+
// Filter null values: the LLM uses null to mean "don't pass this prop"
|
|
3092
|
+
// but spreading { prop: null } explicitly passes null, which differs from
|
|
3093
|
+
// undefined (absent) and crashes components that check `prop !== undefined`.
|
|
3094
|
+
fileContent += `\n\nexport default function _CYRouteWrapper(props: any) {
|
|
3095
|
+
const _cyArgs = scenarios().data()?.['arguments']?.[0] ?? {};
|
|
3096
|
+
const _cyCleanArgs = Object.fromEntries(Object.entries(_cyArgs).filter(([_, v]) => v !== null));
|
|
3097
|
+
return <${funcName} {...props} {..._cyCleanArgs} />;
|
|
3098
|
+
}\n`;
|
|
3099
|
+
}
|
|
3100
|
+
}
|
|
3101
|
+
}
|
|
3102
|
+
|
|
3024
3103
|
// Use the directive that was extracted at the beginning of processing
|
|
3025
3104
|
// This ensures it stays at the very top even after imports are prepended
|
|
3026
3105
|
// NOTE: We only preserve "use client" directives, NOT "use server" directives.
|
|
@@ -15,6 +15,18 @@
|
|
|
15
15
|
"~codeyam/*": ["./packages/*"]
|
|
16
16
|
},
|
|
17
17
|
"sourceMap": true,
|
|
18
|
-
"skipLibCheck": true
|
|
18
|
+
"skipLibCheck": true,
|
|
19
|
+
"types": [
|
|
20
|
+
"node",
|
|
21
|
+
"jest",
|
|
22
|
+
"jsdom",
|
|
23
|
+
"better-sqlite3",
|
|
24
|
+
"yargs",
|
|
25
|
+
"pg",
|
|
26
|
+
"ws",
|
|
27
|
+
"react",
|
|
28
|
+
"react-dom",
|
|
29
|
+
"react-resizable"
|
|
30
|
+
]
|
|
19
31
|
}
|
|
20
32
|
}
|
|
@@ -257,6 +257,7 @@ options) {
|
|
|
257
257
|
let dataStructureValue;
|
|
258
258
|
let foundEntityWithSignature = false;
|
|
259
259
|
let signatureSchema;
|
|
260
|
+
let baseSchemaHasMethodCalls = false;
|
|
260
261
|
entitySearch: for (const filePath in dependencySchemas) {
|
|
261
262
|
for (const entityName in dependencySchemas[filePath]) {
|
|
262
263
|
// Match entity by base name (without generics/args)
|
|
@@ -281,8 +282,44 @@ options) {
|
|
|
281
282
|
pathParts[mockNameParts.length - 1].startsWith(mockNameParts[mockNameParts.length - 1]));
|
|
282
283
|
});
|
|
283
284
|
if (dataStructurePath) {
|
|
285
|
+
// Start with the base entity's return value schema
|
|
286
|
+
const baseReturnValueSchema = dependencySchemas[filePath][entityName]?.returnValueSchema;
|
|
287
|
+
const mergedSchema = {
|
|
288
|
+
...baseReturnValueSchema,
|
|
289
|
+
};
|
|
290
|
+
// Check if the base schema has method-call entries (e.g., .map().functionCallReturnValue)
|
|
291
|
+
// When it does, the scenario data is stored as an object with method keys, and
|
|
292
|
+
// array prototype methods need mock implementations. When it doesn't, the data
|
|
293
|
+
// is a raw array and native methods like .includes() work directly.
|
|
294
|
+
if (baseReturnValueSchema) {
|
|
295
|
+
baseSchemaHasMethodCalls = Object.keys(baseReturnValueSchema).some((k) => k.startsWith(baseMockName + '.') &&
|
|
296
|
+
k.includes('(') &&
|
|
297
|
+
k.includes('.functionCallReturnValue'));
|
|
298
|
+
}
|
|
299
|
+
// Merge in method-call dependencies that are separate entries.
|
|
300
|
+
// e.g., "activityTypes.find((a) => a.value === type)" is a separate dependency
|
|
301
|
+
// for a .find() call on activityTypes. We need to include these with a
|
|
302
|
+
// .functionCallReturnValue path so constructMockCode generates callable mock methods.
|
|
303
|
+
for (const otherEntityName in dependencySchemas[filePath]) {
|
|
304
|
+
if (otherEntityName === entityName)
|
|
305
|
+
continue;
|
|
306
|
+
if (otherEntityName.startsWith(baseMockName + '.') &&
|
|
307
|
+
otherEntityName.includes('(')) {
|
|
308
|
+
// Add a functionCallReturnValue entry for this method call.
|
|
309
|
+
// This ensures constructMockCode treats it as a function that returns data,
|
|
310
|
+
// generating a proper mock method with data lookup.
|
|
311
|
+
const fcrvPath = `${otherEntityName}.functionCallReturnValue`;
|
|
312
|
+
if (!mergedSchema[fcrvPath]) {
|
|
313
|
+
// Infer the return type from the method-call dependency's schema
|
|
314
|
+
const otherSchema = dependencySchemas[filePath][otherEntityName]?.returnValueSchema;
|
|
315
|
+
// Look for element type (baseMockName[]) or fall back to 'unknown'
|
|
316
|
+
const elementType = otherSchema?.[`${baseMockName}[]`];
|
|
317
|
+
mergedSchema[fcrvPath] = elementType || 'unknown';
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
}
|
|
284
321
|
relevantReturnValueSchema = fillInDirectSchemaGapsAndUnknowns({
|
|
285
|
-
schema:
|
|
322
|
+
schema: mergedSchema,
|
|
286
323
|
});
|
|
287
324
|
// NOTE: clearAttributesFromMapping is disabled because it deletes
|
|
288
325
|
// method calls on arrays (like .eq() after functionCallReturnValue: 'array')
|
|
@@ -352,7 +389,10 @@ options) {
|
|
|
352
389
|
args.push('...rest');
|
|
353
390
|
const argsString = args.join(', ');
|
|
354
391
|
// Generate empty mock function
|
|
355
|
-
|
|
392
|
+
// Use baseMockName (not mockName) because mockName may contain a full call
|
|
393
|
+
// signature with argument expressions (e.g., "logSignOutAction(sessionUser.id, ...)")
|
|
394
|
+
// which would produce invalid syntax as function parameter names.
|
|
395
|
+
return `function ${baseMockName}(${argsString}) {
|
|
356
396
|
// Empty mock - original function mocked out
|
|
357
397
|
}`;
|
|
358
398
|
}
|
|
@@ -391,12 +431,12 @@ options) {
|
|
|
391
431
|
: false;
|
|
392
432
|
if (firstArgIsFunctionOrUnknown && returnsFunction) {
|
|
393
433
|
// HOC pattern detected - return the first argument
|
|
394
|
-
return `function ${
|
|
434
|
+
return `function ${baseMockName}(${argsString}) {
|
|
395
435
|
return arg1;
|
|
396
436
|
}`;
|
|
397
437
|
}
|
|
398
438
|
// Generate empty mock function
|
|
399
|
-
return `function ${
|
|
439
|
+
return `function ${baseMockName}(${argsString}) {
|
|
400
440
|
// Empty mock - original function mocked out
|
|
401
441
|
}`;
|
|
402
442
|
}
|
|
@@ -536,17 +576,23 @@ options) {
|
|
|
536
576
|
return [];
|
|
537
577
|
}
|
|
538
578
|
const addReturnValueFunctionAccessor = (dataPath) => {
|
|
539
|
-
// Add function call accessor if:
|
|
540
|
-
// - There are actual arguments, OR
|
|
541
|
-
// - This is a callable (not a method that returns an array directly)
|
|
542
|
-
// For methods like getAll() that return arrays, the data is at ["getAll()"] not ["getAll()"]["()"]
|
|
543
579
|
if (returnValue.returnsFunctionArgs &&
|
|
544
580
|
(returnValue.returnsFunctionArgs.length > 0 ||
|
|
545
581
|
!returnValue.returnsFunctionArray)) {
|
|
546
582
|
if (returnValue.isArray) {
|
|
547
583
|
dataPath = `${dataPath}${optionalAccess('[0]')}`;
|
|
548
584
|
}
|
|
549
|
-
|
|
585
|
+
// Only add the function call accessor ?.["(args)"] when there are actual
|
|
586
|
+
// arguments. When returnsFunctionArgs is empty [] (function-returns-function
|
|
587
|
+
// with no specific arg patterns), skip the ?.["()"] because:
|
|
588
|
+
// 1. preprocessSchemaForMocks collapses nested functionCallReturnValue chains
|
|
589
|
+
// into flat entries (e.g., getTranslate() = string, not {(): string})
|
|
590
|
+
// 2. The mock data is a flat value, so ?.["()"] on a string returns undefined
|
|
591
|
+
// 3. constructContent still wraps the return in a function (via returnsFunctionArgs)
|
|
592
|
+
// so the function-returns-function behavior is preserved without data nesting
|
|
593
|
+
if (returnValue.returnsFunctionArgs.length > 0) {
|
|
594
|
+
dataPath = `${dataPath}${optionalAccess(`(${safeString(returnValue.returnsFunctionArgs.join(', '))})`)}`;
|
|
595
|
+
}
|
|
550
596
|
}
|
|
551
597
|
return dataPath;
|
|
552
598
|
};
|
|
@@ -572,20 +618,6 @@ options) {
|
|
|
572
618
|
};
|
|
573
619
|
const constructContent = (dataPaths) => {
|
|
574
620
|
const { name, args, nested, isArray, isGenericArray, returnsFunctionArgs, returnsFunctionArray, isAsyncFunction, hasNoReturnData, } = returnValue;
|
|
575
|
-
// When an array has differentiated indices ([0], [1], etc.), filter out any
|
|
576
|
-
// non-index items from nested. These non-index items come from generic [] paths
|
|
577
|
-
// like [].filter or [].sort, which describe element properties, not array elements.
|
|
578
|
-
// Including them would generate invalid syntax like "sort: ..." inside an array literal.
|
|
579
|
-
const hasDifferentiatedIndices = isArray &&
|
|
580
|
-
nested &&
|
|
581
|
-
nested.some((n) => n.name.match(/^\[\d+\]$/) && n.name !== '[0]');
|
|
582
|
-
const filteredNested = hasDifferentiatedIndices && nested
|
|
583
|
-
? nested.filter((n) => n.name.match(/^\[\d+\]$/))
|
|
584
|
-
: nested;
|
|
585
|
-
const nestedContent = (filteredNested ?? []).map((nestedItem) => {
|
|
586
|
-
const nestedContent = constructReturnValueString(nestedItem, dataPaths);
|
|
587
|
-
return nestedContent;
|
|
588
|
-
});
|
|
589
621
|
// Array prototype methods that should be ignored when building mocks
|
|
590
622
|
// (these work on any array - we don't need to mock them)
|
|
591
623
|
const ARRAY_PROTOTYPE_METHODS = new Set([
|
|
@@ -629,6 +661,36 @@ options) {
|
|
|
629
661
|
'with',
|
|
630
662
|
'length',
|
|
631
663
|
]);
|
|
664
|
+
// When an array has differentiated indices ([0], [1], etc.), filter out any
|
|
665
|
+
// non-index items from nested. These non-index items come from generic [] paths
|
|
666
|
+
// like [].filter or [].sort, which describe element properties, not array elements.
|
|
667
|
+
// Including them would generate invalid syntax like "sort: ..." inside an array literal.
|
|
668
|
+
const hasDifferentiatedIndices = isArray &&
|
|
669
|
+
nested &&
|
|
670
|
+
nested.some((n) => n.name.match(/^\[\d+\]$/) && n.name !== '[0]');
|
|
671
|
+
let filteredNested = hasDifferentiatedIndices && nested
|
|
672
|
+
? nested.filter((n) => n.name.match(/^\[\d+\]$/))
|
|
673
|
+
: nested;
|
|
674
|
+
// When a variable IS an array (not a function returning an array),
|
|
675
|
+
// filter out array prototype methods like .includes(), .filter(), etc.
|
|
676
|
+
// ONLY when the base schema has no method-call entries. When the base
|
|
677
|
+
// schema has methods (e.g., .map().functionCallReturnValue), the scenario
|
|
678
|
+
// data is stored as an object with method-call keys, and ALL methods
|
|
679
|
+
// need mock implementations. When the base schema has no methods, the
|
|
680
|
+
// data is a raw array and native methods like .includes() work directly.
|
|
681
|
+
if (isArray &&
|
|
682
|
+
!returnsFunctionArray &&
|
|
683
|
+
!baseSchemaHasMethodCalls &&
|
|
684
|
+
filteredNested) {
|
|
685
|
+
filteredNested = filteredNested.filter((n) => {
|
|
686
|
+
const methodName = n.name.replace(/[<(].*$/, '');
|
|
687
|
+
return !ARRAY_PROTOTYPE_METHODS.has(methodName);
|
|
688
|
+
});
|
|
689
|
+
}
|
|
690
|
+
const nestedContent = (filteredNested ?? []).map((nestedItem) => {
|
|
691
|
+
const nestedContent = constructReturnValueString(nestedItem, dataPaths);
|
|
692
|
+
return nestedContent;
|
|
693
|
+
});
|
|
632
694
|
const levelContentItems = [];
|
|
633
695
|
// Add spread for data paths when:
|
|
634
696
|
// - Not a function returning an array, OR function returns array with custom methods
|
|
@@ -1360,20 +1422,39 @@ options) {
|
|
|
1360
1422
|
content = `${cleanOutTypes(name)}: ${isAsyncFunction ? 'async ' : ''}(${argsString}) => {\n${indent(funcContents)}\n}`;
|
|
1361
1423
|
}
|
|
1362
1424
|
else {
|
|
1363
|
-
// No argument variants
|
|
1364
|
-
//
|
|
1365
|
-
//
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1425
|
+
// No argument variants
|
|
1426
|
+
// Check if this is an array method callback containing JSX.
|
|
1427
|
+
// JSX can't be serialized to JSON, so the LLM generates [{}] as data.
|
|
1428
|
+
// Instead of returning that unusable data, generate a passthrough that
|
|
1429
|
+
// calls the real callback on the best available array data from siblings.
|
|
1430
|
+
const containsJsx = dataPaths.some((p) => /<[A-Z]/.test(p));
|
|
1431
|
+
const isArrayMethod = ARRAY_PROTOTYPE_METHODS.has(name);
|
|
1432
|
+
if (containsJsx && isArrayMethod && dataPaths.length > 0) {
|
|
1433
|
+
// Extract parent data path by removing the last ?.["..."] segment
|
|
1434
|
+
const parentPath = dataPaths[0].replace(/\?\.\["[^"]*"\]$/, '');
|
|
1435
|
+
const funcLines = [
|
|
1436
|
+
`const _d = ${parentPath};`,
|
|
1437
|
+
`const _a = Object.values(_d || {}).filter(v => Array.isArray(v) && v.length > 0 && v.some(i => i && typeof i === "object" && Object.keys(i).length > 0)).sort((a, b) => b.length - a.length);`,
|
|
1438
|
+
`return _a[0] ? _a[0].${name}(${argsString}) : []`,
|
|
1439
|
+
];
|
|
1440
|
+
const funcContents = funcLines.join('\n');
|
|
1441
|
+
content = `${cleanOutTypes(name)}: ${isAsyncFunction ? 'async ' : ''}(${argsString}) => {\n${indent(funcContents)}\n}`;
|
|
1371
1442
|
}
|
|
1372
1443
|
else {
|
|
1373
|
-
|
|
1444
|
+
// But if there's nested content, we need to include it in the return object
|
|
1445
|
+
// (similar to how argument variant branches handle this at line 1070-1072)
|
|
1446
|
+
const hasNestedContent = validNestedContent.length > 0;
|
|
1447
|
+
let funcReturnContents;
|
|
1448
|
+
if (hasNestedContent && levelContentItems.length > 1) {
|
|
1449
|
+
// Include both spread and nested content in the return
|
|
1450
|
+
funcReturnContents = `{\n${indent(levelContents)}\n}`;
|
|
1451
|
+
}
|
|
1452
|
+
else {
|
|
1453
|
+
funcReturnContents = returnValueContents;
|
|
1454
|
+
}
|
|
1455
|
+
const funcContents = `return ${funcReturnContents}`;
|
|
1456
|
+
content = `${cleanOutTypes(name)}: ${isAsyncFunction ? 'async ' : ''}(${argsString}) => {\n${indent(funcContents)}\n}`;
|
|
1374
1457
|
}
|
|
1375
|
-
const funcContents = `return ${funcReturnContents}`;
|
|
1376
|
-
content = `${cleanOutTypes(name)}: ${isAsyncFunction ? 'async ' : ''}(${argsString}) => {\n${indent(funcContents)}\n}`;
|
|
1377
1458
|
}
|
|
1378
1459
|
}
|
|
1379
1460
|
else {
|
|
@@ -1917,6 +1998,20 @@ options) {
|
|
|
1917
1998
|
returnValueSection = relevantPart;
|
|
1918
1999
|
}
|
|
1919
2000
|
}
|
|
2001
|
+
// Post-processing: When the root functionCallReturnValue is typed as "function" but the
|
|
2002
|
+
// return value also has nested properties (methods like .from(), .auth, etc.), it's actually
|
|
2003
|
+
// an object, not a function to be called. Clear returnsFunctionArgs to prevent double-wrapping
|
|
2004
|
+
// (adding an extra () => { return { ... } } wrapper and ["()"] data paths).
|
|
2005
|
+
// This handles cases like Supabase's createClient() which returns an object with methods.
|
|
2006
|
+
// Only applied to the root level - nested parts that are functions with methods (like
|
|
2007
|
+
// useSearchParams()[1] which is a setter function with .set() and .delete()) should keep
|
|
2008
|
+
// their returnsFunctionArgs since they genuinely ARE functions.
|
|
2009
|
+
if (returnValueParts.returnsFunctionArgs &&
|
|
2010
|
+
returnValueParts.returnsFunctionArgs.length === 0 &&
|
|
2011
|
+
returnValueParts.nested &&
|
|
2012
|
+
returnValueParts.nested.length > 0) {
|
|
2013
|
+
returnValueParts.returnsFunctionArgs = undefined;
|
|
2014
|
+
}
|
|
1920
2015
|
const contents = constructReturnValueString(returnValueParts);
|
|
1921
2016
|
if (mockNameParts.length > 1) {
|
|
1922
2017
|
const originalLib = `${mockNameParts[0]}__cyOriginal`;
|
|
@@ -1978,15 +2073,24 @@ options) {
|
|
|
1978
2073
|
const nameAssignment = isErrorSubclass
|
|
1979
2074
|
? `this.name = '${baseMockName}';`
|
|
1980
2075
|
: '';
|
|
1981
|
-
// Use the
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
|
|
2076
|
+
// Use the base class name for the class definition, not the call-signature-derived name.
|
|
2077
|
+
// When mockName is "StatsCalculator(supabase)", baseMockName is "StatsCalculator"
|
|
2078
|
+
// and derivedFunctionName would be "StatsCalculator_supabase" which is wrong.
|
|
2079
|
+
// Classes are instantiated with `new ClassName(args)` so the name must match the original.
|
|
2080
|
+
const className = baseMockName;
|
|
2081
|
+
// Use the already-generated contents (which has proper function wrappers for methods)
|
|
2082
|
+
// instead of raw scenarios().data() which would create non-callable string-keyed properties.
|
|
2083
|
+
// For classes with methods like calculateStats(), the contents will have:
|
|
2084
|
+
// { calculateStats: (...args) => scenarios().data()?.["key"]?.["calculateStats(...)"], ... }
|
|
2085
|
+
// which makes methods callable on the instance.
|
|
2086
|
+
const classContents = enhancedContents.trim().startsWith('{')
|
|
2087
|
+
? enhancedContents
|
|
2088
|
+
: `scenarios().data()?.${quotePropertyKey(dataKey)} || {}`;
|
|
1985
2089
|
return `class ${className}${isErrorSubclass ? ' extends Error' : ''} {
|
|
1986
2090
|
constructor(message) {
|
|
1987
2091
|
${superCall}
|
|
1988
2092
|
${nameAssignment}
|
|
1989
|
-
Object.assign(this,
|
|
2093
|
+
Object.assign(this, ${classContents});
|
|
1990
2094
|
}
|
|
1991
2095
|
}`;
|
|
1992
2096
|
}
|