@codeyam/codeyam-cli 0.1.0-staging.09652b8 → 0.1.0-staging.28f73cf
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 +7 -6
- package/analyzer-template/packages/ai/index.ts +2 -0
- package/analyzer-template/packages/ai/package.json +2 -2
- package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +24 -0
- package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +14 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +1402 -546
- package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/FunctionCallManager.ts +138 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.ts +1 -1
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/BatchSchemaProcessor.ts +139 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/DebugTracer.ts +224 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/PathManager.ts +203 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/README.md +294 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/ScopeTreeManager.ts +161 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/VisitedTracker.ts +235 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.ts +2 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/selectBestValue.ts +70 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/uniqueIdUtils.ts +113 -0
- package/analyzer-template/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.ts +36 -0
- package/analyzer-template/packages/ai/src/lib/generateEntityKeyAttributes.ts +32 -8
- package/analyzer-template/packages/ai/src/lib/getConditionalUsagesFromCode.ts +27 -6
- package/analyzer-template/packages/ai/src/lib/promptGenerators/gatherAttributesMap.ts +42 -4
- package/analyzer-template/packages/ai/src/lib/worker/SerializableDataStructure.ts +39 -0
- package/analyzer-template/packages/analyze/src/lib/FileAnalyzer.ts +18 -6
- package/analyzer-template/packages/analyze/src/lib/asts/nodes/index.ts +2 -1
- package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +8 -10
- package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +6 -1
- package/analyzer-template/packages/analyze/src/lib/files/analyze/gatherEntityMap.ts +8 -6
- package/analyzer-template/packages/analyze/src/lib/files/analyze/trackEntityCircularDependencies.ts +5 -13
- package/analyzer-template/packages/analyze/src/lib/files/analyzeChange.ts +34 -15
- package/analyzer-template/packages/analyze/src/lib/files/analyzeEntity.ts +17 -3
- package/analyzer-template/packages/analyze/src/lib/files/analyzeInitial.ts +35 -16
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +7 -1
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.ts +9 -1
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateScenarioData.ts +6 -1
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateScenarios.ts +9 -1
- package/analyzer-template/packages/aws/dist/src/lib/s3/getPresignedUrl.d.ts +23 -0
- package/analyzer-template/packages/aws/dist/src/lib/s3/getPresignedUrl.d.ts.map +1 -0
- package/analyzer-template/packages/aws/dist/src/lib/s3/getPresignedUrl.js +30 -0
- package/analyzer-template/packages/aws/dist/src/lib/s3/getPresignedUrl.js.map +1 -0
- package/analyzer-template/packages/aws/package.json +5 -4
- package/analyzer-template/packages/aws/s3/index.ts +4 -0
- package/analyzer-template/packages/aws/src/lib/s3/getPresignedUrl.ts +62 -0
- package/analyzer-template/packages/generate/src/lib/scenarioComponent.ts +6 -3
- package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponent.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponent.js +5 -3
- package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponent.js.map +1 -1
- package/analyzer-template/packages/github/dist/supabase/src/lib/kysely/db.d.ts +2 -0
- package/analyzer-template/packages/github/dist/supabase/src/lib/kysely/db.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/supabase/src/lib/kysely/db.js +3 -0
- package/analyzer-template/packages/github/dist/supabase/src/lib/kysely/db.js.map +1 -1
- package/analyzer-template/packages/github/dist/supabase/src/lib/kysely/tableRelations.d.ts +2 -0
- package/analyzer-template/packages/github/dist/supabase/src/lib/kysely/tableRelations.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/supabase/src/lib/kysely/tables/debugReportsTable.d.ts +37 -0
- package/analyzer-template/packages/github/dist/supabase/src/lib/kysely/tables/debugReportsTable.d.ts.map +1 -0
- package/analyzer-template/packages/github/dist/supabase/src/lib/kysely/tables/debugReportsTable.js +27 -0
- package/analyzer-template/packages/github/dist/supabase/src/lib/kysely/tables/debugReportsTable.js.map +1 -0
- package/analyzer-template/packages/github/dist/utils/index.d.ts +1 -0
- package/analyzer-template/packages/github/dist/utils/index.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/utils/index.js +1 -0
- package/analyzer-template/packages/github/dist/utils/index.js.map +1 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/Semaphore.d.ts +25 -0
- package/analyzer-template/packages/github/dist/utils/src/lib/Semaphore.d.ts.map +1 -0
- package/analyzer-template/packages/github/dist/utils/src/lib/Semaphore.js +40 -0
- package/analyzer-template/packages/github/dist/utils/src/lib/Semaphore.js.map +1 -0
- package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/getRemixRoutePath.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/getRemixRoutePath.js +2 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/getRemixRoutePath.js.map +1 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/remixRouteFileNameToRoute.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/remixRouteFileNameToRoute.js +1 -0
- package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/remixRouteFileNameToRoute.js.map +1 -1
- package/analyzer-template/packages/supabase/src/lib/kysely/db.ts +6 -0
- package/analyzer-template/packages/supabase/src/lib/kysely/tableRelations.ts +3 -0
- package/analyzer-template/packages/supabase/src/lib/kysely/tables/debugReportsTable.ts +61 -0
- package/analyzer-template/packages/utils/dist/utils/index.d.ts +1 -0
- package/analyzer-template/packages/utils/dist/utils/index.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/index.js +1 -0
- package/analyzer-template/packages/utils/dist/utils/index.js.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/Semaphore.d.ts +25 -0
- package/analyzer-template/packages/utils/dist/utils/src/lib/Semaphore.d.ts.map +1 -0
- package/analyzer-template/packages/utils/dist/utils/src/lib/Semaphore.js +40 -0
- package/analyzer-template/packages/utils/dist/utils/src/lib/Semaphore.js.map +1 -0
- package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/getRemixRoutePath.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/getRemixRoutePath.js +2 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/getRemixRoutePath.js.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/remixRouteFileNameToRoute.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/remixRouteFileNameToRoute.js +1 -0
- package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/remixRouteFileNameToRoute.js.map +1 -1
- package/analyzer-template/packages/utils/index.ts +1 -0
- package/analyzer-template/packages/utils/src/lib/Semaphore.ts +42 -0
- package/analyzer-template/packages/utils/src/lib/frameworks/getRemixRoutePath.ts +2 -1
- package/analyzer-template/packages/utils/src/lib/frameworks/remixRouteFileNameToRoute.ts +1 -0
- package/analyzer-template/project/constructMockCode.ts +170 -6
- package/analyzer-template/project/reconcileMockDataKeys.ts +13 -0
- package/analyzer-template/project/start.ts +1 -11
- package/analyzer-template/project/writeMockDataTsx.ts +32 -1
- package/analyzer-template/project/writeScenarioComponents.ts +164 -18
- package/analyzer-template/project/writeUniversalMocks.ts +66 -8
- package/background/src/lib/virtualized/project/constructMockCode.js +158 -7
- package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
- package/background/src/lib/virtualized/project/reconcileMockDataKeys.js +12 -0
- package/background/src/lib/virtualized/project/reconcileMockDataKeys.js.map +1 -1
- package/background/src/lib/virtualized/project/start.js +1 -8
- package/background/src/lib/virtualized/project/start.js.map +1 -1
- package/background/src/lib/virtualized/project/writeMockDataTsx.js +25 -1
- package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
- package/background/src/lib/virtualized/project/writeScenarioComponents.js +129 -17
- package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
- package/background/src/lib/virtualized/project/writeUniversalMocks.js +56 -7
- package/background/src/lib/virtualized/project/writeUniversalMocks.js.map +1 -1
- package/codeyam-cli/src/cli.js +6 -0
- package/codeyam-cli/src/cli.js.map +1 -1
- package/codeyam-cli/src/codeyam-cli.js +0 -0
- package/codeyam-cli/src/commands/debug.js +221 -0
- package/codeyam-cli/src/commands/debug.js.map +1 -0
- package/codeyam-cli/src/commands/report.js +102 -0
- package/codeyam-cli/src/commands/report.js.map +1 -0
- package/codeyam-cli/src/commands/setup-sandbox.js +164 -0
- package/codeyam-cli/src/commands/setup-sandbox.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/cleanupAnalysisFiles.test.js +6 -6
- package/codeyam-cli/src/utils/__tests__/cleanupAnalysisFiles.test.js.map +1 -1
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +8 -0
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
- package/codeyam-cli/src/utils/analyzer.js +30 -0
- package/codeyam-cli/src/utils/analyzer.js.map +1 -1
- package/codeyam-cli/src/utils/cleanupAnalysisFiles.js +2 -2
- package/codeyam-cli/src/utils/cleanupAnalysisFiles.js.map +1 -1
- package/codeyam-cli/src/utils/generateReport.js +219 -0
- package/codeyam-cli/src/utils/generateReport.js.map +1 -0
- package/codeyam-cli/src/utils/install-skills.js +7 -0
- package/codeyam-cli/src/utils/install-skills.js.map +1 -1
- package/codeyam-cli/src/utils/queue/__tests__/job.pidTracking.test.js +1 -0
- package/codeyam-cli/src/utils/queue/__tests__/job.pidTracking.test.js.map +1 -1
- package/codeyam-cli/src/utils/queue/job.js +5 -1
- package/codeyam-cli/src/utils/queue/job.js.map +1 -1
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +4 -0
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
- package/codeyam-cli/src/webserver/app/lib/database.js +50 -2
- package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/EntityTypeIcon-D5ZHFomX.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-CDnfNKKQ.js → InteractivePreview-XDSzQLOY.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{LibraryFunctionPreview-DUS-3h7I.js → LibraryFunctionPreview-BYVx9KFp.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-TJzDQku1.js → LogViewer-CRcT5fOZ.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/ReportIssueModal-BORLgi0X.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{SafeScreenshot-BgdlWM6p.js → SafeScreenshot-Bual6h18.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/ScenarioPreview-Bi-YUMa-.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/ScenarioViewer-4D2vLLJz.js +5 -0
- package/codeyam-cli/src/webserver/build/client/assets/_index-BC200mfN.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-CxvZPkCv.js +10 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.generate-report-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/chart-column-B8fb6wnw.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{chunk-WWGJGFF6-DvL0YqDJ.js → chunk-WWGJGFF6-De6i8FUT.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/circle-alert-IdsgAK39.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/circle-check-BACUUf75.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/clock-vWeoCemX.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-CS7XDrKv.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-DIOEw_3i.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-3bYjyojg.js → entity._sha._-8Els_3Wb.js} +10 -10
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.create-scenario-DtfwpN9J.js → entity._sha_.create-scenario-C3FZJx1w.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.edit._scenarioId-YJz_igar.js +5 -0
- package/codeyam-cli/src/webserver/build/client/assets/entityStatus-BEqj2qBy.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/entry.client-DiP0q291.js +5 -0
- package/codeyam-cli/src/webserver/build/client/assets/file-text-LM0mgxXE.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/files-Dxh9CcaV.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{git-WoKohOtW.js → git-BXmqrWCH.js} +10 -10
- package/codeyam-cli/src/webserver/build/client/assets/globals-BGS74ED-.css +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/html2canvas-pro.esm-XQCGvadH.js +5 -0
- package/codeyam-cli/src/webserver/build/client/assets/{index-Vvbl94Xc.js → index-D-zYbzFZ.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/loader-circle-BXPKbHEb.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/manifest-1af162d4.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/root-DB7VgjCY.js +16 -0
- package/codeyam-cli/src/webserver/build/client/assets/settings-5zF_GOcS.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{settings-LuiJ1UIm.js → settings-Dc4MlMpK.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/simulations-BQ-02-jB.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/triangle-alert-D7k-ArFa.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-CpUcCv1V.js → useLastLogLine-AlhS7g5F.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/useToast-Ddo4UQv7.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/zap-_jw-9DCp.js +1 -0
- package/codeyam-cli/src/webserver/build/server/assets/{index-DzbqTxoN.js → index-D4JpXSIO.js} +1 -1
- package/codeyam-cli/src/webserver/build/server/assets/server-build-vwbN7n65.js +169 -0
- package/codeyam-cli/src/webserver/build/server/index.js +1 -1
- package/codeyam-cli/src/webserver/build-info.json +5 -5
- package/codeyam-cli/templates/codeyam-setup-skill.md +65 -85
- package/codeyam-cli/templates/debug-command.md +125 -0
- package/package.json +4 -6
- package/packages/ai/index.js +1 -1
- package/packages/ai/index.js.map +1 -1
- package/packages/ai/src/lib/analyzeScope.js +13 -0
- package/packages/ai/src/lib/analyzeScope.js.map +1 -1
- package/packages/ai/src/lib/astScopes/processExpression.js +12 -0
- package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +1023 -405
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/FunctionCallManager.js +137 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/FunctionCallManager.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js +1 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/BatchSchemaProcessor.js +112 -0
- package/packages/ai/src/lib/dataStructure/helpers/BatchSchemaProcessor.js.map +1 -0
- package/packages/ai/src/lib/dataStructure/helpers/DebugTracer.js +176 -0
- package/packages/ai/src/lib/dataStructure/helpers/DebugTracer.js.map +1 -0
- package/packages/ai/src/lib/dataStructure/helpers/PathManager.js +178 -0
- package/packages/ai/src/lib/dataStructure/helpers/PathManager.js.map +1 -0
- package/packages/ai/src/lib/dataStructure/helpers/ScopeTreeManager.js +138 -0
- package/packages/ai/src/lib/dataStructure/helpers/ScopeTreeManager.js.map +1 -0
- package/packages/ai/src/lib/dataStructure/helpers/VisitedTracker.js +199 -0
- package/packages/ai/src/lib/dataStructure/helpers/VisitedTracker.js.map +1 -0
- package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js +2 -0
- package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/selectBestValue.js +62 -0
- package/packages/ai/src/lib/dataStructure/helpers/selectBestValue.js.map +1 -0
- package/packages/ai/src/lib/dataStructure/helpers/uniqueIdUtils.js +90 -0
- package/packages/ai/src/lib/dataStructure/helpers/uniqueIdUtils.js.map +1 -0
- package/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.js +22 -0
- package/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.js.map +1 -1
- package/packages/ai/src/lib/generateEntityKeyAttributes.js +32 -8
- package/packages/ai/src/lib/generateEntityKeyAttributes.js.map +1 -1
- package/packages/ai/src/lib/getConditionalUsagesFromCode.js +13 -8
- package/packages/ai/src/lib/getConditionalUsagesFromCode.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js +36 -3
- package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js.map +1 -1
- package/packages/ai/src/lib/worker/SerializableDataStructure.js +7 -0
- package/packages/ai/src/lib/worker/SerializableDataStructure.js.map +1 -1
- package/packages/analyze/src/lib/FileAnalyzer.js +17 -5
- package/packages/analyze/src/lib/FileAnalyzer.js.map +1 -1
- package/packages/analyze/src/lib/asts/nodes/index.js +2 -1
- package/packages/analyze/src/lib/asts/nodes/index.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js +6 -8
- package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +5 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/gatherEntityMap.js +8 -2
- package/packages/analyze/src/lib/files/analyze/gatherEntityMap.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/trackEntityCircularDependencies.js +5 -8
- package/packages/analyze/src/lib/files/analyze/trackEntityCircularDependencies.js.map +1 -1
- package/packages/analyze/src/lib/files/analyzeChange.js +21 -9
- package/packages/analyze/src/lib/files/analyzeChange.js.map +1 -1
- package/packages/analyze/src/lib/files/analyzeEntity.js +10 -4
- package/packages/analyze/src/lib/files/analyzeEntity.js.map +1 -1
- package/packages/analyze/src/lib/files/analyzeInitial.js +21 -9
- package/packages/analyze/src/lib/files/analyzeInitial.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +6 -1
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.js +9 -1
- package/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateScenarioData.js +5 -1
- package/packages/analyze/src/lib/files/scenarios/generateScenarioData.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateScenarios.js +9 -1
- package/packages/analyze/src/lib/files/scenarios/generateScenarios.js.map +1 -1
- package/packages/generate/src/lib/scenarioComponent.js +5 -3
- package/packages/generate/src/lib/scenarioComponent.js.map +1 -1
- package/packages/supabase/src/lib/kysely/db.js +3 -0
- package/packages/supabase/src/lib/kysely/db.js.map +1 -1
- package/packages/supabase/src/lib/kysely/tables/debugReportsTable.js +27 -0
- package/packages/supabase/src/lib/kysely/tables/debugReportsTable.js.map +1 -0
- package/packages/utils/index.js +1 -0
- package/packages/utils/index.js.map +1 -1
- package/packages/utils/src/lib/Semaphore.js +40 -0
- package/packages/utils/src/lib/Semaphore.js.map +1 -0
- package/packages/utils/src/lib/frameworks/getRemixRoutePath.js +2 -1
- package/packages/utils/src/lib/frameworks/getRemixRoutePath.js.map +1 -1
- package/packages/utils/src/lib/frameworks/remixRouteFileNameToRoute.js +1 -0
- package/packages/utils/src/lib/frameworks/remixRouteFileNameToRoute.js.map +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/EntityTypeIcon-B9Sf8e9w.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/ScenarioPreview-Bl6GY-OE.js +0 -6
- package/codeyam-cli/src/webserver/build/client/assets/ScenarioViewer-BDq8RX50.js +0 -5
- package/codeyam-cli/src/webserver/build/client/assets/_index-Bh3y3Wsl.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-tq7Bl6-t.js +0 -10
- package/codeyam-cli/src/webserver/build/client/assets/chart-column-q9_nHfwv.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/circle-alert-CKMpA1v_.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/clock-Wnfog8Qw.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-C_ixaqqh.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.edit._scenarioId-QecTs_sq.js +0 -5
- package/codeyam-cli/src/webserver/build/client/assets/entry.client-hnkEgHrC.js +0 -5
- package/codeyam-cli/src/webserver/build/client/assets/file-text-CvCVdKLW.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/files-DgUCYhbd.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/globals-DZfbt0u5.css +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/loader-circle-Bxm63UxG.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-c90b8608.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/root-DrVZQamX.js +0 -16
- package/codeyam-cli/src/webserver/build/client/assets/search-CJkk16Ct.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/settings-ConzHeiL.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/simulations-B9LRwAej.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/useToast-DOxmMaSg.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/zap-D5R1FAcH.js +0 -1
- package/codeyam-cli/src/webserver/build/server/assets/server-build-DGGis3OZ.js +0 -166
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACpF,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;AACtG,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,+CAA+C,CAAC;AACpG,OAAO,EAAE,OAAO,IAAI,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AAC9G,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AACtF,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACpF,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAC9F,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;AACtG,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EACL,OAAO,IAAI,MAAM,EACjB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,OAAO,IAAI,mBAAmB,EAC9B,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAOpF,eAAO,MAAM,qBAAqB,qBAAqB,CAAC;AACxD,eAAO,MAAM,0BAA0B,yBAAyB,CAAC;AACjE,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAGlD,OAAO,EACL,0BAA0B,EAC1B,mBAAmB,EACnB,sBAAsB,EACtB,KAAK,iBAAiB,GACvB,MAAM,sCAAsC,CAAC;AAG9C,OAAO,EACL,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,GAC/B,MAAM,+BAA+B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACpF,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;AACtG,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,+CAA+C,CAAC;AACpG,OAAO,EAAE,OAAO,IAAI,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AAC9G,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AACtF,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACpF,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAC9F,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;AACtG,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EACL,OAAO,IAAI,MAAM,EACjB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,OAAO,IAAI,mBAAmB,EAC9B,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAOpF,eAAO,MAAM,qBAAqB,qBAAqB,CAAC;AACxD,eAAO,MAAM,0BAA0B,yBAAyB,CAAC;AACjE,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAGlD,OAAO,EACL,0BAA0B,EAC1B,mBAAmB,EACnB,sBAAsB,EACtB,KAAK,iBAAiB,GACvB,MAAM,sCAAsC,CAAC;AAG9C,OAAO,EACL,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,GAC/B,MAAM,+BAA+B,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export { default as Semaphore } from './src/lib/Semaphore';
|
|
1
2
|
export { default as isRemixRoute } from './src/lib/frameworks/isRemixRoute';
|
|
2
3
|
export { default as isNextRoute } from './src/lib/frameworks/isNextRoute';
|
|
3
4
|
export { default as isFrameworkRoute } from './src/lib/frameworks/isFrameworkRoute';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACpF,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;AACtG,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,+CAA+C,CAAC;AACpG,OAAO,EAAE,OAAO,IAAI,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AAC9G,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AACtF,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACpF,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAC9F,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;AACtG,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EACL,OAAO,IAAI,MAAM,EACjB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,OAAO,IAAI,mBAAmB,EAC9B,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAEpF,4EAA4E;AAC5E,iDAAiD;AACjD,2EAA2E;AAC3E,qGAAqG;AAErG,MAAM,CAAC,MAAM,qBAAqB,GAAG,kBAAkB,CAAC;AACxD,MAAM,CAAC,MAAM,0BAA0B,GAAG,sBAAsB,CAAC;AACjE,MAAM,CAAC,MAAM,qBAAqB,GAAG,YAAY,CAAC;AAElD,iDAAiD;AACjD,OAAO,EACL,0BAA0B,EAC1B,mBAAmB,EACnB,sBAAsB,GAEvB,MAAM,sCAAsC,CAAC;AAE9C,8BAA8B;AAC9B,OAAO,EACL,mBAAmB,GAIpB,MAAM,+BAA+B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACpF,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;AACtG,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,+CAA+C,CAAC;AACpG,OAAO,EAAE,OAAO,IAAI,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AAC9G,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AACtF,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACpF,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAC9F,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;AACtG,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EACL,OAAO,IAAI,MAAM,EACjB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,OAAO,IAAI,mBAAmB,EAC9B,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAEpF,4EAA4E;AAC5E,iDAAiD;AACjD,2EAA2E;AAC3E,qGAAqG;AAErG,MAAM,CAAC,MAAM,qBAAqB,GAAG,kBAAkB,CAAC;AACxD,MAAM,CAAC,MAAM,0BAA0B,GAAG,sBAAsB,CAAC;AACjE,MAAM,CAAC,MAAM,qBAAqB,GAAG,YAAY,CAAC;AAElD,iDAAiD;AACjD,OAAO,EACL,0BAA0B,EAC1B,mBAAmB,EACnB,sBAAsB,GAEvB,MAAM,sCAAsC,CAAC;AAE9C,8BAA8B;AAC9B,OAAO,EACL,mBAAmB,GAIpB,MAAM,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An async semaphore for limiting concurrent access to a resource.
|
|
3
|
+
*
|
|
4
|
+
* Useful for controlling parallelism when some operations are CPU-bound
|
|
5
|
+
* and shouldn't all run simultaneously, while allowing I/O-bound operations
|
|
6
|
+
* to proceed freely.
|
|
7
|
+
*/
|
|
8
|
+
export default class Semaphore {
|
|
9
|
+
private count;
|
|
10
|
+
private waiting;
|
|
11
|
+
constructor(count: number);
|
|
12
|
+
/**
|
|
13
|
+
* Acquire a permit from the semaphore.
|
|
14
|
+
* If a permit is available, returns immediately.
|
|
15
|
+
* Otherwise, blocks until a permit becomes available.
|
|
16
|
+
*/
|
|
17
|
+
acquire(): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Release a permit back to the semaphore.
|
|
20
|
+
* If there are waiters, the first one in line gets the permit.
|
|
21
|
+
* Otherwise, increments the available count.
|
|
22
|
+
*/
|
|
23
|
+
release(): void;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=Semaphore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Semaphore.d.ts","sourceRoot":"","sources":["../../../../src/lib/Semaphore.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,OAAO,SAAS;IAC5B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAyB;gBAE5B,KAAK,EAAE,MAAM;IAIzB;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ9B;;;;OAIG;IACH,OAAO,IAAI,IAAI;CAQhB"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An async semaphore for limiting concurrent access to a resource.
|
|
3
|
+
*
|
|
4
|
+
* Useful for controlling parallelism when some operations are CPU-bound
|
|
5
|
+
* and shouldn't all run simultaneously, while allowing I/O-bound operations
|
|
6
|
+
* to proceed freely.
|
|
7
|
+
*/
|
|
8
|
+
export default class Semaphore {
|
|
9
|
+
constructor(count) {
|
|
10
|
+
this.waiting = [];
|
|
11
|
+
this.count = count;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Acquire a permit from the semaphore.
|
|
15
|
+
* If a permit is available, returns immediately.
|
|
16
|
+
* Otherwise, blocks until a permit becomes available.
|
|
17
|
+
*/
|
|
18
|
+
async acquire() {
|
|
19
|
+
if (this.count > 0) {
|
|
20
|
+
this.count--;
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
await new Promise((resolve) => this.waiting.push(resolve));
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Release a permit back to the semaphore.
|
|
27
|
+
* If there are waiters, the first one in line gets the permit.
|
|
28
|
+
* Otherwise, increments the available count.
|
|
29
|
+
*/
|
|
30
|
+
release() {
|
|
31
|
+
const next = this.waiting.shift();
|
|
32
|
+
if (next) {
|
|
33
|
+
next();
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
this.count++;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=Semaphore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Semaphore.js","sourceRoot":"","sources":["../../../../src/lib/Semaphore.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,OAAO,SAAS;IAI5B,YAAY,KAAa;QAFjB,YAAO,GAAsB,EAAE,CAAC;QAGtC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QACD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACnE,CAAC;IAED;;;;OAIG;IACH,OAAO;QACL,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAClC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,EAAE,CAAC;QACT,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC;IACH,CAAC;CACF"}
|
package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/getRemixRoutePath.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getRemixRoutePath.d.ts","sourceRoot":"","sources":["../../../../../src/lib/frameworks/getRemixRoutePath.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEzE,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EACxC,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,SAAiB,EACjB,OAAO,EACP,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,IAAI,CAAC;IACf,MAAM,EAAE,cAAc,CAAC;IACvB,YAAY,EAAE,QAAQ,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7B,
|
|
1
|
+
{"version":3,"file":"getRemixRoutePath.d.ts","sourceRoot":"","sources":["../../../../../src/lib/frameworks/getRemixRoutePath.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEzE,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EACxC,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,SAAiB,EACjB,OAAO,EACP,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,IAAI,CAAC;IACf,MAAM,EAAE,cAAc,CAAC;IACvB,YAAY,EAAE,QAAQ,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7B,UA4BA"}
|
|
@@ -6,7 +6,8 @@ export default function getRemixRoutePath({ file, rootFile, entity, rootAnalysis
|
|
|
6
6
|
const route = file.path.slice(routesIndex);
|
|
7
7
|
const cleanRoute = route
|
|
8
8
|
.replace(/\//g, '.')
|
|
9
|
-
.replace(
|
|
9
|
+
.replace(/\$(\w+)/g, '$1') // $slug -> slug (named params)
|
|
10
|
+
.replace(/\$/g, 'splat') // bare $ -> splat (catch-all)
|
|
10
11
|
.replace(/_/g, 'x');
|
|
11
12
|
const scenarioSlug = scenario ? `.${safeFileName(scenario.name)}` : '';
|
|
12
13
|
let routePath = `${PROJECT_RELATIVE_PATH}/${basePath}/static.${project.slug}.${rootAnalysis.id}.${safeFileName(rootAnalysis.entityName)}${scenarioSlug}.${cleanRoute}`;
|
package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/getRemixRoutePath.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getRemixRoutePath.js","sourceRoot":"","sources":["../../../../../src/lib/frameworks/getRemixRoutePath.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,YAAY,GACb,MAAM,gBAAgB,CAAC;AAGxB,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EACxC,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,SAAS,GAAG,KAAK,EACjB,OAAO,EACP,QAAQ,GAST;IACC,MAAM,YAAY,GAAG,sBAAsB,CACzC,IAAI,CAAC,IAAI,EACT,OAAO,CAAC,QAAQ,CAAC,OAAO,CACzB,CAAC;IACF,MAAM,QAAQ,GAAG,GAAG,YAAY,SAAS,CAAC;IAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;IACtE,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,KAAK;SACrB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"getRemixRoutePath.js","sourceRoot":"","sources":["../../../../../src/lib/frameworks/getRemixRoutePath.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,YAAY,GACb,MAAM,gBAAgB,CAAC;AAGxB,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EACxC,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,SAAS,GAAG,KAAK,EACjB,OAAO,EACP,QAAQ,GAST;IACC,MAAM,YAAY,GAAG,sBAAsB,CACzC,IAAI,CAAC,IAAI,EACT,OAAO,CAAC,QAAQ,CAAC,OAAO,CACzB,CAAC;IACF,MAAM,QAAQ,GAAG,GAAG,YAAY,SAAS,CAAC;IAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;IACtE,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,KAAK;SACrB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,+BAA+B;SACzD,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,8BAA8B;SACtD,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAEtB,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,IAAI,SAAS,GAAG,GAAG,qBAAqB,IAAI,QAAQ,WAAW,OAAO,CAAC,IAAI,IAAI,YAAY,CAAC,EAAE,IAAI,YAAY,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,YAAY,IAAI,UAAU,EAAE,CAAC;IAEvK,IAAI,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,EAAE,CAAC;QAC5B,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,SAAS,EAAE,EAAE,YAAY,SAAS,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,CAAC,GAAG,CACT,mCAAmC,EACnC,IAAI,CAAC,IAAI,EACT,MAAM,CAAC,IAAI,EACX,SAAS,CACV,CAAC;IAEF,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remixRouteFileNameToRoute.d.ts","sourceRoot":"","sources":["../../../../../src/lib/frameworks/remixRouteFileNameToRoute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAGhD,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAC/C,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,EAClB,YAAY,CAAC,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"remixRouteFileNameToRoute.d.ts","sourceRoot":"","sources":["../../../../../src/lib/frameworks/remixRouteFileNameToRoute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAGhD,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAC/C,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,EAClB,YAAY,CAAC,EAAE,MAAM,UAoBtB"}
|
package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/remixRouteFileNameToRoute.js
CHANGED
|
@@ -13,6 +13,7 @@ export default function remixRouteFileNameToRoute(projectSlug, file, analysis, s
|
|
|
13
13
|
.replace(/\(\$(\w+)\)/g, '$1')
|
|
14
14
|
.replace(/\$(\w+)/g, '$1')
|
|
15
15
|
.replace(/\((\w+)\)/g, '$1')
|
|
16
|
+
.replace(/\$/g, 'splat')
|
|
16
17
|
.replace(/_/g, 'x'),
|
|
17
18
|
'default',
|
|
18
19
|
].filter(Boolean);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remixRouteFileNameToRoute.js","sourceRoot":"","sources":["../../../../../src/lib/frameworks/remixRouteFileNameToRoute.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAC/C,WAAmB,EACnB,IAAU,EACV,QAAkB,EAClB,YAAqB;IAErB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,MAAM,cAAc,GAAG;QACrB,QAAQ;QACR,WAAW;QACX,QAAQ,CAAC,EAAE;QACX,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC;QACjC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;QACrD,KAAK;aACF,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;aACrB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;aACnB,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;aAC7B,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC;aACzB,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC;aAC3B,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;QACrB,SAAS;KACV,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClB,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC"}
|
|
1
|
+
{"version":3,"file":"remixRouteFileNameToRoute.js","sourceRoot":"","sources":["../../../../../src/lib/frameworks/remixRouteFileNameToRoute.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAC/C,WAAmB,EACnB,IAAU,EACV,QAAkB,EAClB,YAAqB;IAErB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,MAAM,cAAc,GAAG;QACrB,QAAQ;QACR,WAAW;QACX,QAAQ,CAAC,EAAE;QACX,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC;QACjC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;QACrD,KAAK;aACF,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;aACrB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;aACnB,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;aAC7B,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC;aACzB,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC;aAC3B,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;aACvB,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;QACrB,SAAS;KACV,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClB,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export { default as Semaphore } from './src/lib/Semaphore';
|
|
1
2
|
export { default as isRemixRoute } from './src/lib/frameworks/isRemixRoute';
|
|
2
3
|
export { default as isNextRoute } from './src/lib/frameworks/isNextRoute';
|
|
3
4
|
export { default as isFrameworkRoute } from './src/lib/frameworks/isFrameworkRoute';
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An async semaphore for limiting concurrent access to a resource.
|
|
3
|
+
*
|
|
4
|
+
* Useful for controlling parallelism when some operations are CPU-bound
|
|
5
|
+
* and shouldn't all run simultaneously, while allowing I/O-bound operations
|
|
6
|
+
* to proceed freely.
|
|
7
|
+
*/
|
|
8
|
+
export default class Semaphore {
|
|
9
|
+
private count: number;
|
|
10
|
+
private waiting: Array<() => void> = [];
|
|
11
|
+
|
|
12
|
+
constructor(count: number) {
|
|
13
|
+
this.count = count;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Acquire a permit from the semaphore.
|
|
18
|
+
* If a permit is available, returns immediately.
|
|
19
|
+
* Otherwise, blocks until a permit becomes available.
|
|
20
|
+
*/
|
|
21
|
+
async acquire(): Promise<void> {
|
|
22
|
+
if (this.count > 0) {
|
|
23
|
+
this.count--;
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
await new Promise<void>((resolve) => this.waiting.push(resolve));
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Release a permit back to the semaphore.
|
|
31
|
+
* If there are waiters, the first one in line gets the permit.
|
|
32
|
+
* Otherwise, increments the available count.
|
|
33
|
+
*/
|
|
34
|
+
release(): void {
|
|
35
|
+
const next = this.waiting.shift();
|
|
36
|
+
if (next) {
|
|
37
|
+
next();
|
|
38
|
+
} else {
|
|
39
|
+
this.count++;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -31,7 +31,8 @@ export default function getRemixRoutePath({
|
|
|
31
31
|
const route = file.path.slice(routesIndex);
|
|
32
32
|
const cleanRoute = route
|
|
33
33
|
.replace(/\//g, '.')
|
|
34
|
-
.replace(
|
|
34
|
+
.replace(/\$(\w+)/g, '$1') // $slug -> slug (named params)
|
|
35
|
+
.replace(/\$/g, 'splat') // bare $ -> splat (catch-all)
|
|
35
36
|
.replace(/_/g, 'x');
|
|
36
37
|
|
|
37
38
|
const scenarioSlug = scenario ? `.${safeFileName(scenario.name)}` : '';
|
|
@@ -18,6 +18,7 @@ interface ReturnValuePart {
|
|
|
18
18
|
nested?: ReturnValuePart[];
|
|
19
19
|
isAsyncFunction?: boolean;
|
|
20
20
|
isStructural?: boolean;
|
|
21
|
+
hasNoReturnData?: boolean; // true when function has only signature entries, no functionCallReturnValue
|
|
21
22
|
// Maps literal argument values to their specific nested structures for conditional dispatch
|
|
22
23
|
argVariants?: Map<string, ReturnValuePart[]>;
|
|
23
24
|
}
|
|
@@ -273,7 +274,15 @@ export default function constructMockCode(
|
|
|
273
274
|
}
|
|
274
275
|
|
|
275
276
|
const addReturnValueFunctionAccessor = (dataPath: string) => {
|
|
276
|
-
|
|
277
|
+
// Add function call accessor if:
|
|
278
|
+
// - There are actual arguments, OR
|
|
279
|
+
// - This is a callable (not a method that returns an array directly)
|
|
280
|
+
// For methods like getAll() that return arrays, the data is at ["getAll()"] not ["getAll()"]["()"]
|
|
281
|
+
if (
|
|
282
|
+
returnValue.returnsFunctionArgs &&
|
|
283
|
+
(returnValue.returnsFunctionArgs.length > 0 ||
|
|
284
|
+
!returnValue.returnsFunctionArray)
|
|
285
|
+
) {
|
|
277
286
|
if (returnValue.isArray) {
|
|
278
287
|
dataPath = `${dataPath}${optionalAccess('[0]')}`;
|
|
279
288
|
}
|
|
@@ -313,6 +322,7 @@ export default function constructMockCode(
|
|
|
313
322
|
returnsFunctionArgs,
|
|
314
323
|
returnsFunctionArray,
|
|
315
324
|
isAsyncFunction,
|
|
325
|
+
hasNoReturnData,
|
|
316
326
|
} = returnValue;
|
|
317
327
|
|
|
318
328
|
const nestedContent: (string | undefined)[] = (nested ?? []).map(
|
|
@@ -325,9 +335,53 @@ export default function constructMockCode(
|
|
|
325
335
|
},
|
|
326
336
|
);
|
|
327
337
|
|
|
338
|
+
// Array prototype methods that should be ignored when building mocks
|
|
339
|
+
// (these work on any array - we don't need to mock them)
|
|
340
|
+
const ARRAY_PROTOTYPE_METHODS = new Set([
|
|
341
|
+
'at',
|
|
342
|
+
'concat',
|
|
343
|
+
'copyWithin',
|
|
344
|
+
'entries',
|
|
345
|
+
'every',
|
|
346
|
+
'fill',
|
|
347
|
+
'filter',
|
|
348
|
+
'find',
|
|
349
|
+
'findIndex',
|
|
350
|
+
'findLast',
|
|
351
|
+
'findLastIndex',
|
|
352
|
+
'flat',
|
|
353
|
+
'flatMap',
|
|
354
|
+
'forEach',
|
|
355
|
+
'includes',
|
|
356
|
+
'indexOf',
|
|
357
|
+
'join',
|
|
358
|
+
'keys',
|
|
359
|
+
'lastIndexOf',
|
|
360
|
+
'map',
|
|
361
|
+
'pop',
|
|
362
|
+
'push',
|
|
363
|
+
'reduce',
|
|
364
|
+
'reduceRight',
|
|
365
|
+
'reverse',
|
|
366
|
+
'shift',
|
|
367
|
+
'slice',
|
|
368
|
+
'some',
|
|
369
|
+
'sort',
|
|
370
|
+
'splice',
|
|
371
|
+
'toLocaleString',
|
|
372
|
+
'toReversed',
|
|
373
|
+
'toSorted',
|
|
374
|
+
'toSpliced',
|
|
375
|
+
'toString',
|
|
376
|
+
'unshift',
|
|
377
|
+
'values',
|
|
378
|
+
'with',
|
|
379
|
+
'length',
|
|
380
|
+
]);
|
|
381
|
+
|
|
328
382
|
const levelContentItems = [];
|
|
329
383
|
// Add spread for data paths when:
|
|
330
|
-
// - Not a function returning an array
|
|
384
|
+
// - Not a function returning an array, OR function returns array with custom methods
|
|
331
385
|
// - Has function args OR not an array
|
|
332
386
|
// - Not structural, OR is a structural [0] element with nested content
|
|
333
387
|
// (array elements with nested functions need their other properties spread)
|
|
@@ -336,8 +390,20 @@ export default function constructMockCode(
|
|
|
336
390
|
returnValue.name === '[0]' &&
|
|
337
391
|
nested &&
|
|
338
392
|
nested.length > 0;
|
|
393
|
+
// Check if function returns array but has custom methods (not just array prototype methods)
|
|
394
|
+
// Excludes array indices like [0], [1], [] which are not methods
|
|
395
|
+
const hasCustomMethodsOnArrayReturn =
|
|
396
|
+
returnsFunctionArray &&
|
|
397
|
+
nested &&
|
|
398
|
+
nested.length > 0 &&
|
|
399
|
+
nested.some((n) => {
|
|
400
|
+
// Skip array indices - they're not methods
|
|
401
|
+
if (n.name.match(/^\[\d*\]$/)) return false;
|
|
402
|
+
const methodName = n.name.replace(/[<(].*$/, '');
|
|
403
|
+
return !ARRAY_PROTOTYPE_METHODS.has(methodName);
|
|
404
|
+
});
|
|
339
405
|
if (
|
|
340
|
-
!returnsFunctionArray &&
|
|
406
|
+
(!returnsFunctionArray || hasCustomMethodsOnArrayReturn) &&
|
|
341
407
|
(returnsFunctionArgs || !isArray) &&
|
|
342
408
|
(!returnValue.isStructural || isStructuralArrayElementWithNested)
|
|
343
409
|
) {
|
|
@@ -352,14 +418,35 @@ export default function constructMockCode(
|
|
|
352
418
|
.join(', ');
|
|
353
419
|
let funcContents = '';
|
|
354
420
|
if (returnsFunctionArray) {
|
|
355
|
-
if (
|
|
421
|
+
if (hasNoReturnData) {
|
|
422
|
+
// Function has no return data (only signatures) - return empty array
|
|
423
|
+
funcContents = 'return []';
|
|
424
|
+
} else if (levelContents.length === 0 && dataPaths.length === 1) {
|
|
425
|
+
// When returning an array with no nested content, return the data path directly
|
|
426
|
+
// (the data path points to the array in scenario data)
|
|
427
|
+
funcContents = `return ${dataPaths[0]}`;
|
|
428
|
+
} else if (levelContents.length === 0) {
|
|
356
429
|
funcContents = 'return []';
|
|
357
430
|
} else {
|
|
358
431
|
funcContents = `return [\n${indent(levelContents)}\n]`;
|
|
359
432
|
}
|
|
360
433
|
} else {
|
|
434
|
+
// Check if function has no actual return data (only signatures)
|
|
435
|
+
const hasNestedItems = nested && nested.length > 0;
|
|
436
|
+
const hasActualNestedContent =
|
|
437
|
+
nestedContent.filter(Boolean).length > 0;
|
|
438
|
+
|
|
361
439
|
if (levelContentItems.length === 1 && dataPaths.length === 1) {
|
|
362
|
-
|
|
440
|
+
if (
|
|
441
|
+
hasNoReturnData ||
|
|
442
|
+
(hasNestedItems && !hasActualNestedContent)
|
|
443
|
+
) {
|
|
444
|
+
// Function has no return data (only signatures) - return empty array
|
|
445
|
+
funcContents = 'return []';
|
|
446
|
+
} else {
|
|
447
|
+
// Has return data - return data path
|
|
448
|
+
funcContents = `return ${dataPaths[0]}`;
|
|
449
|
+
}
|
|
363
450
|
} else {
|
|
364
451
|
funcContents = `return {\n${indent(levelContents)}\n}`;
|
|
365
452
|
}
|
|
@@ -372,6 +459,17 @@ export default function constructMockCode(
|
|
|
372
459
|
}
|
|
373
460
|
}
|
|
374
461
|
|
|
462
|
+
// Check if all nested items are array prototype methods
|
|
463
|
+
const hasOnlyArrayPrototypeMethods =
|
|
464
|
+
returnsFunctionArray &&
|
|
465
|
+
nested &&
|
|
466
|
+
nested.length > 0 &&
|
|
467
|
+
nested.every((n) => {
|
|
468
|
+
// Extract method name before type params and args (e.g., "reduce<...>(...)" -> "reduce")
|
|
469
|
+
const methodName = n.name.replace(/[<(].*$/, '');
|
|
470
|
+
return ARRAY_PROTOTYPE_METHODS.has(methodName);
|
|
471
|
+
});
|
|
472
|
+
|
|
375
473
|
let returnValueContents = '';
|
|
376
474
|
if (
|
|
377
475
|
!returnsFunctionArgs &&
|
|
@@ -379,6 +477,16 @@ export default function constructMockCode(
|
|
|
379
477
|
dataPaths.length === 1
|
|
380
478
|
) {
|
|
381
479
|
returnValueContents = dataPaths[0];
|
|
480
|
+
} else if (
|
|
481
|
+
returnsFunctionArray &&
|
|
482
|
+
dataPaths.length === 1 &&
|
|
483
|
+
!root &&
|
|
484
|
+
(!nested || nested.length === 0 || hasOnlyArrayPrototypeMethods)
|
|
485
|
+
) {
|
|
486
|
+
// Nested method returns an array - return the data path directly
|
|
487
|
+
// Only if nested content is empty or only contains array prototype methods
|
|
488
|
+
// (like .reduce() which work on any array - we don't need to mock them)
|
|
489
|
+
returnValueContents = dataPaths[0];
|
|
382
490
|
} else {
|
|
383
491
|
if (isArray) {
|
|
384
492
|
// When GENERIC array (using []) has nested content (like functions that need wrapping),
|
|
@@ -687,6 +795,25 @@ export default function constructMockCode(
|
|
|
687
795
|
if (returnValueSection.returnsFunctionArgs && value === 'array') {
|
|
688
796
|
returnValueSection.returnsFunctionArray = true;
|
|
689
797
|
}
|
|
798
|
+
|
|
799
|
+
// Check if this function call has actual return data in the schema
|
|
800
|
+
// If the path only has .signature entries (no .functionCallReturnValue), mark as no return data
|
|
801
|
+
// Use parts[i] (original part) instead of modified 'part' to include array indices like [1]
|
|
802
|
+
const functionCallPath = joinParenthesesAndArrays([
|
|
803
|
+
...parts.slice(0, i),
|
|
804
|
+
parts[i], // Use original part which may include [1](args) together
|
|
805
|
+
]);
|
|
806
|
+
// Check if there's a .functionCallReturnValue AFTER this function call path
|
|
807
|
+
const hasFunctionCallReturnValue = Object.keys(
|
|
808
|
+
relevantReturnValueSchema,
|
|
809
|
+
).some((k) => {
|
|
810
|
+
if (!k.startsWith(functionCallPath)) return false;
|
|
811
|
+
const afterPath = k.slice(functionCallPath.length);
|
|
812
|
+
return afterPath.startsWith('.functionCallReturnValue');
|
|
813
|
+
});
|
|
814
|
+
if (!hasFunctionCallReturnValue) {
|
|
815
|
+
returnValueSection.hasNoReturnData = true;
|
|
816
|
+
}
|
|
690
817
|
}
|
|
691
818
|
|
|
692
819
|
if (nextIsDifferentiatedArray || hasNestedFunction) {
|
|
@@ -841,6 +968,26 @@ export default function constructMockCode(
|
|
|
841
968
|
}
|
|
842
969
|
|
|
843
970
|
if (!hasNestedFunction) {
|
|
971
|
+
// Before breaking, check if this function returns an array
|
|
972
|
+
// by looking for a functionCallReturnValue: 'array' entry in the schema
|
|
973
|
+
if (relevantPart && part.endsWith(')')) {
|
|
974
|
+
const functionReturnPath = joinParenthesesAndArrays([
|
|
975
|
+
...parts.slice(0, i + 1),
|
|
976
|
+
RETURN_VALUE,
|
|
977
|
+
]);
|
|
978
|
+
const returnType = relevantReturnValueSchema[functionReturnPath];
|
|
979
|
+
if (returnType === 'array') {
|
|
980
|
+
// Only set returnsFunctionArray if the array contains plain data,
|
|
981
|
+
// NOT if it contains functions (which need wrapping)
|
|
982
|
+
const arrayElementPath = `${functionReturnPath}[]`;
|
|
983
|
+
const arrayElementType =
|
|
984
|
+
relevantReturnValueSchema[arrayElementPath];
|
|
985
|
+
// If array element is a function, we need to wrap it - don't set returnsFunctionArray
|
|
986
|
+
if (arrayElementType !== 'function') {
|
|
987
|
+
relevantPart.returnsFunctionArray = true;
|
|
988
|
+
}
|
|
989
|
+
}
|
|
990
|
+
}
|
|
844
991
|
break;
|
|
845
992
|
}
|
|
846
993
|
|
|
@@ -884,7 +1031,24 @@ export default function constructMockCode(
|
|
|
884
1031
|
|
|
885
1032
|
return `const ${mockNameParts[0]} = {\n${indent(returnParts.join(',\n'))}\n};`;
|
|
886
1033
|
} else if (isFunction) {
|
|
887
|
-
|
|
1034
|
+
// For headers() and cookies() from next/headers, add common iterator methods
|
|
1035
|
+
// These are needed when the mock is passed to functions that use .entries(), .keys(), etc.
|
|
1036
|
+
// (e.g., Object.fromEntries(headers.entries()) in buildLegacyHeaders)
|
|
1037
|
+
const needsIteratorMethods =
|
|
1038
|
+
mockName === 'headers' || mockName === 'cookies';
|
|
1039
|
+
let enhancedContents = contents;
|
|
1040
|
+
if (needsIteratorMethods && contents.trim().startsWith('{')) {
|
|
1041
|
+
// Add iterator methods that operate on the scenario data
|
|
1042
|
+
const iteratorMethods = `,
|
|
1043
|
+
entries: () => Object.entries(scenarios().data()?.["${mockName}()"] || {}),
|
|
1044
|
+
keys: () => Object.keys(scenarios().data()?.["${mockName}()"] || {}),
|
|
1045
|
+
values: () => Object.values(scenarios().data()?.["${mockName}()"] || {}),
|
|
1046
|
+
forEach: (fn) => Object.entries(scenarios().data()?.["${mockName}()"] || {}).forEach(([k, v]) => fn(v, k)),
|
|
1047
|
+
has: (key) => Object.prototype.hasOwnProperty.call(scenarios().data()?.["${mockName}()"] || {}, key)`;
|
|
1048
|
+
// Insert before the closing brace (handle trailing whitespace)
|
|
1049
|
+
enhancedContents = contents.replace(/\}\s*$/, iteratorMethods + '\n}');
|
|
1050
|
+
}
|
|
1051
|
+
return `const ${mockName}ReturnValue = ${enhancedContents};\n\n${isRootAsyncFunction ? 'async ' : ''}function ${mockName}() {\n${indent(`return ${mockName}ReturnValue;`)}\n}`;
|
|
888
1052
|
} else {
|
|
889
1053
|
return `const ${mockName} = ${contents}`;
|
|
890
1054
|
}
|
|
@@ -46,8 +46,10 @@ export function reconcileMockDataKeys(
|
|
|
46
46
|
* - Extract function name and first argument(s)
|
|
47
47
|
* - Ignore the last argument value (could be literal or variable)
|
|
48
48
|
* - Match based on the common prefix
|
|
49
|
+
* - If key has no parentheses, try matching with "()" appended
|
|
49
50
|
*
|
|
50
51
|
* e.g., "eq('user_id', 'user-12345')" matches "eq('user_id', user.id)"
|
|
52
|
+
* e.g., "getAll" matches "getAll()"
|
|
51
53
|
*/
|
|
52
54
|
function findClosestKey(key: string, expectedKeys: string[]): string | null {
|
|
53
55
|
const keyBase = extractKeyBase(key);
|
|
@@ -60,6 +62,17 @@ function findClosestKey(key: string, expectedKeys: string[]): string | null {
|
|
|
60
62
|
}
|
|
61
63
|
}
|
|
62
64
|
|
|
65
|
+
// If no match found and key has no parentheses, try matching with "()" appended
|
|
66
|
+
// This handles the case where LLM generates "getAll" but expected key is "getAll()"
|
|
67
|
+
if (!key.includes('(')) {
|
|
68
|
+
const keyWithParens = key + '()';
|
|
69
|
+
for (const expected of expectedKeys) {
|
|
70
|
+
if (expected === keyWithParens) {
|
|
71
|
+
return expected;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
63
76
|
return null;
|
|
64
77
|
}
|
|
65
78
|
|
|
@@ -378,17 +378,7 @@ async function main({
|
|
|
378
378
|
});
|
|
379
379
|
updateBackgroundJobProgress(backgroundJob, {
|
|
380
380
|
initiated: backgroundJob.progress.initiated,
|
|
381
|
-
steps: [
|
|
382
|
-
{
|
|
383
|
-
name: 'build-project',
|
|
384
|
-
initiated:
|
|
385
|
-
backgroundJob.progress.steps.find(
|
|
386
|
-
(s) => s.name === 'build-project',
|
|
387
|
-
)?.initiated ?? new Date().toISOString(),
|
|
388
|
-
error: error.message,
|
|
389
|
-
completed: new Date().toISOString(),
|
|
390
|
-
},
|
|
391
|
-
],
|
|
381
|
+
steps: [],
|
|
392
382
|
completed: new Date().toISOString(),
|
|
393
383
|
}).catch(() => {});
|
|
394
384
|
}
|
|
@@ -244,6 +244,9 @@ const jsonToCode = (
|
|
|
244
244
|
} else {
|
|
245
245
|
const keyStrings: string[] = [];
|
|
246
246
|
const jsonObj = json as Record<string, unknown>;
|
|
247
|
+
// Track normalized function names to avoid duplicate keys in output
|
|
248
|
+
// e.g., submit({ a }) and submit({ b }) should both become "submit" once
|
|
249
|
+
const seenNormalizedFuncNames = new Set<string>();
|
|
247
250
|
|
|
248
251
|
for (const key of Object.keys(jsonObj)) {
|
|
249
252
|
if (jsonObj[key] === undefined || jsonObj[key] === null) continue;
|
|
@@ -258,8 +261,23 @@ const jsonToCode = (
|
|
|
258
261
|
// These need to be transformed into callable arrow functions
|
|
259
262
|
// Only apply at deeper nesting levels (level > 2) - top-level mock data keys
|
|
260
263
|
// (level 2) are return values that should preserve their data
|
|
261
|
-
|
|
264
|
+
// Skip when array contains objects (likely return data like getAll() returning [{name, value}])
|
|
265
|
+
const argsArray = jsonObj[key] as unknown[];
|
|
266
|
+
const isReturnData = argsArray.some(
|
|
267
|
+
(item) => item && typeof item === 'object' && !Array.isArray(item),
|
|
268
|
+
);
|
|
269
|
+
if (
|
|
270
|
+
key.includes('(') &&
|
|
271
|
+
key.endsWith(')') &&
|
|
272
|
+
level > 2 &&
|
|
273
|
+
!isReturnData
|
|
274
|
+
) {
|
|
262
275
|
const funcName = key.split('(')[0];
|
|
276
|
+
// Skip if we've already added this normalized function name
|
|
277
|
+
if (seenNormalizedFuncNames.has(funcName)) {
|
|
278
|
+
continue;
|
|
279
|
+
}
|
|
280
|
+
seenNormalizedFuncNames.add(funcName);
|
|
263
281
|
const argsArray = jsonObj[key] as unknown[];
|
|
264
282
|
const argsString = argsArray
|
|
265
283
|
.map((_, i) => `arg${i + 1}`)
|
|
@@ -304,6 +322,11 @@ const jsonToCode = (
|
|
|
304
322
|
Array.isArray((jsonObj[key] as Record<string, unknown>).signature)
|
|
305
323
|
) {
|
|
306
324
|
const funcName = key.split('(')[0];
|
|
325
|
+
// Skip if we've already added this normalized function name
|
|
326
|
+
if (seenNormalizedFuncNames.has(funcName)) {
|
|
327
|
+
continue;
|
|
328
|
+
}
|
|
329
|
+
seenNormalizedFuncNames.add(funcName);
|
|
307
330
|
const signature = (jsonObj[key] as Record<string, unknown>)
|
|
308
331
|
.signature as string[];
|
|
309
332
|
const argsString = signature
|
|
@@ -395,6 +418,12 @@ const jsonToCode = (
|
|
|
395
418
|
if (key.includes('(') && key.endsWith(')') && level > 2) {
|
|
396
419
|
const funcName = key.split('(')[0];
|
|
397
420
|
|
|
421
|
+
// Skip if we've already added this normalized function name
|
|
422
|
+
if (seenNormalizedFuncNames.has(funcName)) {
|
|
423
|
+
continue;
|
|
424
|
+
}
|
|
425
|
+
seenNormalizedFuncNames.add(funcName);
|
|
426
|
+
|
|
398
427
|
// Check if the string value looks like a function expression
|
|
399
428
|
const looksLikeFunction =
|
|
400
429
|
stringValue.includes('=>') ||
|
|
@@ -527,6 +556,7 @@ import React from 'react';
|
|
|
527
556
|
const rawScenarioMockData = {
|
|
528
557
|
...(mockScenario.metadata.data?.mockData ?? {}),
|
|
529
558
|
};
|
|
559
|
+
|
|
530
560
|
// Reconcile scenario-specific mock data keys as well
|
|
531
561
|
const scenarioMockData = reconcileMockDataKeys(
|
|
532
562
|
rawScenarioMockData,
|
|
@@ -538,6 +568,7 @@ import React from 'react';
|
|
|
538
568
|
});
|
|
539
569
|
|
|
540
570
|
const mergedMockData = deepMerge(defaultMockData, scenarioMockData);
|
|
571
|
+
|
|
541
572
|
// Normalize mock data to merge entries with same normalized function name
|
|
542
573
|
const normalizedMockData = normalizeMockData(
|
|
543
574
|
mergedMockData as Record<string, unknown>,
|