@codeyam/codeyam-cli 0.1.0-bleeding-edge.8afd3ee → 0.1.0-staging.09652b8
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 +1 -1
- package/analyzer-template/packages/ai/index.ts +0 -1
- package/analyzer-template/packages/ai/scripts/ai-test-matrix.mjs +424 -0
- package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +6 -16
- package/analyzer-template/packages/ai/src/lib/astScopes/methodSemantics.ts +197 -0
- package/analyzer-template/packages/ai/src/lib/astScopes/paths.ts +28 -2
- package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +113 -4
- package/analyzer-template/packages/ai/src/lib/checkAllAttributes.ts +1 -3
- package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +430 -7
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.ts +12 -6
- package/analyzer-template/packages/ai/src/lib/generateChangesEntityDocumentation.ts +20 -2
- package/analyzer-template/packages/ai/src/lib/generateChangesEntityScenarioData.ts +56 -160
- package/analyzer-template/packages/ai/src/lib/generateChangesEntityScenarios.ts +79 -265
- package/analyzer-template/packages/ai/src/lib/generateEntityDocumentation.ts +16 -2
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +53 -154
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarios.ts +84 -254
- package/analyzer-template/packages/ai/src/lib/generateStatementAnalysis.ts +48 -71
- package/analyzer-template/packages/ai/src/lib/getLLMCallStats.ts +0 -14
- package/analyzer-template/packages/ai/src/lib/modelInfo.ts +15 -0
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChangesEntityDocumentationGenerator.ts +8 -33
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChangesEntityScenarioDataGenerator.ts +54 -62
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.ts +93 -109
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityDocumentationGenerator.ts +8 -27
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.ts +33 -38
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.ts +30 -30
- package/analyzer-template/packages/ai/src/lib/types/index.ts +2 -0
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +15 -7
- package/analyzer-template/packages/generate/src/lib/componentScenarioPage/componentScenarioPageNext.ts +28 -21
- package/analyzer-template/packages/generate/src/lib/componentScenarioPage/componentScenarioPageRemix.ts +18 -11
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageNext.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js +28 -21
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageRemix.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageRemix.js +18 -11
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageRemix.js.map +1 -1
- 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/frameworks/getNextRoutePath.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/getNextRoutePath.js +2 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/getNextRoutePath.js.map +1 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/nextRouteFileNameToRoute.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/nextRouteFileNameToRoute.js +2 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/nextRouteFileNameToRoute.js.map +1 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/sanitizeNextRouteSegments.d.ts +12 -0
- package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/sanitizeNextRouteSegments.d.ts.map +1 -0
- package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/sanitizeNextRouteSegments.js +32 -0
- package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/sanitizeNextRouteSegments.js.map +1 -0
- package/analyzer-template/packages/ui-components/src/scenario-editor/components/DataItemEditor.tsx +1 -1
- 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/frameworks/getNextRoutePath.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/getNextRoutePath.js +2 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/getNextRoutePath.js.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/nextRouteFileNameToRoute.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/nextRouteFileNameToRoute.js +2 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/nextRouteFileNameToRoute.js.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/sanitizeNextRouteSegments.d.ts +12 -0
- package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/sanitizeNextRouteSegments.d.ts.map +1 -0
- package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/sanitizeNextRouteSegments.js +32 -0
- package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/sanitizeNextRouteSegments.js.map +1 -0
- package/analyzer-template/packages/utils/index.ts +1 -0
- package/analyzer-template/packages/utils/src/lib/frameworks/getNextRoutePath.ts +2 -1
- package/analyzer-template/packages/utils/src/lib/frameworks/nextRouteFileNameToRoute.ts +2 -1
- package/analyzer-template/packages/utils/src/lib/frameworks/sanitizeNextRouteSegments.ts +33 -0
- package/analyzer-template/project/startScenarioCapture.ts +24 -0
- package/analyzer-template/project/trackGeneratedFiles.ts +41 -0
- package/analyzer-template/project/writeMockDataTsx.ts +94 -4
- package/analyzer-template/project/writeScenarioComponents.ts +35 -27
- package/background/src/lib/virtualized/project/startScenarioCapture.js +18 -0
- package/background/src/lib/virtualized/project/startScenarioCapture.js.map +1 -1
- package/background/src/lib/virtualized/project/trackGeneratedFiles.js +30 -0
- package/background/src/lib/virtualized/project/trackGeneratedFiles.js.map +1 -0
- package/background/src/lib/virtualized/project/writeMockDataTsx.js +71 -3
- package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
- package/background/src/lib/virtualized/project/writeScenarioComponents.js +15 -11
- package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
- package/codeyam-cli/src/commands/init.js +4 -23
- package/codeyam-cli/src/commands/init.js.map +1 -1
- package/codeyam-cli/src/utils/webappDetection.js +2 -1
- package/codeyam-cli/src/utils/webappDetection.js.map +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/EntityTypeIcon-B9Sf8e9w.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-B0oiPem-.js → InteractivePreview-CDnfNKKQ.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-DUS-3h7I.js +3 -0
- package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-BKKG1s2B.js → LogViewer-TJzDQku1.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-BgdlWM6p.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/ScenarioPreview-Bl6GY-OE.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-DmjXUj6m.js → ScenarioViewer-BDq8RX50.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/_index-Bh3y3Wsl.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-tq7Bl6-t.js +10 -0
- package/codeyam-cli/src/webserver/build/client/assets/{chart-column-VXBS6qOn.js → chart-column-q9_nHfwv.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/chunk-WWGJGFF6-DvL0YqDJ.js +26 -0
- package/codeyam-cli/src/webserver/build/client/assets/{circle-alert-n5GUC2AS.js → circle-alert-CKMpA1v_.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{clock-DKqtX8js.js → clock-Wnfog8Qw.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-C_ixaqqh.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-BHiWkb_W.js → entity._sha._-3bYjyojg.js} +10 -10
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-DtfwpN9J.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.edit._scenarioId-QecTs_sq.js +5 -0
- package/codeyam-cli/src/webserver/build/client/assets/entry.client-hnkEgHrC.js +5 -0
- package/codeyam-cli/src/webserver/build/client/assets/file-text-CvCVdKLW.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/files-DgUCYhbd.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/git-WoKohOtW.js +12 -0
- package/codeyam-cli/src/webserver/build/client/assets/globals-DZfbt0u5.css +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/index-Vvbl94Xc.js +8 -0
- package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-v3c6DFp4.js → loader-circle-Bxm63UxG.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-c90b8608.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/root-DrVZQamX.js +16 -0
- package/codeyam-cli/src/webserver/build/client/assets/{search-DA14wXpu.js → search-CJkk16Ct.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{settings-COJUrwGu.js → settings-ConzHeiL.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/settings-LuiJ1UIm.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/simulations-B9LRwAej.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-Lumm1t01.js → useLastLogLine-CpUcCv1V.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/useToast-DOxmMaSg.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{zap-BvukH0eN.js → zap-D5R1FAcH.js} +1 -1
- package/codeyam-cli/src/webserver/build/server/assets/index-DzbqTxoN.js +1 -0
- package/codeyam-cli/src/webserver/build/server/assets/server-build-DGGis3OZ.js +166 -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/server.js +1 -1
- package/codeyam-cli/src/webserver/server.js.map +1 -1
- package/codeyam-cli/templates/codeyam-setup-skill.md +5 -0
- package/package.json +7 -7
- package/packages/ai/index.js +0 -1
- package/packages/ai/index.js.map +1 -1
- package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +6 -15
- package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js.map +1 -1
- package/packages/ai/src/lib/astScopes/methodSemantics.js +134 -0
- package/packages/ai/src/lib/astScopes/methodSemantics.js.map +1 -1
- package/packages/ai/src/lib/astScopes/paths.js +28 -3
- package/packages/ai/src/lib/astScopes/paths.js.map +1 -1
- package/packages/ai/src/lib/astScopes/processExpression.js +99 -3
- package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
- package/packages/ai/src/lib/checkAllAttributes.js +1 -3
- package/packages/ai/src/lib/checkAllAttributes.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +308 -2
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js +12 -6
- package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js.map +1 -1
- package/packages/ai/src/lib/generateChangesEntityDocumentation.js +19 -1
- package/packages/ai/src/lib/generateChangesEntityDocumentation.js.map +1 -1
- package/packages/ai/src/lib/generateChangesEntityScenarioData.js +55 -156
- package/packages/ai/src/lib/generateChangesEntityScenarioData.js.map +1 -1
- package/packages/ai/src/lib/generateChangesEntityScenarios.js +79 -262
- package/packages/ai/src/lib/generateChangesEntityScenarios.js.map +1 -1
- package/packages/ai/src/lib/generateEntityDocumentation.js +15 -1
- package/packages/ai/src/lib/generateEntityDocumentation.js.map +1 -1
- package/packages/ai/src/lib/generateEntityScenarioData.js +52 -152
- package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
- package/packages/ai/src/lib/generateEntityScenarios.js +88 -258
- package/packages/ai/src/lib/generateEntityScenarios.js.map +1 -1
- package/packages/ai/src/lib/generateStatementAnalysis.js +46 -71
- package/packages/ai/src/lib/generateStatementAnalysis.js.map +1 -1
- package/packages/ai/src/lib/getLLMCallStats.js +0 -14
- package/packages/ai/src/lib/getLLMCallStats.js.map +1 -1
- package/packages/ai/src/lib/modelInfo.js +15 -0
- package/packages/ai/src/lib/modelInfo.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/generateChangesEntityDocumentationGenerator.js +8 -33
- package/packages/ai/src/lib/promptGenerators/generateChangesEntityDocumentationGenerator.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenarioDataGenerator.js +35 -41
- package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenarioDataGenerator.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.js +59 -72
- package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/generateEntityDocumentationGenerator.js +8 -27
- package/packages/ai/src/lib/promptGenerators/generateEntityDocumentationGenerator.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js +24 -27
- package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.js +21 -22
- package/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.js.map +1 -1
- package/packages/ai/src/lib/types/index.js +2 -0
- package/packages/ai/src/lib/types/index.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +16 -7
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
- package/packages/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js +28 -21
- package/packages/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js.map +1 -1
- package/packages/generate/src/lib/componentScenarioPage/componentScenarioPageRemix.js +18 -11
- package/packages/generate/src/lib/componentScenarioPage/componentScenarioPageRemix.js.map +1 -1
- package/packages/utils/index.js +1 -0
- package/packages/utils/index.js.map +1 -1
- package/packages/utils/src/lib/frameworks/getNextRoutePath.js +2 -1
- package/packages/utils/src/lib/frameworks/getNextRoutePath.js.map +1 -1
- package/packages/utils/src/lib/frameworks/nextRouteFileNameToRoute.js +2 -1
- package/packages/utils/src/lib/frameworks/nextRouteFileNameToRoute.js.map +1 -1
- package/packages/utils/src/lib/frameworks/sanitizeNextRouteSegments.js +32 -0
- package/packages/utils/src/lib/frameworks/sanitizeNextRouteSegments.js.map +1 -0
- package/analyzer-template/packages/ai/src/lib/generateEntityDataMap.ts +0 -375
- package/codeyam-cli/src/webserver/build/client/assets/EntityTypeIcon-rqv54FUY.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-DqXXjAJ7.js +0 -3
- package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-DU_jxCPD.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/ScenarioPreview-5DY-YIxu.js +0 -6
- package/codeyam-cli/src/webserver/build/client/assets/_index-DvSrcxsk.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-CsaMd9mb.js +0 -10
- package/codeyam-cli/src/webserver/build/client/assets/components-Dj-Ggnl2.js +0 -40
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-BbR3FwNc.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-L7M9Vr5z.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.edit._scenarioId-C9w-q7P3.js +0 -5
- package/codeyam-cli/src/webserver/build/client/assets/entry.client-CdGoUs8A.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/file-text-B6Er7j5k.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/files-KcDVw1FY.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/git-B9uZ8eSJ.js +0 -12
- package/codeyam-cli/src/webserver/build/client/assets/globals-B0f88RTV.css +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-fca08d7e.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/root-Cf8VBqIb.js +0 -16
- package/codeyam-cli/src/webserver/build/client/assets/settings-NU_ZquhK.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/simulations-CNaMJ-nR.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/useToast-BRShB17p.js +0 -1
- package/codeyam-cli/src/webserver/build/client/cy-logo-cli.svg +0 -13
- package/codeyam-cli/src/webserver/build/client/favicon.svg +0 -13
- package/codeyam-cli/src/webserver/build/server/assets/index-DHr4rT4u.js +0 -1
- package/codeyam-cli/src/webserver/build/server/assets/server-build-Bi1mj14J.js +0 -166
- package/codeyam-cli/src/webserver/public/cy-logo-cli.svg +0 -13
- package/codeyam-cli/src/webserver/public/favicon.svg +0 -13
- package/packages/ai/src/lib/generateEntityDataMap.js +0 -335
- package/packages/ai/src/lib/generateEntityDataMap.js.map +0 -1
- package/packages/ai/src/lib/promptGenerators/generateEntityDataMapGenerator.js +0 -17
- package/packages/ai/src/lib/promptGenerators/generateEntityDataMapGenerator.js.map +0 -1
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { getAppDirectoryForFile, safeFileName } from '~codeyam/utils';
|
|
2
2
|
import { PROJECT_RELATIVE_PATH } from '~codeyam/utils';
|
|
3
|
+
import sanitizeNextRouteSegments from './sanitizeNextRouteSegments';
|
|
3
4
|
export default function getNextRoutePath({ file, entity, rootAnalysis, project, framework, scenario, }) {
|
|
4
|
-
const routePath = file.path.split('/').slice(1);
|
|
5
|
+
const routePath = sanitizeNextRouteSegments(file.path.split('/').slice(1));
|
|
5
6
|
const scenarioSlug = scenario ? safeFileName(scenario.name) : undefined;
|
|
6
7
|
const appDirectory = getAppDirectoryForFile(file.path, project.metadata?.webapps);
|
|
7
8
|
const pathComponents = [
|
package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/getNextRoutePath.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getNextRoutePath.js","sourceRoot":"","sources":["../../../../../../utils/src/lib/frameworks/getNextRoutePath.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAQtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"getNextRoutePath.js","sourceRoot":"","sources":["../../../../../../utils/src/lib/frameworks/getNextRoutePath.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAQtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,yBAAyB,MAAM,6BAA6B,CAAC;AAEpE,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EACvC,IAAI,EACJ,MAAM,EACN,YAAY,EACZ,OAAO,EACP,SAAS,EACT,QAAQ,GAST;IACC,MAAM,SAAS,GAAG,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxE,MAAM,YAAY,GAAG,sBAAsB,CACzC,IAAI,CAAC,IAAI,EACT,OAAO,CAAC,QAAQ,EAAE,OAAO,CAC1B,CAAC;IACF,MAAM,cAAc,GAAG;QACrB,qBAAqB;QACrB,YAAY;QACZ,QAAQ;QACR,OAAO,CAAC,IAAI;QACZ,YAAY,CAAC,EAAE;QACf,YAAY,CAAC,YAAY,CAAC,UAAU,CAAC;QACrC,YAAY;QACZ,GAAG,SAAS;KACb,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClB,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE1C,OAAO,CAAC,GAAG,CACT,iCAAiC,EACjC,IAAI,CAAC,IAAI,EACT,MAAM,CAAC,IAAI,EACX,QAAQ,CACT,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nextRouteFileNameToRoute.d.ts","sourceRoot":"","sources":["../../../../../../utils/src/lib/frameworks/nextRouteFileNameToRoute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"nextRouteFileNameToRoute.d.ts","sourceRoot":"","sources":["../../../../../../utils/src/lib/frameworks/nextRouteFileNameToRoute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAIhD,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAC9C,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,EAClB,YAAY,CAAC,EAAE,MAAM,UAYtB"}
|
package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/nextRouteFileNameToRoute.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import safeFileName from '../safeFileName';
|
|
2
|
+
import sanitizeNextRouteSegments from './sanitizeNextRouteSegments';
|
|
2
3
|
export default function nextRouteFileNameToRoute(projectSlug, file, analysis, scenarioName) {
|
|
3
|
-
const route = file.path.split('/').slice(1, -1);
|
|
4
|
+
const route = sanitizeNextRouteSegments(file.path.split('/').slice(1, -1));
|
|
4
5
|
const pathComponents = [
|
|
5
6
|
'static',
|
|
6
7
|
projectSlug,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nextRouteFileNameToRoute.js","sourceRoot":"","sources":["../../../../../../utils/src/lib/frameworks/nextRouteFileNameToRoute.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"nextRouteFileNameToRoute.js","sourceRoot":"","sources":["../../../../../../utils/src/lib/frameworks/nextRouteFileNameToRoute.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAC3C,OAAO,yBAAyB,MAAM,6BAA6B,CAAC;AAEpE,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAC9C,WAAmB,EACnB,IAAU,EACV,QAAkB,EAClB,YAAqB;IAErB,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,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,GAAG,KAAK;KACT,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClB,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sanitize Next.js route path segments to remove special syntax.
|
|
3
|
+
* - Route groups (folder) become folder (strip parens, keep name)
|
|
4
|
+
* - Dynamic segments [param] become param0 (suffix avoids Next.js private folder convention)
|
|
5
|
+
* - Catch-all [...slug] becomes slug0
|
|
6
|
+
* - Optional catch-all [[...slug]] becomes slug0
|
|
7
|
+
*
|
|
8
|
+
* Note: We use suffix "0" instead of prefix "_" because Next.js treats folders
|
|
9
|
+
* starting with underscore as private segments that are excluded from routing.
|
|
10
|
+
*/
|
|
11
|
+
export default function sanitizeNextRouteSegments(segments: string[]): string[];
|
|
12
|
+
//# sourceMappingURL=sanitizeNextRouteSegments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitizeNextRouteSegments.d.ts","sourceRoot":"","sources":["../../../../../../utils/src/lib/frameworks/sanitizeNextRouteSegments.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAC/C,QAAQ,EAAE,MAAM,EAAE,GACjB,MAAM,EAAE,CAoBV"}
|
package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/sanitizeNextRouteSegments.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sanitize Next.js route path segments to remove special syntax.
|
|
3
|
+
* - Route groups (folder) become folder (strip parens, keep name)
|
|
4
|
+
* - Dynamic segments [param] become param0 (suffix avoids Next.js private folder convention)
|
|
5
|
+
* - Catch-all [...slug] becomes slug0
|
|
6
|
+
* - Optional catch-all [[...slug]] becomes slug0
|
|
7
|
+
*
|
|
8
|
+
* Note: We use suffix "0" instead of prefix "_" because Next.js treats folders
|
|
9
|
+
* starting with underscore as private segments that are excluded from routing.
|
|
10
|
+
*/
|
|
11
|
+
export default function sanitizeNextRouteSegments(segments) {
|
|
12
|
+
return segments.map((segment) => {
|
|
13
|
+
// Handle route groups (folder) - strip parens, keep name
|
|
14
|
+
const routeGroup = segment.match(/^\(([^)]+)\)$/);
|
|
15
|
+
if (routeGroup)
|
|
16
|
+
return routeGroup[1];
|
|
17
|
+
// Handle optional catch-all [[...param]]
|
|
18
|
+
const optionalCatchAll = segment.match(/^\[\[\.\.\.([\w]+)\]\]$/);
|
|
19
|
+
if (optionalCatchAll)
|
|
20
|
+
return `${optionalCatchAll[1]}0`;
|
|
21
|
+
// Handle catch-all [...param]
|
|
22
|
+
const catchAll = segment.match(/^\[\.\.\.([\w]+)\]$/);
|
|
23
|
+
if (catchAll)
|
|
24
|
+
return `${catchAll[1]}0`;
|
|
25
|
+
// Handle dynamic [param]
|
|
26
|
+
const dynamic = segment.match(/^\[([\w]+)\]$/);
|
|
27
|
+
if (dynamic)
|
|
28
|
+
return `${dynamic[1]}0`;
|
|
29
|
+
return segment;
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=sanitizeNextRouteSegments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitizeNextRouteSegments.js","sourceRoot":"","sources":["../../../../../../utils/src/lib/frameworks/sanitizeNextRouteSegments.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAC/C,QAAkB;IAElB,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,yDAAyD;QACzD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAClD,IAAI,UAAU;YAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;QAErC,yCAAyC;QACzC,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAClE,IAAI,gBAAgB;YAAE,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC;QAEvD,8BAA8B;QAC9B,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACtD,IAAI,QAAQ;YAAE,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;QAEvC,yBAAyB;QACzB,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC/C,IAAI,OAAO;YAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;QAErC,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -7,6 +7,7 @@ export { default as frameworkRouteFileNameToRoute } from './src/lib/frameworks/f
|
|
|
7
7
|
export { default as getRemixRoutePath } from './src/lib/frameworks/getRemixRoutePath';
|
|
8
8
|
export { default as getNextRoutePath } from './src/lib/frameworks/getNextRoutePath';
|
|
9
9
|
export { default as getFrameworkRoutePath } from './src/lib/frameworks/getFrameworkRoutePath';
|
|
10
|
+
export { default as sanitizeNextRouteSegments } from './src/lib/frameworks/sanitizeNextRouteSegments';
|
|
10
11
|
export { default as safeFileName } from './src/lib/safeFileName';
|
|
11
12
|
export { default as normalizeKey } from './src/lib/normalizeKey';
|
|
12
13
|
export { default as awsLog, awsLogDebugLevel, setThreadContext, } from './src/lib/awsLog';
|
|
@@ -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,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,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"}
|
|
@@ -7,6 +7,7 @@ export { default as frameworkRouteFileNameToRoute } from './src/lib/frameworks/f
|
|
|
7
7
|
export { default as getRemixRoutePath } from './src/lib/frameworks/getRemixRoutePath';
|
|
8
8
|
export { default as getNextRoutePath } from './src/lib/frameworks/getNextRoutePath';
|
|
9
9
|
export { default as getFrameworkRoutePath } from './src/lib/frameworks/getFrameworkRoutePath';
|
|
10
|
+
export { default as sanitizeNextRouteSegments } from './src/lib/frameworks/sanitizeNextRouteSegments';
|
|
10
11
|
export { default as safeFileName } from './src/lib/safeFileName';
|
|
11
12
|
export { default as normalizeKey } from './src/lib/normalizeKey';
|
|
12
13
|
export { default as awsLog, awsLogDebugLevel, setThreadContext, } from './src/lib/awsLog';
|
|
@@ -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,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,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"}
|
package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/getNextRoutePath.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getNextRoutePath.d.ts","sourceRoot":"","sources":["../../../../../src/lib/frameworks/getNextRoutePath.ts"],"names":[],"mappings":"AACA,OAAO,EACL,QAAQ,EACR,cAAc,EACd,IAAI,EACJ,OAAO,EACP,gBAAgB,EACjB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"getNextRoutePath.d.ts","sourceRoot":"","sources":["../../../../../src/lib/frameworks/getNextRoutePath.ts"],"names":[],"mappings":"AACA,OAAO,EACL,QAAQ,EACR,cAAc,EACd,IAAI,EACJ,OAAO,EACP,gBAAgB,EACjB,MAAM,gBAAgB,CAAC;AAIxB,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EACvC,IAAI,EACJ,MAAM,EACN,YAAY,EACZ,OAAO,EACP,SAAS,EACT,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,IAAI,CAAC;IACf,MAAM,EAAE,cAAc,CAAC;IACvB,YAAY,EAAE,QAAQ,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7B,UA2BA"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { getAppDirectoryForFile, safeFileName } from '~codeyam/utils';
|
|
2
2
|
import { PROJECT_RELATIVE_PATH } from '~codeyam/utils';
|
|
3
|
+
import sanitizeNextRouteSegments from './sanitizeNextRouteSegments';
|
|
3
4
|
export default function getNextRoutePath({ file, entity, rootAnalysis, project, framework, scenario, }) {
|
|
4
|
-
const routePath = file.path.split('/').slice(1);
|
|
5
|
+
const routePath = sanitizeNextRouteSegments(file.path.split('/').slice(1));
|
|
5
6
|
const scenarioSlug = scenario ? safeFileName(scenario.name) : undefined;
|
|
6
7
|
const appDirectory = getAppDirectoryForFile(file.path, project.metadata?.webapps);
|
|
7
8
|
const pathComponents = [
|
package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/getNextRoutePath.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getNextRoutePath.js","sourceRoot":"","sources":["../../../../../src/lib/frameworks/getNextRoutePath.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAQtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"getNextRoutePath.js","sourceRoot":"","sources":["../../../../../src/lib/frameworks/getNextRoutePath.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAQtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,yBAAyB,MAAM,6BAA6B,CAAC;AAEpE,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EACvC,IAAI,EACJ,MAAM,EACN,YAAY,EACZ,OAAO,EACP,SAAS,EACT,QAAQ,GAST;IACC,MAAM,SAAS,GAAG,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxE,MAAM,YAAY,GAAG,sBAAsB,CACzC,IAAI,CAAC,IAAI,EACT,OAAO,CAAC,QAAQ,EAAE,OAAO,CAC1B,CAAC;IACF,MAAM,cAAc,GAAG;QACrB,qBAAqB;QACrB,YAAY;QACZ,QAAQ;QACR,OAAO,CAAC,IAAI;QACZ,YAAY,CAAC,EAAE;QACf,YAAY,CAAC,YAAY,CAAC,UAAU,CAAC;QACrC,YAAY;QACZ,GAAG,SAAS;KACb,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClB,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE1C,OAAO,CAAC,GAAG,CACT,iCAAiC,EACjC,IAAI,CAAC,IAAI,EACT,MAAM,CAAC,IAAI,EACX,QAAQ,CACT,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nextRouteFileNameToRoute.d.ts","sourceRoot":"","sources":["../../../../../src/lib/frameworks/nextRouteFileNameToRoute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"nextRouteFileNameToRoute.d.ts","sourceRoot":"","sources":["../../../../../src/lib/frameworks/nextRouteFileNameToRoute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAIhD,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAC9C,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,EAClB,YAAY,CAAC,EAAE,MAAM,UAYtB"}
|
package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/nextRouteFileNameToRoute.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import safeFileName from '../safeFileName';
|
|
2
|
+
import sanitizeNextRouteSegments from './sanitizeNextRouteSegments';
|
|
2
3
|
export default function nextRouteFileNameToRoute(projectSlug, file, analysis, scenarioName) {
|
|
3
|
-
const route = file.path.split('/').slice(1, -1);
|
|
4
|
+
const route = sanitizeNextRouteSegments(file.path.split('/').slice(1, -1));
|
|
4
5
|
const pathComponents = [
|
|
5
6
|
'static',
|
|
6
7
|
projectSlug,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nextRouteFileNameToRoute.js","sourceRoot":"","sources":["../../../../../src/lib/frameworks/nextRouteFileNameToRoute.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"nextRouteFileNameToRoute.js","sourceRoot":"","sources":["../../../../../src/lib/frameworks/nextRouteFileNameToRoute.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAC3C,OAAO,yBAAyB,MAAM,6BAA6B,CAAC;AAEpE,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAC9C,WAAmB,EACnB,IAAU,EACV,QAAkB,EAClB,YAAqB;IAErB,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,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,GAAG,KAAK;KACT,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClB,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sanitize Next.js route path segments to remove special syntax.
|
|
3
|
+
* - Route groups (folder) become folder (strip parens, keep name)
|
|
4
|
+
* - Dynamic segments [param] become param0 (suffix avoids Next.js private folder convention)
|
|
5
|
+
* - Catch-all [...slug] becomes slug0
|
|
6
|
+
* - Optional catch-all [[...slug]] becomes slug0
|
|
7
|
+
*
|
|
8
|
+
* Note: We use suffix "0" instead of prefix "_" because Next.js treats folders
|
|
9
|
+
* starting with underscore as private segments that are excluded from routing.
|
|
10
|
+
*/
|
|
11
|
+
export default function sanitizeNextRouteSegments(segments: string[]): string[];
|
|
12
|
+
//# sourceMappingURL=sanitizeNextRouteSegments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitizeNextRouteSegments.d.ts","sourceRoot":"","sources":["../../../../../src/lib/frameworks/sanitizeNextRouteSegments.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAC/C,QAAQ,EAAE,MAAM,EAAE,GACjB,MAAM,EAAE,CAoBV"}
|
package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/sanitizeNextRouteSegments.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sanitize Next.js route path segments to remove special syntax.
|
|
3
|
+
* - Route groups (folder) become folder (strip parens, keep name)
|
|
4
|
+
* - Dynamic segments [param] become param0 (suffix avoids Next.js private folder convention)
|
|
5
|
+
* - Catch-all [...slug] becomes slug0
|
|
6
|
+
* - Optional catch-all [[...slug]] becomes slug0
|
|
7
|
+
*
|
|
8
|
+
* Note: We use suffix "0" instead of prefix "_" because Next.js treats folders
|
|
9
|
+
* starting with underscore as private segments that are excluded from routing.
|
|
10
|
+
*/
|
|
11
|
+
export default function sanitizeNextRouteSegments(segments) {
|
|
12
|
+
return segments.map((segment) => {
|
|
13
|
+
// Handle route groups (folder) - strip parens, keep name
|
|
14
|
+
const routeGroup = segment.match(/^\(([^)]+)\)$/);
|
|
15
|
+
if (routeGroup)
|
|
16
|
+
return routeGroup[1];
|
|
17
|
+
// Handle optional catch-all [[...param]]
|
|
18
|
+
const optionalCatchAll = segment.match(/^\[\[\.\.\.([\w]+)\]\]$/);
|
|
19
|
+
if (optionalCatchAll)
|
|
20
|
+
return `${optionalCatchAll[1]}0`;
|
|
21
|
+
// Handle catch-all [...param]
|
|
22
|
+
const catchAll = segment.match(/^\[\.\.\.([\w]+)\]$/);
|
|
23
|
+
if (catchAll)
|
|
24
|
+
return `${catchAll[1]}0`;
|
|
25
|
+
// Handle dynamic [param]
|
|
26
|
+
const dynamic = segment.match(/^\[([\w]+)\]$/);
|
|
27
|
+
if (dynamic)
|
|
28
|
+
return `${dynamic[1]}0`;
|
|
29
|
+
return segment;
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=sanitizeNextRouteSegments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitizeNextRouteSegments.js","sourceRoot":"","sources":["../../../../../src/lib/frameworks/sanitizeNextRouteSegments.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAC/C,QAAkB;IAElB,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,yDAAyD;QACzD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAClD,IAAI,UAAU;YAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;QAErC,yCAAyC;QACzC,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAClE,IAAI,gBAAgB;YAAE,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC;QAEvD,8BAA8B;QAC9B,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACtD,IAAI,QAAQ;YAAE,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;QAEvC,yBAAyB;QACzB,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC/C,IAAI,OAAO;YAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;QAErC,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -7,6 +7,7 @@ export { default as frameworkRouteFileNameToRoute } from './src/lib/frameworks/f
|
|
|
7
7
|
export { default as getRemixRoutePath } from './src/lib/frameworks/getRemixRoutePath';
|
|
8
8
|
export { default as getNextRoutePath } from './src/lib/frameworks/getNextRoutePath';
|
|
9
9
|
export { default as getFrameworkRoutePath } from './src/lib/frameworks/getFrameworkRoutePath';
|
|
10
|
+
export { default as sanitizeNextRouteSegments } from './src/lib/frameworks/sanitizeNextRouteSegments';
|
|
10
11
|
export { default as safeFileName } from './src/lib/safeFileName';
|
|
11
12
|
export { default as normalizeKey } from './src/lib/normalizeKey';
|
|
12
13
|
export {
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
ProjectFramework,
|
|
8
8
|
} from '~codeyam/types';
|
|
9
9
|
import { PROJECT_RELATIVE_PATH } from '~codeyam/utils';
|
|
10
|
+
import sanitizeNextRouteSegments from './sanitizeNextRouteSegments';
|
|
10
11
|
|
|
11
12
|
export default function getNextRoutePath({
|
|
12
13
|
file,
|
|
@@ -24,7 +25,7 @@ export default function getNextRoutePath({
|
|
|
24
25
|
framework: ProjectFramework;
|
|
25
26
|
scenario?: { name: string };
|
|
26
27
|
}) {
|
|
27
|
-
const routePath = file.path.split('/').slice(1);
|
|
28
|
+
const routePath = sanitizeNextRouteSegments(file.path.split('/').slice(1));
|
|
28
29
|
const scenarioSlug = scenario ? safeFileName(scenario.name) : undefined;
|
|
29
30
|
const appDirectory = getAppDirectoryForFile(
|
|
30
31
|
file.path,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Analysis, File } from '~codeyam/types';
|
|
2
2
|
import safeFileName from '../safeFileName';
|
|
3
|
+
import sanitizeNextRouteSegments from './sanitizeNextRouteSegments';
|
|
3
4
|
|
|
4
5
|
export default function nextRouteFileNameToRoute(
|
|
5
6
|
projectSlug: string,
|
|
@@ -7,7 +8,7 @@ export default function nextRouteFileNameToRoute(
|
|
|
7
8
|
analysis: Analysis,
|
|
8
9
|
scenarioName?: string,
|
|
9
10
|
) {
|
|
10
|
-
const route = file.path.split('/').slice(1, -1);
|
|
11
|
+
const route = sanitizeNextRouteSegments(file.path.split('/').slice(1, -1));
|
|
11
12
|
const pathComponents = [
|
|
12
13
|
'static',
|
|
13
14
|
projectSlug,
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sanitize Next.js route path segments to remove special syntax.
|
|
3
|
+
* - Route groups (folder) become folder (strip parens, keep name)
|
|
4
|
+
* - Dynamic segments [param] become param0 (suffix avoids Next.js private folder convention)
|
|
5
|
+
* - Catch-all [...slug] becomes slug0
|
|
6
|
+
* - Optional catch-all [[...slug]] becomes slug0
|
|
7
|
+
*
|
|
8
|
+
* Note: We use suffix "0" instead of prefix "_" because Next.js treats folders
|
|
9
|
+
* starting with underscore as private segments that are excluded from routing.
|
|
10
|
+
*/
|
|
11
|
+
export default function sanitizeNextRouteSegments(
|
|
12
|
+
segments: string[],
|
|
13
|
+
): string[] {
|
|
14
|
+
return segments.map((segment) => {
|
|
15
|
+
// Handle route groups (folder) - strip parens, keep name
|
|
16
|
+
const routeGroup = segment.match(/^\(([^)]+)\)$/);
|
|
17
|
+
if (routeGroup) return routeGroup[1];
|
|
18
|
+
|
|
19
|
+
// Handle optional catch-all [[...param]]
|
|
20
|
+
const optionalCatchAll = segment.match(/^\[\[\.\.\.([\w]+)\]\]$/);
|
|
21
|
+
if (optionalCatchAll) return `${optionalCatchAll[1]}0`;
|
|
22
|
+
|
|
23
|
+
// Handle catch-all [...param]
|
|
24
|
+
const catchAll = segment.match(/^\[\.\.\.([\w]+)\]$/);
|
|
25
|
+
if (catchAll) return `${catchAll[1]}0`;
|
|
26
|
+
|
|
27
|
+
// Handle dynamic [param]
|
|
28
|
+
const dynamic = segment.match(/^\[([\w]+)\]$/);
|
|
29
|
+
if (dynamic) return `${dynamic[1]}0`;
|
|
30
|
+
|
|
31
|
+
return segment;
|
|
32
|
+
});
|
|
33
|
+
}
|
|
@@ -24,6 +24,11 @@ import {
|
|
|
24
24
|
} from '~codeyam/utils';
|
|
25
25
|
import getAppPath from './getAppPath';
|
|
26
26
|
import { restoreAllBackups, restoreFromBackup } from './backupFiles';
|
|
27
|
+
import {
|
|
28
|
+
readTrackingFile,
|
|
29
|
+
writeTrackingFile,
|
|
30
|
+
clearTrackingFile,
|
|
31
|
+
} from './trackGeneratedFiles';
|
|
27
32
|
import captureLibraryFunctionDirect from './captureLibraryFunctionDirect';
|
|
28
33
|
import {
|
|
29
34
|
getFrameworkForComponent,
|
|
@@ -79,6 +84,21 @@ export async function startScenarioCapture({
|
|
|
79
84
|
restoreAllBackups(fullPath);
|
|
80
85
|
}
|
|
81
86
|
|
|
87
|
+
// Clean up any leftover generated files from previous debug sessions
|
|
88
|
+
const previouslyTracked = readTrackingFile();
|
|
89
|
+
if (previouslyTracked) {
|
|
90
|
+
awsLog('CodeYam: Cleaning up files from previous session', {
|
|
91
|
+
generatedCount: previouslyTracked.generatedFiles.length,
|
|
92
|
+
backupCount: previouslyTracked.backupFiles.length,
|
|
93
|
+
timestamp: previouslyTracked.timestamp,
|
|
94
|
+
});
|
|
95
|
+
removeScenario(previouslyTracked.generatedFiles);
|
|
96
|
+
for (const backupPath of previouslyTracked.backupFiles) {
|
|
97
|
+
restoreFromBackup(backupPath);
|
|
98
|
+
}
|
|
99
|
+
clearTrackingFile();
|
|
100
|
+
}
|
|
101
|
+
|
|
82
102
|
const sortedReadyToBeCaptured = readyToBeCaptured.sort((a, b) => {
|
|
83
103
|
if (a.indirect !== b.indirect) {
|
|
84
104
|
return a.indirect ? 1 : -1;
|
|
@@ -446,6 +466,9 @@ export async function startScenarioCapture({
|
|
|
446
466
|
controller?.port,
|
|
447
467
|
);
|
|
448
468
|
allGeneratedFiles.push(codeyamPagePath);
|
|
469
|
+
|
|
470
|
+
// Persist file tracking for crash/debug recovery
|
|
471
|
+
writeTrackingFile(allGeneratedFiles, backupFiles);
|
|
449
472
|
}
|
|
450
473
|
|
|
451
474
|
// Skip if no scenarios to capture
|
|
@@ -565,6 +588,7 @@ export async function startScenarioCapture({
|
|
|
565
588
|
for (const backupPath of backupsToRestore) {
|
|
566
589
|
restoreFromBackup(backupPath);
|
|
567
590
|
}
|
|
591
|
+
clearTrackingFile();
|
|
568
592
|
}
|
|
569
593
|
};
|
|
570
594
|
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync, unlinkSync } from 'fs';
|
|
2
|
+
|
|
3
|
+
const TRACKING_FILE_PATH = '../project/.codeyam-generated-files.json';
|
|
4
|
+
|
|
5
|
+
export interface TrackedFiles {
|
|
6
|
+
generatedFiles: string[];
|
|
7
|
+
backupFiles: string[];
|
|
8
|
+
timestamp: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function getTrackingFilePath(): string {
|
|
12
|
+
return TRACKING_FILE_PATH;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function writeTrackingFile(
|
|
16
|
+
generatedFiles: string[],
|
|
17
|
+
backupFiles: string[],
|
|
18
|
+
): void {
|
|
19
|
+
const data: TrackedFiles = {
|
|
20
|
+
generatedFiles,
|
|
21
|
+
backupFiles,
|
|
22
|
+
timestamp: new Date().toISOString(),
|
|
23
|
+
};
|
|
24
|
+
writeFileSync(TRACKING_FILE_PATH, JSON.stringify(data, null, 2), 'utf8');
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function readTrackingFile(): TrackedFiles | null {
|
|
28
|
+
if (!existsSync(TRACKING_FILE_PATH)) return null;
|
|
29
|
+
try {
|
|
30
|
+
const content = readFileSync(TRACKING_FILE_PATH, 'utf8');
|
|
31
|
+
return JSON.parse(content);
|
|
32
|
+
} catch {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function clearTrackingFile(): void {
|
|
38
|
+
if (existsSync(TRACKING_FILE_PATH)) {
|
|
39
|
+
unlinkSync(TRACKING_FILE_PATH);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -252,6 +252,27 @@ const jsonToCode = (
|
|
|
252
252
|
if (key === '~~codeyam-jsx~~') {
|
|
253
253
|
return `<>${(jsonObj[key] as string[]).join('')}</>`;
|
|
254
254
|
}
|
|
255
|
+
|
|
256
|
+
// Check if this is a nested function signature with array value
|
|
257
|
+
// e.g., "postMessage(message, '*')": ["mockMessageString", "*"]
|
|
258
|
+
// These need to be transformed into callable arrow functions
|
|
259
|
+
// Only apply at deeper nesting levels (level > 2) - top-level mock data keys
|
|
260
|
+
// (level 2) are return values that should preserve their data
|
|
261
|
+
if (key.includes('(') && key.endsWith(')') && level > 2) {
|
|
262
|
+
const funcName = key.split('(')[0];
|
|
263
|
+
const argsArray = jsonObj[key] as unknown[];
|
|
264
|
+
const argsString = argsArray
|
|
265
|
+
.map((_, i) => `arg${i + 1}`)
|
|
266
|
+
.join(', ');
|
|
267
|
+
console.log(
|
|
268
|
+
`CodeYam: Nested func transform (array): "${key}" -> "${funcName}"`,
|
|
269
|
+
);
|
|
270
|
+
keyStrings.push(
|
|
271
|
+
`${levelSpacing}"${safeString(funcName, level)}": (${argsString}) => {}`,
|
|
272
|
+
);
|
|
273
|
+
continue;
|
|
274
|
+
}
|
|
275
|
+
|
|
255
276
|
const arrayString = jsonToCode(
|
|
256
277
|
jsonObj[key],
|
|
257
278
|
level + 1,
|
|
@@ -269,9 +290,33 @@ const jsonToCode = (
|
|
|
269
290
|
);
|
|
270
291
|
}
|
|
271
292
|
} else if (typeof jsonObj[key] === 'object') {
|
|
272
|
-
// Check if this object has a "functionCallReturnValue" key - if so, unwrap it
|
|
273
293
|
const objKeys = Object.keys(jsonObj[key] as object);
|
|
294
|
+
|
|
295
|
+
// Check if this is a nested function signature (e.g., "postMessage(message, targetOrigin)": { signature: [...] })
|
|
296
|
+
// These need to be transformed into callable arrow functions
|
|
297
|
+
// Only apply at deeper nesting levels (level > 2) - top-level mock data keys
|
|
298
|
+
// (level 2) are return values that should preserve their data
|
|
274
299
|
if (
|
|
300
|
+
key.includes('(') &&
|
|
301
|
+
key.endsWith(')') &&
|
|
302
|
+
level > 2 &&
|
|
303
|
+
objKeys.includes('signature') &&
|
|
304
|
+
Array.isArray((jsonObj[key] as Record<string, unknown>).signature)
|
|
305
|
+
) {
|
|
306
|
+
const funcName = key.split('(')[0];
|
|
307
|
+
const signature = (jsonObj[key] as Record<string, unknown>)
|
|
308
|
+
.signature as string[];
|
|
309
|
+
const argsString = signature
|
|
310
|
+
.map((_, i) => `arg${i + 1}`)
|
|
311
|
+
.join(', ');
|
|
312
|
+
console.log(
|
|
313
|
+
`CodeYam: Nested func transform (signature): "${key}" -> "${funcName}"`,
|
|
314
|
+
);
|
|
315
|
+
keyStrings.push(
|
|
316
|
+
`${levelSpacing}"${safeString(funcName, level)}": (${argsString}) => {}`,
|
|
317
|
+
);
|
|
318
|
+
} else if (
|
|
319
|
+
// Check if this object has a "functionCallReturnValue" key - if so, unwrap it
|
|
275
320
|
objKeys.length === 1 &&
|
|
276
321
|
objKeys[0] === 'functionCallReturnValue'
|
|
277
322
|
) {
|
|
@@ -341,9 +386,54 @@ const jsonToCode = (
|
|
|
341
386
|
}
|
|
342
387
|
return keyValue;
|
|
343
388
|
} else if (typeof jsonObj[key] === 'string') {
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
389
|
+
const stringValue = jsonObj[key] as string;
|
|
390
|
+
|
|
391
|
+
// Check if this is a nested function signature with string value
|
|
392
|
+
// e.g., "postMessage(message, '*')": "() => { console.log('postMessage called'); }"
|
|
393
|
+
// These need to have the key normalized to just the function name
|
|
394
|
+
// Only apply at deeper nesting levels (level > 2)
|
|
395
|
+
if (key.includes('(') && key.endsWith(')') && level > 2) {
|
|
396
|
+
const funcName = key.split('(')[0];
|
|
397
|
+
|
|
398
|
+
// Check if the string value looks like a function expression
|
|
399
|
+
const looksLikeFunction =
|
|
400
|
+
stringValue.includes('=>') ||
|
|
401
|
+
stringValue.startsWith('function') ||
|
|
402
|
+
stringValue.startsWith('async');
|
|
403
|
+
|
|
404
|
+
// Handle special type indicators that need transformation
|
|
405
|
+
let outputValue: string;
|
|
406
|
+
if (stringValue === 'promise') {
|
|
407
|
+
outputValue = 'Promise.resolve()';
|
|
408
|
+
console.log(
|
|
409
|
+
`CodeYam: Nested func transform (string->Promise): "${key}" -> "${funcName}": Promise.resolve()`,
|
|
410
|
+
);
|
|
411
|
+
} else if (stringValue === 'function') {
|
|
412
|
+
outputValue = '() => {}';
|
|
413
|
+
console.log(
|
|
414
|
+
`CodeYam: Nested func transform (string->function): "${key}" -> "${funcName}": () => {}`,
|
|
415
|
+
);
|
|
416
|
+
} else if (looksLikeFunction) {
|
|
417
|
+
outputValue = stringValue;
|
|
418
|
+
console.log(
|
|
419
|
+
`CodeYam: Nested func transform (string): "${key}" -> "${funcName}": ${stringValue.substring(0, 30)}...`,
|
|
420
|
+
);
|
|
421
|
+
} else {
|
|
422
|
+
// Plain string value - must be quoted
|
|
423
|
+
outputValue = `"${safeString(stringValue, level)}"`;
|
|
424
|
+
console.log(
|
|
425
|
+
`CodeYam: Nested func transform (string->quoted): "${key}" -> "${funcName}": "${stringValue}"`,
|
|
426
|
+
);
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
keyStrings.push(
|
|
430
|
+
`${levelSpacing}"${safeString(funcName, level)}": ${outputValue}`,
|
|
431
|
+
);
|
|
432
|
+
} else {
|
|
433
|
+
keyStrings.push(
|
|
434
|
+
`${levelSpacing}"${safeString(key, level)}": "${safeString(stringValue, level)}"`,
|
|
435
|
+
);
|
|
436
|
+
}
|
|
347
437
|
} else {
|
|
348
438
|
keyStrings.push(
|
|
349
439
|
`${levelSpacing}"${safeString(key, level)}": ${safeString(String(jsonObj[key]), level)}`,
|