@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.
Files changed (220) hide show
  1. package/analyzer-template/.build-info.json +7 -7
  2. package/analyzer-template/log.txt +3 -3
  3. package/analyzer-template/package.json +1 -1
  4. package/analyzer-template/packages/ai/index.ts +0 -1
  5. package/analyzer-template/packages/ai/scripts/ai-test-matrix.mjs +424 -0
  6. package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +6 -16
  7. package/analyzer-template/packages/ai/src/lib/astScopes/methodSemantics.ts +197 -0
  8. package/analyzer-template/packages/ai/src/lib/astScopes/paths.ts +28 -2
  9. package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +113 -4
  10. package/analyzer-template/packages/ai/src/lib/checkAllAttributes.ts +1 -3
  11. package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +430 -7
  12. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.ts +12 -6
  13. package/analyzer-template/packages/ai/src/lib/generateChangesEntityDocumentation.ts +20 -2
  14. package/analyzer-template/packages/ai/src/lib/generateChangesEntityScenarioData.ts +56 -160
  15. package/analyzer-template/packages/ai/src/lib/generateChangesEntityScenarios.ts +79 -265
  16. package/analyzer-template/packages/ai/src/lib/generateEntityDocumentation.ts +16 -2
  17. package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +53 -154
  18. package/analyzer-template/packages/ai/src/lib/generateEntityScenarios.ts +84 -254
  19. package/analyzer-template/packages/ai/src/lib/generateStatementAnalysis.ts +48 -71
  20. package/analyzer-template/packages/ai/src/lib/getLLMCallStats.ts +0 -14
  21. package/analyzer-template/packages/ai/src/lib/modelInfo.ts +15 -0
  22. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChangesEntityDocumentationGenerator.ts +8 -33
  23. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChangesEntityScenarioDataGenerator.ts +54 -62
  24. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.ts +93 -109
  25. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityDocumentationGenerator.ts +8 -27
  26. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.ts +33 -38
  27. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.ts +30 -30
  28. package/analyzer-template/packages/ai/src/lib/types/index.ts +2 -0
  29. package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +15 -7
  30. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/componentScenarioPageNext.ts +28 -21
  31. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/componentScenarioPageRemix.ts +18 -11
  32. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageNext.d.ts.map +1 -1
  33. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js +28 -21
  34. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js.map +1 -1
  35. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageRemix.d.ts.map +1 -1
  36. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageRemix.js +18 -11
  37. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageRemix.js.map +1 -1
  38. package/analyzer-template/packages/github/dist/utils/index.d.ts +1 -0
  39. package/analyzer-template/packages/github/dist/utils/index.d.ts.map +1 -1
  40. package/analyzer-template/packages/github/dist/utils/index.js +1 -0
  41. package/analyzer-template/packages/github/dist/utils/index.js.map +1 -1
  42. package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/getNextRoutePath.d.ts.map +1 -1
  43. package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/getNextRoutePath.js +2 -1
  44. package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/getNextRoutePath.js.map +1 -1
  45. package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/nextRouteFileNameToRoute.d.ts.map +1 -1
  46. package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/nextRouteFileNameToRoute.js +2 -1
  47. package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/nextRouteFileNameToRoute.js.map +1 -1
  48. package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/sanitizeNextRouteSegments.d.ts +12 -0
  49. package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/sanitizeNextRouteSegments.d.ts.map +1 -0
  50. package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/sanitizeNextRouteSegments.js +32 -0
  51. package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/sanitizeNextRouteSegments.js.map +1 -0
  52. package/analyzer-template/packages/ui-components/src/scenario-editor/components/DataItemEditor.tsx +1 -1
  53. package/analyzer-template/packages/utils/dist/utils/index.d.ts +1 -0
  54. package/analyzer-template/packages/utils/dist/utils/index.d.ts.map +1 -1
  55. package/analyzer-template/packages/utils/dist/utils/index.js +1 -0
  56. package/analyzer-template/packages/utils/dist/utils/index.js.map +1 -1
  57. package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/getNextRoutePath.d.ts.map +1 -1
  58. package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/getNextRoutePath.js +2 -1
  59. package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/getNextRoutePath.js.map +1 -1
  60. package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/nextRouteFileNameToRoute.d.ts.map +1 -1
  61. package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/nextRouteFileNameToRoute.js +2 -1
  62. package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/nextRouteFileNameToRoute.js.map +1 -1
  63. package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/sanitizeNextRouteSegments.d.ts +12 -0
  64. package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/sanitizeNextRouteSegments.d.ts.map +1 -0
  65. package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/sanitizeNextRouteSegments.js +32 -0
  66. package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/sanitizeNextRouteSegments.js.map +1 -0
  67. package/analyzer-template/packages/utils/index.ts +1 -0
  68. package/analyzer-template/packages/utils/src/lib/frameworks/getNextRoutePath.ts +2 -1
  69. package/analyzer-template/packages/utils/src/lib/frameworks/nextRouteFileNameToRoute.ts +2 -1
  70. package/analyzer-template/packages/utils/src/lib/frameworks/sanitizeNextRouteSegments.ts +33 -0
  71. package/analyzer-template/project/startScenarioCapture.ts +24 -0
  72. package/analyzer-template/project/trackGeneratedFiles.ts +41 -0
  73. package/analyzer-template/project/writeMockDataTsx.ts +94 -4
  74. package/analyzer-template/project/writeScenarioComponents.ts +35 -27
  75. package/background/src/lib/virtualized/project/startScenarioCapture.js +18 -0
  76. package/background/src/lib/virtualized/project/startScenarioCapture.js.map +1 -1
  77. package/background/src/lib/virtualized/project/trackGeneratedFiles.js +30 -0
  78. package/background/src/lib/virtualized/project/trackGeneratedFiles.js.map +1 -0
  79. package/background/src/lib/virtualized/project/writeMockDataTsx.js +71 -3
  80. package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
  81. package/background/src/lib/virtualized/project/writeScenarioComponents.js +15 -11
  82. package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
  83. package/codeyam-cli/src/commands/init.js +4 -23
  84. package/codeyam-cli/src/commands/init.js.map +1 -1
  85. package/codeyam-cli/src/utils/webappDetection.js +2 -1
  86. package/codeyam-cli/src/utils/webappDetection.js.map +1 -1
  87. package/codeyam-cli/src/webserver/build/client/assets/EntityTypeIcon-B9Sf8e9w.js +1 -0
  88. package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-B0oiPem-.js → InteractivePreview-CDnfNKKQ.js} +3 -3
  89. package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-DUS-3h7I.js +3 -0
  90. package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-BKKG1s2B.js → LogViewer-TJzDQku1.js} +1 -1
  91. package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-BgdlWM6p.js +1 -0
  92. package/codeyam-cli/src/webserver/build/client/assets/ScenarioPreview-Bl6GY-OE.js +6 -0
  93. package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-DmjXUj6m.js → ScenarioViewer-BDq8RX50.js} +1 -1
  94. package/codeyam-cli/src/webserver/build/client/assets/_index-Bh3y3Wsl.js +1 -0
  95. package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-tq7Bl6-t.js +10 -0
  96. package/codeyam-cli/src/webserver/build/client/assets/{chart-column-VXBS6qOn.js → chart-column-q9_nHfwv.js} +1 -1
  97. package/codeyam-cli/src/webserver/build/client/assets/chunk-WWGJGFF6-DvL0YqDJ.js +26 -0
  98. package/codeyam-cli/src/webserver/build/client/assets/{circle-alert-n5GUC2AS.js → circle-alert-CKMpA1v_.js} +1 -1
  99. package/codeyam-cli/src/webserver/build/client/assets/{clock-DKqtX8js.js → clock-Wnfog8Qw.js} +1 -1
  100. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-C_ixaqqh.js +1 -0
  101. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-BHiWkb_W.js → entity._sha._-3bYjyojg.js} +10 -10
  102. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-DtfwpN9J.js +1 -0
  103. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.edit._scenarioId-QecTs_sq.js +5 -0
  104. package/codeyam-cli/src/webserver/build/client/assets/entry.client-hnkEgHrC.js +5 -0
  105. package/codeyam-cli/src/webserver/build/client/assets/file-text-CvCVdKLW.js +1 -0
  106. package/codeyam-cli/src/webserver/build/client/assets/files-DgUCYhbd.js +1 -0
  107. package/codeyam-cli/src/webserver/build/client/assets/git-WoKohOtW.js +12 -0
  108. package/codeyam-cli/src/webserver/build/client/assets/globals-DZfbt0u5.css +1 -0
  109. package/codeyam-cli/src/webserver/build/client/assets/index-Vvbl94Xc.js +8 -0
  110. package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-v3c6DFp4.js → loader-circle-Bxm63UxG.js} +1 -1
  111. package/codeyam-cli/src/webserver/build/client/assets/manifest-c90b8608.js +1 -0
  112. package/codeyam-cli/src/webserver/build/client/assets/root-DrVZQamX.js +16 -0
  113. package/codeyam-cli/src/webserver/build/client/assets/{search-DA14wXpu.js → search-CJkk16Ct.js} +1 -1
  114. package/codeyam-cli/src/webserver/build/client/assets/{settings-COJUrwGu.js → settings-ConzHeiL.js} +1 -1
  115. package/codeyam-cli/src/webserver/build/client/assets/settings-LuiJ1UIm.js +1 -0
  116. package/codeyam-cli/src/webserver/build/client/assets/simulations-B9LRwAej.js +1 -0
  117. package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-Lumm1t01.js → useLastLogLine-CpUcCv1V.js} +1 -1
  118. package/codeyam-cli/src/webserver/build/client/assets/useToast-DOxmMaSg.js +1 -0
  119. package/codeyam-cli/src/webserver/build/client/assets/{zap-BvukH0eN.js → zap-D5R1FAcH.js} +1 -1
  120. package/codeyam-cli/src/webserver/build/server/assets/index-DzbqTxoN.js +1 -0
  121. package/codeyam-cli/src/webserver/build/server/assets/server-build-DGGis3OZ.js +166 -0
  122. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  123. package/codeyam-cli/src/webserver/build-info.json +5 -5
  124. package/codeyam-cli/src/webserver/server.js +1 -1
  125. package/codeyam-cli/src/webserver/server.js.map +1 -1
  126. package/codeyam-cli/templates/codeyam-setup-skill.md +5 -0
  127. package/package.json +7 -7
  128. package/packages/ai/index.js +0 -1
  129. package/packages/ai/index.js.map +1 -1
  130. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +6 -15
  131. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js.map +1 -1
  132. package/packages/ai/src/lib/astScopes/methodSemantics.js +134 -0
  133. package/packages/ai/src/lib/astScopes/methodSemantics.js.map +1 -1
  134. package/packages/ai/src/lib/astScopes/paths.js +28 -3
  135. package/packages/ai/src/lib/astScopes/paths.js.map +1 -1
  136. package/packages/ai/src/lib/astScopes/processExpression.js +99 -3
  137. package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
  138. package/packages/ai/src/lib/checkAllAttributes.js +1 -3
  139. package/packages/ai/src/lib/checkAllAttributes.js.map +1 -1
  140. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +308 -2
  141. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
  142. package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js +12 -6
  143. package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js.map +1 -1
  144. package/packages/ai/src/lib/generateChangesEntityDocumentation.js +19 -1
  145. package/packages/ai/src/lib/generateChangesEntityDocumentation.js.map +1 -1
  146. package/packages/ai/src/lib/generateChangesEntityScenarioData.js +55 -156
  147. package/packages/ai/src/lib/generateChangesEntityScenarioData.js.map +1 -1
  148. package/packages/ai/src/lib/generateChangesEntityScenarios.js +79 -262
  149. package/packages/ai/src/lib/generateChangesEntityScenarios.js.map +1 -1
  150. package/packages/ai/src/lib/generateEntityDocumentation.js +15 -1
  151. package/packages/ai/src/lib/generateEntityDocumentation.js.map +1 -1
  152. package/packages/ai/src/lib/generateEntityScenarioData.js +52 -152
  153. package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
  154. package/packages/ai/src/lib/generateEntityScenarios.js +88 -258
  155. package/packages/ai/src/lib/generateEntityScenarios.js.map +1 -1
  156. package/packages/ai/src/lib/generateStatementAnalysis.js +46 -71
  157. package/packages/ai/src/lib/generateStatementAnalysis.js.map +1 -1
  158. package/packages/ai/src/lib/getLLMCallStats.js +0 -14
  159. package/packages/ai/src/lib/getLLMCallStats.js.map +1 -1
  160. package/packages/ai/src/lib/modelInfo.js +15 -0
  161. package/packages/ai/src/lib/modelInfo.js.map +1 -1
  162. package/packages/ai/src/lib/promptGenerators/generateChangesEntityDocumentationGenerator.js +8 -33
  163. package/packages/ai/src/lib/promptGenerators/generateChangesEntityDocumentationGenerator.js.map +1 -1
  164. package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenarioDataGenerator.js +35 -41
  165. package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenarioDataGenerator.js.map +1 -1
  166. package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.js +59 -72
  167. package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.js.map +1 -1
  168. package/packages/ai/src/lib/promptGenerators/generateEntityDocumentationGenerator.js +8 -27
  169. package/packages/ai/src/lib/promptGenerators/generateEntityDocumentationGenerator.js.map +1 -1
  170. package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js +24 -27
  171. package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js.map +1 -1
  172. package/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.js +21 -22
  173. package/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.js.map +1 -1
  174. package/packages/ai/src/lib/types/index.js +2 -0
  175. package/packages/ai/src/lib/types/index.js.map +1 -1
  176. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +16 -7
  177. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
  178. package/packages/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js +28 -21
  179. package/packages/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js.map +1 -1
  180. package/packages/generate/src/lib/componentScenarioPage/componentScenarioPageRemix.js +18 -11
  181. package/packages/generate/src/lib/componentScenarioPage/componentScenarioPageRemix.js.map +1 -1
  182. package/packages/utils/index.js +1 -0
  183. package/packages/utils/index.js.map +1 -1
  184. package/packages/utils/src/lib/frameworks/getNextRoutePath.js +2 -1
  185. package/packages/utils/src/lib/frameworks/getNextRoutePath.js.map +1 -1
  186. package/packages/utils/src/lib/frameworks/nextRouteFileNameToRoute.js +2 -1
  187. package/packages/utils/src/lib/frameworks/nextRouteFileNameToRoute.js.map +1 -1
  188. package/packages/utils/src/lib/frameworks/sanitizeNextRouteSegments.js +32 -0
  189. package/packages/utils/src/lib/frameworks/sanitizeNextRouteSegments.js.map +1 -0
  190. package/analyzer-template/packages/ai/src/lib/generateEntityDataMap.ts +0 -375
  191. package/codeyam-cli/src/webserver/build/client/assets/EntityTypeIcon-rqv54FUY.js +0 -1
  192. package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-DqXXjAJ7.js +0 -3
  193. package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-DU_jxCPD.js +0 -1
  194. package/codeyam-cli/src/webserver/build/client/assets/ScenarioPreview-5DY-YIxu.js +0 -6
  195. package/codeyam-cli/src/webserver/build/client/assets/_index-DvSrcxsk.js +0 -1
  196. package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-CsaMd9mb.js +0 -10
  197. package/codeyam-cli/src/webserver/build/client/assets/components-Dj-Ggnl2.js +0 -40
  198. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-BbR3FwNc.js +0 -1
  199. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-L7M9Vr5z.js +0 -1
  200. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.edit._scenarioId-C9w-q7P3.js +0 -5
  201. package/codeyam-cli/src/webserver/build/client/assets/entry.client-CdGoUs8A.js +0 -1
  202. package/codeyam-cli/src/webserver/build/client/assets/file-text-B6Er7j5k.js +0 -1
  203. package/codeyam-cli/src/webserver/build/client/assets/files-KcDVw1FY.js +0 -1
  204. package/codeyam-cli/src/webserver/build/client/assets/git-B9uZ8eSJ.js +0 -12
  205. package/codeyam-cli/src/webserver/build/client/assets/globals-B0f88RTV.css +0 -1
  206. package/codeyam-cli/src/webserver/build/client/assets/manifest-fca08d7e.js +0 -1
  207. package/codeyam-cli/src/webserver/build/client/assets/root-Cf8VBqIb.js +0 -16
  208. package/codeyam-cli/src/webserver/build/client/assets/settings-NU_ZquhK.js +0 -1
  209. package/codeyam-cli/src/webserver/build/client/assets/simulations-CNaMJ-nR.js +0 -1
  210. package/codeyam-cli/src/webserver/build/client/assets/useToast-BRShB17p.js +0 -1
  211. package/codeyam-cli/src/webserver/build/client/cy-logo-cli.svg +0 -13
  212. package/codeyam-cli/src/webserver/build/client/favicon.svg +0 -13
  213. package/codeyam-cli/src/webserver/build/server/assets/index-DHr4rT4u.js +0 -1
  214. package/codeyam-cli/src/webserver/build/server/assets/server-build-Bi1mj14J.js +0 -166
  215. package/codeyam-cli/src/webserver/public/cy-logo-cli.svg +0 -13
  216. package/codeyam-cli/src/webserver/public/favicon.svg +0 -13
  217. package/packages/ai/src/lib/generateEntityDataMap.js +0 -335
  218. package/packages/ai/src/lib/generateEntityDataMap.js.map +0 -1
  219. package/packages/ai/src/lib/promptGenerators/generateEntityDataMapGenerator.js +0 -17
  220. 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 = [
@@ -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;AAEvD,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EACvC,IAAI,EACJ,MAAM,EACN,YAAY,EACZ,OAAO,EACP,SAAS,EACT,QAAQ,GAST;IACC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAChD,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
+ {"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;AAGhD,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAC9C,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,EAClB,YAAY,CAAC,EAAE,MAAM,UAYtB"}
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"}
@@ -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;AAE3C,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAC9C,WAAmB,EACnB,IAAU,EACV,QAAkB,EAClB,YAAqB;IAErB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,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,GAAG,KAAK;KACT,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClB,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClC,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"}
@@ -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"}
@@ -1,4 +1,4 @@
1
- import { useMemo, useState } from 'react';
1
+ import { useMemo } from 'react';
2
2
  import { DataItemEditorProps } from '../types';
3
3
  import { isNotPrimitive, arrayCount, sortKeys } from '../utils';
4
4
  import DataItemLink from './DataItemLink';
@@ -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"}
@@ -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;AAGxB,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
+ {"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 = [
@@ -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;AAEvD,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EACvC,IAAI,EACJ,MAAM,EACN,YAAY,EACZ,OAAO,EACP,SAAS,EACT,QAAQ,GAST;IACC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAChD,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
+ {"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;AAGhD,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAC9C,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,EAClB,YAAY,CAAC,EAAE,MAAM,UAYtB"}
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"}
@@ -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;AAE3C,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAC9C,WAAmB,EACnB,IAAU,EACV,QAAkB,EAClB,YAAqB;IAErB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,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,GAAG,KAAK;KACT,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClB,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClC,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"}
@@ -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
- keyStrings.push(
345
- `${levelSpacing}"${safeString(key, level)}": "${safeString(jsonObj[key] as string, level)}"`,
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)}`,